大模型智能体Agent
“智能体”(Agent)也称为智能代理,从哲学维度剖析,“智能体”意指具备行动潜能的实体,而“代理”一词,则侧重于对这种行动潜能的施行与展现.智能体的范畴颇为广泛,既涵盖人类个体,亦囊括物理世界以及虚拟空间中的其他各类实体。尤为关键的是,智能体概念的核心聚焦于个体的自主性,即赋予其运用意志、抉择判断以及付诸行动的能力,使之摆脱了单纯被动回应外部刺激的模式.
前言
随着大模型的发展,其在诸多领域展现出惊人的语义处理能力,能够快速生成文本、回答问题,甚至完成一些复杂的知识推理任务。研究人员开始思考如何将大模型与外部世界联系,感知外部环境以及调用外部工具的问题。实现通用类人智能,即智能体.
智能体
“智能体”(Agent)也称为智能代理,从哲学维度剖析,“智能体”意指具备行动潜能的实体,而“代理”一词,则侧重于对这种行动潜能的施行与展现.智能体的范畴颇为广泛,既涵盖人类个体,亦囊括物理世界以及虚拟空间中的其他各类实体。尤为关键的是,智能体概念的核心聚焦于个体的自主性,即赋予其运用意志、抉择判断以及付诸行动的能力,使之摆脱了单纯被动回应外部刺激的模式.
大语言模型智能体架构
大模型智能体主要包含以下几个核心模块:感知模块、规划模块、记忆模块、工具使用模块。
- 对于外界输入,智能体借助多模态能力将文字、音频、图像等多种形式的信息转换为机器能够理解的表现形式;
- 进而由规划模块对这些信息进行处理,结合记忆模块完成推理、规划等复杂任务;
- 智能体可能会利用工具使用模块执行相应的动作,对外部输入做出响应。
感知模块
感知模块负责从环境中获取文本、视觉、听觉等多种形式的信息, 并将其传递给其他模块进行处理。多模态感知能力对于大模型智能体的发展至关重要。通过整合这些多样化的输入,智能体能够深入理解其所处的环境,做出更明智的决策,在复杂多变的任务中发挥出色表现。
规划模块
规划模块是大模型智能体的核心,其主要职责是通过对环境与任务的深刻理解,生成并优化任务执行计划,制定合理的行动步骤以实现既定目标。
研究表明,大模型的推理与规划能力随着模型参数规模和训练数据量的增加呈现出显著的阶跃式提升。尤其是在模型参数量达到数百亿级别时,即使缺乏直接与任务相关的数据,大模型也能够通过在输入提示中加入包含任务中间推理步骤的示例,或通过引导模型逐步输出推理过程,逐步构建任务的解决方案。
- 无反馈规划: 指在规划阶段一次性生成完整的任务和子任务拆分
计划,并严格按照该计划逐步执行,而不根据外界变化进行实时调整。在这种模式下,大模型智能体会在任务开始前,根据当前环境和任务要求生成一个完整的执行方案,并在执行过程中始终遵循初始计划。 - 带反馈规划: 是一种更为复杂且灵活的规划方式,智能体在执行任务的过程中能够持续获取环境反馈或监控环境变化,并基于反馈信息动态调整行动计划。在这一模式下,智能体不仅会在任务开始前制定初步的执行计划,还能够在任务执行过程中实时监测环境变化和任务进展,依据实际情况不断优化和修正计划。
记忆模块
记忆模块是在大模型智能体中承担着管理与操作智能体记忆的核心功能,包括对长短期记忆的存储、读取、处理以及反思等任务。该模块不仅负责存储历史数据与经验,还能够高效提取和更新信息,从而实现长期记忆与短期记忆之间的有机交互。通过记忆模块的支持,智能体在处理连续性任务时能够保持上下文的连贯性,并基于以往经验做出更加准确的判断与决策。
大模型智能体所采用的记忆模型包括长期记忆和短期记忆两部分
-
短期记忆通常通过将记忆内容以提示语句的形式嵌入大模型输入的上下文中,借助大模型的上下文理解能力来实现。包括存储和使用两个部分:
- 存储:在任务执行过程中,关键的上下文信息与事件会被实时记录,形成短期记忆内容;
- 使用:在后续任务中,这些记忆内容会作为提示语句输入至大模型的上下文中,帮助模型基于提示进行推理与决策。
-
长期记忆通过构建记忆库来实现管理和检索,支持知识的持久化存储与高效调用。包括构建和检索两个部分
- 构建:在长期任务的执行过程中,智能体会将累积的经验、知识以及数据系统化地存储至记忆库中。记忆库的形式可以包括向量数据库、知识图谱等。
- 检索:智能体需要获取以往的经验或相关知识时,可以通过查询记忆库进行检索,并将检索到的记忆内容作为大模型的输入,与当前任务需求结合后进行处理。
智能体的记忆操作则包括写入、读取和反思等多个环节,这些操作旨在确保智能体能够高效地管理和利用其记忆资源,从而提升任务执行能力与智能化水平。
-
记忆写入指将新的信息或经验存储到记忆模块中。
- 在短期记忆中,写入的方式通常是将新的文本信息直接插入到上下文中,
- 在长期记忆中,则需要将信息存储到记忆库中,并对其进行索引与标记,以便后续检索使用。
-
记忆读取是指从记忆模块中提取与当前任务相关的信息,以支持任务的完成
- 在短期记忆中,读取操作通常是直接从上下文中提取提示信息并加以使用;
- 在长期记忆中,则通过检索记忆库来获得相关内容,通常通过匹配任务需求与记忆信息的方式完成。
工具使用模块
工具使用模块是大模型智能体连接外部环境的关键环节之一,通过调用外部工具和资源来执行特定任务,从而扩展了智能体的功能边界并提升其问题解决能力与效率。
工具使用模块的核心是如何让大语言模型获得工具使用能力,它的实现离不开有效的工具学习策略,这些策略主要分为以下三类:
-
示范学习:通过观察具体的工具使用案例进行学习;
这种学习方式类似于人类通过观看教学视频或观察他人操作来掌握新技能。通常,基于示范学习的工具掌握过程可以分为以下两个阶段:
- 示范数据收集:首先,需要构建一个包含大量工具使用示范数据的训练集。这些数据形式可以包括详细的操作步骤记录、工具使用视频等内容,以确保覆盖工具使用的关键场景和步骤。
- 模型训练:随后,将收集到的示范数据输入到大语言模型中,通过监督学习的方式训练模型,使其能够理解并模仿示范中的工具操作流程,从而具备执行类似任务的能力。
-
教程学习:通过工具手册或操作指南获取知识;
这一方法的核心理念来源于人类通过阅读手册或观察演示学习新技能的行为方式。同样,大模型可以借助其强大的上下文理解能力,通过提示语句从工具手册中获取相关知识并掌握工具的操作
ToolLLM 提出了通过构建 ToolBench 数据集,为 3000 余种工具(涵盖 16000多个 API)自动生成任务指令,并利用深度优先搜索算法自动化构建解决方案路径,从而对开源大模型进行微调,显著提升其基于教程学习的工具使用能力。 -
探索学习:通过尝试和反馈不断优化工具使用能力,通常涉及强化学习的应用。
智能体通过自主探索和反复试验,逐步学习工具的操作技巧及其最佳使用方式。智能体能够根据环境反馈和人类反馈动态调整操作策略,从而不断优化工具的使用方法。
大模型智能体训练
研究人员开始探索各种方法:怎样让模型学会熟练地使用工具?怎样让它能像人类一样进行推理和规划?又怎样给它装上“记忆”,记住更长的对话历史?这些正是大模型智能体走向更强大、更实用的关键方向。
工具学习
大模型工具学习(Tool Learning)是指通过让大语言模型学会使用各种工具的调用方式,进而利用合适的工具去实现特定的功能需求。
例如,用户输入“请告诉我上海今天的天气。”具备工具使用能力的大语言模型会给出如下响应:
以ToolLLaMA为例,研究者们设计了一个三步走的流程来教模型:
- 收集工具(API):研究人员从 RapidAPI 这样的平台上抓取了大量真实世界的工具和接口说明,比如输入参数、调用方法和示例返回值。经过筛选,最后留下了3451 个高质量工具,覆盖 49 大类和 500 多个细分领域。
- 生成指令:光有工具还不够,还要让模型知道用户可能会如何提问。于是研究人员用 ChatGPT 自动生成了各种与工具相关的任务指令,比如单一工具调用、多工具组合调用等,最后得到了近20 万条“问题—工具”配对数据。
- 标注解决路径:每条任务指令对应的“调用步骤”也要明确。研究人员用 ChatGPT 的函数调用功能来生成这些路径,并引入一种类似深度优先搜索的方法,让模型能够探索多种可能的调用方式。最终得到了12.6 万条高质量的指令-解决路径数据。
虽然看起来很完善,但现实中仍有不少问题:
- 数据错误:很多训练数据集都是用 GPT-4 自动生成的,但其中约有17% 的调用轨迹是错误的,比如调用了不存在的工具、参数写错了等。这些错误会误导模型,降低性能。
- 关键词元问题:研究发现,模型在工具调用时,一旦第一个关键词(比如工具名的开头)预测错误,后面就很容易一路错下去;但如果人工纠正第一个词,后续往往就能正确生成。
- 性能瓶颈:即使用大规模数据集训练,像ToolLLaMA-2-7B的效果也只达到 GPT-4 的80% 左右。
为了解决这些问题,研究人员提出了一种叫TL-Training的改进训练方法,它包含三大策略:
-
过滤错误数据: 自动识别并屏蔽错误的调用轨迹,避免它们对模型产生负面影响。
-
重点学习关键词: 对工具名称和关键参数等“关键词元”赋予更高的权重,让模型在预测时更重视这些词。
-
强化学习优化:引入奖励机制,不同类型的错误给出不同的扣分,例如:
- 调用了不存在的工具:-2
- 工具名称对了但参数写错:-0.5 ~ -1.5
- 正确调用:+1
然后用强化学习(PPO 算法)不断调整模型,使它越来越“靠谱”。
推理规划
对一个智能体来说,光能聊天还不够,它必须具备推理和规划能力。只有这样,AI 才能理解环境和任务,制定合理的行动步骤,并一步步执行,最终达成目标。
不过,研究发现:单纯把模型做大,并不能显著提升它的推理能力。比如在常识推理、逻辑推理、数学题解答上,大模型还是容易犯错。那该怎么办呢?
- 人类在解题时,通常会把解题过程写下来:先分析条件,再列式子,最后得出答案。相比之下,大模型以前的做法往往是,直接蹦出答案,没有任何中间推理步骤。结果往往准确率不高,还缺乏解释性。
- 在面对复杂问题时,人类通常会把大问题拆解成若干个小问题,然后逐一解决,最后再把答案拼接起来得到完整的结果。这种思维方式被称为任务分解(Task Decomposition)。
为了解决这个问题,Google Brain 的研究人员提出了思维链提示(CoT):
- 在给模型问题时,不只提供最终答案,还提供“中间的解题思路”;
- 引导模型先输出推理步骤,再得出结果。
这样,模型就像学生一样,边思考边写草稿,最后得到更靠谱的答案。研究人员借鉴人类的解题习惯,提出了两种特别有效的方法
-
零样本思维链(Zero-shot Chain-of-Thought,Zero-shot CoT)提示方式,只需要简单地告知模型“让我们一步一步思考(Let’s think step by step)”,模型就能够自动输出中间步骤。

