Un robot de questions-réponses sur vos documents
Mettez en production un robot RAG fonctionnel : ingérez des PDF, générez des embeddings, recherchez et produisez une réponse. Le « bonjour monde » des agents en production.
Un robot de questions-réponses sur vos documents est une leçon AI Agents gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage AI Agents, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours AI Agents comprend 4 leçons au total.
Certaines parties de cette leçon n'ont pas encore été traduites et s'affichent en anglais.
Objectif du projet
Créez un chatbot qui répond aux questions à partir de vos propres documents (PDF, Markdown, etc.). C’est le « hello world » des agents de production et c’est immédiatement utile pour toute équipe.
Architecture
- Ingestion : charger les documents → les découper → générer les embeddings → les stocker dans une base de données vectorielle
- Requête : générer l’embedding de la question → récupérer les K meilleurs segments → les insérer dans le prompt → LLM
- Citation : formater les segments avec leurs identifiants ; demander au LLM de les citer
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?'))Relier le tout à une interface
Enveloppez le tout dans FastAPI avec une page HTML simple (ou Streamlit) et vous obtenez une application fonctionnelle.
# pip install fastapi uvicorn
from fastapi import FastAPI
app = FastAPI()
@app.post('/ask')
def ask(payload: dict):
return {'answer': answer(payload['question'])}Ajouter l’historique des conversations
Pour les questions-réponses à plusieurs tours, conservez les messages et transmettez-les au 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 answerPièges courants
- Segments trop grands ou trop petits — essayez de 500 à 800 tokens
- Aucune citation de source — les utilisateurs ne font pas confiance aux réponses non citées
- K trop grand — cela gaspille des tokens et disperse l’attention
- Générer l’embedding de la question ENTIÈRE, y compris l’historique de la conversation — générez l’embedding uniquement de la dernière question de l’utilisateur
Ajouter des liens vers les sources
Stockez les URL des sources dans les métadonnées et affichez-les dans la réponse :
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.Évaluer le système
Rassemblez 20 questions réelles posées par les utilisateurs. Indiquez manuellement si le bot répond correctement. Utilisez cet ensemble comme point de départ pour votre évaluation.
Mettre en production et améliorer
En production, ce bot traite 80 % des questions courantes. Améliorez-le en vous appuyant sur les 20 % auxquelles il répond mal — généralement, vous devez améliorer le découpage ou le réordonnancement.
Citation des sources
Pourquoi inclure les identifiants des sources dans le prompt et demander au LLM de les citer ?
Récapitulatif
Un bot RAG en environ 50 lignes. Mettez-le en production, évaluez-le, puis améliorez le découpage et la récupération. Ce modèle se retrouve dans d’innombrables applications d’agents.
Questions Fréquemment Posées
La leçon « Un robot de questions-réponses sur vos documents » est-elle gratuite ?
Oui — le texte complet de « Un robot de questions-réponses sur vos documents » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours AI Agents, passe à CoddyKit PRO. Le cours AI Agents comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Un robot de questions-réponses sur vos documents » ?
Mettez en production un robot RAG fonctionnel : ingérez des PDF, générez des embeddings, recherchez et produisez une réponse. Le « bonjour monde » des agents en production. Tu pratiques AI Agents avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer AI Agents ?
Aucune expérience préalable n'est requise. AI Agents sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.
Combien de temps prend la leçon « Un robot de questions-réponses sur vos documents » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon AI Agents ?
Oui. Chaque leçon AI Agents inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Un robot de questions-réponses sur vos documents
- Un agent explicateur de code
- Un agent de recherche sur le Web
- Un assistant SQL pour votre DB