簡介
當代理商擁有自己的知識庫時,他們會變得更強大。 RAG(檢索增強生成)允許代理在做出回應之前從文件、資料庫或知識庫中搜尋信息,從而減少幻覺並提高準確性。
1. RAG 管道概述
Documents → Chunking → Embedding → Vector Store → Retrieval → LLM → Answer
2. 使用 ChromaDB 實作
import chromadb
from openai import OpenAI
client = OpenAI()
chroma = chromadb.PersistentClient(path="./agent_knowledge")
collection = chroma.get_or_create_collection("docs")
def add_documents(texts, metadatas=None):
embeddings = get_embeddings(texts)
collection.add(
documents=texts,
embeddings=embeddings,
ids=[f"doc_{i}" for i in range(len(texts))],
metadatas=metadatas,
)
def search_knowledge(query, n_results=5):
query_embedding = get_embeddings([query])[0]
results = collection.query(
query_embeddings=[query_embedding],
n_results=n_results,
)
return results["documents"][0]
3. RAG 作為代理工具
@registry.register("search_knowledge", "Tìm kiếm trong knowledge base", {...})
def search_knowledge_tool(query: str) -> str:
results = search_knowledge(query, n_results=3)
return "\n---\n".join(results)
總結
- RAG = 允許代理程式存取私有知識庫
- 分塊策略影響檢索品質
- ChromaDB 和 Qdrant 是兩個最受歡迎的 DB 向量
- 混合搜尋(語義+關鍵字)給出最佳結果
練習
- 使用 ChromaDB 為 100 多個文件建置 RAG 管道
- 比較分塊策略:固定大小、遞歸、語意 3.實現混合搜尋(語意+BM25)
- 將第 6 課中的 RAG 工具整合到 SimpleAgent 中