-
由少至多提示(Least-to-Most Prompting):把原始问题拆分成子问题,并形成一个子问题列表;按照子问题的顺序逐一作答,每解决一个子问题,就把结果作为“中间答案”保存下来,帮助它继续解下一个问题,直到得出最终答案。

虽然思维链方法很有效,但最初的研究大多依赖人工写的推理过程。问题在于,不同人写的示例质量差异很大,准确率差别甚至能达到28%!
后来,研究人员发现:示例的多样性比单纯的相似度更重要;也就是说,要让模型学得好,给它看的推理示例不能千篇一律,而要覆盖不同风格和角度。
基于这一发现,上海交通大学和 AWS 的研究团队提出了Auto-CoT 方法:通过自动收集多样化的问题,并为它们生成推理链,来构建更有效的训练示例。Auto-CoT包括以下两个主要阶段:
- 问题聚类:将给定数据集中的问题划分为几个簇(Cluster)
- 范例采样:从每个簇中选择一个代表性问题,并基于简单的启发式方法使用Zero-shot CoT生成问题的推理链。

在链式思维的研究中,Auto-CoT算法提供了一种自动化生成推理示例的方法。它的核心思路是:通过聚类来保证示例的多样性,从而避免因为样本过于相似而带来的推理偏差。
具体来说,Auto-CoT 会先利用Sentence-BERT把问题集合转化为向量表示,然后使用K-means 聚类将问题分成若干簇。在每个簇中,问题会根据与簇中心的距离排序,越接近中心的问题越优先被选为候选。
在生成推理链时,Auto-CoT 会对每个候选问题构造提示,让模型按照“让我们一步一步思考”的方式作答,并得到解释和答案。如果生成的推理步骤不超过 5 步、问题本身长度不超过 60 个词元,那么该示例就会被保留下来,作为该簇的代表性范例。这样得到的推理链示例既简洁,又具有代表性。
在此基础上,研究者还提出了几种改进方法:
- Complex-CoT:优先选择那些推理过程最复杂的问题作为示例,帮助模型更好地处理复杂任务。
- Self-Polish:从问题本身入手,把原本复杂、模糊甚至质量较低的问题改写成更清晰、更高质量的形式,从而提升模型理解和生成推理链的能力。
总体而言,这些方法的共同目标都是提升 CoT 的有效性:既要保证示例的多样性,又要提升示例的质量。
PS: 为提升大模型的通用推理能力,还提出了一种名为 AgentTuning 的方法
长期记忆
大模型智能体实现长期记忆的常见方法之一是引入外部记忆库。长期记忆可存储为灵活的形式,例如文本文件或结构化数据库,并通过检索机制与反思机制进行访问与更新。外部记忆库可以采用向量数据库或可读写的神经网络记忆库等模式,模型能够动态地获取或更新所需知识。其中,检索增强生成(Retrieval-Augmented Generation,RAG)是一种典型方法.
它的思路是:当模型要回答问题时,不仅依赖已有的参数知识,还会到外部记忆库里“查资料”,再把结果与自身推理结合。这就像学生在考试时,不光凭记忆,还能去查阅笔记,从而提升答案的准确性和时效性。
不过,这种方法仍然面临挑战:
- 检索效率:数据库越大,找到有用信息就越困难。
- 记忆库质量:如果存储的信息过多、冗余或不准确,反而可能干扰模型的判断。
研究人员提出了一个有趣的框架 ——MemoryBank。它试图模拟人类的记忆方式,不仅仅是机械地存储信息,还会对信息进行总结、提炼和遗忘。

