type
status
date
slug
summary
tags
category
icon
password
最近被某个PM折磨惨了,变更需求不同步,自己偷偷改文档装无辜。真想一脚踹飞。
“AI Agent”其实是一个比较经常被提到,但是好像不那么实用还没完全landing的技术,在很多地方,其实搭建起来的workflow会和agent产生诸多混淆,甚至狸猫换太子。最近由于业务需求,需要尝试一些agent的落地和使用,因此就简单对agent的技术做一些梳理,本文参考了博文AI Agents from First Principles以及Yao Shunyu的文章“React: Synergizing reasoning and acting in language models.”。一边梳理一遍思考,希望能有一些小小的帮助。
0.引言
回答题目中的问题,其实workflow和agent在我的理解下都并不是非常新的概念,现在所使用的agent技术其实和强化学习RL中的agent有非常相似的地方,而真正让agent的能力开始实现飞跃的其实是大语言模型强大的生成能力,这样的生成能力能够非常显著地提升agent的自主执行能力,并且在常规的agent任务中,多模态的内容都会被embedding成LLM容易理解感知的方式,而这两个要素正是RL的agent中关键的state和action要素。
至于workflow,实际上是一个很常规的概念了。“第一步做A,如果成功了就做B,如果失败了就发通知。”平时常用到的bash脚本,其本质上也是一种workflow。
1.从LLM讲起
既然前文说道是LLM强大的生成能力让Agent这一概念起飞的,那么本节就希望从LLM本身讲起。我们在之前的文章AI基础(一)—Transformer中提到了,LLM主流的Decoder-only架构就注定了我们给定一个文本提示,LLM会生成一个文本响应。这种功能易于理解,并且可以推广应用以解决很多问题。那么如何利用这种文本到文本的结构,将推理或与外部API交互等新功能集成到LLM中,就是AI Agent需要面临的第一个问题。
其实做Agent的动机也很纯粹,我们都知道LLM的问答能力是已经得到过大家验证的。但是早期的LLM在问答时出现了非常反直觉的事情,他可以和你谈天说地,却连最简单的加减法都能做错,当然后来大家画了很多精力用了很多方法去优化这些问题,现在主流的LLM做计算题已经不在话下了,但在当时就有人想,LLM做不了计算,计算器还不行吗?那如果LLM能想到这里需要调用计算器,问题不就解决了?事实上,直到LLM越发强大的今天,让LLM调用工具链实现特定任务仍然是比较有前景和较为优雅的解决方案。
现在问题来了:如何让LLM调用工具?
1.1针对工具调用的微调
![工具调用示例图源:[2][3]](https://www.notion.so/image/attachment%3A05c0aedd-154e-4dc1-bdce-fd30362bf830%3Aimage.png?table=block&id=2bfebb91-c665-80f9-9d37-d28633d40142&t=2bfebb91-c665-80f9-9d37-d28633d40142)
早期的方式其实是想通过后训练来让LLM学会调用工具的方式,这其实很好理解,例如对齐常用到的SFT,我们只需要构造一些干净漂亮的后训练数据集,教会模型在什么情况下、在哪个位置插入合适的tag,然后将对某个工具的函数调用直接插入到 LLM 的生成中。那么在正式任务中,调用工具也就是输出token,和普通生成任务本质上是等价的(见下图)。

在LLM产生工具调用时,我们只需要停止当前LLM的token生成,解析工具调用指令,用对应参数调用工具,将工具的响应添加到LLM的token flow中,然后继续生成就可以了。
1.2基于prompt的工具调用
上面的方法其实还不错,简单有效,但实际上这种数据集比常规生成任务或问答任务的构建会更难。对于人工标注的要求比上述任务的要求更高。因此后来的研究转而强调基于上下文学习的工具使用方法。
Why would we finetune a language model when we can simply explain the tools that are available in the model’s prompt?
![图源[4][5]](https://www.notion.so/image/attachment%3Ab1161086-5640-478c-a77f-ee979f2018f6%3Aimage.png?table=block&id=2bfebb91-c665-809f-99f1-f608fba49e88&t=2bfebb91-c665-809f-99f1-f608fba49e88)
MCP协议
Anthropic提出了一个名为Model context protocol (MCP)的框架,可以说MCP基本扩展了 LLM 与任意工具交互的理念。简言之,MCP 标准化了外部系统向 LLM 提示符提供上下文信息所使用的格式。为了解决复杂问题,LLM 需要随着时间的推移与越来越多的外部工具集成。为了简化这一过程,MCP 为这些集成提供了一种标准格式,并允许开发人员创建预构建的集成(称为 MCP 服务器)这意味着你可以做一个 MCP Server,,任何 LLM 都可以使用这些服务器连接到各种自定义数据源。比如:一个 MySQL MCP Server、一个 Jira MCP Server、一个 文件系统 MCP Server,只要它符合 MCP 协议,任何 LLM(ChatGPT、Anthropic、开源模型)都能无缝接入它。

1.3推理模型
CoT
思维链的提出是为了解决LLM最常见的批评之一,即无法进行复杂的推理。关于思维链(CoT)提示的研究[6, 7]表明,基本的逻辑学习模型比最初认为的更擅长推理。思维链提示背后的理念很简单。简单来说,CoT不是直接提示LLM输出结果,而是要求LLM在最终输出之前生成一个理由或解释;

然而,这种推理方法也略显简单。整个推理过程都围绕LLM生成的CoT展开,并没有根据所解决问题的复杂性进行动态调整。为了解决这个问题,以DS-R1为代表的模型创建了专门用于推理的语言学习模型(即推理模型)。这些模型解决问题的方式与标准语言学习模型不同——它们在回答问题之前会花费不同时间进行“思考” 。具体可以参考文章:Deepseek-R1论文精读

推理模型的思维只是标准的思维链,但推理模型的思维链比标准 LLM 的思维链长得多(即,可能有数千个标记),往往表现出复杂的推理行为(例如,回溯和自我改进),并且可以根据所解决问题的难度动态调整——更难的问题需要更长的思维链。

推理模型得以实现的关键进展在于基于可验证奖励的大规模强化学习后训练(RLVR) ;参见上文。如果我们拥有一个包含可验证问题(例如数学或编程问题)真实答案的数据集,我们可以简单地检查LLM生成的答案是否正确,并利用该信号通过强化学习来训练模型。在这个训练过程中,推理模型通过强化学习驱动的自进化,自然而然地学习如何生成长链思维来解决可验证的推理问题。
“We explore the potential of LLMs to develop reasoning capabilities without any supervised data, focusing on their self-evolution through a pure reinforcement learning process.” - from [8]
推理模型+Agent
鉴于推理技术的最新进展,一个能力足够强大的LLM能够规划并有效地推理其指令,从而将问题分解,逐个解决问题的组成部分,并最终自行得出最终解决方案。赋予LLM更大的自主性,并依靠其自身能力(而非人为干预)来解决复杂问题,是智能体系统的核心理念。为了更清晰地阐述智能体的概念,接下来我们将讨论一个可用于设计此类系统的框架。
2.ReAct框架
“It is becoming more evident that with the help of LLMs, language as a fundamental cognitive mechanism will play a critical role in interaction and decision making.” - from [1]
ReAct [1]——全称为RE- asoning 和ACTion——是最早提出的用于自主分解和解决复杂问题的通用框架之一,它利用LLM智能体来实现这一目标。我们可以将 ReAct 理解为一个以 LLM 为核心的顺序式多步骤问题解决过程。在每个时间步
t, LLM 会整合所有可用的反馈信息,并考虑其试图解决的问题的当前状态,从而有效地进行推理并选择未来最佳的行动方案。几乎任何 LLM 系统都可以进行顺序建模,ReAct 是一个通用且强大的框架。2.1Agent框架
在某个时间步
t,智能体会收到来自环境的观测结果o_t。基于此观测结果,智能体会决定采取某种行动a_t,该行动可能是中间行动(例如,搜索网络以查找解决问题所需的数据),也可能是最终行动(即“解决”目标问题的最终行动)。将智能体用于生成此行动的函数定义为策略π。该策略以上下文(智能体先前行动和观测结果的串联列表)作为输入,并确定性地或随机地预测下一个行动a_t作为输出。如下图所示,这种观测和行动的循环会一直持续,直到智能体输出最终行动为止。
ReAct对上述循环进行了一项修改。策略可输出的潜在行动空间
A通常包括智能体可以采取的中间行动和最终行动,例如在网络上搜索数据或输出问题的最终解决方案。然而,ReAct 将行动空间扩展到包含语言,允许智能体生成文本输出作为行动,而不是采取传统的行动。换句话说,智能体可以选择“思考” ;
形式上,我们可以将思想定义为一种特殊的行动,如上所示。正如框架名称所示,ReAct 的主要动机在于寻求推理与行动之间的平衡。与人类类似,智能体应该能够思考并规划其在环境中采取的行动——推理与行动之间存在着共生关系。
“Reasoning traces help the model induce, track, and update action plans, while actions allow it to interface with and gather additional information from external sources such as knowledge bases or environments.” - from [1]
2.2Agent如何思考?

传统智能体的动作空间是离散的,而且在大多数情况下相对较小。例如,一个专门从事问答的智能体可能有以下几种动作选项(如上图所示):
- 使用谷歌搜索查找相关网页。
- 从特定网页中提取相关信息。
- 返回最终答案。
该智能体在寻求解决方案的过程中,可采取的行动数量有限。相比之下,语言空间几乎是无限的。因此,ReAct 框架要求使用强大的语言模型作为其策略。为了产生有助于提升性能的有效思维,Agent系统的语言模型后端必须具备高级推理和规划能力!
“Learning in this augmented action space is difficult and requires strong language priors… we mainly focus on the setup where a frozen large language model… is prompted with few-shot in-context examples to generate both domain-specific actions and free-form language thoughts for task solving.” - from [1]
思维模式
Agent可以产生的常见有用思维模式包括:分解任务、创建详细的行动计划、跟踪最终解决方案的进展,或者简单地输出信息(来自LLM的隐式知识库),这些信息可能与解决问题有关。

智能体运用其思维能力,明确描述问题应该如何解决,然后执行并监控该计划的执行情况。在上述两个例子中,智能体都明确地写出了解决问题时需要执行的后续步骤;例如,“接下来,我需要……”或“我需要搜索……” 。

在大多数情况下,智能体产生的思维过程(通常被称为问题或任务解决轨迹)与人类尝试解决问题的过程类似。事实上,[1] 中 ReAct 的实验通过提供人类解决类似问题时使用的任务解决轨迹(即行动、想法和观察)的上下文示例来指导智能体解决问题的方法。以这种方式引导的智能体很可能会采用类似人类的推理过程。
“We let the language model decide the asynchronous occurrence of thoughts and actions for itself.” - from [1]
何时应该思考?
ReAct框架可以采用不同的设置。对于推理密集型任务,思考通常与行动交错进行——我们可以硬编码智能体,使其在每次行动前产生一个思考。然而,也可以赋予智能体自行判断是否需要思考的能力。对于需要大量行动的任务(例如,决策任务),智能体可以选择在解决问题的过程中更谨慎地使用思考。
具体用例

[1] 中考虑了 ReAct 框架的两个应用案例:
以上列举了 ReAct 在每个用例中的应用示例。ReAct 框架通过 LLM(特别是PaLM-540B)实现,该 LLM 会提供多个上下文相关的示例来引导问题解决过程。LLM 的提示提供了精心设计的思考-行动-观察轨迹,用户遵循这些轨迹最终会找到问题的解决方案。
“By interacting with a Wikipedia API, ReAct is able to retrieve information to support reasoning, while also use reasoning to target what to retrieve next, demonstrating a synergy of reasoning and acting.” - from [1]
知识密集型推理
在这个领域,LLM智能体仅接收一个问题作为输入。为了回答问题或评估断言的正确性,LLM必须依赖其内部知识库或从外部环境检索必要信息。具体而言,[1] 中的作者通过动作空间向LLM智能体提供了基本的信息检索功能——这反映了普通人在维基百科上查找信息的方式。

为了教会LLM如何在这种环境下正确思考和行动,研究人员为每个应用数据集手动设计了ReAct风格的问题解决轨迹,其中包括HotpotQA的六条轨迹和FEVER的三条轨迹。这些轨迹随后作为上下文示例提供给LLM代理,从而演示如何解决问题。下面提供了一个完整的提示示例,其中包含三个上下文示例,用于HotpotQA上的ReAct代理。
在这个例子中,ReAct智能体在执行每个具体动作之前都会被明确提示输出一个想法。与传统的LLM不同,ReAct智能体并非每次提示都只产生一个输出。相反,它会按如下顺序生成输出:
- 选择要执行的操作(可以是具体操作,也可以是想法)。
- 根据此操作从环境中获取反馈(例如,从搜索查询中检索到的信息)。
- 在此新背景下继续执行下一步操作。
最终,达到终止动作,触发问题解决过程结束;详见下文。这种有状态的、顺序的问题解决方法是智能体的特征,有助于将其与标准逻辑逻辑模型区分开来。
决策制定
ReAct在决策任务上的设置与知识密集型推理任务非常相似。对于这两种决策任务,都需要人工标注若干推理轨迹,作为 ReAct 智能体的上下文示例。然而,与知识密集型推理任务不同的是,ReAct 在决策任务中使用的思维模式较为稀疏——模型需要自行判断何时以及如何进行思考。此外,ReAct 智能体还拥有更多可用于 WebShop 数据集的工具和操作,例如搜索、筛选、选择产品、选择产品属性、购买产品等等。该应用程序可以很好地测试 ReAct 在与更复杂的环境交互时的性能。
Bibliography
[1] Yao, Shunyu, et al. "React: Synergizing reasoning and acting in language models." International Conference on Learning Representations (ICLR). 2023.
[2] Schick, Timo, et al. "Toolformer: Language models can teach themselves to use tools." Advances in Neural Information Processing Systems 36 (2023): 68539-68551.
[3] Thoppilan, Romal, et al. "Lamda: Language models for dialog applications." arXiv preprint arXiv:2201.08239 (2022).
[4] Shen, Yongliang, et al. "Hugginggpt: Solving ai tasks with chatgpt and its friends in hugging face." Advances in Neural Information Processing Systems 36 (2023): 38154-38180.
[5] Patil, Shishir G., et al. "Gorilla: Large language model connected with massive apis." Advances in Neural Information Processing Systems 37 (2024): 126544-126565.
[6] Wei, Jason, et al. "Chain-of-thought prompting elicits reasoning in large language models." Advances in neural information processing systems 35 (2022): 24824-24837.
[7] Kojima, Takeshi, et al. "Large language models are zero-shot reasoners." Advances in neural information processing systems 35 (2022): 22199-22213.
[8] Guo, Daya, et al. "Deepseek-r1: Incentivizing reasoning capability in llms via reinforcement learning." arXiv preprint arXiv:2501.12948 (2025).
[9] Lambert, Nathan, et al. "T\" ulu 3: Pushing frontiers in open language model post-training." arXiv preprint arXiv:2411.15124 (2024).