2026年7月9日 周四晚上19:30,报名腾讯会议了解“如何构建自进化的动态知识库(Brain)”(限30人)
免费POC, 零成本试错
FDE知识库

FDE知识库

学习大模型的前沿技术与行业落地应用


收藏

数据库文档问答的应用和演化

发布日期:2024-10-18 18:19:46 浏览次数: 2360
作者:DataFunSummit

微信搜一搜,关注“DataFunSummit”

导读 PingCAP 的 AILab 项目人力投入不超过三人,因此本文将以小团队视角,分享如何利用 RAG 方法高效构建各种 RAG 应用。

今天的介绍会围绕下面四点展开:


1. 较大规模文档的业务挑战

2. RAG 技术落地实践和演化过程

3. 前沿介绍

4. Q&A

分享嘉宾|李粒 PingCAP PM 

编辑整理|王吉东

内容校对|李瑶

出品社区|DataFun


01
较大规模文档的业务挑战


首先来介绍一下业务背景。



PingCAP 作为一家开发关系型数据库的公司,主要产品包括TiDB 和 TiDB Cloud 这两类产品(即 OP 部署和云上服务)。数据库和搜索存储类产品都属于较为复杂的产品,会存在大量的文档。目前 PingCAP 已有英文文档和中文文档超过 2K,再加上社区内有价值的文档,总文档量可达15K。


正因为 TiDB 文档丰富,一个普通用户是不可能阅读完这么多文档的,因此难以得到全盘认知,或快速找到所需的内容。作为一家成长中的小公司,人力有限,随着用户规模的增长,缺乏技术支持人力的问题日益凸显,导致技术回答间隔较长,这一问题在发展相对成熟的海外社区尤为明显。



针对上述问题,我们开发了基于文档的问答机器人(上图为机器人 demo),目前已经上线到 Cloud UI,以及海外社区,比如在 Slack、Discord 上可以直接@机器人进行提问。


接下来将具体介绍实现的过程。


02


RAG 技术落地实践和演化过程


我们的 RAG 实践过程可以分为四个阶段,如上图所示:绿色阶段是 Basic RAG,即最基础的工作;黄色阶段是应用的优化;最后分成 Graph RAG 和 Agent RAG 两个方向。


1. Basic RAG



Basic RAG 的逻辑非常简单,利用大语言模型的多轮对话能力,理解用户查询,并提供准确答案。然而基础大预言模型经常会输出与 TiDB 无关的内容。最初尝试的大模型是 OpenAI,其 Embedding model 对多语言数据库的支持并不健全,检索结果不够准确,因此有必要对模型进行调优。


2. Only Answer TiDB



由于我们团队很小,考虑到成本问题,自行训练或 finetune 模型并不是最优解,相比而言 RAG 更加划算,因此最终选用了 RAG 方式。


我们的需求只是限制大模型仅回答 TiDB 和业务相关的问题,使用业界常用的毒性检测技术即可实现,将和 TiDB 无关的业务定性为毒性,进而让大语言模型去判断是否和 TiDB 相关。



上图列举了一些使用 prompt 的例子,包括 TiDB 的描述等没有在图中展示出来的细节;对于 RAG 部分,图中的几个 example 是根据用户问题,通过向量相似度提取,即可简单直接地判断该问题是否和 TiDB 相关。



上述方式的效果是比较理想的,如图,面对用户提出的“how to cook a cake”、“what about China”等与 TiDB 无关或政治敏感的问题,均给出了类似“该问题与 TiDB 无关”这类的回应。


因为在前面的流程图中可以看到,这一环节我们在设定中,只会让 LLM 输出  yes or no,让模型自行判断下一步要走哪一分支。这样的方式,一方面可以做到合理的毒性检测,另一方面,如果有用户尝试使用一些 prompt 的越狱方法时,因为输出不是 yes,该流程也会判定为 no,这样可以避免 prompt 越狱的情况发生,保证 LLM 只输出和业务相关内容。