MemoryBank 包含三个核心模块:
-
记忆存储:保存对话记录、事件总结和用户个性分析,就像建立一个多层次的记忆档案。
层次化的记忆网络
人类不会对每一次对话都逐字逐句记下来,而是会形成不同层次的记忆,比如:- “今天早上和朋友聊了电影” →每日总结
- “最近我经常和朋友聊电影,说明我喜欢电影” →全局总结
MemoryBank 也采用了类似的做法。它会把每天的对话总结成事件,再逐渐凝练成更高层次的总结。这种方法让 AI 能够获得一种“鸟瞰式”的记忆视角。
此外,MemoryBank 还会尝试理解用户的个性和情绪。例如:- 输入提示:“根据以下对话,请总结用户的个性特征和情绪。”
或者:“以下是一段时间内用户表现出的特征,请给出一个简洁的个性总结。”
随着时间推移,AI 会逐渐形成对用户的全局理解,进而做出更贴心、更个性化的回应。
-
记忆检索:根据上下文快速找到相关的“回忆”。它使用一种稠密向量检索方法(类似Dense Passage Retrieval, DPR),把每条记忆片段编码成向量,再用 FAISS 进行高效搜索。
-
记忆更新:受到心理学中的艾宾浩斯遗忘曲线启发。该理论认为,人类在学习后的最初几个小时内遗忘最快,之后遗忘速度逐渐放缓。如果不断复习,就能延缓遗忘的速度。MemoryBank 将这种机制引入到 AI 中,让它在合适的时候忘掉不重要的记忆,保留和强化真正重要的信息。
遗忘机制:
艾宾浩斯遗忘曲线通过公式: R = e − t / S R=e^{-t/S} R=e−t/S
描述了记忆随时间的衰减:- R:记忆保留率
- t:学习后的时间
- S:记忆强度,取决于学习的深度和复习次数
在 MemoryBank 中,这一理论被简化成一个动态模型:
- 当某段记忆首次出现时,记忆强度S=1。
- 如果这段记忆再次被调用,AI 会“复习”它,强度S增加,遗忘概率降低。
- 如果长期没有被调用,它会逐渐被遗忘,以释放记忆空间。
这种机制让 AI 在长时间交互中不会被无关信息“拖累”,而是像人类一样学会选择性记忆。
换句话说,MemoryBank 让 AI 不仅能记住,还能遗忘,从而表现得更接近人类。
检索增强生成RAG
随着大语言模型的规模不断扩大,其在生成自然语言与解决复杂任务上的能力取得了显著进
步。然而,模型的性能仍然受限于训练期间所接触到的静态数据。这种局限性使其在处理实时信息、长尾知识以及动态更新的领域时显得力不从心。因此,如何通过外部知识检索来增强大语言模型的能力,成为了当前研究和应用的热点方向。检索增强生成技术通过在推理过程中引入外部知识库或搜索引擎,使语言模型能够动态获取所需的信息,而不再完全依赖于模型参数。这种方法不仅显著提升了模型在知识覆盖广度、准确性和时效性方面的表现.
检索增强生成因其强大的知识整合与生成能力,在智能问答、知识管理、内容生成、个性化
推荐、辅助决策以及教育培训等领域得到了广泛应用。以 RAG 技术为核心的 AI 搜索自 2023 年以来呈现出爆发式增长.
与传统搜索引擎相比,AI 搜索能够以更加智能化的方式精准理解用户需求,为用户提供个性化、上下文相关且高效的搜索体验。不再仅仅是一个“信息检索工具”,AI 搜索正在被视为一种“答案引擎”,能够直接生成具有深度分析和语义理解的精确答案,从而极大地提升了用户体验。
2023 年,全球多家知名科技企业相继推出了基于大语言模型的 AI 搜索产品.
- 微软推出的 Bing AI 在结合大语言模型和 RAG 技术的基础上,显著扩展了传统搜索的功能;
- Perplexity AI 借助其对用户查询的深度理解,打造了高效的智能搜索体验;
- 谷歌则推出 Bard,将实时检索与生成能力结合,为用户提供更加全面的答案;
国内的 Kimi、秘塔等产品也在这一领域崭露头角,成为 AI 搜索技术的重要实践者。2024 年
- OpenAI 于 推出了SearchGPT,进一步推动了 AI 搜索技术的发展,该产品通过深度整合大语言模型与动态知识检索功能,展现了强大信息处理效率。
- 国内的豆包、千问、智谱、百川等大模型系统也相继融入了 AI搜索功能。
RAG 系统框架
典型的检索增强生成过程如图所示,其核心在于将外部检索与生成模块有机整合,通过动态引入外部知识来提升生成结果的准确性与可靠性。具体而言,RAG 过程以用户输入的查询为起点
- 首先通过检索模块(Retriever)根据查询内容定位并查找相关数据源
- 然后筛选出与查询高度相关的信息作为检索结果。
- 这些检索结果随后与生成模块(Generator)协作,以增强生成过程的质量和效果。

