受参数量和知识更新的限制,大模型在执行很多真实场景下的任务时,都需要连接外部数据源,检索增强生成(RAG)技术也逐渐获得业内的关注。
但并不是接入外部数据即可万事大吉,有很多用户查询非常难处理,从检索相关数据、准确解释用户意图,再到充分利用LLMs的推理能力都需要进行优化处理,才能得到一个相对满意的RAG系统来执行复杂任务,并不存在一种万能的解决方案。
在实践中,如果RAG效果不佳,通常是由于未能准确识别任务的核心问题,或者是因为该任务本身就需要混合多种技术才能解决,必须将复杂任务拆解开才能获得更好的表现。
最近,最新的RAG综述根据「所需的外部数据类型」和「任务的主要焦点」将用户查询分为四个级别:显式事实查询、隐式事实查询、可解释理由查询和隐含理由查询,并在文中对四个难度的问题进行定义,提供相关数据集,总结关键难点以及能有效解决该难点的技术。
论文链接:https://arxiv.org/abs/2409.14924
文中还讨论了将外部数据集成到LLMs中的三种主要形式:上下文、小模型和微调,分析各自的优势、局限性以及适合解决的问题类型。
例:2024年夏季奥运会将在何处举行?
Where will the 2024 Summer Olympics be held?
这类查询是最简单的形式,不需要额外的推理,主要考察模型定位和提取相关信息的能力,要求模型正确检索数据以提供准确的回复。
常见的问题形式包括:
1. 给定一系列学术论文:在论文X中使用了什么方法来解决Y问题?(What method was used in Paper X to solve problem Y?)
2. 给定一系列关于公司X的最新新闻和文章:公司X的人工智能战略是什么?(What’s the AI strategy of company X?)
1. 数据处理困难:外部数据通常是高度非结构化的,包含表格、图像、视频等多种模态,将数据进行分段(segmenting)或分块(chunking)处理时,仍然需要保持原始上下文和意义。
2. 数据检索困难:从大型非结构化数据集中检索相关数据段可能会耗费大量计算资源,并且容易出错,主要难点在于开发出高效准确的检索机制。
3. 评估困难:如果评估RAG系统的性能,特别是组件级别的性能,是一项复杂的任务,需要开发出能够准确评估数据检索和响应生成质量的指标。
由于RAG已经算是一个相对成熟的领域,目前已经有大量的文献和工具来应对上述难题,文中介绍了一些实用和有影响力的RAG增强功能,以及可能在RAG之外采用的替代技术解决方案。
例:堪培拉所在的国家现在哪个党派占多数?
What is the majority party now in the country where Canberra is located?
解析:堪培拉位于澳大利亚,再检索澳大利亚的多数党。
查询仍然围绕事实性问题,但答案并没有明确地出现在任何某一个文本段落中,而是需要通过常识推理、结合多个事实来得出结论,所需的信息可能分散在多个段落中。
1. 适应性检索量(Adaptive retrieval volumes):不同的问题可能需要检索不同数量的上下文,具体检索量可能取决于问题和数据集,固定数量的检索可能会导致信息噪声或信息不足。
2. 推理与检索之间的协调(Coordination between reasoning and retrieval):推理可以指导需要检索的内容,而从检索中获得的信息可以迭代地完善推理策略。
解决这些难点需要智能地整合和有选择性地利用外部数据,利用上大模型固有的推理能力,现有的解决思路包括迭代RAG、基于图/树的RAG以及带有SQL的RAG等。
例:
1. 给定胸痛管理指南,如何诊断和治疗有胸痛和特定症状描述的患者?
How should a patient with chest pain and specific symptom descriptions be diagnosed and treated?
2. 给定客户服务工作流程,在现实生活场景中,如何回应用户的问题?
How to respond to a user’s question in a real-life scenario?
这类查询不仅要求模型掌握事实内容,还需要能够理解并应用与数据上下文密切相关的特定领域的理由,并且理由通常在外部资源中明确提供,且在一般大型语言模型的预训练阶段通常不存在或很少遇到。
例如,在制药领域,LLM必须解释FDA指南文件,以评估特定药物申请是否符合监管要求;在客户支持场景中,LLM必须导航预定义工作流程的复杂性,以有效处理用户查询;在医疗领域,模型需要遵循诊断手册,其中提供了权威和标准化的诊断标准,如管理急性胸痛患者的指南,通过有效遵循外部理由,可以开发出一个专门的LLM专家系统来管理胸痛。
上述过程涉及到理解程序步骤和决策树,指导支持智能体与客户的互动,确保回复不仅准确,而且符合公司的服务标准和协议。
研究人员根据所涉及理由的性质,将这些查询分为两类:基于可解释理由的查询和基于隐含理由的查询。
第一类查询通常更显式,辅助数据通常包括用于解决问题的思维过程的清晰解释,数据可以以多种形式进行组织:
1. 纯文本,包括专业或官方文件,如手册或指南,以及特定领域的手册或操作指南,阐述了在复杂场景中促进决策的思维过程。如FDA针对制药厂的指南或医生的药物指南提供了专家(如FDA官员或医生)如何处理特定案例的见解。
2. 结构化指导,包括更明确的推理关系或决策路径,可以表示为文本条件摩尔机或文本条件米利机。在计算理论中,摩尔机是一种有限状态机,其输出值仅由其当前状态决定,控制状态转换的条件通常以文本形式表达,与传统程序操作本地代码不同的是,大模型需要解释条件和转换理由。
1. 提示优化成本,不同的查询需要量身定制的背景知识和决策标准,需要多样化的样例,如果是训练一个额外的模型为各种查询生成定制的提示,会显著增加计算开销。
2. 可解释性不足,提示对LLMs的影响是不透明的,限制了对LLMs内部参数的访问,使得确定各种提示对这些模型的影响变得复杂。这种缺乏透明度阻碍了我们一致理解和验证LLM对不同提示回复的可解释能力。
例:
1. 经济形势将如何影响公司未来的发展?(给定一系列财务报告,需要经济和财务理由)
2. 如何使用数字5、5、5和1达到24点?(给定一系列24点游戏示例和相应的答案)
3. 阿富汗是否允许父母将他的或她的公民身份传给在国外出生的孩子?(给定GLOBALCIT公民法数据集)
隐式理由查询是最难处理的类型,涉及特定领域的推理方法,且数量众多,无法穷尽,并且理由通常无法在上下文窗口内完全探索,隐含的领域专业知识包括但不限于:
1. 领域内数据,如历史问答记录或人工生成的数据,包含了解决当前查询所需的推理技能或方法论。例如,在Python编程谜题的背景下,历史问题的解决方案通常包括可以帮助解决当前问题的古典算法和解决问题的策略。
2. 预备知识,可能包含一个全面的公理系统,如构成法律判断基础的所有地方法律代码,或是包括简化数学证明等领域推理过程的经过验证的中间结论。在使用外部数据解决现实世界问题时,这种先验知识也可能来自于复杂的人类经验和经验总结的积累。
1. 逻辑检索:对于涉及隐藏理由的问题,外部数据的有用性不仅仅取决于实体级或语义相似性,而是取决于逻辑一致性或主题对齐。
标准检索方法通常难以捕捉查询的真正目标或识别基于呈现的问题的具有逻辑相似性的文本段落,需要开发出更复杂的检索算法,以解析和识别潜在的逻辑结构,而不仅仅依赖于表面的文本相似性。
2. 数据不足:从根本上说,外部数据可能没有明确包含与当前查询相关的指导或答,通常要求模型具有强大的数据解释和分析能力,能够有效地从碎片化或相关性不大的数据源中得出连贯的答案。
参考资料:
https://arxiv.org/abs/2409.14924
文章来自于“新智元”,作者“LRS”。
【开源免费】n8n是一个可以自定义工作流的AI项目,它提供了200个工作节点来帮助用户实现工作流的编排。
项目地址:https://github.com/n8n-io/n8n
在线使用:https://n8n.io/(付费)
【开源免费】DB-GPT是一个AI原生数据应用开发框架,它提供开发多模型管理(SMMF)、Text2SQL效果优化、RAG框架以及优化、Multi-Agents框架协作、AWEL(智能体工作流编排)等多种技术能力,让围绕数据库构建大模型应用更简单、更方便。
项目地址:https://github.com/eosphoros-ai/DB-GPT?tab=readme-ov-file
【开源免费】VectorVein是一个不需要任何编程基础,任何人都能用的AI工作流编辑工具。你可以将复杂的工作分解成多个步骤,并通过VectorVein固定并让AI依次完成。VectorVein是字节coze的平替产品。
项目地址:https://github.com/AndersonBY/vector-vein?tab=readme-ov-file
在线使用:https://vectorvein.ai/(付费)
【开源免费】AutoGPT是一个允许用户创建和运行智能体的(AI Agents)项目。用户创建的智能体能够自动执行各种任务,从而让AI有步骤的去解决实际问题。
项目地址:https://github.com/Significant-Gravitas/AutoGPT
【开源免费】MetaGPT是一个“软件开发公司”的智能体项目,只需要输入一句话的老板需求,MetaGPT即可输出用户故事 / 竞品分析 / 需求 / 数据结构 / APIs / 文件等软件开发的相关内容。MetaGPT内置了各种AI角色,包括产品经理 / 架构师 / 项目经理 / 工程师,MetaGPT提供了一个精心调配的软件公司研发全过程的SOP。
项目地址:https://github.com/geekan/MetaGPT/blob/main/docs/README_CN.md
【开源免费】graphrag是微软推出的RAG项目,与传统的通过 RAG 方法使用向量相似性作为搜索技术不同,GraphRAG是使用知识图谱在推理复杂信息时大幅提高问答性能。
项目地址:https://github.com/microsoft/graphrag
【开源免费】Dify是最早一批实现RAG,Agent,模型管理等一站式AI开发的工具平台,并且项目方一直持续维护。其中在任务编排方面相对领先对手,可以帮助研发实现像字节扣子那样的功能。
项目地址:https://github.com/langgenius/dify
【开源免费】RAGFlow是和Dify类似的开源项目,该项目在大文件解析方面做的更出色,拓展编排方面相对弱一些。
项目地址:https://github.com/infiniflow/ragflow/tree/main
【开源免费】phidata是一个可以实现将数据转化成向量存储,并通过AI实现RAG功能的项目
项目地址:https://github.com/phidatahq/phidata
【开源免费】TaskingAI 是一个提供RAG,Agent,大模型管理等AI项目开发的工具平台,比LangChain更强大的中间件AI平台工具。
项目地址:https://github.com/TaskingAI/TaskingAI
【开源免费】XTuner 是一个高效、灵活、全能的轻量化大模型微调工具库。它帮助开发者提供一个简单易用的平台,可以对大语言模型(LLM)和多模态图文模型(VLM)进行预训练和轻量级微调。XTuner 支持多种微调算法,如 QLoRA、LoRA 和全量参数微调。
项目地址:https://github.com/InternLM/xtuner