Press "Enter" to skip to content

Agent 的概念、原理与构建模式

这是一篇关于 AI Agent 的学习笔记,内容总结自一个从零打造简化版 Claude Code 的视频教程。本文将整理和归纳教程中的核心概念,包括 Agent 是什么、最主流的 ReAct 构建模式,以及一种更高级的 Plan-and-Execute 模式。

一、 什么是 AI Agent?

1. 从大模型 (LLM) 的局限性说起

我们熟悉的大语言模型(如 GPT-4o)虽然逻辑和回答能力很强,但它们存在一个核心限制:无法感知或改变外部世界

  • 无法改变环境:模型可以生成代码,但无法将代码自动写入文件或执行它。这个过程需要用户手动操作。
  • 无法感知环境:如果我们想让模型基于现有代码进行修改,必须手动将代码复制给模型。模型无法主动读取本地文件。

2. Agent:连接大模型与现实世界的桥梁

为了解决这个问题,我们可以为大模型配备 “工具 (Tools)”。这些工具就像是模型的“感官”和“四肢”,它们可以是:

  • 读写文件的函数
  • 运行终端命令的函数
  • 网络搜索的 API

Agent 就是将一个大模型(大脑)和一系列工具(感官与四肢)组装起来,形成的一个能够感知和改变外部环境的智能程序。 它能够独立、自动化地完成任务,就像一个真正的机器人。

3. Agent 实例

  • Cursor:一个强大的编程 Agent,可以根据用户需求自动编写和修改代码。
  • Manus:一个研究型 Agent,可以根据用户问题(如比较手机性能)自动规划任务、搜索网页、整理信息并生成报告。

二、 Agent 的核心运行模式:ReAct

ReAct 是目前应用最广泛的一种 Agent 运行模式,它的名字是 Reasoning and Acting(思考与行动) 的缩写。

1. ReAct 的核心流程

ReAct 的运行流程是一个循环,直到任务完成。其核心步骤如下:

  1. Thought (思考):Agent 首先分析任务,思考下一步需要做什么。
  2. Action (行动):根据思考结果,决定调用哪个工具,并传入相应参数。
  3. Observation (观察):执行工具后,将返回的结果(如文件写入成功、API 返回的数据等)作为观察内容。
  4. 重复循环:Agent 基于新的观察结果,继续进行下一轮的“思考 -> 行动 -> 观察”循环。
  5. Final Answer (最终答案):当 Agent 判断任务已完成,不再需要调用工具时,便会输出最终答案,流程结束。

215d9df9-5867-4b10-80ac-c3b066482ef8

2. 实现 ReAct 的奥秘:系统提示词 (System Prompt)

Agent 的这种精密行为模式并非来自模型训练,而是通过一个精心设计的 系统提示词 来引导的。这个提示词相当于给模型下达的“剧本”或“操作手册”。

一个典型的 ReAct 系统提示词通常包含以下几个部分:

  • 职责描述:明确告知模型需要遵循“思考 -> 行动 -> 观察”的 ReAct 流程来解决问题。
  • 示例 (Examples):提供一两个完整的 ReAct 对话示例,让模型学习返回格式。
  • 可用工具 (Tools):列出所有可供模型调用的工具及其功能描述。
  • 注意事项:规定一些必须遵守的规则。
  • 环境信息:提供当前环境的上下文信息,如操作系统、当前目录、文件列表等。

3. 从零构建一个 ReAct Agent (代码实现思路)

教程中演示了一个简化版的代码 Agent,其核心实现逻辑如下:

  1. 主程序 (agent.py)

    • 定义可用的工具函数(如 read_file, write_to_file, run_command)。
    • 实例化核心的 ReActAgent 类,传入工具列表、模型(如 GPT-4o)和项目目录。
    • 接收用户任务,并调用 agent.run() 方法启动 Agent。
  2. ReActAgent 类的核心逻辑

    • run(task) 方法:这是 Agent 的主循环。
      • 初始化消息列表:将渲染好的“系统提示词”和用户的“任务”作为初始消息。
      • 进入 while 循环
        1. 调用模型:将当前消息列表发送给大模型,获取响应。
        2. 解析响应:从模型返回的文本中提取出 thoughtaction (或 final_answer)。
        3. 判断与执行
          • 如果响应包含 final_answer,则说明任务完成,跳出循环并返回结果。
          • 如果响应包含 action,则解析出工具名称和参数。
        4. 调用工具:执行对应的工具函数,并获取返回结果 (observation)。
        5. 更新消息列表:将 observation 追加到消息列表中,以便模型在下一轮循环中知道上一步工具的执行结果。

这个流程清晰地展示了 Agent 主程序、大模型、工具三者之间是如何协同工作的。主程序负责调度,模型负责思考和决策,工具负责与外部世界交互。

三、 更高级的构建模式:Plan-and-Execute

除了 ReAct,还存在其他构建模式,其中“先规划,再执行”是另一种常见思路。LangChain 提出的 Plan-and-Execute 模式是其中的一个典型实现。

1. Plan-and-Execute 的核心组件

这种模式将 Agent 的功能进一步拆分,包含以下几个关键角色:

  • Agent 主程序:负责串联整个流程的总调度器。
  • Plan 模型:一个专门负责接收用户任务并生成详细执行计划 (Plan) 的大模型。
  • Execution Agent (执行 Agent):一个负责执行计划中单个步骤的 Agent。这个 Agent 本身可以是一个 ReAct Agent。
  • Re-Plan 模型:在每一步执行后,根据最新的执行结果动态调整和优化后续计划的模型。

2. Plan-and-Execute 的运行流程

以“查询今年澳网男子冠军的家乡是哪里?”为例:

  1. 规划 (Plan):用户提交任务后,Agent 主程序将其发送给 Plan 模型。Plan 模型生成一个初步计划:

    • 步骤 1:查询当前日期,确定年份。
    • 步骤 2:根据年份,搜索澳网男子冠军的名字。
    • 步骤 3:根据冠军的名字,搜索他的家乡。
  2. 执行 (Execute):主程序将计划的第一步(“查询当前日期”)交给 Execution Agent 去执行。Execution Agent(可能通过 ReAct 模式调用搜索工具)完成任务,并返回结果(例如,“2025年9月14日”)。

  3. 重新规划 (Re-Plan):主程序将原始问题、完整计划和第一步的执行记录,全部发送给 Re-Plan 模型。Re-Plan 模型会生成一个更新后的计划:

    • 步骤 1:查询当前日期(已完成)
    • 步骤 1:搜索 2025年澳网男子冠军的名字。(计划被具体化了)
    • 步骤 2:根据冠军的名字,搜索他的家乡。
  4. 循环执行与重新规划:主程序重复第 2 和第 3 步,依次执行更新后的计划,直到所有步骤完成。

  5. 得出最终答案:当 Re-Plan 模型发现所有步骤都已完成,用户的问题可以回答时,它将不再返回新的计划,而是直接生成最终答案。主程序将此答案返回给用户,流程结束。

这种模式通过将规划和执行解耦,并在每一步后动态调整计划,使得 Agent 在处理复杂、多步骤的任务时表现得更加稳健和灵活。

参考资料

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注