那么为什么不直接在 System Prompt 中要求输出限制呢?因为 System Prompt 中没有权重,这意味即使增加限制,当用户输入足够长的越狱 prompt 后,模型的回答还是会出现越狱现象,因此还是需要使用 RAG 结合毒性检测的方法来真正避免越狱。


3. Embedding Model Finetune



TiDB 是面向全世界的,因此会存在英语、日语等多语种语料,而 OpenAI 最先进的 Embedding model(text-embedding-ada-002)不支持非英语语言。假如用户提出一个问题,模型返回的召回文档,top 结果全部是英文文档,然而我们无法将来自全世界的海量文档统一成英文,因此会带来极大的不便。



此外,官网以及 UKP Lab 等社区中也证实了 OpenAI 不支持除英语之外的其他语言。



为了解决这一问题,只能自行 finetune Embedding model,以弥补开源Embedding model 的局限性。



由于团队人数有限,为了尽可能减少人工的工作,因此最终选择了机器学习领域常用的 GenQ 方法,首先对所有文档进行分块(chunk),随后随机挑选部分文档进行进一步切分,最后使用 GenQ 方法生成文档及其对应的 question,从而获得 chunk-question pairs,进而将其拆分成 Train set 和 Test set,对模型进行训练。



对于模型训练,使用 MultipleNegativesRankingLoss 方法,选取了两个模型(一个是上面的小模型,一个是下面的要用于生产环境的模型),使用 4K 数据去训练,使用 1K 数据做测试。



关于前文提到的 MultipleNegativesRankingLoss 方法,由于训练数据由 GenQ 方法生成,因此只有正例(即正确的 question-answer pair)而没有反例,这样的 Train set 显然是不够的,因此需要去自动生成反例(即错误的 question-answer pair),从而控制正负样本比例,这样的训练才更高效。



上图中,最上面的模型是 OpenAI 的 text-embedding-ada-002,准确率结果为 0.984;最下面的是我们 finetune 得到的模型,结果为 0.983。考虑到该结果是基于 OpenAI 生成语料的训练和测试结果,可能会存在一定程度的过拟合,因此后期又选择 TiDB 官方文档进行多轮测试,结果仍然比较理想。可能在其他领域,该模型的 Accuracy 有可能出现下降,但是对于我们所关心的数据库领域,在正常语料库下,其结果是能够达到我们的要求的。



接下来,使用 finetune 后的多语言模型去完成任务,从而保证公司超过 15K 的全部文档被充分利用,避免了像 OpenAI 那样只能使用英文文档。



使用 Embedding model finetune,无需过多人力投入,模型训练效率高,且成本很低。此外,自托管 Embedding model 支持多次调整。RAG 向量搜索,其质量主要取决于向量表达,而向量表达则依赖于 Embedding model,因此会针对性地对用户的提问与文档的关系进行向量表达的匹配,经过多次 finetune 从而获得更高的召回准确率。这也是自托管 Embedding model 的额外好处。


4. ReRank



由于我们的产品发布后,会立即应用到公司内部,以及一些灰度客户,在最初的几个月时间内,会让用户对所有的问题结果进行点赞或点踩,从而获得用户的反馈结果。然而并不是所有的问题都能得到用户的反馈,从上图可以看出,有 57% 的问题没有得到反馈。而且用户 like 的占比只有 9%, dislike 占比达到 34%,说明初版模型的效果非常糟糕。通过人工统计发现,其中最大的问题在于检索结果错误。



因为真实世界的问题过于复杂多变,因此在召回时表现得不够理想。从技术角度来说,主要原因在于相似度召回的 ranking 过低,因此被排除在外,这导致没有正确的语料给到大模型,这样大模型只能依靠“幻觉”来回答,这就是前文所述的有文档但是召回了错误的文档。



为解决这类问题,我们做了简单的 ReRank,把用户常用的 QA pairs 记录到向量数据库中,并且重新使用向量空间(可能是向量数据库,或者一张表,或者 name space 等)进行存储。在召回阶段,会同时在原始文档向量空间和优化后的向量空间进行召回,选取 top 10 到 LLM 中进行进一步的处理,从而判断最适合的文本语料,这就是 ReRank 的过程。


