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,推理+行动) 循环。这是一个"思考-行动-观察"的迭代过程:

循环开始
[思考] 当前状态是什么?下一步该做什么?
[行动] 执行一个具体动作(调用工具、查询信息等)
[观察] 查看行动结果,获取新信息
[思考] 基于新信息,下一步计划是什么?
... 循环直到任务完成

具体示例(安排行程的Agent思考过程):

用户:帮我订一张明天去北京的机票

第一轮:
思考:我需要知道用户的出发城市、偏好航班时间
行动:询问用户"请问您从哪个城市出发?偏好什么时间?"
观察:用户回复"从上海出发,上午10点以后"

第二轮:
思考:有了出发地、时间和目的地,可以查询航班
行动:调用航班查询API,参数:上海→北京,明天,10:00以后
观察:API返回3个可选航班

第三轮:
思考:需要让用户选择,然后完成预订
行动:向用户展示航班选项,询问选择
观察:用户选择"东方航空 MU5101"

第四轮:
思考:用户已选择,执行预订
行动:调用预订API,完成订票
观察:预订成功,获得订单号

第五轮:
思考:任务完成,汇总信息
行动:向用户返回预订成功信息+订单详情

2.3 Agent的三大核心能力

2.3.1 规划 (Planning)

Agent将复杂任务拆解为可执行的子任务,主要有两种模式: 1. 链式思考 (Chain of Thought):

原始任务:写一篇关于AI的文章
拆解:
1. 确定文章大纲
2. 收集AI发展史资料
3. 收集AI应用案例
4. 撰写引言
5. 按大纲填充各章节
6. 撰写结论
7. 润色修改

2. 任务分解 (Task Decomposition):

复杂任务:组织一场技术会议
分解为并行子任务:
├─ 场地组:预订场地、布置会场
├─  speaker组:邀请讲师、确认议程
├─ 市场组:宣传推广、报名管理
├─ 后勤组:餐饮安排、物料准备

2.3.2 记忆 (Memory)

Agent需要不同类型的记忆来保持连贯性:

记忆类型存储内容实现方式类比
短期记忆当前对话上下文在Prompt中包含最近N轮对话工作中的便签
长期记忆用户偏好、历史事实向量数据库 + 检索个人档案
经验记忆成功/失败的案例数据库存储,用于反思优化工作经验

2.3.3 工具使用 (Tool Use)

工具是Agent连接外部世界的桥梁。每个工具都是一个可以被调用的函数,需要清晰描述功能和参数。

工具定义示例:

// 定义工具
$tools = [
    [
        'type' => 'function',
        'function' => [
            'name' => 'search_flights',
            'description' => '查询航班信息',
            'parameters' => [
                'type' => 'object',
                'properties' => [
                    'from' => ['type' => 'string', 'description' => '出发城市'],
                    'to' => ['type' => 'string', 'description' => '到达城市'],
                    'date' => ['type' => 'string', 'description' => '日期 YYYY-MM-DD']
                ],
                'required' => ['from', 'to', 'date']
            ]
        ]
    ],
    [
        'type' => 'function',
        'function' => [
            'name' => 'book_hotel',
            'description' => '预订酒店',
            'parameters' => [
                'type' => 'object',
                'properties' => [
                    'city' => ['type' => 'string'],
                    'check_in' => ['type' => 'string'],
                    'check_out' => ['type' => 'string']
                ],
                'required' => ['city', 'check_in', 'check_out']
            ]
        ]
    ]
];

// Agent根据用户请求,决定调用哪个工具

三、Agent的构建模式

3.1 模式一:单Agent模式

最简单的形式,一个Agent负责所有事情。

适用场景

  • 任务相对简单

  • 不需要多角色协作

  • 资源有限

实现示例(使用PHP调用OpenAI Function Calling):

<?php

class SimpleAgent
{
    protected $llm;
    protected $tools;
    protected $memory;
    
    public function __construct()
    {
        $this->llm = new OpenAIClient();
        $this->tools = $this->registerTools();
        $this->memory = [];
    }
    
