2861 字
约 9 分钟
4
Agent 核心原理:为什么它需要连续多次调用 LLM?

Agent 核心原理:为什么它需要连续多次调用 LLM?

最近在学习 AI Agent 时,我遇到了一个问题:

Agent 可以连续多次调用大语言模型,那么它与普通的一次性 LLM 对话究竟有什么区别?

要理解这个问题,我们需要先弄清楚 Agent 的核心运行模式——ReAct。

一、Agent 是什么?

普通的大语言模型更像一个知识丰富的回答者:你向它提供一个问题,它根据已有知识和上下文生成答案。

Agent 则更像一个能够完成任务的执行者。它不仅可以生成文字,还能根据任务调用搜索引擎、数据库、文件系统、代码执行器等外部工具。

一个 Agent 通常包含以下几个部分:

  • 大语言模型:负责理解任务和决定下一步
  • 工具集合:负责搜索、计算、读取文件或执行操作
  • 记忆或上下文:保存已经发生的事情
  • 控制循环:决定是否继续执行
  • 终止条件:判断任务是否已经完成

因此,可以把 Agent 简单理解为:

Agent = LLM + 工具 + 上下文 + 控制循环

LLM 是 Agent 的“大脑”,工具相当于它的“手和眼睛”,而控制循环负责让整个系统持续运转。

二、什么是 ReAct 模式?

ReAct 来自两个单词:

  • Reasoning:推理
  • Acting:行动

在实际运行过程中,行动之后还会产生一个重要环节:Observation,也就是观察。

因此,一个完整的 Agent 循环通常是:

Reasoning → Acting → Observing → Reasoning

翻译成更容易理解的话就是:

分析当前情况 → 执行一个动作 → 查看执行结果 → 决定下一步

这个过程会反复进行,直到任务完成或者达到系统设置的最大执行次数。

三、一次性调用 LLM 是怎样的?

一次性调用的流程比较简单:

用户问题 → LLM → 最终回答

例如,用户说:

帮我分析这个程序为什么连接不上数据库。

如果只调用一次 LLM,模型只能根据用户提供的内容直接回答:

可能是数据库地址错误、端口错误、密码错误或者网络连接异常。

这个答案可能有帮助,但本质上仍然是一种推测。因为模型没有真正查看程序配置,也没有读取错误日志。

它只能使用调用时获得的信息,无法主动获得新的证据。

四、Agent 是怎样解决同一个问题的?

如果使用 Agent,执行过程可能如下:

第 1 次调用 LLM:
需要先读取程序的错误日志。

行动:
调用日志读取工具。

观察:
日志显示“数据库连接超时”。

第 2 次调用 LLM:
可能是数据库地址或网络配置存在问题,需要检查配置文件。

行动:
调用文件读取工具。

观察:
配置文件中的数据库地址仍然是旧服务器地址。

第 3 次调用 LLM:
已经找到问题,可以生成修改方案。

最终回答:
数据库连接失败是因为配置文件使用了旧服务器地址。
请将数据库地址修改为新的服务器地址,然后重新启动服务。

这就是 Agent 和一次性调用最关键的区别。

一次性调用只能根据已有信息生成答案;Agent 可以通过行动获得新信息,再根据新信息调整判断。

五、多次调用 LLM 就等于 Agent 吗?

不一定。

假设用户和聊天机器人连续进行了三轮普通对话:

用户提问 → LLM 回答
用户追问 → LLM 回答
用户再次追问 → LLM 回答

虽然这里也调用了多次 LLM,但每一步主要由用户推动,因此它仍然只是多轮对话。

Agent 的特点是:系统围绕一个目标,自主决定下一步应该做什么。

例如:

用户:帮我找出程序报错的原因并给出修复方案。

接下来,Agent 可以自主完成这些步骤:

  1. 读取错误日志
  2. 根据日志定位相关代码
  3. 检查配置文件
  4. 执行测试
  5. 根据测试结果继续修改
  6. 确认问题解决后输出报告

用户只提供最终目标,Agent 负责规划和执行中间步骤。

因此:

多次调用 LLM 只是 Agent 的实现方式之一,自主决策、工具调用和结果反馈才是 Agent 的关键特征。

六、LLM 每次调用都记得之前发生的事情吗?

通常情况下,大多数 LLM API 本身是无状态的。

也就是说,每次调用都像一次新的开始。模型不会自动记住上一次调用发生了什么。

为了让模型能够连续完成任务,Agent 程序需要保存历史记录,并在下一次调用时把相关信息重新发送给模型。

例如:

const messages = [
  {
    role: "user",
    content: "帮我检查程序为什么报错"
  },
  {
    role: "assistant",
    content: "我需要先读取错误日志"
  },
  {
    role: "tool",
    content: "数据库连接超时"
  }
];

const result = await callLLM(messages);

在第二次调用时,程序把用户目标、模型之前的决定以及工具返回的结果一起传给 LLM。

