最近在工作中构建了一套自动的基于文档中心为数据集构建知识库 AI 问答的系统,来提升用户体验和技术支持效率,分享一下在实现过程中的技术选型和架构设计。
背景
先说下背景,我们公司的产品 FinClip 是做小程序全套解决方案的,因为产品属性的原因,接入的过程中主要是面向开发者的,会有很多的开发相关的问题。我们有一个文档中心 https://finclip.com/mop/document/ ,里面几乎存储了我们大部分的面向客户开发的文档。
所以在构建知识库问答的时候,我们有以下的数据源
- 文档中心的文档 https://finclip.com/mop/document/
- 在社区交付过程中,交付整理的问题 QA
- 售前和销售在和客户阐述方案的时候,腾讯会议纪要
在构建知识库的时候,希望的采用的是「自动化数据集」为主 & 「手动数据集」为辅的策略。将文档中心 & 腾讯会议纪要两部分打通自动化设置数据集的流程,剩余的交付整理的 QA 文档作为手动数据集为补充。
实现效果
实现效果侧还是还对比较简单,对于用户而言在我们的管理后台实现了一个聊天框,能够回答整个系统内的基本所有的问题,只要数据集有涉及到的
整体架构设计
整个基于 RAG 实现的AI 问答的链路,主要包含以下几个核心部分:
- 文档中心Gitlab仓库 :基于 Gitlab 管理所有技术文档
- CI Pipeline:在文档中心的文档负责文档更新的自动化处理流程
- LLM Service:大语言模型服务层,负责文档理解和问答生成,此处会针对源文档进行一次 QA 的拆分
- FastGPT:向量数据库和知识检索服务
- 用户交互层:提供统一的问答接口
这种设计带来几个明显优势:
- 文档更新自动化,确保知识库实时性
- 服务解耦,便于独立扩展和维护
- 分层处理提升系统可靠性
文档处理流程
文档处理是整个系统的基础,我们的处理流程如下:
- 文档变更触发:通过 Gitlab CI 监听文档更新
- 自动化处理 :CI Pipeline 自动执行以下步骤:
- 检测文档增量更新
- 提取文档内容
- 进行 QA 拆分,生成问答对
- 推送到知识库
这个流程确保了知识库能够及时反映最新的文档内容,无需人工干预。
知识库技术选型
在知识库方案选型时,我们主要对比了 FastGPT 和 RAGFlow:
FastGPT 的优势:
- 开箱即用的向量检索能力
- 良好的社区支持
- 简单的部署维护
- 内置的文本分块策略
Embedding 和 Rerank
我们的向量检索策略采用:
- 使用 embedding 模型将文本转换为向量
- 通过 ReRank 优化搜索结果相关性
- 动态调整检索阈值,平衡召回率和精确度
最终的流程图如下
AI 问答实现
问答系统的核心流程:
-
知识检索:
- 用户提问向量化
- 在知识库中检索相关内容
- 通过 Rerank 筛选最相关片段
-
答案生成:
- 将检索内容作为上下文
- 通过 LLM 生成自然、准确的回答
- 添加引用来源,提升可信度
-
质量保证:
- 答案相关性评分
- 兜底策略处理
- 用户反馈收集