欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 资讯 > 模型的RAG

模型的RAG

2025/4/28 23:57:00 来源:https://blog.csdn.net/m0_51592010/article/details/147400624  浏览:    关键词:模型的RAG

一 RAG

(一)什么是RAG

当岳不群相当武林的盟主时候,你的给他一个葵花宝典(秘籍==RAG)

(二)RAG的原理

1 建立索引:

首先要清洗和提取原始数据,将 PDF、Docx等不同格式的文件解析为纯文本数据

然后将文本数据分割成更小的片段(chunk);

最后将这些片段经过嵌入模型转换成向量数据(此过程叫做embedding)

并将原始语料块和嵌入向量以键值对形式存储到向量数据库中,以便进行后续快速且频繁的搜索。

2 检索生成:

系统会获取到用户输入,随后计算出用户的问题与向量数据库中的文档块之间的相似度,选择相似度最高的K个文档块(K值可以自己设置)作为回答当前问题的知识。知识与问题会合并到提示词模板中提交给大模型,大模型给出回复。这就是检索生成的过程。

(三)如何持续改进RAG应用效果

1 问题比较抽象或者概念比较模糊**,导致大模型没有准确理解使用者的问题

问题精准性:

提问答复
精准性的问题如何成为武林盟主葵花宝典就能成为武林盟主
非精准性问题盟主不明确什么问题
2 知识库没有检索到问题的答案,

查无此人,库中没有你要找的葵花宝典

3 缺少对答案做兜底验证的机制

库中结果未有验证,谁也没练过葵花宝典

(四)索引准确率

1 构建知识库的时候,我们首先需要正确的从文档中提取有效语料
2 优化chunk切分模式

  1. 利用领域知识:针对特定领域的文档,利用领域专有知识进行更精准的切分。例如,在法律文档中识别段落编号、条款作为切分依据。
  2. 基于固定大小切分:比如默认采用128个词或512个词切分为一个chunk,可以快速实现文本分块。缺点是忽略了语义和上下文完整性。
  3. 上下文感知:在切分时考虑前后文关系,避免信息断裂。可以通过保持特定句对或短语相邻,或使用更复杂的算法识别并保留语义完整性。最简单的做法是切分时保留前一句和后一句话。你也可以使用自然语言处理技术识别语义单元,如通过句子相似度计算、主题模型(如LDA)或BERT嵌入聚类来切分文本,确保每个chunk内部语义连贯,减少跨chunk信息依赖。通义实验室提供了一种文本切割模型,输入长文本即可得到切割好的文本块,详情可参考:中文文本分割模型。
3 句子滑动窗口检索

这个策略是通过设置window_size(窗口大小)来调整提取句子的数量,当用户的问题匹配到一个chunk语料块时,通过窗函数提取目标语料块的上下文,而不仅仅是语料块本身,这样来获得更完整的语料上下文信息,提升RAG生成质量。

4 自动合并检索

将文档分块,建成一棵语料块的树

5 选择更适合业务的Embedding模型(嵌入式)

chunk语料块由原来的文本内容转换为机器可以用于比对计算的一组数字,即变为Embedding向量

6 更适合业务的ReRank模型(重排序)模型
7 Raptor 用聚类为文档块建立索引

做法是采用无监督聚类来生成文档索引。这就像通过文档的内容为文档自动建立目录的过程

(五) 让问题更好理解

1 完善用户问题
  • 一种理想的通过多轮对话补全需求的方案。该设想是通过大模型多次主动与用户沟通,不断收集信息,完善对用户真实意图的理解,补全执行用户需求所需的各项参数

用大模型转述回答,再进行RAG回答,类似指示词思路,让大模型转述用户的问题

2 让用户补全信息辅助业务调用

有一些应用场景需要大量的参数支撑,(比如订火车票需要起点、终点、时间、座位等级、座位偏好等等),我们还可以进一步完善上面的思路,一次性告诉用户系统需要什么信息,让用户来补全

3 Multi-Query 多路召回

给客户几个问题的选择

用户问“烤鸭店在哪里?”,大模型会生成:
4 假设问题答案方法

推荐一家烤鸭店”,第一时间想到了“全聚德烤鸭店不错,我前两天刚吃过!

(六)改造信息抽取途径

  1. 向量相似度,我们用检索信息得到的向量相似度分来判断。判断每个语料块与用户问题的相似度评分,是否高过某个阈值,如果搜索到的语料块与用户问题的相似度都比较低,就代表知识库中的信息与用户问题不太相关;
  2. 直接问大模型,我们可以先将知识库检索到的信息交给大模型,让大模型自主判断,这些资料是否能回答用户的问题。

1 回答前反复思考
  • 相关性:我获取的这些材料和问题相关吗?
  • 无幻觉:我的答案是不是按照材料写的来讲,还是我自己编造的?
  • 已解答:我的答案是不是解答了问题?

(七)从多种数据源中获取资料**

(八)从知识图谱中获取数据

Neo4j是一款图数据库引擎,可以为我们提供知识图谱构建和计算服务

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词