提升RAG质量的方法
数据准备阶段
常见问题
-
数据质量差:
企业大部分数据(尤其是非结构化数据)缺乏良好的数据治理,未经标记/评估的非结构化数据可能包含敏感、过时、矛盾或不正确的信息。 -
多模态信息:
提取、定义和理解文档中的不同内容元素,如标题、配色方案、图像和标签等存在挑战。 -
复杂的PDF提取:
PDF是为人类阅读而设计的,机器解析起来非常复杂。
解决方案
-
构建完整的数据准备流程
-
采用智能文档技术
(1)构建完整的数据准备流程
- 数据评估与分类
- 数据审计:全面审查现有数据,识别敏感、过时、矛盾或不准确的信息。
- 数据分类:按类型、来源、敏感性和重要性对数据进行分类,便于后续处理。
- 数据清洗
- 去重:删除重复数据
- 纠错:修正格式错误、拼写错误等
- 更新:替换过时信息,确保数据时效性
- 一致性检查:解决数据矛盾,确保逻辑一致
- 敏感信息处理
- 识别敏感数据:使用工具或正则表达式识别敏感信息,如个人身份信息
- 脱敏或加密:对敏感数据进行脱敏处理,确保合规。
- 数据标记与标注
- 元数据标记:为数据添加元数据,如来源、创建时间等
- 内容标注:对非结构化数据进行标注,便于后续检索和分析
- 数据治理框架
- 制定政策:明确数据管理、访问控制和更新流程
- 责任分配:指定数据治理负责人,确保政策执行
- 监控与审计:定期监控数据质量,进行审计
(2)智能文档技术

