按 Enter 键跳转到正文

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

  1. 理解目标:安排完整的商务行程

  2. 规划步骤

    • 查询下周的航班

    • 预订合适的机票

    • 查找公司协议酒店

    • 预订酒店房间

    • 查看日程,预约会议时间

    • 生成行程单

  3. 执行行动:调用航班API、酒店API、日历API

  4. 交付结果:返回完整的行程安排+预订确认

二、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[思考] 基于新信息,下一步计划是什么?
1011... 循环直到任务完成

具体示例(安排行程的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

  1. 访问 Dify官网 或自托管

  2. 创建"Agent"类型应用

  3. 可视化编排工作流:

    • 添加工具节点(搜索引擎、数据库、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用户请求
23[项目经理Agent] - 任务分解和调度
4    ├─ [研究员Agent] - 信息收集和分析
5    ├─ [执行Agent] - 具体操作执行
6    ├─ [质检Agent] - 结果检查和优化
7    └─ [报告Agent] - 最终输出整合
89最终交付

发表评论