0Pricing
AI Agents · Leçon

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

  1. Ingestion : charger les documents → les découper → générer les embeddings → les stocker dans une base de données vectorielle
  2. Requête : générer l’embedding de la question → récupérer les K meilleurs segments → les insérer dans le prompt → LLM
  3. 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 answer

Piè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

  1. Un robot de questions-réponses sur vos documents
  2. Un agent explicateur de code
  3. Un agent de recherche sur le Web
  4. Un assistant SQL pour votre DB
← Retour à AI Agents