AI Agent
AI Agent:从"回答问题"到"主动行动"的智能体
引言:当AI从"思考者"变成"行动派"
到目前为止,我们讨论的所有AI应用都有一个共同点:被动响应。你问一个问题,模型给出一个回答。就像一位知识渊博但从不主动行动的学者。
而 AI Agent(智能体) 将彻底改变这个模式。它不再是单纯的"问答机器人",而是一个能够自主理解目标、规划步骤、调用工具、执行行动的智能系统。
用一个形象的比喻来理解AI的进化:
| 阶段 | 比喻 | 能力 |
|---|---|---|
| 基础LLM | 刚毕业的大学生 | 知识丰富,但只会回答问题 |
| RAG增强 | 配备了图书馆的大学生 | 能查阅资料,回答更准确 |
| 微调模型 | 经过专业培训的专家 | 在特定领域更精通 |
| AI Agent | 项目经理 + 执行团队 | 能接收任务,规划执行,调用资源,交付成果 |
一、什么是AI Agent?
1.1 核心定义
AI Agent(智能体) 是一个能够感知环境、自主决策、执行行动以达到特定目标的智能系统。它具备以下核心特征:
自主性:无需人工干预,自主运作
目标导向:所有行动都围绕达成目标
工具使用:能调用外部工具完成任务
记忆能力:记住历史,持续优化
规划能力:将复杂任务拆解为可执行的步骤
1.2 Agent vs 传统程序 vs LLM
| 对比维度 | 传统程序 | 大语言模型(LLM) | AI Agent |
|---|---|---|---|
| 工作方式 | 按固定逻辑执行 | 按输入生成输出 | 自主规划并执行 |
| 灵活性 | 低,只能做预设的事 | 中,能处理多种问题 | 高,能适应新任务 |
| 工具使用 | 内置固定功能 | 无(需外部配合) | 主动调用各种工具 |
| 记忆能力 | 有状态但有限 | 会话级记忆 | 长期记忆+经验积累 |
| 目标理解 | 执行指令 | 理解问题 | 理解意图并拆解 |
1.3 一个生动的例子
用户请求:“帮我安排下周去上海的商务行程,包括机票、酒店和会议预约。”
传统程序:需要专门开发一个"行程安排"功能,且只能按固定流程执行。
LLM直接回答:“您可以预订XX航空的机票,住在XX酒店…"(只给建议,不行动)
AI Agent:
理解目标:安排完整的商务行程
规划步骤:
查询下周的航班
预订合适的机票
查找公司协议酒店
预订酒店房间
查看日程,预约会议时间
生成行程单
执行行动:调用航班API、酒店API、日历API
交付结果:返回完整的行程安排+预订确认
二、Agent的核心原理
2.1 Agent的认知架构
一个完整的AI Agent由以下核心组件构成:
flowchart TD
A[用户目标] --> B[大脑<br>大语言模型]
B --> C[规划模块<br>Planning]
B --> D[记忆模块<br>Memory]
B --> E[工具模块<br>Tools]
C --> F[任务拆解<br>子任务列表]
F --> G[执行循环]
D --> H[短期记忆<br>对话上下文]
D --> I[长期记忆<br>向量数据库]
E --> J[API调用]
E --> K[代码执行]
E --> L[数据库查询]
G --> M[行动]
M --> N[观察结果]
N --> C
2.2 核心工作原理:ReAct范式
Agent最经典的工作模式是 ReAct(Reason + Act,推理+行动) 循环。这是一个"思考-行动-观察"的迭代过程:
1循环开始
2 ↓
3[思考] 当前状态是什么?下一步该做什么?
4 ↓
5[行动] 执行一个具体动作(调用工具、查询信息等)
6 ↓
7[观察] 查看行动结果,获取新信息
8 ↓
9[思考] 基于新信息,下一步计划是什么?
10 ↓
11... 循环直到任务完成
具体示例(安排行程的Agent思考过程):
1用户:帮我订一张明天去北京的机票
2
3第一轮:
4思考:我需要知道用户的出发城市、偏好航班时间
5行动:询问用户"请问您从哪个城市出发?偏好什么时间?"
6观察:用户回复"从上海出发,上午10点以后"
7
8第二轮:
9思考:有了出发地、时间和目的地,可以查询航班
10行动:调用航班查询API,参数:上海→北京,明天,10:00以后
11观察:API返回3个可选航班
12
13第三轮:
14思考:需要让用户选择,然后完成预订
15行动:向用户展示航班选项,询问选择
16观察:用户选择"东方航空 MU5101"
17
18第四轮:
19思考:用户已选择,执行预订
20行动:调用预订API,完成订票
21观察:预订成功,获得订单号
22
23第五轮:
24思考:任务完成,汇总信息
25行动:向用户返回预订成功信息+订单详情
2.3 Agent的三大核心能力
2.3.1 规划 (Planning)
Agent将复杂任务拆解为可执行的子任务,主要有两种模式: 1. 链式思考 (Chain of Thought):
1原始任务:写一篇关于AI的文章
2拆解:
31. 确定文章大纲
42. 收集AI发展史资料
53. 收集AI应用案例
64. 撰写引言
75. 按大纲填充各章节
86. 撰写结论
97. 润色修改
2. 任务分解 (Task Decomposition):
1复杂任务:组织一场技术会议
2分解为并行子任务:
3├─ 场地组:预订场地、布置会场
4├─ speaker组:邀请讲师、确认议程
5├─ 市场组:宣传推广、报名管理
6├─ 后勤组:餐饮安排、物料准备
2.3.2 记忆 (Memory)
Agent需要不同类型的记忆来保持连贯性:
| 记忆类型 | 存储内容 | 实现方式 | 类比 |
|---|---|---|---|
| 短期记忆 | 当前对话上下文 | 在Prompt中包含最近N轮对话 | 工作中的便签 |
| 长期记忆 | 用户偏好、历史事实 | 向量数据库 + 检索 | 个人档案 |
| 经验记忆 | 成功/失败的案例 | 数据库存储,用于反思优化 | 工作经验 |
2.3.3 工具使用 (Tool Use)
工具是Agent连接外部世界的桥梁。每个工具都是一个可以被调用的函数,需要清晰描述功能和参数。
工具定义示例:
1// 定义工具
2$tools = [
3 [
4 'type' => 'function',
5 'function' => [
6 'name' => 'search_flights',
7 'description' => '查询航班信息',
8 'parameters' => [
9 'type' => 'object',
10 'properties' => [
11 'from' => ['type' => 'string', 'description' => '出发城市'],
12 'to' => ['type' => 'string', 'description' => '到达城市'],
13 'date' => ['type' => 'string', 'description' => '日期 YYYY-MM-DD']
14 ],
15 'required' => ['from', 'to', 'date']
16 ]
17 ]
18 ],
19 [
20 'type' => 'function',
21 'function' => [
22 'name' => 'book_hotel',
23 'description' => '预订酒店',
24 'parameters' => [
25 'type' => 'object',
26 'properties' => [
27 'city' => ['type' => 'string'],
28 'check_in' => ['type' => 'string'],
29 'check_out' => ['type' => 'string']
30 ],
31 'required' => ['city', 'check_in', 'check_out']
32 ]
33 ]
34 ]
35];
36
37// Agent根据用户请求,决定调用哪个工具
三、Agent的构建模式
3.1 模式一:单Agent模式
最简单的形式,一个Agent负责所有事情。
适用场景:
任务相对简单
不需要多角色协作
资源有限
实现示例(使用PHP调用OpenAI Function Calling):
1<?php
2
3class SimpleAgent
4{
5 protected $llm;
6 protected $tools;
7 protected $memory;
8
9 public function __construct()
10 {
11 $this->llm = new OpenAIClient();
12 $this->tools = $this->registerTools();
13 $this->memory = [];
14 }
15
16 public function run($task)
17 {
18 $messages = [
19 ['role' => 'system', 'content' => '你是一个能调用工具的AI助手'],
20 ['role' => 'user', 'content' => $task]
21 ];
22
23 $maxIterations = 10; // 防止无限循环
24 $iteration = 0;
25
26 while ($iteration < $maxIterations) {
27 $response = $this->llm->chat([
28 'model' => 'gpt-4',
29 'messages' => $messages,
30 'tools' => $this->tools,
31 'tool_choice' => 'auto'
32 ]);
33
34 $message = $response['choices'][0]['message'];
35
36 // 如果模型决定调用工具
37 if (isset($message['tool_calls'])) {
38 // 执行工具调用
39 $toolResult = $this->executeTool($message['tool_calls'][0]);
40
41 // 将结果加入对话
42 $messages[] = $message;
43 $messages[] = [
44 'role' => 'tool',
45 'tool_call_id' => $message['tool_calls'][0]['id'],
46 'content' => json_encode($toolResult)
47 ];
48
49 // 继续循环,让模型处理结果
50 } else {
51 // 任务完成,返回最终答案
52 return $message['content'];
53 }
54
55 $iteration++;
56 }
57
58 return "任务执行超时";
59 }
60
61 protected function registerTools()
62 {
63 return [
64 [
65 'type' => 'function',
66 'function' => [
67 'name' => 'search_web',
68 'description' => '搜索网络信息',
69 'parameters' => [
70 'type' => 'object',
71 'properties' => [
72 'query' => ['type' => 'string']
73 ]
74 ]
75 ]
76 ],
77 // 更多工具...
78 ];
79 }
80
81 protected function executeTool($toolCall)
82 {
83 $function = $toolCall['function']['name'];
84 $args = json_decode($toolCall['function']['arguments'], true);
85
86 switch ($function) {
87 case 'search_web':
88 return $this->searchWeb($args['query']);
89 // 其他工具...
90 }
91 }
92}
3.2 模式二:多Agent协作模式
多个Agent组成一个团队,各司其职,协同完成复杂任务。
典型架构:
1 [协调者Agent]
2 / | \
3 / | \
4 [研究员Agent] [执行Agent] [质检Agent]
5 \ | /
6 \ | /
7 [结果汇总]
实现思路:
1class MultiAgentSystem
2{
3 protected $coordinator;
4 protected $researcher;
5 protected $executor;
6 protected $inspector;
7
8 public function solve($task)
9 {
10 // 协调者理解任务,制定计划
11 $plan = $this->coordinator->plan($task);
12
13 // 研究员收集信息
14 $info = $this->researcher->research($plan);
15
16 // 执行者完成任务
17 $result = $this->executor->execute($plan, $info);
18
19 // 质检者检查结果
20 $quality = $this->inspector->inspect($result);
21
22 if ($quality['score'] < 0.8) {
23 // 质量不达标,重新执行或调整
24 return $this->refine($result, $quality['feedback']);
25 }
26
27 return $result;
28 }
29}
3.3 模式三:Agentic RAG
这是我们在上一轮提到的Agent和RAG的深度融合。Agent不再是被动地"检索一次”,而是可以主动决定检索策略。
工作流程:
flowchart TD
A[用户问题] --> B[Agent思考]
B --> C{需要什么信息?}
C -->|基础概念| D[检索百科知识库]
C -->|实时数据| E[调用API查询]
C -->|内部文档| F[检索公司知识库]
C -->|多源对比| G[多路检索]
D --> H[信息整合]
E --> H
F --> H
G --> H
H --> I{信息够了吗?}
I -->|不够| B
I -->|够了| J[生成最终答案]
典型场景(分析公司财务状况的Agent):
1用户:分析一下我们公司和主要竞品去年的表现
2
3Agent思考:
41. 需要我们的财报 → 检索内部数据库
52. 需要竞品财报 → 搜索公开信息
63. 需要行业平均数据 → 调用行业数据API
74. 需要解读这些数据 → 用分析工具计算指标
8
9Agent行动:
10- 第一轮检索:获取本公司财报 → 得到数据A
11- 第二轮检索:搜索竞品财报 → 找到3个主要竞品的数据B
12- 第三轮行动:调用计算工具 → 计算市场份额、增长率
13- 第四轮检索:查询行业报告 → 获取行业平均数据C
14
15Agent整合:将A、B、C整合分析
16Agent生成:输出带图表的分析报告
四、Agent的落地实践
4.1 主流Agent框架对比
| 框架 | 特点 | 适合场景 | PHP生态 |
|---|---|---|---|
| LangChain | 最流行,组件丰富 | 复杂Agent应用 | 有社区版 |
| AutoGen | 微软出品,多Agent协作 | 研究实验 | 无 |
| CrewAI | 角色扮演,简单易用 | 中小型项目 | 有API |
| Dify | 可视化编排,开箱即用 | 快速搭建 | REST API |
| Coze | 字节跳动,无代码 | 业务人员 | API调用 |
4.2 PHP开发者的Agent实践路径
作为PHP开发者,你有三条路径可以实践Agent:
路径一:调用Agent服务API(最快上手)
使用Coze(扣子)或Dify搭建Agent,然后通过API调用:
路径二:用PHP实现简单Agent(深入理解)
基于OpenAI Function Calling,用PHP实现基础Agent:
1<?php
2
3namespace App\Services;
4
5class PHPAgent
6{
7 protected $llm;
8 protected $tools = [];
9 protected $maxSteps = 10;
10
11 public function addTool($name, $description, $parameters, callable $callback)
12 {
13 $this->tools[] = [
14 'type' => 'function',
15 'function' => [
16 'name' => $name,
17 'description' => $description,
18 'parameters' => $parameters
19 ],
20 'callback' => $callback
21 ];
22
23 return $this;
24 }
25
26 public function run($task)
27 {
28 $messages = [
29 ['role' => 'system', 'content' => '你是一个能调用工具的AI助手'],
30 ['role' => 'user', 'content' => $task]
31 ];
32
33 $steps = [];
34
35 for ($i = 0; $i < $this->maxSteps; $i++) {
36 // 准备工具定义(去掉callback)
37 $toolDefinitions = array_map(function($tool) {
38 unset($tool['callback']);
39 return $tool;
40 }, $this->tools);
41
42 // 调用LLM
43 $response = $this->callLLM($messages, $toolDefinitions);
44 $message = $response['choices'][0]['message'];
45
46 // 记录步骤
47 $steps[] = [
48 'thought' => $message['content'] ?? '',
49 'tool_calls' => $message['tool_calls'] ?? []
50 ];
51
52 // 如果没有工具调用,任务完成
53 if (!isset($message['tool_calls'])) {
54 return [
55 'answer' => $message['content'],
56 'steps' => $steps
57 ];
58 }
59
60 // 执行工具调用
61 foreach ($message['tool_calls'] as $toolCall) {
62 $toolName = $toolCall['function']['name'];
63 $args = json_decode($toolCall['function']['arguments'], true);
64
65 // 找到对应的工具
66 $tool = collect($this->tools)->firstWhere('function.name', $toolName);
67
68 if ($tool) {
69 // 执行回调
70 $result = ($tool['callback'])($args);
71
72 // 将结果加入对话
73 $messages[] = $message;
74 $messages[] = [
75 'role' => 'tool',
76 'tool_call_id' => $toolCall['id'],
77 'content' => json_encode($result)
78 ];
79 }
80 }
81 }
82
83 return [
84 'error' => '达到最大步骤数',
85 'steps' => $steps
86 ];
87 }
88
89 protected function callLLM($messages, $tools)
90 {
91 // 调用OpenAI API或其他LLM
92 // 这里简化处理,实际需要用HTTP客户端
93 }
94}
95
96// 使用示例
97$agent = new PHPAgent();
98
99// 添加工具
100$agent->addTool(
101 'search_flights',
102 '查询航班信息',
103 [
104 'type' => 'object',
105 'properties' => [
106 'from' => ['type' => 'string'],
107 'to' => ['type' => 'string'],
108 'date' => ['type' => 'string']
109 ],
110 'required' => ['from', 'to', 'date']
111 ],
112 function($args) {
113 // 实际查询航班的逻辑
114 return ['flights' => [...]];
115 }
116);
117
118// 运行Agent
119$result = $agent->run('帮我查一下明天从上海到北京的航班');
路径三:使用Dify搭建可视化Agent(推荐)
这是目前最推荐的方案,结合了低代码的便捷和PHP调用的灵活性。
在Dify中搭建Agent:
访问 Dify官网 或自托管
创建"Agent"类型应用
可视化编排工作流:
添加工具节点(搜索引擎、数据库、API)
设置Agent指令
配置知识库(RAG)
发布应用
PHP调用Dify Agent:
1<?php
2
3class DifyAgentClient
4{
5 protected $apiKey;
6 protected $baseUrl;
7
8 public function __construct($apiKey, $baseUrl = 'https://api.dify.ai/v1')
9 {
10 $this->apiKey = $apiKey;
11 $this->baseUrl = $baseUrl;
12 }
13
14 public function run($query, $user = 'default-user')
15 {
16 $ch = curl_init($this->baseUrl . '/chat-messages');
17
18 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
19 curl_setopt($ch, CURLOPT_POST, true);
20 curl_setopt($ch, CURLOPT_HTTPHEADER, [
21 'Authorization: Bearer ' . $this->apiKey,
22 'Content-Type: application/json'
23 ]);
24
25 curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([
26 'query' => $query,
27 'user' => $user,
28 'response_mode' => 'blocking' // 或 'streaming'
29 ]));
30
31 $response = curl_exec($ch);
32 curl_close($ch);
33
34 return json_decode($response, true);
35 }
36}
37
38// 使用示例
39$client = new DifyAgentClient('app-xxxxxx');
40$result = $client->run('帮我分析一下上个月的销售数据');
41echo $result['answer'];
五、Agent实战项目推荐
- 智能客服Agent(最适合入门)
自动回答产品咨询
查询订单状态(调用订单API)
处理退换货申请(调用工单系统)
升级人工(复杂问题转接)
- 数据分析Agent(最有价值)
“上个月销售额前十的产品”
“对比今年和去年同期的增长”
“预测下个月的库存需求”
- 个人助理Agent(最有趣)
邮件分类和摘要
日程安排和提醒
待办事项管理
信息检索和整理
- 多Agent协作系统(最有挑战)
1用户请求
2 ↓
3[项目经理Agent] - 任务分解和调度
4 ├─ [研究员Agent] - 信息收集和分析
5 ├─ [执行Agent] - 具体操作执行
6 ├─ [质检Agent] - 结果检查和优化
7 └─ [报告Agent] - 最终输出整合
8 ↓
9最终交付
发表评论