    public function run($task)
    {
        $messages = [
            ['role' => 'system', 'content' => '你是一个能调用工具的AI助手'],
            ['role' => 'user', 'content' => $task]
        ];
        
        $maxIterations = 10; // 防止无限循环
        $iteration = 0;
        
        while ($iteration < $maxIterations) {
            $response = $this->llm->chat([
                'model' => 'gpt-4',
                'messages' => $messages,
                'tools' => $this->tools,
                'tool_choice' => 'auto'
            ]);
            
            $message = $response['choices'][0]['message'];
            
            // 如果模型决定调用工具
            if (isset($message['tool_calls'])) {
                // 执行工具调用
                $toolResult = $this->executeTool($message['tool_calls'][0]);
                
                // 将结果加入对话
                $messages[] = $message;
                $messages[] = [
                    'role' => 'tool',
                    'tool_call_id' => $message['tool_calls'][0]['id'],
                    'content' => json_encode($toolResult)
                ];
                
                // 继续循环,让模型处理结果
            } else {
                // 任务完成,返回最终答案
                return $message['content'];
            }
            
            $iteration++;
        }
        
        return "任务执行超时";
    }
    
    protected function registerTools()
    {
        return [
            [
                'type' => 'function',
                'function' => [
                    'name' => 'search_web',
                    'description' => '搜索网络信息',
                    'parameters' => [
                        'type' => 'object',
                        'properties' => [
                            'query' => ['type' => 'string']
                        ]
                    ]
                ]
            ],
            // 更多工具...
        ];
    }
    
    protected function executeTool($toolCall)
    {
        $function = $toolCall['function']['name'];
        $args = json_decode($toolCall['function']['arguments'], true);
        
        switch ($function) {
            case 'search_web':
                return $this->searchWeb($args['query']);
            // 其他工具...
        }
    }
}

3.2 模式二:多Agent协作模式

多个Agent组成一个团队,各司其职,协同完成复杂任务。

典型架构

              [协调者Agent]
              /    |    \
             /     |     \
    [研究员Agent] [执行Agent] [质检Agent]
             \     |     /
              \    |    /
              [结果汇总]

实现思路:

class MultiAgentSystem
{
    protected $coordinator;
    protected $researcher;
    protected $executor;
    protected $inspector;
    
    public function solve($task)
    {
        // 协调者理解任务,制定计划
        $plan = $this->coordinator->plan($task);
        
        // 研究员收集信息
        $info = $this->researcher->research($plan);
        
        // 执行者完成任务
        $result = $this->executor->execute($plan, $info);
        
        // 质检者检查结果
        $quality = $this->inspector->inspect($result);
        
        if ($quality['score'] < 0.8) {
            // 质量不达标,重新执行或调整
            return $this->refine($result, $quality['feedback']);
        }
        
        return $result;
    }
}

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):

用户:分析一下我们公司和主要竞品去年的表现

Agent思考:
1. 需要我们的财报 → 检索内部数据库
2. 需要竞品财报 → 搜索公开信息
3. 需要行业平均数据 → 调用行业数据API
4. 需要解读这些数据 → 用分析工具计算指标

Agent行动:
- 第一轮检索:获取本公司财报 → 得到数据A
- 第二轮检索:搜索竞品财报 → 找到3个主要竞品的数据B
- 第三轮行动:调用计算工具 → 计算市场份额、增长率
- 第四轮检索:查询行业报告 → 获取行业平均数据C

Agent整合:将A、B、C整合分析
Agent生成:输出带图表的分析报告

四、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:

<?php

namespace App\Services;

class PHPAgent
{
    protected $llm;
    protected $tools = [];
    protected $maxSteps = 10;
    
    public function addTool($name, $description, $parameters, callable $callback)
    {
        $this->tools[] = [
            'type' => 'function',
            'function' => [
                'name' => $name,
                'description' => $description,
                'parameters' => $parameters
            ],
            'callback' => $callback
        ];
        
        return $this;
    }
    