基于上述过程,目前所有 ad-hoc 的 basic RAG 的问题都能得到较好地解决。



因为要承担相应的业务,因此大量工作都留在上图的左侧,即 OPT 平台(optimization platform),会自动追踪用户产生的各类问题、疑问,并记录用户分享甚至用户的 dislike 等。用户正向的行为数据记录到另一个向量空间中,以备将来使用。而对于用户负向的行为数据,会分成两部分处理,一部分再次让 LLM 进行回答,并定向推送给用户,让用户再次确认回答是否正确;另一部分,由专家介入排查错误原因,进行重新调整。当调整后的 QA pairs 足够多时,便可以将这些数据作为 Embedding model 的训练材料。


通过上述流程,实现了产品从灰度上线到持续使用并不断优化,目前 dislike 的比例已从最初的 34% 降低到了 2%-3%。


5. Basic RAG 的业务挑战



Basic RAG 面临的挑战也非常明显。前文所述,都是围绕向量相似度展开,然而在有些场景下,向量相似度未必是最优的搜索方法。我们真正的需求并不是  RAG,而是一个全知全能的搜索引擎,只是当下没有任何搜索引擎能做到这个程度(包括 google)。因此我们需要对搜索的方法做调整,而 RAG 是基础的向量搜索方法,如果该方法效果不理想,就要引入其他方法,包括图数据库方法,以及直接加入真正的搜索引擎(如 google、bing 的 API 等),目的是满足业务需求,而并不限定于某一种技术栈。


6. Graph RAG



微软在今年 4 月发表了一篇关于 Graph RAG 的论文,规范、系统化地解释了如何使用 Graph RAG 实现引擎搜索功能。我们与微软团队,以及 LlamaIndex 三方合作,对引擎搜索功能进行了探索,分为 index 和 query 两个阶段。



对于 index 阶段,首先需要实现 KG(Knowledge Graph),因此需要非常丰富的文档及社区问答,接着需要对文档进行切分。


然而这里存在一个问题,在实现 KG 时,到底使用 entity 做 graph,还是用 chunk 做 graph?结合实验,参考 google 方案,最终两者都需要,既包含 entity 也包含 chunk,而且这个 chunk 是基于 entity 进行 summarize 得到的 chunk。


由于构建知识图谱是个异步的过程,因此有充足的时间将每个 entity 相关的摘要信息全部生成,再存到向量数据库中。



我们开发了一个可视化工具,将文档的知识图谱的节点和边展现出来。



我们也制作了一个 Indexing Handbook,感兴趣的读者可以扫描上图二维码(link to google Colab),了解如何一步步搭建知识图谱,并实现 query。



接下来,query 过程就是将用户的问题 embedding,得到一个向量,然后搜索出 K 度内的关联节点及节点间关系,并将其组装起来,输入到 LLM 中。


7. Agent RAG 的业务挑战



前文所述都是基于用户问答进行的,然而用户问答中有一种特殊情况,即诊断问答,诊断问答往往不能仅通过单次交互、单次 RAG 获得,因此另一条线是以  Agent RAG 的方式,供终端客户(如工单,以及云端运维平台的用户等)使用。



上图展示了 Agent RAG 的简单架构,使用 agent 方法 trigger 语料库,从而获取各类 API 信息以及异构数据信息,并且通过可观测性、优化平台和测试平台,保证模型准确度不断上升。



我们构建了四个 agent,分别为:


  • Planner:将具体问题规划成一系列子任务流程(即图中的 Step);


  • Engineer & Executor:形成 pair,负责执行 Planner 构建的 Step,将子任务流程逐步完成;


  • Critic:对执行结果进行评价,主要关注执行内容和用户问题是否相关,以及用户问题是否得到解决等。



以上是一些流程的 SOP 示例。



在 Planner 过程中,会输出一系列 system status,并 track 各类 RAG,从而得到相应的背景信息;在 Engineer 和 Executor 过程中,会通过多种 RAG 方法实现,诸如调用相应 API、生成 SQL 或其他代码执行相应计算等功能;Critic 过程判断流程执行情况等。以上就是基本的逻辑。