阿里文档智能:https://www.aliyun.com/product/ai/docmind?spm=a2c4g.11174283.0.0.bfe667a8tIVMdG
微软 LayoutLMv3:https://www.microsoft.com/en-us/research/articles/layoutlmv3/
知识检索阶段
常见问题
-
内容缺失:
当检索过程缺少关键内容时,系统会提供不完整、碎片化的答案 => 降低RAG的质量 -
错过排名靠前的文档:
用户查询相关的文档时被检索到,但相关性极低,导致答案不能满足用户需求,这是因为在检索过程中,用户通过主观判断决定检索“文档数量”。理论上所有文档都要被排序并考虑进一步处理,但在实践中,通常只有排名top k的文档才会被召回,而k值需要根据经验确定。 -
不在上下文中:
从数据库中检索出包含答案的文档,但未能包含在生成答案的上下文中。这种情况通常发生在返
回大量文件时,需要进行整合以选择最相关的信息。
解决方案
-
通过查询转换澄清用户意图:明确用户意图,提高检索准确性。
-
采用混合检索和重排策略:确保最相关的文档被优先处理,生成更准确的答案。
(1)通过查询转换澄清用户意图
-
场景:用户询问 “如何申请信用卡?”
-
问题:用户意图可能模糊,例如不清楚是申请流程、所需材料还是资格条件。
-
解决方法:通过查询转换明确用户意图。
-
实现步骤:
-
意图识别:使用自然语言处理技术识别用户意图。例如,识别用户是想了解流程、材料还是资格。
-
查询扩展:根据识别结果扩展查询。例如:
- 如果用户想了解流程,查询扩展为“信用卡申请的具体步骤”
- 如果用户想了解材料,查询扩展为“申请信用卡需要哪些材料”
- 如果用户想了解资格,查询扩展为“申请信用卡的资格条件”
-
检索:使用扩展后的查询检索相关文档
-
-
示例:
-
用户输入:“如何申请信用卡?”
-
系统识别意图为
流程,扩展查询为信用卡申请的具体步骤 -
检索结果包含详细的申请步骤文档,系统生成准确答案
-
(2)混合检索和重排策略
-
场景:用户询问“信用卡年费是多少?”
-
问题:直接检索可能返回大量文档,部分相关但排名低,导致答案不准确。
-
解决方法:采用混合检索和重排策略。
-
步骤:
-
混合检索:结合关键词检索和语义检索。比如:关键词检索:“信用卡年费”。
-
语义检索:使用嵌入模型检索与“信用卡年费”语义相近的文档。
-
重排:对检索结果进行重排。
-
生成答案:从重排后的文档中生成答案。
-
-
示例:
-
用户输入:“信用卡年费是多少?”
-
系统进行混合检索,结合关键词和语义检索。
-
重排后,最相关的文档(如“信用卡年费政策”)排名靠前。
-
系统生成准确答案:“信用卡年费根据卡类型不同,普通卡年费为100元,金卡为300元,白金卡为1000元。”
-
答案生成阶段
常见问题
-
未提取:
答案与所提供的上下文相符,但大语言模型却无法准确提取。这种情况通常发生在上下文中存在过多噪音或相互冲突的信息时。 -
不完整:
尽管能够利用上下文生成答案,但信息缺失会导致对用户查询的答复不完整。格式错误:当prompt中的附加指令格式不正确时,大语言模型可能误解或曲解这些指令,从而导致错误的答案。 -
幻觉:
大模型可能会产生误导性或虚假性信息。
解决方案
-
改进提示词模板
-
实施动态防护栏
(1)改进提示词模板
| 场景 | 原始提示词 | 改进后的提示词 |
|---|---|---|
| 用户询问“如何申请信用卡?” | “根据以下上下文回答问题:如何申请信用卡?” | “根据以下上下文,提取与申请信用卡相关的具体步骤和所需材料:如何申请信用卡?” |
| 用户询问“信用卡的年费是多少?” | “根据以下上下文回答问题:信用卡的年费是多少?” | “根据以下上下文,详细列出不同信用卡的年费信息,并说明是否有减免政策:信用卡的年费是多少?” |
| 用户询问“什么是零存整取?” | “根据以下上下文回答问题:什么是零存整取?” | “根据以下上下文,准确解释零存整取的定义、特点和适用人群,确保信息真实可靠:什么是零存整取?” |
如何对原有的提示词进行优化?
可以通过 DeepSeek-R1 或 QWQ 的推理链,对提示词进行优化:
-
信息提取:从原始提示词中提取关键信息。
-
需求分析:分析用户的需求,明确用户希望获取的具体信息。
-
提示词优化:根据需求分析的结果,优化提示词,使其更具体、更符合用户的需求。
(2)实施动态防护栏
动态防护栏(Dynamic Guardrails)是一种在生成式AI系统中用于实时监控和调整模型输出的机制,旨在确保生成的内容符合预期、准确且安全。它通过设置规则、约束和反馈机制,动态地干预模型的生成过程,避免生成错误、不完整、不符合格式要求或含有虚假信息(幻觉)的内容。
在RAG系统中,动态防护栏的作用尤为重要,因为它可以帮助解决以下问题:
-
未提取:确保模型从上下文中提取了正确的信息。
-
不完整:确保生成的答案覆盖了所有必要的信息。
-
格式错误:确保生成的答案符合指定的格式要求。
-
幻觉:防止模型生成与上下文无关或虚假的信息。
场景1:防止未提取
用户问题:“如何申请信用卡?”
-
上下文:包含申请信用卡的步骤和所需材料。
-
动态防护栏规则:检查生成的答案是否包含“步骤”和“材料”。如果缺失,提示模型重新生成。
-
示例:
-
错误输出:“申请信用卡需要提供一些材料。”
-
防护栏触发:检测到未提取具体步骤,提示模型补充。
-
场景2:防止不完整
用户问题:“信用卡的年费是多少?”
-
上下文:包含不同信用卡的年费信息。
-
动态防护栏规则:检查生成的答案是否列出所有信用卡的年费。如果缺失,提示模型补充。
-
示例:
-
错误输出:“信用卡A的年费是100元。”
-
防护栏触发:检测到未列出所有信用卡的年费,提示模型补充。
-
场景3:防止幻觉
用户问题:“什么是零存整取?”
-
上下文:包含零存整取的定义和特点。
-
动态防护栏规则:检查生成的答案是否与上下文一致。如果不一致,提示模型重新生成。
-
示例:
-
错误输出:“零存整取是一种贷款产品。
-
防护栏触发:检测到与上下文不一致,提示模型重新生成。
-
如何实现动态防护栏技术?
事实性校验规则,在生成阶段,设置规则验证生成内容是否与检索到的知识片段一致。例如,可以使用参考文献验证机制,确保生成内容有可靠来源支持,避免输出矛盾或不合理的回答。
如何制定事实性校验规则?
当业务逻辑明确且规则较为固定时,可以人为定义一组规则,比如:
- 规则1:生成的答案必须包含检索到的知识片段中的关键实体(如“年费”、“利率”)。
- 规则2:生成的答案必须符合指定的格式(如步骤列表、表格等)。
- 实施方法:
- 使用正则表达式或关键词匹配来检查生成内容是否符合规则。
- 例如,检查生成内容是否包含“年费”这一关键词,或者是否符合步骤格式(如“1. 登录;2. 设置”)。
RAG对比LLM
-
效率与成本:LLM处理长上下文时计算资源消耗大,响应时间增加。RAG通过检索相关片段,减少输入长度。
-
知识更新:LLM的知识截止于训练数据,无法实时更新。RAG可以连接外部知识库,增强时效性。
-
可解释性:RAG的检索过程透明,用户可查看来源,增强信任。LLM的生成过程则较难追溯。
-
定制化:RAG可针对特定领域定制检索系统,提供更精准的结果,而LLM的通用性可能无法满足特定需求。
-
数据隐私:RAG允许在本地或私有数据源上检索,避免敏感数据上传云端,适合隐私要求高的场景。
-
结合LLM的生成能力和RAG的检索能力,可以提升整体性能,提供更全面、准确的回答。

浙公网安备 33010602011771号