当前位置: 首页 > article >正文

大家觉得做一个大模型检索增强生成(RAG)系统,最难搞定的是那部分工作?

根据我的实战经验,文档的处理、短文本的语义挖掘是最难搞定的。而向量模型部分,用哪一个,实际上影响不是很大,因为单靠向量检索根本没法很好的完成任务。

文档处理

我的观点是,明确能解决的问题,有的问题,目前确实不好解决,成本太高,需要看是否划得来。另外,依赖大模型本身的能力,用好提示词工程,可以减少很多数据处理上的代码和逻辑。

这里首先要明确的就是,我们需要处理的知识或者是做问答的数据大致是什么类型,根据回答这个问题所依赖的信息在文档中的分布情况,具体可以大致分为下面三种情况:

(L1)相关信息可以出现在不超过一个固定上下文长度(512)限制的 block 以内

(L2)相关信息出现在多个 block 里,出现的总数不超过 5-10 个,最好是能在大模型支持的有效长度内。

(L3)需要考虑多个片段,并综合结合上下文信息甚至全部内容才能得到结果

从我的经验来看,现在L1类问题,用户的输入比较明确的情况下,不需要太多的策略就可以满足。而L2类问题,在增加诸如query改写、父子索引,重排序等常见的策略后,也可以得到不错的结果。而L3类问题,很难完成,特别是全部知识点,直接超出了大模型的上限。

对于L3类问题,尝试过将文档分段,使用语义分割模型去切分,以及分段进行总结摘要的情况,只能勉强达到可用的程度。

因此,这种问题,我更倾向于使用一个能支持更长上下文的大模型(比如kimi这种支持20万字中文的)去尝试解决这种问题。但目前kimi还没有申请到API,百川或许也行,有机会可以试试。不过这种样子,放入大模型的内容就会多很多,导致费用爆炸,也是需要考虑的情况。

结构化数据处理

我在使用Langchain的API去对表格的数据进行操作,研究了一些源码,其核心还是利用提示词工程去实现,屏蔽了复杂的数据处理过程。遇到过的问题有,Langchain版本更新的问题,导致有一些依赖的方法没法使用,需要自己绕过去,耗时比较长。

另外,国产的大模型目前还不具备比较高的Agent能力,尝试了智普4.0的模型,完全接入不了Langchain的框架,因此,现在没法用Agent的提示词模板去处理数据,这个只能等大模型的更新。

向量模型

印象中听过一个观点,就是向量模型本身就和你训练的数据不在一个空间,因此还需要进行微调才能使用。这个观点,我不确定是否正确,但经过我自己验证,bge的效果确实要高于m3e,但是微调后bge的效果会下降,目前没有发现是什么问题导致。

尝试过网易的bce,还有bge-m3,从整体来说,确实在召回上有所差距,但是输入到大模型之后的回答,几乎没有明显差异。

但有一点提升非常明显,就是使用重排序的策略,现在比较常见的就是cohere以及bge的rerank模型。

短文本处理

用户输入的内容越短,越难处理。这个时候基本就转换成了搜索问题,去做意图分析,实体识别等措施,导致整个链路会特别长。另外一个方向就是利用agent的思想,让大模型去分析用户的输入,然后路由到指定的数据集,或者调用工具。这个方法的优势很明显,就省去了不少意图分析,识别的步骤,但缺点就是非常依赖大模型本身效果。

而且用户一旦进行多轮对话,效果就更差了,比如用户输入”长方形的面积怎么计算?“,第二次输入”那正方形呢?“

该怎么做召回,确实是一个很难的问题。想到的一个可能方向,就是在产品应用的时候明确是多轮还是单轮对话,然后尝试对用户的多次输入进行合并,再做检索。或者每一次都做检索,然后将不同结果进行拼接输入给大模型。


http://www.kler.cn/a/374964.html

相关文章:

  • Linux shell脚本用于常见图片png、jpg、jpeg、webp、tiff格式批量转PDF文件
  • 【Unity3D】ECS入门学习(七)缓存区组件 IBufferElementData
  • javaweb 04 springmvc
  • 【elementplus】中文模式
  • 泰山派GPIO子系统驱动---亮灯
  • 跟我学c++中级篇——C++中的缓存利用
  • Java:网络初识
  • Linux 多线程编程
  • 视频文件损坏无法播放怎么办?有什么办法可以修复视频吗?
  • PPT编辑限制密码忘记了怎么办?2个方法快速取消编辑限制
  • CSS3新增盒子属性(三)
  • 无需手动部署的正式版comfyUI是否就此收费?开源等同免费?
  • 【AI抠图整合包及教程】Meta SAM 2:视觉分割的革命性飞跃
  • 2024wdb|misc01
  • C++基础:C++错误
  • liunx CentOs7安装MQTT服务器(mosquitto)
  • 单片机串口和电脑串口连接
  • 使用Vue3DraggableResizable组件实现拖拽拉伸
  • Node.js与Python的交互:使用node-pyrunner模块
  • Python轴承故障诊断 (15)基于CNN-Transformer的一维故障信号识别模型
  • vue2 的12种 vs vue3 的9种组件通信整理
  • 【Wi-Fi】Wi-Fi 7(802.11be) Vs Wi-Fi 8 (802.11bn)
  • 「Mac畅玩鸿蒙与硬件19」鸿蒙UI组件篇9 - 自定义动画实现
  • 臻于智境 安全护航 亚信安全受邀出席新华三智算新品发布会
  • vue3二次封装UI组件
  • 深入理解 Dockerfile 和 docker-compose[实战篇]