上述 Agent 是基于微软 AutoGen 框架,为了增强其稳定性,增加了FSM 特性,使得整个 agent 之间的流转更加稳定。



目前 Agent RAG 已应用于内部的一个集群诊断平台。


8. RAG 应用图



上图中对我们所有的 RAG 应用进行了总结。其中绿色部分是最初的 Basic RAG 的流程,为了优化这一流程,在此基础上增加了黄色部分,包括判断是否 TiDB 相关、finetune Embedding model、ReRank 内容,因为是以业务为目标,所以在语料、模型以及工程等每个环节都进行了优化。


为了让一次更精准,我们构建了知识图谱,特别是对于答案分布于多个文档中的情况,借助知识图谱使之前很多难以回答的问题都得以成功解答。


更进一步,为了解决更复杂的问题,我们又采用了 Agent 的方式,利用多智能体规划评估,使用整个语料结合各类 API,共同联合解决问题。


以上就是 PingCAP 在基于 RAG 进行文档智能问答方面的业务实践。


03


前沿介绍


RAG 生态图



上图展示了当前的 RAG 生态,相信大家已较为熟悉,在此不做展开介绍。值得指出的是,对于 RAG 而言,评估系统至关重要。我们的工作聚焦于 Modular RAG,未来则会向 Evaluation of RAG 方向发展。



上图是同济大学的 RAG server,涵盖了各类 RAG 实施方法,非常全面。其中右下角是最佳工业案例介绍,为我们的工作提供了很多的参考。我们所使用的 agent 的方法,和图中左下角 loop 方法相似,区别在于我们使用的是 AutoGen Agent。


以上就是本次分享的内容,谢谢大家。


04


Q&A


Q1:图片语料这一部分如何处理?


A1:本文没有详细介绍语料这一部分,然而“garbage in garbage out“,语料的重要性不言而喻。在工业实践时,最理想的状态是统一的语料输入(例如我们使用的是 Markdown 输入)。对于图片部分,暂时没有尝试图片识别这类处理,因为初步尝试发现无法达到工业级的质量要求。目前图片识别的最高标准是 GPT-4o,该标准还不足以满足工业级别的图片分析要求,特别是对图片的理解,并与上下文以及用户提问进行关联,进而准确回答用户问题,这一要求目前还无法做到。


Q2如何处理标题切分,以及上下文的语意连贯


A2:有两个建议。首先可以参考 Llama index,充分利用开源的力量,里面包含按标题处理切分这样的逻辑。其次,假如 Llama index 中没有包含该逻辑,那么可以根据具体情况进行灵活处理;例如,对于 Markdown,可以按照井号实现切分,并在井号上下侧各做增加一层 overlap,确保上下文的语意连贯。RAG 领域并没有银弹,需要根据具体业务进行调整。
以上就是本次分享的内容,谢谢大家。

53AI,企业落地大模型首选服务商

产品:场景落地咨询+大模型应用平台+行业解决方案

承诺:免费POC验证,效果达标后再合作。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

添加专属顾问

回到顶部

加载中...

扫码咨询

扫码登录
登录即表示您同意《53AI网站服务协议》
服务协议

欢迎您使用【53AI 官方网站】(以下简称“本网站”或“我们”)。本《会员服务协议》(以下简称“本协议”)是您(以下简称“会员”或“用户”)与【深圳市博思协创网络科技有限公司】之间关于注册、登录及使用本网站会员服务所订立的法律协议。

在您注册或登录前,请务必审慎阅读、充分理解各条款内容,特别是免除或限制责任的条款、知识产权条款、争议解决条款等。此类条款将以加粗形式提示您注意。 当您通过微信公众号授权、手机验证码验证或其他方式成功登录本网站时,即视为您已完全理解并同意接受本协议的全部内容。

一、 定义

本网站:指由【深圳市博思协创网络科技有限公司】运营的,域名为【53ai.com】的网站及相关移动端页面。

会员服务:指本网站向注册会员提供的知识库文章查阅、内容检索及其他相关增值服务。