    public function run($task)
    {
        $messages = [
            ['role' => 'system', 'content' => '你是一个能调用工具的AI助手'],
            ['role' => 'user', 'content' => $task]
        ];
        
        $steps = [];
        
        for ($i = 0; $i < $this->maxSteps; $i++) {
            // 准备工具定义(去掉callback)
            $toolDefinitions = array_map(function($tool) {
                unset($tool['callback']);
                return $tool;
            }, $this->tools);
            
            // 调用LLM
            $response = $this->callLLM($messages, $toolDefinitions);
            $message = $response['choices'][0]['message'];
            
            // 记录步骤
            $steps[] = [
                'thought' => $message['content'] ?? '',
                'tool_calls' => $message['tool_calls'] ?? []
            ];
            
            // 如果没有工具调用,任务完成
            if (!isset($message['tool_calls'])) {
                return [
                    'answer' => $message['content'],
                    'steps' => $steps
                ];
            }
            
            // 执行工具调用
            foreach ($message['tool_calls'] as $toolCall) {
                $toolName = $toolCall['function']['name'];
                $args = json_decode($toolCall['function']['arguments'], true);
                
                // 找到对应的工具
                $tool = collect($this->tools)->firstWhere('function.name', $toolName);
                
                if ($tool) {
                    // 执行回调
                    $result = ($tool['callback'])($args);
                    
                    // 将结果加入对话
                    $messages[] = $message;
                    $messages[] = [
                        'role' => 'tool',
                        'tool_call_id' => $toolCall['id'],
                        'content' => json_encode($result)
                    ];
                }
            }
        }
        
        return [
            'error' => '达到最大步骤数',
            'steps' => $steps
        ];
    }
    
    protected function callLLM($messages, $tools)
    {
        // 调用OpenAI API或其他LLM
        // 这里简化处理,实际需要用HTTP客户端
    }
}

// 使用示例
$agent = new PHPAgent();

// 添加工具
$agent->addTool(
    'search_flights',
    '查询航班信息',
    [
        'type' => 'object',
        'properties' => [
            'from' => ['type' => 'string'],
            'to' => ['type' => 'string'],
            'date' => ['type' => 'string']
        ],
        'required' => ['from', 'to', 'date']
    ],
    function($args) {
        // 实际查询航班的逻辑
        return ['flights' => [...]];
    }
);

// 运行Agent
$result = $agent->run('帮我查一下明天从上海到北京的航班');

路径三:使用Dify搭建可视化Agent(推荐)

这是目前最推荐的方案,结合了低代码的便捷PHP调用的灵活性

在Dify中搭建Agent

  1. 访问 Dify官网 或自托管

  2. 创建"Agent"类型应用

  3. 可视化编排工作流:

    • 添加工具节点(搜索引擎、数据库、API)

    • 设置Agent指令

    • 配置知识库(RAG)

    • 发布应用

PHP调用Dify Agent

<?php

class DifyAgentClient
{
    protected $apiKey;
    protected $baseUrl;
    
    public function __construct($apiKey, $baseUrl = 'https://api.dify.ai/v1')
    {
        $this->apiKey = $apiKey;
        $this->baseUrl = $baseUrl;
    }
    
    public function run($query, $user = 'default-user')
    {
        $ch = curl_init($this->baseUrl . '/chat-messages');
        
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_HTTPHEADER, [
            'Authorization: Bearer ' . $this->apiKey,
            'Content-Type: application/json'
        ]);
        
        curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([
            'query' => $query,
            'user' => $user,
            'response_mode' => 'blocking' // 或 'streaming'
        ]));
        
        $response = curl_exec($ch);
        curl_close($ch);
        
        return json_decode($response, true);
    }
}

// 使用示例
$client = new DifyAgentClient('app-xxxxxx');
$result = $client->run('帮我分析一下上个月的销售数据');
echo $result['answer'];

五、Agent实战项目推荐

  • 智能客服Agent(最适合入门)
    • 自动回答产品咨询

    • 查询订单状态(调用订单API)

    • 处理退换货申请(调用工单系统)

    • 升级人工(复杂问题转接)

  • 数据分析Agent(最有价值)
    • “上个月销售额前十的产品”

    • “对比今年和去年同期的增长”

    • “预测下个月的库存需求”

  • 个人助理Agent(最有趣)
    • 邮件分类和摘要

    • 日程安排和提醒

    • 待办事项管理

    • 信息检索和整理

  • 多Agent协作系统(最有挑战)
用户请求
[项目经理Agent] - 任务分解和调度
    ├─ [研究员Agent] - 信息收集和分析
    ├─ [执行Agent] - 具体操作执行
    ├─ [质检Agent] - 结果检查和优化
    └─ [报告Agent] - 最终输出整合
最终交付