这是《动手智能体构建》第 3 章的配套代码。你将运行一个本地网页系统,完成一个能查知识库、能显示引用资料的 RAG 数字员工。
本章你需要完成三件事:
- 配置对话模型,让系统能正常回答。
- 建立知识库,观察文档分块和检索结果。
- 发布 RAG 数字员工,并用对话验证回答是否来自资料。
建议使用 Python 3.10 或以上版本。macOS 自带的 /usr/bin/python3 可能是 Python 3.9,启动时可能因为 int | None 类型标注报错。
安装依赖:
pip install -r requirements.txt启动项目:
uvicorn app.main:app --reload打开浏览器访问:
http://127.0.0.1:8000
首次启动会自动创建 chatbot.db,并写入演示模型、演示数字员工、示例标签和示例知识文档。
左侧有四个页面:
- 对话:和已发布的数字员工聊天。
- 知识库:管理标签、文档、分块和检索调试。
- 模型配置:填写对话模型的接口地址、模型名和 API Key。
- 数字员工:配置 ChatBot 或 RAG 数字员工,并发布使用。
进入“模型配置”页面,编辑预置的示例模型。
需要填写:
provider:服务商名称,例如deepseek、openai、qwen。base_url:OpenAI 兼容接口地址。model_name:对话模型名。api_key:你的 API Key。
保存后点击“测试”。测试成功后,再继续后面的步骤。
注意:API Key 会明文保存在本地 SQLite 数据库中。本项目只适合本地学习,不要提交包含真实密钥的数据库文件。
RAG 的向量检索需要 embedding 模型。这个配置不在网页里填写,而是在本目录新建 .env 文件。
示例:
EMBEDDING_BASE_URL=https://your-compatible-endpoint
EMBEDDING_MODEL_NAME=your-embedding-model
EMBEDDING_API_KEY=your-api-key
EMBEDDING_DIMENSIONS=EMBEDDING_DIMENSIONS 可以先留空。修改 .env 后,需要重启 uvicorn。
如果暂时没有 embedding 模型,也可以继续完成本章练习。系统会自动退回到关键词检索,只是向量检索效果无法完整体验。
进入“知识库”页面。
你可以直接使用系统预置的示例文档,也可以新建自己的文档。
推荐操作:
- 点击“管理标签”,创建一个标签,例如“保险条款”。
- 点击“新建文档”。
- 填写文档名、来源和版本。
- 选择标签。
- 粘贴 Markdown 或普通文本。
- 保存。
保存后系统会自动分块并建索引。
如果文档状态是 indexed,说明分块和 embedding 都成功。
如果文档状态是 failed,通常表示 embedding 没有配置或调用失败,但文本分块仍然可以用于关键词检索。
配置好 embedding 后,可以点击“重建索引”,让已有文档重新生成向量。
在“知识库”页面点击“检索调试”。
输入一个问题,例如:
疾病责任等待期是多久?
观察系统返回的片段是否与问题相关。这里要重点看三件事:
- 是否命中了正确文档。
- 是否命中了正确片段。
top_k改变后,返回片段是否发生变化。
RAG 回答质量首先取决于检索是否命中正确资料。建议先做检索调试,再做对话测试。
进入“数字员工”页面,编辑预置的“保险知识问答助手”,或新建一个数字员工。
关键设置:
- 类型选择“RAG 数字员工”。
- 选择可用的对话模型。
- 填写角色、任务目标、约束条件和输出要求。
- 绑定知识标签。
top_k可以先设为 3。- 检索器类型可以先选“向量”,没有 embedding 时可选“关键词”。
- 保存后点击“发布”。
RAG 数字员工不建议把大段业务资料写进提示词。业务事实应放在知识库文档中,由检索动态提供。
进入“对话”页面,新建会话,选择已发布的 RAG 数字员工,然后开始提问。
建议测试三类问题。
这个产品的疾病责任等待期是多久?
期望现象:模型回答等待期,并在答案下方显示引用资料。
退保和理赔材料分别有哪些注意点?
期望现象:模型综合多个资料片段回答,并展示多条引用资料。
这个产品保证收益是多少?
期望现象:模型说明当前资料无法确认,并建议人工核实,而不是编造答案。
完成项目运行后,请至少完成以下任务:
- 配置并测试一个对话模型。
- 新建一份知识文档,并绑定标签。
- 使用“检索调试”查看至少 3 个问题的命中片段。
- 发布一个 RAG 数字员工。
- 完成一轮对话测试,并检查答案下方是否显示引用资料。
- 刷新浏览器,确认历史回答中的引用资料仍然存在。
- 调整
top_k或检索器类型,观察回答变化。
这是 Python 版本过低导致的。请使用 Python 3.10 或以上版本。
通常是 embedding 没有配置或调用失败。可以先用关键词检索继续实验。配置好 .env 后,重启服务并点击“重建索引”。
优先检查:
- 数字员工是否为 RAG 类型。
- 数字员工是否绑定了标签。
- 标签下是否有文档。
- 文档是否已经过期。
- 检索调试是否能命中片段。
会保留。RAG 回答的引用资料会保存到消息记录中,刷新页面后仍会显示。
当前版本只支持 .txt、.md 和 .markdown。PDF 和 Word 解析留作后续扩展。
本章不要只看模型回答是否流畅,还要检查回答背后的依据。
- 文档是否被正确分块。
- 检索是否命中正确资料。
- 回答是否依据引用资料。
- 资料不足时是否拒绝编造。
能把这几个环节串起来,才算真正理解了 RAG 数字员工的基本工作方式。