Un bot di domande e risposte sui Suoi documenti
Realizzi un bot RAG funzionante: acquisisca i PDF, generi gli embedding, cerchi e generi la risposta. È l'hello world degli agenti per la produzione.
Un bot di domande e risposte sui Suoi documenti è una lezione AI Agents gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento AI Agents, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso AI Agents include 4 lezioni in totale.
Parti di questa lezione non sono ancora state tradotte e vengono mostrate in inglese.
Obiettivo del progetto
Costruisca un chatbot che risponda alle domande usando i vostri documenti (PDF, Markdown e così via). Questo è l'"hello world" degli agenti in produzione ed è subito utile per qualsiasi team.
Architettura
- Ingestione: caricare i documenti -> suddividerli in chunk -> creare gli embedding -> archiviarli in un DB vettoriale
- Query: creare l'embedding della domanda -> recuperare i chunk principali -> inserirli nel prompt -> LLM
- Citazione: formattare i chunk con gli ID e chiedere all'LLM di citarli
Step 1: Load and Chunk
from langchain.text_splitter import RecursiveCharacterTextSplitter
from pypdf import PdfReader
text = ''
for page in PdfReader('handbook.pdf').pages:
text += page.extract_text() + '\n'
splitter = RecursiveCharacterTextSplitter(chunk_size=800, chunk_overlap=100)
chunks = splitter.split_text(text)
print(f'{len(chunks)} chunks')Step 2: Embed and Store
import chromadb
from openai import OpenAI
oai = OpenAI()
chroma = chromadb.PersistentClient(path='./db')
collection = chroma.get_or_create_collection('handbook')
resp = oai.embeddings.create(model='text-embedding-3-small', input=chunks)
vectors = [d.embedding for d in resp.data]
collection.add(ids=[f'c{i}' for i in range(len(chunks))], embeddings=vectors, documents=chunks)Step 3: Query Function
def query(question, k=4):
qvec = oai.embeddings.create(model='text-embedding-3-small', input=question).data[0].embedding
res = collection.query(query_embeddings=[qvec], n_results=k)
return res['documents'][0]Step 4: Build the Prompt
def make_prompt(question, chunks):
context = '\n\n'.join(f'[{i+1}] {c}' for i, c in enumerate(chunks))
return f'''
Using only the context below, answer the question.
If the answer is not present, say so.
Cite the source like [1], [2], etc.
Context:
{context}
Question: {question}
Answer:
'''
print(make_prompt("What is the return policy?", ["Returns accepted within 30 days.", "Item must be unused."]))
Step 5: Generate
def answer(question):
chunks = query(question)
prompt = make_prompt(question, chunks)
response = oai.chat.completions.create(
model='gpt-4o-mini',
messages=[{'role': 'user', 'content': prompt}],
temperature=0,
)
return response.choices[0].message.content
print(answer('What is our refund policy?'))Collegare il tutto a un'interfaccia
Avvolga il tutto in FastAPI con una semplice pagina HTML (o Streamlit) e avrà un'app funzionante.
# pip install fastapi uvicorn
from fastapi import FastAPI
app = FastAPI()
@app.post('/ask')
def ask(payload: dict):
return {'answer': answer(payload['question'])}Aggiungere la cronologia della chat
Per le domande e risposte su più turni, conservi i messaggi e li passi al prompt:
messages = [{'role': 'system', 'content': 'You are a doc Q&A assistant.'}]
def chat(user_input):
messages.append({'role': 'user', 'content': user_input})
chunks = query(user_input)
context_msg = {'role': 'system', 'content': f'Context:\n{chr(10).join(chunks)}'}
response = oai.chat.completions.create(
model='gpt-4o-mini',
messages=[messages[0], context_msg] + messages[1:]
)
answer = response.choices[0].message.content
messages.append({'role': 'assistant', 'content': answer})
return answerProblemi comuni
- Chunk troppo grandi o troppo piccoli — provi con 500-800 token
- Nessuna citazione della fonte — gli utenti non si fidano delle risposte senza citazioni
- K troppo grande — spreca token e diluisce l'attenzione
- Creare l'embedding dell'intera domanda, inclusa la cronologia della chat — crei l'embedding solo dell'ultima domanda dell'utente
Aggiungere i link alle fonti
Salvi gli URL delle fonti nei metadati e li mostri nella risposta:
metadata = [{'source': 'handbook.pdf', 'page': i} for i in range(len(chunks))]
# In the prompt, include 'source: <url>' so the LLM can produce clickable references.Valutarlo
Raccolga 20 domande reali dagli utenti. Indichi manualmente se il bot risponde correttamente. Usi questo insieme come punto di partenza per la valutazione.
Rilasciare e iterare
In produzione, questo bot gestisce l'80% delle domande comuni. Iteri sulla base del 20% a cui risponde in modo errato: di solito servono chunking o re-ranking migliori.
Citazione delle fonti
Perché includere gli ID delle fonti nel prompt e chiedere all'LLM di citarli?
Riepilogo
Un bot RAG in circa 50 righe. Lo rilasci, lo valuti e migliori chunking e retrieval. Questo schema si ripete in innumerevoli app basate su agenti.
Domande Frequenti
La lezione «Un bot di domande e risposte sui Suoi documenti» è gratuita?
Sì — il testo completo di «Un bot di domande e risposte sui Suoi documenti» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso AI Agents, passa a CoddyKit PRO. Il corso AI Agents include 4 lezioni in totale.
Cosa imparerò in «Un bot di domande e risposte sui Suoi documenti»?
Realizzi un bot RAG funzionante: acquisisca i PDF, generi gli embedding, cerchi e generi la risposta. È l'hello world degli agenti per la produzione. Eserciti AI Agents con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare AI Agents?
Non è richiesta alcuna esperienza precedente. AI Agents su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.
Quanto tempo richiede la lezione «Un bot di domande e risposte sui Suoi documenti»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione AI Agents?
Sì. Ogni lezione AI Agents include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Un bot di domande e risposte sui Suoi documenti
- Un agente che spiega il codice
- Un agente di ricerca che naviga sul Web
- Un assistente SQL per il Suo database