因此,所谓的“Agent 在连续思考”,更准确地说是:

Agent 控制程序不断保存执行记录,并把必要的历史信息交给 LLM,让模型基于最新状态继续决策。

七、Agent 的控制循环如何实现?

下面是一段简化后的伪代码:

const history = [];
let finished = false;
let step = 0;
const maxSteps = 10;

while (!finished && step < maxSteps) {
  // 让 LLM 根据当前历史决定下一步
  const decision = await callLLM(history);

  // 如果模型认为任务已经完成,返回最终结果
  if (decision.type === "final_answer") {
    finished = true;
    return decision.content;
  }

  // 执行模型选择的工具
  const observation = await executeTool(
    decision.tool,
    decision.arguments
  );

  // 保存模型的决定和工具执行结果
  history.push({
    role: "assistant",
    content: decision
  });

  history.push({
    role: "tool",
    content: observation
  });

  step++;
}

这段代码体现了 Agent 的基本结构:

调用 LLM
   ↓
判断任务是否完成
   ↓
选择并执行工具
   ↓
保存工具结果
   ↓
再次调用 LLM

真正的 Agent 系统还会加入错误处理、权限控制、上下文压缩、调用次数限制和成本控制等机制。

八、一次性 LLM 与 Agent 的区别

对比项 一次性 LLM Agent
调用次数 通常一次 一次或多次
工作方式 根据输入直接回答 推理、行动、观察循环
信息来源 初始提示词和模型知识 初始信息、工具结果和执行反馈
工具调用 通常没有 可以搜索、读文件、执行代码
决策方式 直接生成最终结果 根据执行结果动态调整计划
用户参与 用户需要不断追问 用户可以只提供最终目标
适合任务 翻译、摘要、改写、简单问答 调研、编程、数据分析、自动化
成本 较低 通常较高
响应时间 较短 通常较长
可验证性 信息不足时可能猜测 可以利用工具获取证据

九、为什么不让 Agent 无限循环?

Agent 虽然能力更强,但连续调用 LLM 也会带来一些问题。

1. 成本增加

每次调用都会消耗 Token。执行步骤越多,历史上下文通常也越长,成本就越高。

2. 响应速度变慢

一次性回答可能只需要几秒,而 Agent 可能需要多次调用模型和工具,因此完成任务的时间会更长。

3. 错误可能累积

如果 Agent 在早期做出了错误判断,后面的步骤可能沿着错误方向继续执行。

4. 可能陷入循环

Agent 可能反复执行相同操作,例如不断搜索同一个问题,却始终无法判断任务是否完成。

5. 外部操作存在风险

如果 Agent 可以修改文件、发送邮件或操作数据库,就必须设置权限和确认机制,避免模型执行错误或高风险操作。

因此,实际开发中通常需要设置:

  • 最大执行步数
  • 最大 Token 消耗
  • 工具调用权限
  • 单步超时时间
  • 重复操作检测
  • 高风险操作人工确认
  • 明确的任务终止条件

十、什么时候应该使用 Agent?

并不是所有任务都需要 Agent。

对于下面这些任务,一次性调用通常已经足够:

  • 翻译一段文字
  • 总结一篇文章
  • 修改文案
  • 解释一个概念
  • 根据完整信息生成固定格式内容

而下面这些任务更适合使用 Agent:

  • 搜索多个来源并整理研究报告
  • 读取项目代码并定位 Bug
  • 查询数据库并分析业务数据
  • 自动处理文件和表格
  • 根据执行结果不断调整方案
  • 完成包含多个依赖步骤的复杂任务

判断标准可以概括为:

如果模型只需要“想”,一次调用通常足够;如果模型还需要“查、做、验证和调整”,就更适合使用 Agent。

十一、总结

普通 LLM 和 Agent 并不是两种完全不同的模型。

很多时候,它们底层使用的是同一个大语言模型。真正的差别在于模型外部有没有工具、上下文管理和控制循环。

一次性 LLM 的运行方式是:

输入问题 → 生成答案

Agent 的运行方式是:

理解目标
   ↓
推理下一步
   ↓
调用工具执行
   ↓
观察执行结果
   ↓
根据结果继续推理
   ↓
完成任务

所以,Agent 的核心并不只是“连续调用很多次 LLM”,而是:

让 LLM 在一个可控制的循环中,根据真实的执行结果不断作出下一步决策,最终完成用户给定的目标。

这也是 ReAct 模式最重要的价值:让大语言模型从一个只会生成答案的“回答者”,变成一个能够观察环境、使用工具并逐步解决问题的“行动者”。

Agent 核心原理:为什么它需要连续多次调用 LLM?
http://www.clxhxhhr.top/posts/538/
作者
clxstart
发布于
2026-09-08
许可协议
CC BY-NC-SA 4.0
评论
0 条
还没有评论,先写一条吧。