第十六章:AI Agent 概论 — 从聊天机器人到自主智能体#
mindmap
root((AI Agent概论))
定义与分类
反应式Agent
认知式Agent
自主式Agent
演进路径
ChatBot
Copilot
Agent
核心能力
感知
推理
规划
行动
记忆
单Agent vs 多Agent
适用场景
复杂度权衡
应用场景
编程助手
数据分析
客户服务
与传统软件区别
非确定性
自主决策
自然语言接口
16.1 什么是 AI Agent#
AI Agent(人工智能代理/智能体)是一个能够感知环境、进行推理、制定计划并采取行动以实现特定目标的自主系统。与传统的聊天机器人不同,Agent 不仅仅是对用户输入做出被动响应,而是能够主动地分解任务、调用工具、管理状态,并在多步骤交互中持续推进目标的达成。
从学术角度看,Stuart Russell 和 Peter Norvig 在《人工智能:一种现代方法》中将 Agent 定义为:
一个 Agent 是任何能够通过传感器感知其环境,并通过执行器对该环境采取行动的实体。
在大语言模型(LLM)时代,这个定义被赋予了新的内涵:
from dataclasses import dataclass, field
from typing import List, Dict, Any, Callable
from enum import Enum
class AgentCapability(Enum):
"""Agent 核心能力枚举"""
PERCEPTION = "perception" # 感知:理解输入(文本、图像、音频)
REASONING = "reasoning" # 推理:逻辑分析与判断
PLANNING = "planning" # 规划:分解目标为子任务
ACTION = "action" # 行动:调用工具执行操作
MEMORY = "memory" # 记忆:存储和检索历史信息
REFLECTION = "reflection" # 反思:评估自身行为并改进
@dataclass
class AIAgent:
"""AI Agent 的基本抽象"""
name: str
goal: str
capabilities: List[AgentCapability] = field(default_factory=list)
tools: Dict[str, Callable] = field(default_factory=dict)
memory: List[Dict[str, Any]] = field(default_factory=list)
max_iterations: int = 10
def perceive(self, input_data: Any) -> str:
"""感知环境输入,将多模态数据转化为内部表示"""
if isinstance(input_data, str):
return input_data
# 可扩展为图像识别、语音转文字等
return str(input_data)
def reason(self, observation: str) -> Dict[str, Any]:
"""基于观察进行推理,决定下一步行动"""
# 调用 LLM 进行推理
prompt = f"""
目标: {self.goal}
当前观察: {observation}
历史记忆: {self.memory[-5:] if self.memory else '无'}
可用工具: {list(self.tools.keys())}
请分析当前情况,决定下一步行动。
输出格式: {{"thought": "思考过程", "action": "工具名称", "action_input": "输入参数"}}
"""
# 实际实现中调用 LLM API
return {"thought": "...", "action": "...", "action_input": "..."}
def act(self, action: str, action_input: Any) -> str:
"""执行行动,调用对应工具"""
if action in self.tools:
return self.tools[action](action_input)
return f"未知工具: {action}"
def remember(self, experience: Dict[str, Any]):
"""将经验存入记忆"""
self.memory.append(experience)
def run(self, task: str) -> str:
"""Agent 主循环"""
observation = self.perceive(task)
for i in range(self.max_iterations):
decision = self.reason(observation)
if decision.get("action") == "finish":
return decision.get("action_input", "任务完成")
result = self.act(decision["action"], decision["action_input"])
self.remember({
"step": i,
"thought": decision.get("thought"),
"action": decision["action"],
"result": result
})
observation = result
return "达到最大迭代次数,任务未完成"
16.2 从 ChatBot 到 Copilot 到 Agent 的演进#
AI 应用的演进经历了三个明显的阶段,每个阶段代表着自主性和能力的显著提升:
第一阶段:ChatBot(聊天机器人)#
ChatBot 是最基础的对话式 AI,其特点是:
被动响应:只在用户提问时才回答
无状态:每次对话独立,缺乏上下文记忆
单轮交互:一问一答,无法处理复杂任务
无工具使用:只能生成文本,不能执行操作
第二阶段:Copilot(副驾驶)#
Copilot 在 ChatBot 基础上增加了上下文感知和辅助能力:
上下文感知:理解用户当前的工作环境(如代码编辑器、文档)
主动建议:在适当时机提供建议(如代码补全)
有限工具使用:可以执行预定义的操作
人在回路:所有关键决策仍由人类做出
第三阶段:Agent(自主智能体)#
Agent 代表了当前 AI 应用的最高形态:
目标驱动:接受高层目标,自主分解为子任务
自主决策:独立选择工具和策略
多步推理:能够进行复杂的多步骤推理和规划
环境交互:主动与外部系统交互
自我反思:评估自身行为并进行调整
# 三个阶段的能力对比
evolution_comparison = {
"维度": ["自主性", "工具使用", "记忆", "规划", "反思", "多步推理", "环境交互"],
"ChatBot": ["低", "无", "无", "无", "无", "无", "无"],
"Copilot": ["中", "有限", "短期", "简单", "无", "有限", "被动"],
"Agent": ["高", "丰富", "长期", "复杂", "有", "深度", "主动"],
}
16.3 Agent 的核心能力模型#
一个成熟的 AI Agent 需要具备五大核心能力,它们构成了 Agent 的能力五边形:
16.3.1 感知(Perception)#
感知是 Agent 与外部世界交互的入口。现代 Agent 支持多模态感知:
class PerceptionModule:
"""多模态感知模块"""
def __init__(self, llm_client):
self.llm = llm_client
def perceive_text(self, text: str) -> dict:
"""文本感知:理解用户意图、提取实体、识别情感"""
response = self.llm.chat.completions.create(
model="gpt-4o",
messages=[{
"role": "system",
"content": "分析以下文本,提取意图、关键实体和情感倾向。"
}, {
"role": "user",
"content": text
}],
response_format={"type": "json_object"}
)
return json.loads(response.choices[0].message.content)
def perceive_image(self, image_url: str, question: str) -> str:
"""图像感知:理解图像内容"""
response = self.llm.chat.completions.create(
model="gpt-4o",
messages=[{
"role": "user",
"content": [
{"type": "text", "text": question},
{"type": "image_url", "image_url": {"url": image_url}}
]
}]
)
return response.choices[0].message.content
16.3.2 推理(Reasoning)#
推理是 Agent 的"大脑",负责分析信息、做出判断:
演绎推理:从一般规则推导具体结论
归纳推理:从具体案例总结一般规律
类比推理:将已知领域的知识迁移到新领域
因果推理:理解事件之间的因果关系
16.3.3 规划(Planning)#
规划能力使 Agent 能够将复杂目标分解为可执行的步骤序列:
class PlanningModule:
"""任务规划模块"""
def create_plan(self, goal: str, context: str = "") -> list:
"""将高层目标分解为具体步骤"""
prompt = f"""
目标: {goal}
上下文: {context}
请将此目标分解为具体的执行步骤。每个步骤应包含:
1. step_id: 步骤编号
2. description: 步骤描述
3. dependencies: 依赖的前置步骤
4. tool: 需要使用的工具
5. expected_output: 预期输出
以 JSON 数组格式输出。
"""
# 调用 LLM 生成计划
return self._call_llm(prompt)
def replan(self, original_plan: list, feedback: str) -> list:
"""根据执行反馈重新规划"""
prompt = f"""
原始计划: {json.dumps(original_plan, ensure_ascii=False)}
执行反馈: {feedback}
请根据反馈调整计划。保留已成功的步骤,修改或替换失败的步骤。
"""
return self._call_llm(prompt)
16.3.4 行动(Action)#
行动是 Agent 影响外部世界的方式,主要通过工具调用实现。
16.3.5 记忆(Memory)#
记忆使 Agent 能够从过去的经验中学习,并在长期交互中保持一致性。
16.4 单 Agent vs 多 Agent#
单 Agent 系统#
单 Agent 系统由一个 Agent 独立完成所有任务,适用于:
任务相对简单,不需要多种专业技能
对响应延迟要求高
系统复杂度需要保持较低
多 Agent 系统#
多 Agent 系统由多个专业化的 Agent 协作完成复杂任务:
from enum import Enum
from typing import Optional
class AgentRole(Enum):
COORDINATOR = "coordinator" # 协调者:分配任务、整合结果
RESEARCHER = "researcher" # 研究者:信息收集与分析
CODER = "coder" # 编码者:代码编写与调试
REVIEWER = "reviewer" # 审查者:质量检查与反馈
WRITER = "writer" # 写作者:文档与报告撰写
@dataclass
class AgentMessage:
"""Agent 间通信消息"""
sender: str
receiver: str
content: str
message_type: str # "task", "result", "feedback", "query"
priority: int = 0
metadata: Dict[str, Any] = field(default_factory=dict)
class MultiAgentSystem:
"""多 Agent 协作系统"""
def __init__(self):
self.agents: Dict[str, AIAgent] = {}
self.message_queue: List[AgentMessage] = []
def register_agent(self, agent: AIAgent, role: AgentRole):
self.agents[role.value] = agent
def dispatch_task(self, task: str) -> str:
"""任务分发与协调"""
# 1. 协调者分析任务
coordinator = self.agents.get("coordinator")
plan = coordinator.reason(f"分析任务并分配给合适的 Agent: {task}")
# 2. 按计划分发子任务
results = {}
for subtask in plan.get("subtasks", []):
agent_role = subtask["assigned_to"]
agent = self.agents.get(agent_role)
if agent:
result = agent.run(subtask["description"])
results[agent_role] = result
# 3. 整合结果
return coordinator.reason(f"整合以下结果: {results}")
16.5 Agent 的典型应用场景#
AI Agent 正在各个领域展现出巨大的应用潜力:
应用领域 |
典型场景 |
代表产品/项目 |
|---|---|---|
软件开发 |
代码生成、Bug修复、代码审查 |
Devin, GitHub Copilot Workspace, Cursor |
数据分析 |
自动化数据探索、报告生成 |
Code Interpreter, Julius AI |
客户服务 |
智能客服、工单处理 |
Intercom Fin, Sierra |
科学研究 |
文献综述、实验设计 |
ChemCrow, Coscientist |
办公自动化 |
邮件处理、日程管理、文档撰写 |
Microsoft 365 Copilot |
网络安全 |
威胁检测、漏洞分析 |
Microsoft Security Copilot |
16.6 Agent 成熟度评估模型#
我们可以用一个五级成熟度模型来评估 Agent 系统:
class AgentMaturityLevel(Enum):
"""Agent 成熟度等级"""
L1_REACTIVE = "L1: 反应式 - 简单的输入输出映射,无记忆无规划"
L2_CONTEXTUAL = "L2: 上下文感知 - 理解对话上下文,有短期记忆"
L3_TOOL_USING = "L3: 工具使用 - 能调用外部工具完成任务"
L4_AUTONOMOUS = "L4: 自主规划 - 能分解目标、制定计划、自主执行"
L5_ADAPTIVE = "L5: 自适应 - 能从经验中学习、自我改进、处理未知场景"
def assess_maturity(agent_capabilities: dict) -> AgentMaturityLevel:
"""评估 Agent 成熟度"""
score = 0
if agent_capabilities.get("context_awareness"):
score += 1
if agent_capabilities.get("tool_usage"):
score += 1
if agent_capabilities.get("planning"):
score += 1
if agent_capabilities.get("self_improvement"):
score += 1
levels = [
AgentMaturityLevel.L1_REACTIVE,
AgentMaturityLevel.L2_CONTEXTUAL,
AgentMaturityLevel.L3_TOOL_USING,
AgentMaturityLevel.L4_AUTONOMOUS,
AgentMaturityLevel.L5_ADAPTIVE,
]
return levels[min(score, 4)]
16.7 Agent 与传统软件的本质区别#
AI Agent 与传统软件在多个维度上存在根本性差异:
维度 |
传统软件 |
AI Agent |
|---|---|---|
执行逻辑 |
确定性:相同输入产生相同输出 |
非确定性:相同输入可能产生不同输出 |
控制流 |
预定义的分支和循环 |
动态决策,LLM 驱动的控制流 |
错误处理 |
预定义的异常处理 |
自适应错误恢复,可自我纠正 |
接口定义 |
严格的 API 契约 |
自然语言接口,灵活但模糊 |
测试方法 |
确定性断言 |
概率性评估,需要多维度评测 |
扩展方式 |
修改代码、添加模块 |
添加工具、调整提示词 |
资源消耗 |
可预测的 CPU/内存 |
LLM 调用成本高且不可预测 |
这些差异意味着我们需要全新的工程方法论来构建和维护 Agent 系统。传统的软件工程实践——如确定性测试、严格的接口契约、可预测的性能模型——都需要在 Agent 时代进行根本性的重新思考。
16.8 本章小结#
本章从宏观视角介绍了 AI Agent 的基本概念和发展脉络。我们了解到:
Agent 的本质是一个能够自主感知、推理、规划和行动的智能系统
从 ChatBot 到 Agent 的演进代表了 AI 应用自主性的持续提升
五大核心能力(感知、推理、规划、行动、记忆)构成了 Agent 的能力基础
单 Agent 与多 Agent 各有适用场景,复杂任务往往需要多 Agent 协作
Agent 与传统软件存在本质区别,需要新的工程方法论
在接下来的章节中,我们将深入探讨 Agent 的架构模式、开发框架、工具系统、记忆管理、多 Agent 协作以及评估测试等核心主题。