IntermédiaireRAG
25 min de lecture28 vues

Construire un RAG avec Agno

Créez votre premier pipeline RAG fonctionnel avec le framework Agno : Knowledge Base, embeddings, vector search hybride et Agent intelligent.

Pourquoi Agno ?

Agno (anciennement Phidata) est un framework Python open-source pour construire des agents IA. Il simplifie énormément la mise en place d''un pipeline RAG en fournissant des composants prêts à l''emploi : Knowledge Base, Vector DB, Embeddings, et Agents.

Avantages d''Agno pour le RAG

FonctionnalitéDescription
Knowledge Base intégréeCharge PDF, texte, URLs automatiquement
Chunking automatiqueDécoupage intelligent des documents
Recherche hybrideSémantique + mots-clés en une ligne
25+ Vector DBsLanceDB, PgVector, Pinecone, Weaviate...
Multi-modèlesOpenAI, Claude, Gemini, Llama...

Installation

# Installation minimale pour le RAG
pip install agno openai lancedb tantivy pypdf

# tantivy = moteur de recherche full-text (nécessaire pour la recherche hybride)
# pypdf = lecture de fichiers PDF

LanceDB est recommandé pour débuter car il est embarqué (pas de serveur à installer). Les données sont stockées dans un dossier local. En production, utilisez PgVector (extension PostgreSQL).


Votre Premier RAG en 20 Lignes

from agno.agent import Agent
from agno.knowledge.embedder.openai import OpenAIEmbedder
from agno.knowledge.knowledge import Knowledge
from agno.models.openai import OpenAIResponses
from agno.vectordb.lancedb import LanceDb, SearchType

# 1. Configurer la Knowledge Base
knowledge = Knowledge(
    vector_db=LanceDb(
        uri="tmp/lancedb",                    # Dossier local pour les données
        table_name="mes_documents",           # Nom de la table
        search_type=SearchType.hybrid,        # Sémantique + mots-clés
        embedder=OpenAIEmbedder(id="text-embedding-3-small"),
    ),
)

# 2. Charger des documents
knowledge.insert(url="https://agno-public.s3.amazonaws.com/recipes/ThaiRecipes.pdf")

# 3. Créer l''Agent avec la Knowledge Base
agent = Agent(
    model=OpenAIResponses(id="gpt-4o"),
    knowledge=knowledge,
    instructions="Cherche dans ta base de connaissances avant de répondre. Sois concis.",
    markdown=True,
)

# 4. Poser une question
agent.print_response("Comment préparer un Pad Thai ?", stream=True)

Ce qui se passe sous le capot

En 20 lignes, vous avez un pipeline RAG complet : ingestion de PDF, chunking automatique, embeddings, recherche hybride et génération de réponse. Agno gère toute la plomberie.


Charger Différentes Sources de Données

Depuis un fichier PDF local

knowledge.insert(path="./documents/guide-utilisateur.pdf")

Depuis une URL

knowledge.insert(url="https://example.com/documentation.pdf")

Depuis du texte brut

knowledge.insert(text="""
Le RAG (Retrieval Augmented Generation) est une technique qui combine
la recherche d''information avec la génération de texte par un LLM.
Il permet de réduire les hallucinations en ancrant les réponses
dans des documents réels.
""")

Depuis plusieurs fichiers

import glob

for pdf_path in glob.glob("./documents/*.pdf"):
    knowledge.insert(path=pdf_path)
    print(f"Indexé : {pdf_path}")

Configurer le Modèle LLM

Agno supporte tous les grands fournisseurs de LLMs :

OpenAI

from agno.models.openai import OpenAIResponses

model = OpenAIResponses(id="gpt-4o")          # Le plus capable
model = OpenAIResponses(id="gpt-4o-mini")     # Rapide et pas cher

Claude (Anthropic)

from agno.models.anthropic import Claude

model = Claude(id="claude-sonnet-4-20250514")

Gemini (Google)

from agno.models.google import Gemini

model = Gemini(id="gemini-2.0-flash")

Modèle local (Ollama)

from agno.models.ollama import Ollama

model = Ollama(id="llama3.1:8b")

Pour le RAG, le choix du modèle d''embedding est plus important que le choix du LLM. Un bon embedding récupère les bons documents, et même un LLM moyen donnera une bonne réponse avec le bon contexte.


Configurer les Embeddings

OpenAI (recommandé pour débuter)