-
检索模块负责从外部知识库或数据源中定位与用户查询相关的信息。检索器通常基于向量检
索技术或其他高效的检索算法,将输入的自然语言查询转换为向量表示,并与外部数据源中的内容进行匹配。还需对检索结果进行筛选和排序,以确保返回的内容与用户查询具有高度相关性。外部数据源可以是文档数据库、知识图谱、API 接口或实时搜索引擎等。
-
生成模块则是基于检索器提供的相关内容生成最终的答案。生成器通常由大语言模型构成,通过结合用户输入的查询和检索器返回的上下文信息,生成连贯且准确的自然语言回答。
检索增强生成也正逐步突破传统的文本模态限制,扩展至图像、音频、代码等多模态场景.
RAG 任务分级
在检索增强生成系统中,查询任务有不同的复杂性和所需数据交互的深度。如果能够将任务
根据复杂性进行分级
- 一方面可以帮助研究人员识别不同层级任务中的技术瓶颈,为模型优化提供方向
- 另一方面也可以为实际应用中的任务匹配提供指导,确保模型在不同场景中能够高效发挥其能力。

如图所示,根据任务认知处理层次划分 . 每个层级都代表了任务复杂度,以及模型在不同任务场景中需要具备的能力。
-
事实查询(Explicit Facts Query):显性事实查询是检索增强查询中最简单的一类。这类查询的答案通常直接存在于特定领域的
文档或文档片段中,以明文形式呈现,无需复杂的推理或逻辑分析即可解答。例如,“复旦大学有几个校区”这样的问题,模型仅需从外部数据中找到答案并返回。
对于这一层级的查询,模型的主要任务是准确地定位和提取相关信息,从而生成准确的响应。
-
隐性事实查询(Implicit Facts Query):涉及信息之间不直接显现的数据关系,通常需要一定程度的常识推理或基本逻辑推导。这类查询要求从多个文档片段中收集和处理信息,而这些信息可能分散在文档集合中的不同部分。由于单次检索可能无法满足信息需求,往往需要将原始查询分解为多个检索操作,并将结果聚合为一个完整的答案。
例如,“复旦大学计算机学院和法学院都在一个校区吗”该问题需要分别查询复旦大学计算机学院和法学院的地址,并在此基础上进行对比才能完整作答;
对这类型的问题通常需要执行计数、比较、趋势分析和选择性总结,甚至多跳推理。
-
可解释推理查询(InterpretableRationales Query):是需要借助外部数据提供推理依据的一类相对直接的查询任务。这类任务不仅要求对事实内容的理解,还需掌握并运用与数据上下文密切相关的领域特定推理过程。辅助数据通常包含清晰的推理说明,用以解决问题的思路可以以多种形式组织呈现:纯文本是最常见的形式,包括手册、指南等专业或官方文档,以及领域特定的操作手册或指导文件,这些文本详细阐述了在复杂场景下的决策推理过程;结构化指令则以更显式的方式呈现推理关系或决策路径
例如,给定《胸痛管理指南》,用户提问“一名 55 岁的男性患者出现胸痛,描述为胸部中央有紧绷、压迫感,并向左臂放射。胸痛始于 30 分钟前,同时伴有呼吸急促和恶心。患者病史包括高血压和高胆固醇。根据胸痛管理指南,确定可能的诊断并推荐适当的治疗方案。
这类可解释推理通常以工作流、决策树或伪代码等形式表示,为复杂问题的解决提供了系统且清晰的指导。
-
隐性推理查询(Hidden Rationales Query):是最具挑战性的一类查询,与可解释推理查询不同,它们缺乏明确的推理指导,涉及领域特定的推理方法,这些方法往往未被明确描述,且数量繁多难以穷尽。
例如,给定一系列财务报告, 问“当前国际经济形势将如何影响该公司的未来发展?”,需要结合经济和财务推理进行分析;
“气候变化对黑龙江粮食产量的长期影响是什么?”,根据结合的气候与农业研究报告,需结合领域推理分析。此类型要求具备复杂的分析能力,能够从分散的数据源中解码和利用潜在的智慧
模块化检索增强生成架构
随着检索增强生成技术的发展,系统功能日益复杂,面临的挑战也愈加突出,包括复杂数据源的整合、系统的可解释性与可控性需求、组件的选择与优化以及工作流的编排与调度。这些问题不仅使系统设计和维护变得更加困难,也对满足多样化的应用需求提出了更高的要求.

