产品手册 PDF 智能客服系统(FastAPI + LangChain + Chroma + 前端聊天 UI)
一、项目概述
本项目围绕“产品手册内容难检索、客服答复不一致、人工成本高”的痛点,构建了一套基于产品手册 PDF 的智能客服系统。系统采用RAG(检索增强生成)方案:用户在前端聊天界面提问后,后端先从向量知识库中检索出与问题最相关的手册片段,再将片段作为参考资料交给大模型生成回答,从而在保证体验的同时显著降低“幻觉回答”。
- 项目形态:Web 端聊天 UI + FastAPI 后端接口
- 核心能力:PDF 知识库导入、语义检索、受控生成、流式回复、答案可追溯(来源页码)
- 适用场景:产品使用说明咨询、功能指引、参数/报错解释、安装部署流程问答等
二、业务痛点与目标
痛点
- 客服/用户需要在 PDF 手册里手动搜索,效率低、容易漏查
- 不同客服口径不一致,质量难以稳定
- 直接使用 LLM 回答会编造信息,可信度不足
目标
- 将产品手册 PDF 快速构建为可语义检索的知识库
- 回答必须“有依据”:以检索片段为主,资料不足时明确说明
- 支持流式输出提升对话体验
- 架构可扩展:后续支持多份手册、多版本、增量更新、权限过滤
三、技术方案与架构
技术栈
- 后端:FastAPI
- RAG 框架:LangChain 1.x(LCEL + Runnable,统一
invoke/stream调用范式) - 文档加载:
PyPDFLoader(PDF → Document) - 向量数据库:Chroma(支持持久化存储与复用)
- Embedding:文本嵌入模型(将 chunk 向量化)
- 输出解析:
StrOutputParser(将模型输出统一为可直接返回的字符串) - 前端:聊天 UI(支持增量渲染流式内容)
RAG 标准流程
- 索引 Indexing:PDF 加载 → 文本切分 → Embedding → 写入 Chroma
- 检索 Retrieval:问题向量化 → top_k 相似检索 → 得到参考片段
- 生成 Generation:将参考片段 + 用户问题组成 Prompt → LLM 生成 → 流式返回
项目组织
- 【agent】 Agent实现和工具
- 【model】 模型工厂
- 【rag】 RAG服务和向量存储
- 【utils】 配置、日志、工具函数
- 【prompts】 提示词模板
- 【config】 YAML配置文件
- 【data】 知识库文件(PDF/TXT)
- 【tests】 单元测试
- 【chroma_db】 向量数据库
- 【logs】 日志文件
四、核心功能实现(项目亮点)
1)产品手册 PDF 知识库构建
- 使用
PyPDFLoader将 PDF 抽取为 LangChainDocument - 为每段文本保留 metadata(如:文件名、页码、章节信息),方便溯源与展示引用
- 对手册内容进行 chunk 切分(控制 chunk_size 与 overlap),兼顾召回率与上下文完整性
- 将 chunk 向量化后写入 Chroma,支持持久化目录,避免每次启动重新建库
2)语义检索 + 受控生成(降低幻觉)
- 用户问题进入后端后先做 embedding,在 Chroma 中召回 top_k 相关片段
- Prompt 约束回答策略:
- 必须基于参考资料回答
- 若资料不足/未覆盖,直接说明“手册未提及”并建议用户提供更多信息
- 通过“检索片段驱动回答”显著降低编造内容的风险,提升可信度与一致性
3)前端聊天 UI 流式输出
- 后端基于 LangChain 的
stream()将模型输出按 token/片段逐步返回 - 前端聊天 UI 增量渲染内容,实现“打字机效果”,改善等待体验
- 支持多轮对话的基础交互(提问、回答、加载状态、错误提示等)
4)答案可追溯(工程化可落地)
- 在回答中可选择性输出“引用来源”(如:手册第 X 页 / 某章节),便于客服复核
- 为后续升级“点击引用跳转到 PDF 对应页”预留接口与数据结构
五、项目效果
- 将“人工翻 PDF 查答案”的流程改为“秒级语义检索 + 自动生成”,显著提升响应效率
- 统一客服答复口径,减少培训成本与重复劳动
- 基于检索证据生成回答,降低幻觉,提升用户信任度
六、可扩展与复盘
- Rerank:在向量召回后增加重排序,提高相关性
- 多手册/多版本:基于 metadata 做过滤检索(产品型号、版本号)
- 增量更新:手册更新后仅重建变化部分向量
- 评测体系:构建问题集,对召回质量与最终答案准确率做自动评估
- 对话记忆:引入 RunnableWithMessageHistory 支持连续追问与上下文承接