from agno.knowledge.embedder.openai import OpenAIEmbedder

embedder = OpenAIEmbedder(id="text-embedding-3-small")   # 1536 dims, pas cher
embedder = OpenAIEmbedder(id="text-embedding-3-large")   # 3072 dims, meilleur

Cohere (excellent en multilingue)

from agno.knowledge.embedder.cohere import CohereEmbedder

embedder = CohereEmbedder(id="embed-v4.0")

Types de Recherche

Recherche sémantique uniquement

LanceDb(
    search_type=SearchType.vector,  # Sémantique pure
    embedder=embedder,
)

Recherche hybride (recommandée)

LanceDb(
    search_type=SearchType.hybrid,  # Sémantique + mots-clés
    embedder=embedder,
)

Recherche par mots-clés uniquement

LanceDb(
    search_type=SearchType.keyword,  # BM25/TF-IDF
    embedder=embedder,
)

Utilisez toujours la recherche hybride sauf raison spécifique. Elle combine le meilleur des deux mondes : compréhension du sens + précision des mots-clés.


Exercice Pratique : RAG sur Votre Documentation

Créez un agent qui répond aux questions sur votre propre documentation.

Étape 1 : Préparer l''environnement

mkdir mon-rag && cd mon-rag
pip install agno openai lancedb tantivy pypdf
export OPENAI_API_KEY="sk-..."

Étape 2 : Créer le script

# mon_rag.py
from agno.agent import Agent
from agno.knowledge.embedder.openai import OpenAIEmbedder
from agno.knowledge.knowledge import Knowledge
from agno.models.openai import OpenAIResponses
from agno.vectordb.lancedb import LanceDb, SearchType

# Knowledge Base
knowledge = Knowledge(
    vector_db=LanceDb(
        uri="tmp/lancedb",
        table_name="ma_doc",
        search_type=SearchType.hybrid,
        embedder=OpenAIEmbedder(id="text-embedding-3-small"),
    ),
)

# Charger vos documents (remplacez par vos fichiers)
knowledge.insert(text="""
# FAQ Entreprise

## Comment poser des congés ?
Connectez-vous sur l''intranet > RH > Congés. Sélectionnez les dates
et validez. Votre manager recevra une notification et devra approuver
dans les 48h.

## Quel est le dress code ?
Le dress code est smart casual du lundi au jeudi.
Le vendredi est casual. Les réunions clients nécessitent une tenue formelle.

## Comment réserver une salle de réunion ?
Utilisez l''application Outlook ou Google Calendar. Les salles sont
préfixées par l''étage : S1-A, S2-B, etc. Réservez au minimum 30 min
à l''avance.
""")

# Agent
agent = Agent(
    model=OpenAIResponses(id="gpt-4o-mini"),
    knowledge=knowledge,
    instructions=[
        "Tu es l''assistant RH de l''entreprise.",
        "Cherche TOUJOURS dans ta base de connaissances avant de répondre.",
        "Si l''information n''est pas dans tes documents, dis-le clairement.",
        "Réponds en français, de manière concise et professionnelle.",
    ],
    markdown=True,
)

# Boucle de chat
print("Assistant RH (tapez ''quit'' pour quitter)\n")
while True:
    question = input("Vous : ")
    if question.lower() == "quit":
        break
    agent.print_response(question, stream=True)
    print()

Étape 3 : Tester

python mon_rag.py
# Vous : Comment je pose mes congés ?
# → "Connectez-vous sur l''intranet > RH > Congés..."
# Vous : C''est quoi le dress code le vendredi ?
# → "Le vendredi est casual."
# Vous : Quel est le salaire moyen ?
# → "Je n''ai pas cette information dans ma base de connaissances."

L''agent refuse de répondre quand l''info n''est pas dans ses documents. C''est exactement le comportement souhaité : pas d''hallucination.


Pour Aller Plus Loin

  • Ajoutez vos vrais fichiers PDF et testez la qualité des réponses
  • Essayez différents modèles d''embedding et comparez les résultats
  • Prochain cours : RAG avancé avec Agno — agentic RAG, reranking, production

Specialiste IA — Master Intelligence Artificielle

Diplome d'un Master en Intelligence Artificielle, je travaille au quotidien sur des projets IA en entreprise. J'ai cree IwanttolearnAI pour rendre l'apprentissage de l'IA accessible a tous, gratuitement.