为了解决这些挑战,并满足日益增长的多样化需求,同济大学王昊奋教授团队借鉴了模块化设计的思想,提出了模块化检索增强生成架构(Modular RAG).框架内各模块,包括:索引、检索前优化、检索、检索后优化、生成以及编排。
索引模块
索引(Index)是 RAG 系统中至关重要的过程,其核心任务是将文档划分为可管理的片段
(Chunk),也成为“块”,为后续的检索和生成提供组织良好的内容基础。
- 较大的片段在构建时能够捕获更多上下文信息,对于长文档或复杂语义的内容尤其有效,因为更大的上下文范围可以保留更多语义关联性和文本完整性。然而,大片段也存在明显的缺点:它们可能引入更多无关的噪声,使检索系统匹配的内容不够精准,同时更大的片段在处理时需要消耗更多的计算资源,导致处理时间更长、计算成本更高
- 较小的片段在设计上更加精炼,噪声较少,因此在检索阶段更容易实现精准匹配。这种优势使得较小的片段对于用户查询的直接响应更具针对性。然而,过小的片段也有其局限性。由于片段的内容较少,可能无法包含足够的上下文信息来支持更复杂的语义理解
为了解决上述问题,目前的方法可以分为块优化和结构优化两大类。
块优化通过对片段本身的划分方式进行改进,以更灵活的方式调整块的大小、重叠比例和内容划分策略,从而提高检索和生成的效果。
-
向量块优化 :滑动窗口方法是一种常见且有效的块优化技术,广泛应用于各类 RAG 系统中,用来在片段划分时平衡语义完整性与检索效率。其核心思想是通过在相邻片段之间引入重叠区域,构建具有连续性和连贯性的滑动窗口,从而在块与块之间实现语义信息的平滑过渡。

滑动窗口方法虽然在增强语义过渡方面具有优势,但但也存在一定的局限性- 重叠区域会导致块之间的信息冗余,增加检索和生成阶段的计算成本,
- 该方法需要精确设置片段的大小和重叠比例,过大的片段可能引入无关信息导致噪声增加,而过小的片段则可能导致重叠区域不足,削弱语义过渡效果。
-
语义块切分方法:是一种根据内容的语义连贯性,将文档动态划分为完整思想或主题单元的方法,以提升信息检索和生成的准确性。

