RAG多样使用方法
一、回顾 Function Call & RAG
Function Call
是LLM的一种能力:LLM 理解所有的用户对话内容,评估自己是否有能力直接回答,不然就应该决策使用工具,再通过输出固定格式的文字,表达自己决定使用某个工具(有哪些可用工具,需要提前告知 LLM)`
RAG
- RAG:通过检索到的知识片段,塞到prompt里,辅助 LLM 回答用户问题
- LLM 无法看你的知识库,也无法真正学习你知识库里的知识
- 将你的知识切片,变成向量的,是Embedding模型
- 也是Embedding模型,把用户的问题变成了向量
- 拿用户的问题向量,去检索知识库的,是程序员写的代码
- coze平台只是提前做好了这些功能,企业也可以自己开发
- 检索到的知识,最终会被塞到prompt中,作为一种参考资料
- 网络信息搜索、数据库检索,也是 RAG 的一种
PS: Embedding 模型和大语言模型,不是一个模型
总之
Prompt 是我们唯一可以和LLM 打交道的方式,在应用技术层,无论我们做了多么炫酷的设计,最终都是为了找到合适传递给LLM 的Prompt
二、几个必须清楚的重点
2.1 想象中的RAG
-
1、收集一下企业文件资料,就想做 RAG 了,是不现实的,效果不会好的
-
2、真正想做好 RAG 项目,处理知识切片的时间占整个项目的70%以上
-
3、知识切片到底怎么切,这个问题没有办法直接回答
-
4、知识切片到底怎么切,不只是知识库构建过程中的一个小步骤,而是一系列复杂工作之后的一个结果
2.2 真实的RAG
1、列举要覆盖的场景,哪些类型的用户问题,是我们打算用RAG解决的
2、测试每个典型问题,在prompt里塞什么样的参考资料、样例,是可以有好的回答的
3、我应该如何从大量文件资料中,通过大量的处理工作,得到我需要的知识切片
4、faq(常见问题答案)格式的问答对,往往是效果更好的选择
5、能用问答对,去覆盖的用户问题,尽量用问答对,不能收集到问答对的,再准备普通文件切片
6、要点总结:是从用户会问什么问题出发,测试出需要什么样的知识切片,不是从手里的大堆文件资料出发,考虑到底应该怎么切片
三、用Excel做知识库(改造知识库)
1、区分用户的需求涉及到的文件,是跟这一次的需求有关,还是某一类需求都要涉及到某个文件
-
引导通过对话窗口上传文件,并提出问题,使用插件解析文件,并将文件内容塞入prompt
-
整理一个excel文件,明确指定出希望被检索的知识片段,以及相关元数据
2、提升准确率的重要方法 1:改造知识库,被检索的是用户问题,塞到prompt的是知识片段
- 根据文章内容生成的用户提问:文章内容
3、严格来说,word、pdf、ppt、网页,都应该整理成 excel 格式
- word/pdf/PPT/网页内容: word、pdf、ppt、网页原始文件
4、图片文件,使用多模态模型撰写文字描述后,再把文字描述和原图,也整理成 excel 格式
- 文字描述图片内容 : 图片
- 多模态模型,例如通义千问大模型
5、word、pdf、ppt 中的表格,有限处理成Markdown、Json,实在不行就也截成图片
例如:创建一个教用户怎么使用coze的问答Excel知识库
1 创建excel
- coze官网上有使用说明文档,首先我们将每一篇说明文档内容抓出来,然后根据每一篇文章内容,用大模型生成n条(10/20条)用户可能问的问题,最后就得到了一个问题及内容的对照文档, `10/20条问题(索引) -> 文章内容(内容 )
四、查询query((改造用户问题 ))
1、默认是用户提出的问题
2、但多轮对话会让整个状况崩溃
3、用户多样的表达方式也会增加很多困难
4、提升准确率的重要方法 :知识库不改造,改造检索词
案例: 打造一个 打车计算价格的agent
改造前的agent设计
- coze配置
- 百度地图: 规划路线
- 文本:打车计费知识库,
css7月28日,交通鸟发布了《关于深化改革推进出租汽车行业健康发展的指导意见》,即所谓的"要车縣政",宣布互联同约车(网约车)会法。滴滴出行你为中国市场占有率最高的打车软件,极大方便了民众的出行,滴滴出行有快车,出租车、顺风车,专车等能务。滴滴快车与液滴专车的收授标准不司,快车价格相对便宜,西专车收费较世,使用的车型更豪华,针对不同的消费人群。不同的核市,快车的收费标准也不同。 流满快车的计价规则包括起步费、时长费、里程费、远途费、夜同费,最低消费及动态加价。快车的起步费为0,夜间费收取时同为23点配次日5点,动态加价只会在交通高峰、司机校少或铰远等特殊情况才会收取。安车高收超步费。时长费和里程费都收费比快车高。不同的城节,时长费,里程费,最低消费等计价规則都不同。下面罗列保建9地市(摄州、厦门、没州、漳州、第田、宁德、龙岩、南罕、三明】及广州。深圳、重庆等12个城市的湾测快车的收费标准(计价规划,单位见备注1)。 福州 时长贵为0.39元/分钟,原程贵2元/公里,近途费为10公里后每公里加1元,农同费 Q.7 元公里,最饭请费为9元。 厦门 时长费为0.49元分钟,单程费1.79广公单,总途费乃8公单后何公单加收12元,秋问费0.88冠公里最低消 为9元。 泉州 时长費为0.38 元/分钟,里程费 1.79元/公里,冠治費为10公里后每公里却收1元,夜间费0.7元/公里最低消费为8元 漳州 时长费为0.35元/分钟,里星费1.99 元/公里,远途费为8公里后每公里加收0.98元,夜问费0.88元公里。 最低消费为6元。 莆田:时长费为0.35 元分钟。期雅费1.99元公州,远途费为8公州后每公別红收099元,表间费口88元公里,最低消费为8元。 宁波 时长费为0.49元分钟,坚联费1.99元公坚,远治费为8公里后每公里加收0.99元,衣问费0.339元公坚,堆低游費为7元。 龙岩 时长费为0.3元/分钟,里程费1.79元/公里,运途费为日公型后每公里紅收0.3日元,夜间费0.肥8元公里 最低消费为7元。
- 结果:总是没有召回相关切片,大模型出现幻觉,瞎编一个结果
- 原因分析: 1 关键词不准确,江北到沙坪坝匹配知识库中的城市名称 2 改造知识库也无法穷举一个城市所有的起始地名
改造后的agent设计
- coze配置
- 去掉之前的百度,知识库插件
- 新增工作流插件
工作流配置
开始:提取四个参数,1所在城市,2开始地点,3结束地点,4出发时间
知识库检索:通过城市去知识库中检索,所在城市的打车信息
配置导航插件:计算起始地点的行车路线的里程数,乘车时间(百度导航/other)
文本处理:1 开始位置 2 结束位置 3 城市所在的打车规则 4 里程数 5 乘车时间 6 发车时间,将上述拼接
最终输出打车费用:
工作流步骤3
工作流步骤4
PS:不管我们在应用技术层,做了什么花哨炫酷的操作, 最后的目的就是把有用的信息塞进提示词
五、Embedding & Rerank (改造模型)
提升准确率的重要方法3:合适的 Embedding模型 & Rerank模型
5.1 Embedding模型
两个作用 1知识库切分成片段(切片)2 片段中匹配提示词相似度高的片段(检索)
Embedding 模型是怎么训练出来的 ?
1、Embedding一般也都是 Transformer架构
2、理解语义信息的原理其实和GPT类似
3、但Embedding 模型的训练目标比较简单,所以能力不如GPT 强
4、模型目标:让具有相似语义的文字序列,对应尽可能高相似度的向量;让不同语义的文字序列,对应尽可能低相似度的向量
5、训练数据:数亿条数据,每一条都是一个3元组数据
-
Anchor(锚点): 秦始皇统一六国后,推行了中央集权的政治体制。 (
目标
) -
Positive(正例): 秦朝实行了法家思想,中央政府的权力得到了加强。(与锚点向量相似度高)
-
Negative(负例): 宋朝的科举制度对中国古代的教育体系产生了深远影响(与锚点向量相似度低)


上传知识库文件 -> 切分成词向量(片段)embdding大模型 userprompt -> 提示词向量 匹配 知识库向量 = 片段1(embdding模型处理)-> 检索片段1 + userprompt(大模型处理)
5.2 Rerank模型
- 给知识库中的向量片段打分的模型
5.3 Embedding模型 与 Rerank模型 协作
Embedding 模型需要效率高、速度快,随便给一段文字,就可以在千万量级知识库中秒回结果 Reranker 模型需要严谨仔细,深度分析语义到底哪个知识切片最合适

- 1 问题转向量(embdding): 用户query模型转为向量
- 2 检索(embdding): 在向量数据库中检索出,k个与用户问题向量,相似度高的知识片段向量
- 3 拼接(Reranker): 用户问题 + 片段(分别拼接K个)
- 4 获取相关性得分(Reranker):分别给这个K个拼接打分,从K个获得一个相关性得分最高的片段
5.4 常用 Embedding基座模型 及 Reranker模型
1、智源人工智能研究院:BGE(BAAI General Embedding)
2、网易:BCE(BilingualandCrosslingualEmbedding)
3、阿里:Qwen GTE
4、腾讯:Conan-embedding
ps: 在coze上只能用字节的 embdding 和rerank 模型,如果公司开发可以自由选择这两个模型
5.5 难负例挖掘
加了 Reranker模型 之后效果有提升,但还是不够理解,还希望继续提升
1、简单负例
Anchor(锚点): 秦始皇统一六国后,推行了中央集权的政治体制。 Positive(正例): 秦始皇统一六国后,创立了一种全新的国家管理体系,强化了中央政府的权力,减少了地方自治权。这种体制确保 了皇帝对全国拥有绝对的控制权
Negative(简单负例): 宋朝的科举制度对中国古代的教育体系产生了深远影响。
2、难负例
Negative(难负例): 秦始皇统一六国后,建立了一个从中央到地方的官僚体系,各级官员通过考试选拔,依据才能晋升,而非世袭继承。
5.6 垂直领域的Embedding 微调
1、教育、医疗、金融、法律是常用领域
2、微调数据的核心要点是关联性:题目-解析(或题目-题目),症状-诊断方法,案情-法院判决,投资方向-风险评估
3、Embedding 的微调 比 对话式模型的微调有更高的安全性(可能破坏其聊天功能)
六 大模型 functioncalling mcp关系

总结
RAG 流程包含三个部分,检索、增强、生成
举例:
- 用户提问:公司未签劳动合同,员工可以索赔吗?(法律问题)
1检索:
- 通过embdding模型,将用户问题转为向量
- 通过embdding模型,在数据库中筛选出N个相似度高的向量
- 通过Rerank模型,在n个相似度高的向量中选出一个最高的。
2增强:根据《劳动合同法》第82条,案例某某,+ 用户问题 = 新的关键词
iniprompt = """ 根据以下法律文档和用户问题生成回答,需包含关键词:第82条、双倍工资。 文档1: 《劳动合同法》第82条... 文档2: 案例XX... 用户问题: 公司未签劳动合同,员工可以索赔吗? """
3生成:新的关键词通过大语言模型提问,获取最后答案