大模型 19 RAG多样使用方法

RAG多样使用方法

一、回顾 Function Call & RAG

Function Call

是LLM的一种能力:LLM 理解所有的用户对话内容,评估自己是否有能力直接回答,不然就应该决策使用工具,再通过输出固定格式的文字,表达自己决定使用某个工具(有哪些可用工具,需要提前告知 LLM)`

RAG

  1. RAG:通过检索到的知识片段,塞到prompt里,辅助 LLM 回答用户问题
  2. LLM 无法看你的知识库,也无法真正学习你知识库里的知识
  3. 将你的知识切片,变成向量的,是Embedding模型
  4. 也是Embedding模型,把用户的问题变成了向量
  5. 拿用户的问题向量,去检索知识库的,是程序员写的代码
  6. coze平台只是提前做好了这些功能,企业也可以自己开发
  7. 检索到的知识,最终会被塞到prompt中,作为一种参考资料
  8. 网络信息搜索、数据库检索,也是 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配置
    • 百度地图: 规划路线
    • 文本:打车计费知识库,
css 复制代码
7月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条,案例某某,+ 用户问题 = 新的关键词

ini 复制代码
prompt = """
根据以下法律文档和用户问题生成回答,需包含关键词:第82条、双倍工资。
文档1: 《劳动合同法》第82条...
文档2: 案例XX...
用户问题: 公司未签劳动合同,员工可以索赔吗?
"""

3生成:新的关键词通过大语言模型提问,获取最后答案

相关推荐
Alfred king18 分钟前
面试150 生命游戏
leetcode·游戏·面试·数组
一只叫煤球的猫2 小时前
手撕@Transactional!别再问事务为什么失效了!Spring-tx源码全面解析!
后端·spring·面试
海的诗篇_5 小时前
前端开发面试题总结-原生小程序部分
前端·javascript·面试·小程序·vue·html
胡清波6 小时前
# vue 的 Diff 算法
前端·面试
Jackson_Mseven7 小时前
面试官:useEffect 为什么总背刺?我:闭包、ref 和依赖数组的三角恋
前端·react.js·面试
绝无仅有7 小时前
对接三方SDK开发过程中的问题排查与解决
后端·面试·架构
前端小巷子9 小时前
跨域问题解决方案:开发代理
前端·javascript·面试
天涯学馆9 小时前
JavaScript 跨域、事件循环、性能优化面试题解析教程
前端·javascript·面试
晴殇i10 小时前
CSS 迎来重大升级:Chrome 137 支持 if () 条件函数,样式逻辑从此更灵活
前端·css·面试
Java技术小馆10 小时前
POST为什么发送两次请求
java·面试·架构