语义块切分也存在一些挑战,其中一个关键问题是设定相似度的阈值。不同文档的语言风格、主题变化程度和语义密度可能不同,因此固定的阈值可能不适用所有情况。这需要对文档或领域进行一定的分析,动态调整阈值以适配具体应用。 -
小到大(Small-to-Big):也是一种常用的块优化方法,旨在平衡检索的准确性与生成的
上下文完整性。该方法通过将用于检索的片段与用于生成的片段分开处理,使系统能够在不同阶段更高效地利用片段的特性。具体来说,较小的片段在检索阶段能够显著提高准确性,因为它们通常包含更加精炼和聚焦的语义信息,更容易与查询匹配。而较大的片段则在生成阶段提供更丰富的上下文,有助于生成更连贯、完整的回答。小到大方法的实现有多种策略。- 一种策略是从较小的总结片段中进行检索,并引用它们对应的父级较大片段。这种方式首先使用小片段进行精准匹配,避免了因上下文过多而引入的检索噪声,随后通过引用父级较大片段确保上下文的完整性,为生成阶段提供更充足的信息支持。
- 另一种策略是直接检索单独的句子,并结合其周围的文本构建上下文。这种方式的优点在于能够聚焦于具体的语义单元(如句子),并通过引入周围的相关信息来补充上下文,从而既保证了检索的精准性,又兼顾了语义连贯性。
-
元数据附加:可以为块添加元数据,如页码、文件名等,帮助缩小检索范围,提高精度
结构优化是为文档建立层次化结构,通过构建块状结构,使得 RAG 系统能够加速相关数据的检索和处理。
-
分层索引 通过节点的父子关系组织文档内容,每个节点存储数据摘要,帮助快速提取关键信息。构建结构化索引的方法主要包括:1)基于段落和句子分割的结构感知;2)基于PDF、HTML和Latex等内在结构的内容感知;3)基于语义识别和分割的语义感知。
-
知识图谱索引 利用知识图谱明确概念与实体间的关系,降低错配风险,并提升检索准确度。知识图谱还将信息检索转化为语言模型可理解的指令,提升检索的准确性,并能生成语境连贯的响应,从而提高RAG系统的整体效率。
预检索(Pre-retrieval)
基础RAG的一大问题是过于依赖用户的原始查询,导致检索效果不佳。具体问题包括:查询措辞不当和语言中的歧义性,这可能导致错误检索结果。
例如,它们可能无法区分LLM指的是大型语言模型还是法律硕士。
-
查询扩展:通过扩展查询,系统可以生成多个不同查询来丰富语义,确保生成的回答更加相关。
- 多查询(Multi-Query)通过提示工程(Prompt Engineering)利用大语言模型将单一查询扩展为多个查询,并支持并行执行。
- 子查询(Sub-Query)则通过对复杂问题进行分解和规划,将其转化为多个更易处理的子问题,从而提高问题求解的效率与准确性。
-
查询转换:查询转换(Query Transformation)又称查询改写(Query Rewrite),是指通过对用户的原始查询进行改写或重构,将其转换为更适合检索和生成的形式,从而提升系统的理解能力和检索效果。
- 查询改写作为搜索引擎中的核心技术,已经历经多年的深入研究与发展,成为提升检索性能的重要手段。
可以利用大语言模型通过提示工程对查询进行改写,将用户的原始输入转换为更清晰、结构化或优化的查询形式。此外,也可以借助专用的小模型来执行查询改写任务。这些小模型经过针对性训练,能够在特定领域内高效完成查询改写的工作。
- 查询构建(HyDE): 将传统方法中的“问题到答案”或“查询到答案”的语义匹配,转化为“答案到答案”的嵌入相似性判断。
HyDE 的方法是首先生成假设文档(即假定的答案),并根据生成的假设文档进行搜索。这种策略能够更有效地弥合问题与答案之间的语义差距,提升检索的精确性和相关性。
-
查询结构化(Query Construction)目标是将用户的查询重新构建为适应不同数据类型,将自然语言查询转换为适配特定数据源的查询语言,如 SQL(结构化查询语言)或 Cypher(图查询语言),以便系统能够高效地访问和检索相关信息。
检索(Retrieval)
检索模块需要能够高效地处理大量的文本数据,并且需要能够准确地识别和匹配查询和文档之间的语义相似性。检索模型还需要能够适应不同的数据类型和查询类型,以确保在各种场景下都能够提供准确的检索结果。目前的检索主要分为:稀疏检索、稠密检索和混合检索。
-
稀疏检索(Sparse Retrieval)是一种基于统计特征的方法,通过将查询和文档转换为稀疏向量来实现检索。优势在于高效处理大数据集,聚焦于非零元素。然而,在捕捉复杂语义时,稀疏向量可能不如密集向量有效。常见方法包括TF-IDF和BM25。
例如,对于“汽车”和“车辆”这样的同义词,稀疏检索器通常无法感知两者的语义相似
性,从而可能导致检索结果的相关性下降。 -
稠密检索(Dense Retrieval)是一种通过深度学习模型将查询和文档编码为稠密向(Dense Vectors)的检索方法。尽管计算和存储成本较高,但它能提供更丰富的语义表示。典型模型包括基于BERT的PLMs(如ColBERT)和经过多任务微调的模型(如BGE和GTE)。
稠密向量通常是高维向量(例如 768 维或更高),因此处理和存储大规模文档库的稠密向量需要更高的计算资源。此外,稠密检索依赖于深度学习模型的训练,模型的质量和训练数据的规模直接影响检索效果,这可能增加系统的开发复杂性和维护成本。
-
混合检索(Hybrid Retrieval)是一种结合稀疏检索和稠密检索优势的检索方法,用于提升检索系统的效率和效果。
例如,在第一阶段,使用稀疏检索从大规模文档库中快速筛选出一个候选集合(通常称
为“粗排”);在第二阶段,对候选文档进行稠密检索或语义重排序,以提升结果的相关性。这种分阶段策略既能降低稠密检索的计算成本,又能显著提高检索质量。
后检索(Post-retrieval)
将所有检索到的内容直接输入LLM并不是最佳做法。对这些块进行后处理有助于更好地利用上下文信息。主要挑战包括:1)中间遗忘效应。与人类一样,LLM倾向于记住长文本的开头和结尾,而忘记中间部分。2)噪声与反事实块。噪声或内容矛盾的文档会影响生成质量。3)上下文窗口限制。即使检索到大量相关内容,LLM的上下文长度限制使其无法处理所有内容。
-
重排序(Rerank)是一个关键组件,其主要目的是对检索到的文章片段(chunks)进行重新排序,以提升结果的相关性和多样性。重排序的作用是基于特定的排序算法或模型,将更重要的内容优先呈现,同时避免重要信息被冗余或低相关性的内容掩盖。
- 基于规则的重排序 根据规则和指标对文档进行排序,常用指标包括:相关性、多样性和最大边际相关性(MRR),旨在减少冗余并提高结果的多样性。MMR根据查询相关性和信息新颖性综合选择关键短语。
- 基于模型的重排序 使用语言模型对文档块按相关性重新排序。随着RAG系统的发展,重排序模型已成为其重要组成部分,相关技术也在不断更新,且重排序范围扩展到表格和图像等多模态数据。
-
压缩(Compression)方法核心目标是通过内容压缩减少噪声,同时保留信息完整性,以提高语言模型的推理效率。
常见的误区是认为检索越多的文档并拼接成更长的提示词有助于提升效果。然而,过多的上下文往往会带来噪声,影响LLM识别关键信息。
- 通过小型语言模型(如 GPT-2 Small 或 LLaMA-7B)对检索内容进行对齐和预训练,以检测并移除提示中的不重要信息
- 利用大语言模型对检索内容进行评估(LLM-Critique). 通过让 LLM 对检索得到的内容进行自我审查,可以过滤掉相关性较差的文档。
生成(Generation)
生成模块是整个 RAG 系统的的核心模块,负责利用大语言模型结合用户查询与检索到的上
下文信息生成答案。生成的内容需要与检索阶段获取的关键信息保持一致,确保知识的整合与输出的准确性。还需要根据用户的指令、场景上下文以及个人偏好对内容进行调整,使其更加符合具体的使用场景和个性化要求。
编排(Orchestration)
编排模块是 RAG 系统中的核心控制单元,它负责在关键节点进行决策并动态选择后续步骤。
这种模块化、动态化的特性是 Modular RAG 的标志性特点,展现出更高的智能化和灵活性。
本节将分别介绍编排模块的主要模块,包含路由(Routing)、调度(Scheduling)以及融合(Fusion)。
-
路由(Routing):以通过路由机制将查询分配到针对不同场景设计的特定管道中。
- 元数据路由(Metadata Routing)基于查询中提取的关键术语或实体,通过与预设关键词集合的匹配来优化路由流程。
- 语义路由(Semantic Routing)则依赖查询的语义信息,通过语言模型计算查询与预定义意图的匹配概率。
- 混合路由(Hybrid Routing)结合了元数据路由和语义路由的优点。通过引入权重因子,混合路由在元数据匹配和语义分析之间找到平衡点,从而实现更精确的路由选择。
-
调度(Scheduling)模块在 RAG 系统在复杂性和适应性方面的不断提升方面, 扮演越来越重要作用,它能够识别关键节点,负责管理和协调系统的各个流程。
包括何时需要进行外部数据检索、如何评估生成结果的充分性,以及在必要时决定是否启动进一步的检索。这一模块特别适用于递归、迭代和自适应检索的场景,确保系统能够根据当前任务的需求动态调整流程,从而在适当的时机停止生成或启动新的检索循环。
-
规则判定(Rule Judge)是一个重要的机制,用于评估生成答案的质量并决定进一步的操作。系统通过评分机制对生成的答案进行质量评估,并根据预设的阈值判断是否继续或终止生成过程。
-
直接进行判断(LLM Judge)独立判断后续操作的流程。
- 利用LLM的上下文学习能力,通过提示工程来判断是否继续。这种方法的优势在于无需对模型进行微调,然而其判断结果取决于LLM是否严格遵循所提供的指令。
- 通过微调LLM,使其生成特定的token来触发操作。这一技术来源于Toolformer,并已集到Self-RAG等框架中。此方法能够更直接地控制LLM的行为,提高其对特定对话上下文触发条件的响应能力。然而,这需要大量符合指令集的微调数据。
-
知识引导调度是一种更灵活的中间方法。它利用知识图谱引导检索和生成流程,具体做法是从知识图谱中提取与问题相关的信息并构建推理链。推理链由一系列逻辑相关的节点组成,每个节点提供解决问题的关键信息。基于这些节点的信息,可以分别执行检索和内容生成。这种方法不仅提高了问题解决的效率和准确性,还使生成的解释更加清晰。
-
-
融合(Fusion)模块 在RAG 系统从线性流程发展为复杂的多管道结构的过程中扮演了至关重要的角色。当系统拓宽检索范围或探索多条管道以提升生成内容的多样性时,融合模块负责高效整合各分支生成的信息。
-
LLM融合 多分支信息整合的一种直接方法是利用LLM强大的能力,分析并整合来自不同分支的信息
这种方法面临一些挑战,尤其是当答案长度超过LLM的上下文窗口限制时。为解决这一问题,通常会先对各个分支的答案进行总结,提取其中的关键信息,再将这些摘要输入LLM,以确保在长度限制内保留最重要的内容。
-
加权集成是一种基于多分支生成结果的加权选择方法,通过不同分支生成的词元(token)的加权值来综合选择最终输出。
-
倒数排名融合(Reciprocal Rank Fusion,RRF)是一种集成技术,专门用于将多个检索结果的排名整合为统一的列表。它通过一种定制的加权平均方法,增强了整体预测性能与排名精度
-
RAG 系统设计模式
基于 Modular RAG 的设计,各种模式通过模块化操作符之间的协作形成了模块的工作流,称
为 RAG 流(RAG flow)。RAG 流可以被分解为由子函数组成的图结构,通过控制逻辑,这些操作符可以按照预定的管道线执行,同时在必要时支持条件判断、分支或循环操作。
线性模式
线性模式是最简单且最常用的工作流模式,其流程可以分为几个核心模块,包括预检索(Pre-Retrieval)、检索、后检索(Post-Retrieval)以及生成模块
当预检索和检索后处理模块缺失时,线性模式会简化为朴素检索增强生成(Naive RAG)范式,仅包含基本的检索和生成过程。常见的线性 RAG 流通过在预检索阶段引入查询变换模块(比如重写或隐式文档扩展(HyDE)操作符),以及在检索后阶段使用排序模块来优化检索结果,从而提升最终生成的质量。
条件模式
条件模式是一种灵活的 RAG 流模式,其核心特点是在不同条件下选择不同的 RAG 流水线,
从而针对特定场景进行优化。具体来说,条件模式通过一个路由模块(Routing Module)实现模块的动态选择,该模块根据输入问题的性质决定接下来的流程
面对不同类型的问题,如涉及严肃议题、政治话题或娱乐内容的问题,系统会根据预设条件切换到不同的处理流程。这样的动态路由机制可以显著提升系统对多样化任务的适应能力。
分支模式
分支模式通过并行运行多个分支的方式增加结果的多样性和鲁棒性。具体来说,分支模式在
某个模块中生成多个并行分支,每个分支可以独立执行相同或不同的 RAG 流程。这些流程由多个处理模块组成,生成各自的分支输出结果。随后,所有分支的结果通过聚合函数合并为中间输出结果。重要的是,聚合后的结果并不一定标志着流程的结束,还可以继续传递到后续模块(如验证模块)进行进一步处理。因此,分支模式的整体流程可以表示为从分支生成、独立处理、结果聚合到后续处理的完整流水线。分支模式可以根据不同任务需求设计为多种结构类型,通常分为两类:
- 预检索分支(Pre-Retrieval Branching)是一种通过生成多个子查询并并行检索的模式,用于提高检索的全面性和生成结果的多样性。

