Knowledge (RAG)¶
RAG (Retrieval-Augmented Generation) 让 Agent 基于你的私有文档回答问题,而非仅依赖模型的训练知识。
基本流程¶
快速开始¶
1. 创建知识库¶
from agentica import Knowledge
from agentica.vectordb import LanceDb
from agentica.emb import OpenAIEmb
knowledge = Knowledge(
data_path="./documents", # 文档目录或文件
vector_db=LanceDb(
table_name="my_docs",
uri="./lancedb",
),
chunk_size=1000, # 分块大小
num_documents=5, # 检索返回文档数
)
# 加载文档到向量库
knowledge.load(recreate=True)
2. 配置 Agent¶
from agentica import Agent, OpenAIChat
agent = Agent(
model=OpenAIChat(id="gpt-4o"),
knowledge=knowledge,
search_knowledge=True, # Agent 可主动搜索知识库
add_references=True, # 响应中附加引用来源
instructions=[
"基于知识库内容回答问题",
"如果知识库中没有相关信息,明确告知用户",
"引用时注明文档来源",
],
)
result = await agent.run("项目的部署流程是什么?")
print(result.content)
支持的文档格式¶
- 文本文件:
.txt,.md - PDF:
.pdf(需要PyPDF2或pdfplumber) - CSV:
.csv
向量数据库¶
LanceDB(推荐,零依赖)¶
ChromaDB¶
其他选项¶
from agentica.vectordb import (
InMemoryVectorDb, # 内存(测试用)
PgVectorDb, # PostgreSQL + pgvector
PineconeDb, # Pinecone(云服务)
QdrantDb, # Qdrant
)
Embedding 模型¶
from agentica.emb import (
OpenAIEmb, # OpenAI text-embedding-3-small
ZhipuAIEmb, # 智谱 AI embedding
JinaEmb, # Jina Embeddings
OllamaEmb, # 本地 Ollama
HuggingfaceEmb, # HuggingFace 模型
)
Agentic RAG¶
Agent 自主决定何时搜索知识库:
模型会将 search_knowledge_base 作为工具调用,自主决定搜索时机和查询词。
混合检索与重排序¶
from agentica.vectordb import LanceDb
from agentica.rerank import JinaReranker
db = LanceDb(
table_name="docs",
uri="./lancedb",
search_type="hybrid", # 向量 + 关键词
reranker=JinaReranker(), # 重排序
)
最佳实践¶
| 实践 | 说明 |
|---|---|
| 适当的分块大小 | 1000-2000 字符通常效果最佳 |
| 检索数量 | 3-5 个文档,过多会稀释相关性 |
| 清晰的指令 | 告诉 Agent 何时和如何使用知识库 |
| 定期更新 | 文档变更后重新加载(upsert=True) |
| 混合检索 | 关键词 + 向量检索互补效果好 |
| 重排序 | 检索后重排序显著提升准确率 |
下一步¶
- Agent 核心概念 -- Agent 如何集成知识库
- 工具系统 -- 自定义检索工具
- API 参考 -- Knowledge API