【Agent.07】什么是Agent?从Chat到ReAct的AI进化之路
欢迎阅读慕雪撰写的AI Agent专栏,本专栏目录如下
- 【MCP】详细了解MCP协议:和function call的区别何在?如何使用MCP?
- 【AI】AI对26届及今后计算机校招的影响
- 【Agent.01】AI Agent智能体开发专题引言
- 【Agent.02】市面上常见的大模型有哪些?
- 【Agent.03】带你学会写一个基础的Prompt
- 【Agent.04】AI时代的hello world:调用OpenAI接口,与大模型交互
- 【Agent.05】OpenAI接口Function Calling工具调用详解
- 【Agent.06】使用openai sdk实现多轮对话
- 【Agent.07】什么是Agent?从Chat到ReAct的AI进化之路
本专栏的所有代码都可以在https://gitee.com/musnows/agent-blog找到。
在前面几篇文章中,我们已经学习了如何与大模型交互、如何写好Prompt、如何进行Function Calling等基础知识。现在,我们终于来到了这个专栏的核心主题——Agent。
本文有部分内容由AI辅助编写,仅供参考
1. 写在前面
说到Agent,很多人可能会觉得这是一个很复杂的概念。但其实,Agent的本质就是一个能够自主思考和行动的AI助手。
如果说Chat LLM是一个只能说话的顾问,那么Agent就是一个既能说话又能干事的智能助手。这个转变,就是通过我们前面学习的Function Calling和Agent框架来实现的。
本文将从概念层面带大家理解Agent到底是什么,它和传统的Chat LLM有什么区别,以及它是如何工作的。
2. Agent和Chat LLM的区别
要理解Agent,首先要知道它和我们平时使用的Chat LLM(比如DeepSeek的网页聊天框)有什么本质区别。
2.1. Agent和Chat的区别?
传统的Chat LLM就像是只能说话的顾问,你问它答,一问一答的。它没有记忆,每次对话都是独立的,只能生成文本回答,没办法真正帮你做事。而Agent则完全不同,它能主动思考问题,规划执行步骤,还能调用各种工具和API来完成任务。Agent是有状态的,能记住之前的对话内容,可以处理复杂的多步骤任务。
当然啦,现在很多AI的网页端也在进化,开始加入网络搜索、代码知识库这些工具功能,算是朝着Agent的方向转变了(比如豆包)。但我们这里说的,还是最核心的概念区别。
2.2. 为什么需要Agent?
想象一下这个场景:你需要AI帮你预订一张机票。
Chat LLM的处理方式:
1 | 用户:帮我预订一张明天从北京到上海的机票 |
Agent的处理方式:
1 | 用户:帮我预订一张明天从北京到上海的机票 |
这就是本质区别:Chat LLM只能"说",而Agent能"做"。这一点,在先前的Function Calling章节已经展示给大家了。
在AI时代,我们需要的不仅仅是一个能聊天的助手,更需要一个能帮我们解决实际问题的智能助手。
Agent的出现解决了很多现实问题:
- 首先是任务自动化,一些涉及到决策的复杂的多步骤任务,现在可以让Agent自动完成,大大减少了人工干预。
- 然后是工具集成,Agent能够调用各种API和工具,这样AI的能力边界就被大大扩展了,能够和几乎任何已有的系统进行集成和协作,完全打破了原始的只能通过OpenAPI人工编写脚本进行定死的任务处理的范式。
- 更重要的是智能决策,Agent可以根据实际情况自主判断和选择最佳解决方案。而且通过与环境交互,Agent还能不断优化自己解决问题的策略。
特别是在软件开发、数据分析、客户服务这些场景中,Agent的价值就更加明显了。比如本专栏最终要实现的测试用例生成Agent,就能自动完成代码分析、测试用例编写、覆盖率检查这一整套复杂的任务流程。
不过需要注意的是:Agent并不是万能的,只有涉及到需要利用大模型的思考能力进行决策的场景,才有必要使用Agent来实现。如果是一些诸如静态扫描代码流水线、自动化脚本测试这种已经“固定死”的场景,没有必要盲目蛮干的上Agent,没有任何意义,甚至会降低效果!
简单来说,一个任务中,需要根据数据进行下一步操作决策的节点越多,就越适合引入Agent。反之,如果没有什么需要动态决策的场景,一个传统的写死的脚本依旧是更好的选择。
3. Agent的ReAct工作原理
3.1. 什么是ReAct?
ReAct(Reasoning and Acting,推理-行动)是Agent最核心的工作机制。这个概念是Google在2022年提出的,现在已经成为了Agent框架的标准设计模式。
ReAct的核心思想其实很简单,就是让Agent像人类一样思考问题,然后采取行动。具体来说包含三个步骤:首先是推理,Agent会分析当前的情况,制定一个行动计划;然后是行动,根据计划执行具体的工具调用或操作;最后是观察,看看行动的结果如何,然后根据结果调整策略。
这个过程会不断循环进行,直到任务完成为止。
3.2. ReAct工作流程图
下面是一个典型的Agent ReAct工作流程:
flowchart TD
A([接收用户任务]) --> B[理解任务需求]
B --> C[分析任务复杂性]
C --> D{需要工具调用?}
D -->|否| E[直接生成回答]
E --> Z([完成任务])
D -->|是| F[规划执行步骤]
F --> G[选择合适工具]
G --> H[调用工具/函数]
H --> I[获取执行结果]
I --> J[分析结果质量]
J --> K{任务完成?}
K -->|否| L[更新策略/信息]
L --> M{需要更多工具?}
M -->|是| F
M -->|否| N[继续推理分析]
N --> F
K -->|是| O[生成最终回答]
O --> Z
style A fill:#90EE90
style Z fill:#FFB6C1
style H fill:#FFE4B5
style I fill:#FFE4B53.3. ReAct的具体步骤
让我们用一个具体的例子来说明ReAct是如何工作的。假设用户要求:“帮我分析这个Python文件的性能瓶颈并生成优化建议”。
Step 1: Reasoning(推理)
1 | Agent思考:用户需要我分析Python文件的性能瓶颈。我需要: |
Step 2: Acting(行动)
1 | # 调用file_reader工具 |
Step 3: Observation(观察)
1 | Agent观察结果: |
Step 4: 再次Reasoning(二次推理)
1 | Agent思考:根据分析结果,我发现了以下性能问题: |
Step 5: 最终Action(最终行动)
1 | Agent生成最终的优化报告和改进代码。 |
ReAct这种机制有很多优势。首先是透明性,Agent每一步的推理过程都是可见的,这样我们就能很方便地调试和优化它的行为。然后是灵活性,Agent可以根据中间得到的结果随时调整策略,而不是死板地按照预设流程执行。还有可控性,我们可以在关键节点设置检查点,确保Agent不会"跑偏"。最后是扩展性,可以很轻松地集成新的工具和能力。
正是这种"思考-行动-观察"的循环机制,让Agent具备了真正的智能行为,能够处理那些复杂的、需要多步骤才能完成的任务。
4. Agent SDK与OpenAI接口的关系
4.1. 从底层到高层的关系
在我们前面学习的内容中,我们接触了三个层次的东西:直接用requests调用OpenAI API,使用OpenAI Python SDK,以及现在要学习的Agent框架。
这三者之间是什么关系呢?我们可以用一个生活中的例子来理解。
- 直接调用OpenAI API就像手动炒菜,你需要自己控制火候、掌握时间、放调料等等所有细节,虽然很灵活但操作起来特别复杂。
- 使用OpenAI SDK就像用电饭煲,它把底层的网络请求和响应处理都封装好了,你只需要把米放进去按下按钮就行,可以更专注于业务逻辑。
- 而使用Agent SDK就更像去餐厅点餐了,你只需要告诉服务员你想要吃什么菜,后厨也就是Agent框架会自动处理所有的烹饪流程,你等着上菜就行。
简单来说,这三个东西的封装层次越来越高,也就是一个依赖链条:
flowchart TD
A[HTTP] --> B[OpenAI接口]
B --> C[OpenAI SDK]
C --> D[Agent SDK]
D --> E[Agent工具,如cursor]现在已经有非常多的开源Agent SDK以及封装好的Agent工具,为我们节省了很多工作。本专栏不会告诉大家如何搓一个Agent SDK出来,而是直接转向Agent SDK的应用。
4.2. Agent SDK的架构层次
下面是Agent SDK的架构层次图:
flowchart TD
A[用户输入] --> B[Agent SDK]
B --> C[ReAct控制器]
C --> D[Prompt管理器]
C --> E[工具管理器]
C --> F[状态管理器]
D --> G[系统Prompt构建]
E --> H[Function Calling处理]
F --> I[对话历史维护]
G --> J[OpenAI SDK]
H --> J
I --> J
J --> K[OpenAI API]
K --> L[大模型]
L --> M[模型响应]
M --> N[SDK解析]
N --> O[工具执行]
O --> P[结果处理]
P --> Q[最终输出]
style A fill:#90EE90
style Q fill:#FFB6C1
style B fill:#E1F5FE
style C fill:#F3E5F54.3. Agent SDK帮我们做了什么?
Agent SDK本质上是在OpenAI SDK的基础上,封装了以下功能:
首先,是自动化的ReAct循环管理,下面是一个伪代码,展示了二者的区别:
1 | # 原始方式:我们需要手动管理 |
总而言之言而总之,Agent SDK帮我们把上下文管理、工具管理、工具调用、工具返回结果处理等等逻辑都封装好了,不再需要我们自己去解析OpenAI接口的Function Calling返回格式进行处理,也不需要关注Agent在多轮对话中对工具调用状态的思考等等事项。
我们只需要把prompt、模型、工具传入给Agent SDK,剩下的全由Agent SDK代劳!
4.4. 常见的Agent SDK
| 名称 | 开发语言 | 核心特点 | 仓库/官方链接 |
|---|---|---|---|
| OpenAI Agents SDK | Python | 官方轻量型Agent SDK,支持多Agent协作、工具调用、会话记忆,原生集成OpenAI模型 | 官方文档/仓库 |
| LangChain | Python/JS | 生态最成熟,支持OpenAI等多LLM集成,提供完整Agent工作流(工具、记忆、编排) | GitHub |
| Microsoft AutoGen | Python | 专注多Agent对话协作,深度兼容OpenAI模型,适合复杂任务分工与自动化执行 | GitHub |
| CrewAI | Python | 轻量级团队式Agent框架,默认支持OpenAI模型,角色定义清晰、任务分配灵活 | GitHub |
| LangGraph | Python | 状态机式Agent框架,无缝集成OpenAI模型,擅长复杂流程控制与步骤化任务执行 | GitHub |
5. The end
好啦,通过这篇文章的学习,咱们算是把Agent的核心概念和工作原理搞清楚了。
Agent的核心工作机制就是ReAct,也就是推理-行动-观察的循环。Agent会先分析情况制定计划,然后执行工具调用,观察结果并调整策略,这个循环让Agent具备了真正的智能行为。
后续,将以OpenAI Agent SDK为例,为大家展示一个最最简单的Agent的代码编写。
Retry