- 后检索分支(Post-Retrieval Branching)模式则从单一查询开始,通过检索模块获取多个文档块。每个文档块被独立送入生成模块进行处理,生成对应的结果集合。随后,这些生成的结果通过合并模块进行整合,形成最终结果。其特点在于单一查询驱动的检索过程,而并行生成则聚焦于对不同文档块的独立处理

循环模式
循环模式的核心是检索与生成步骤之间的相互依赖性。循环模式通过引入调度模块进行控制,
确保系统可以根据需要在特定模块之间重复执行某些操作。这一模式可以被抽象为一个有向图,其中节点代表系统的各个模块,边表示模块之间的控制流或数据流。当一个模块能够返回到之前的模块时,该系统就形成了一个循环结构。
循环模式的关键在于判断模块(Judge Module),用于决定流程是否需要返回到之前的模块或继续向下执行。
-
迭代型循环模式通过多次循环执行检索和生成操作,在每次迭代中逐步优化结果.这种方法能够动态调整检索与生成的过程,逐步获取必要的信息,从而更好地回答复杂问题。

在每一步迭代中,系统根据当前查询和之前的输出结果,检索相关的文档片段,然后利用这些文档生成新的输出。迭代过程通常设置一个最大迭代次数的限制,以避免无限循环。同时,通过判断模块,系统会根据当前生成的结果、历史输出、查询以及检索到的文档来决定是否继续迭代。
-
递归型循环检索模式是一种具有明显依赖性和层次性的检索方式。这种方式特别适合需要分步推理或分解复杂问题的任务场景,能够逐步定位相关信息并生成高质量的回答。