知识库内容:指本网站发布的包括但不限于文字、图表、数据、研究报告、行业分析等数字化内容资源。

二、 账号注册与登录

登录方式:本网站支持以下登录方式,您可根据实际情况选择:

微信公众号授权登录:您同意将您的微信OpenID信息授权给本网站,用于创建或关联会员账号。

手机验证码登录:您需提供真实有效的手机号码,并通过短信验证码完成身份验证与登录/注册。

账号安全:您的账号仅限您本人使用,禁止赠与、借用、租用、转让或售卖。因您保管不善导致的账号被盗、密码泄露等损失,由您自行承担。

实名认证:根据相关法律法规要求,我们可能要求您在特定功能下完成实名认证。如您拒绝提供,可能无法使用部分或全部服务。

未成年人保护:若您未满18周岁,请在法定监护人的陪同下阅读本协议,并在征得监护人同意后使用本服务。

三、 服务内容与规范

知识库查阅权限:会员登录后,有权按照其会员等级对应的权限范围,在线浏览、检索本网站知识库中的相关文章及内容。

服务变更:我们有权根据业务发展需要,调整、变更或终止部分服务内容,并将以网站公告、公众号消息等方式提前通知。

禁止行为:您在使用服务时不得实施以下行为:

利用技术手段批量爬取、下载、转存知识库内容;

将知识库内容用于商业目的或未经授权地向第三方传播;

干扰本网站正常运行或侵犯其他用户合法权益;

发布违法违规信息或从事违反公序良俗的活动。

四、 知识产权声明

权利归属:本网站知识库中的排版设计、软件代码等内容的知识产权均归【公司全称】或原权利人所有,受《中华人民共和国著作权法》等法律保护。

有限许可:本网站授予会员一项非独占、不可转让、不可转授权的普通许可,仅限于个人学习、研究之目的在线查阅知识库内容。

侵权追责:未经书面许可,任何单位或个人不得以任何形式复制、转载、摘编、镜像、汇编或以其他方式使用上述内容。一经发现,我们保留追究其法律责任的权利。

五、 个人信息保护

我们重视对您个人信息的保护。关于我们如何收集、使用、存储和保护您的个人信息,请单独阅读 《隐私政策》。

您通过微信公众号授权或手机号验证所提供的信息,我们将严格按照《个人信息保护法》的规定处理,仅用于身份识别、服务提供及安全验证等必要用途。

您可以随时通过网站设置或联系客服行使查阅、更正、删除个人信息及撤回授权同意的权利。

六、 免责声明

内容准确性:知识库内容仅供参考,不构成专业建议。我们不对其完整性、准确性、时效性作任何明示或暗示的保证,您应自行判断并承担使用风险。

不可抗力:因自然灾害、政策法规变化、网络故障、第三方平台接口异常(如微信接口维护、运营商短信通道故障)等不可抗力导致的服务中断或延迟,我们不承担违约责任。

第三方链接:本网站可能包含指向第三方网站的链接,该等网站的内容和服务不受我们控制,请您自行甄别风险。

七、 违约责任

如您违反本协议约定,我们有权视情节采取警告、限制功能、暂停服务、注销账号等措施,并保留要求赔偿损失的权利。

如因您的违约行为导致我们遭受行政处罚、第三方索赔或商誉损失,您应承担全部赔偿责任(包括但不限于罚款、赔偿金、律师费、公证费等)。

八、 法律适用与争议解决

本协议的订立、执行和解释均适用中华人民共和国大陆地区法律。

因本协议产生的或与本协议有关的任何争议,双方应友好协商解决;协商不成的,任何一方均可向【公司所在地】有管辖权的人民法院提起诉讼。

九、 其他

本协议构成双方就本服务达成的完整协议,取代此前任何口头或书面约定。

本协议任一条款被认定为无效或不可执行的,不影响其他条款的效力。

我们对本协议享有最终解释权,并在法律允许的范围内保留随时修改的权利。修改后的协议一经公布即生效,继续使用服务即视为同意修订内容。


已查阅