递归型检索的显著特点在于每一步都依赖于前一步的输出,并通过不断加深检索过程,逐步挖掘更深层次的信息。通常,递归型检索遵循类似树状的结构,每次检索都会基于一个重新改写的查询展开,从而精确地针对当前需要获取的知识进行检索。递归型检索还包含明确的退出机制,用以确保在满足终止条件时流程终止,避免无限递归。这种机制能够有效控制流程的深度和复杂性。
-
自适应型(主动型)模式是一种超越传统被动检索模式的新兴模式,得益于大语言模型
的强大能力。这种模式特别适用于复杂任务或动态信息需求的场景,因为它能够智能判断流程的最佳执行路径,从而提高检索效率和生成质量。
这种模式的核心思想类似于大语言模型智能体,通过动态调整检索流程,主动决定何时进行检索以及何时终止流程并生成最终结果。自适应型检索通常根据判断标准进一步细分为两种方法:基于提示的方法和基于指令微调的方法。前者通过设计动态提示对模型进行引导,而后者则利用指令微调的方法实现更精准的检索控制。
RAG与Agent关系总结
RAG(Retrieval-Augmented Generation)是一种使大语言模型在生成回答时能够读取外部信息的技术,该技术可以简单理解为在生成内容前,先从外部数据库中检索出相关信息作为参考。
打一个比方,你读完全日制高中的课程,咱可以说你已经完成了预训练(Pre-training),已经具备了一个通用大模型的基础能力。然后你填报了计算机科学专业,完成四年的专业课学习,咱可以说你已经完成了一轮微调(Fine-Tuning),然后你就是一个合格的可以解决各类基础计算机相关下游任务(Downstreamtasks)的大模型了。
但毕竟本科四年学习周期有点长,咱想一个速成点的办法就是以你高中掌握的知识,再加上身边放一堆计算机专业的书籍,那这样你有了开卷考的buff加持,也勉强可以成为一个低配版解答基础计算机相关的问题的大模型了。而你收到问题,基于你高中的知识,在专业书籍中找到答案,组织后反馈给提问者的过程就是检索增强生成(RAG)。
由于训练和微调的成本依然高企+超长上下文仍处于理论阶段,所以目前RAG这样的外挂技术在新闻、科技、医疗等领域以及一定规模团队的企业内部智库这些知识更新频繁的场景有着肉眼可见的应用前景。
站在巨人的肩膀上
《大规模语言模型:从理论到实践》
《大模型智能体训练流程》
《智能体长期记忆机制的实现路径》
《RAG技术论文】《模块化RAG(Modular RAG): 将RAG系统转变为乐高玩具一样的可重构框架》》
更多推荐



所有评论(0)