Agent 与多智能体协作:AI 从"聊天"走向"自主执行任务"
LLM 是大脑,Agent 是给它装上手脚和工具箱,让它能行动。
一、从聊天机器人到 Agent
1.1 聊天机器人的能力边界
传统 LLM 交互模式:
你问 → 它答 → 你问 → 它答 → ...
这种模式有三个根本局限:
- 不能行动:无法发邮件、查数据库、调 API
- 不能规划:复杂任务不会拆解步骤
- 不能纠错:出错了不会重试,一条路走到黑
1.2 Agent 的定义
AI Agent(智能体):能够感知环境、做出规划、执行动作、观察反馈、迭代调整直到完成目标的自主系统。
核心公式:
Agent = LLM + 记忆 + 工具 + 规划能力
用户:帮我订一张下周三去上海的机票,要早上的,国航优先。传统 LLM:对不起,我没有访问实时数据的能力。Agent: ① 分析意图 → 需要查航班信息(调用工具) ② 调用携程/航空公司 API → 获取航班列表 ③ 根据约束过滤(下周三、早上、国航) → 得到候选 ④ 把结果呈现给你确认 → 等你回复 ⑤ 收到"订第 2 个" → 调用支付接口 → 出票 → 发邮件确认
二、Agent 的核心架构
┌─────────────────────────────────────────────┐│ AI Agent ││ ││ ┌─────────┐ ┌──────────┐ ┌────────────┐ ││ │ 记忆 │ │ 规划器 │ │ 工具集 │ ││ │ Memory │ │ Planner │ │ Toolbox │ ││ └────┬────┘ └────┬─────┘ └─────┬──────┘ ││ │ │ │ ││ ┌────┴────────────┴──────────────┴──────┐ ││ │ LLM(大脑) │ ││ └───────────────────────────────────────┘ ││ │└─────────────────────────────────────────────┘ │ ↑ ▼ │ 执行动作 ──────→ 环境反馈(Observation)
2.1 记忆(Memory)
Agent 的记忆分两层:
| 记忆类型 | 存储内容 | 技术实现 | 类比 |
|---|---|---|---|
| 短期记忆 | 当前对话历史、当前任务上下文 | 直接放 Prompt 里 | 工作记忆 |
| 长期记忆 | 用户偏好、历史经验、知识积累 | 向量数据库 + RAG | 日记本 |
短期记忆示例: User: "帮我分析 Q3 销售数据" 短期记忆里存储: 当前对话中的所有轮次长期记忆示例: 上次用户说过"我是市场部总监,每月需要销售趋势报告" 下次对话时检索到 → 自动调整输出格式和深度
2.2 工具(Tools)
工具是 Agent "行动能力"的来源。LLM 本身只能生成文本,工具让它能操作现实世界。
常见工具类型:
json{ "tools": [ { "name": "search_web", "description": "搜索互联网获取最新信息", "parameters": { "query": "string" } }, { "name": "read_file", "description": "读取本地文件内容", "parameters": { "path": "string" } }, { "name": "execute_code", "description": "运行 Python 代码并返回结果", "parameters": { "code": "string" } }, { "name": "send_email", "description": "发送邮件", "parameters": { "to": "string", "subject": "string", "body": "string" } }, { "name": "query_database", "description": "执行 SQL 查询(只读)", "parameters": { "sql": "string" } } ]}
工具调用的标准流程(Function Calling):
User: "北京今天天气怎么样?"Agent 内部推理: "我需要获取实时天气数据,用 get_weather 工具" → function_call: {"name": "get_weather", "arguments": {"city": "北京"}}系统执行: get_weather("北京") → {"temp": 28, "condition": "晴"}Agent 接收结果后生成回答: "北京今天晴天,气温 28°C,适合户外活动。"
2.3 规划(Planning)
这是 Agent 和普通 LLM 最大的区别——能不能把一个模糊的大目标拆成可执行的小步骤。
2.3.1 ReAct(Reasoning + Acting)
最经典的 Agent 规划模式。Agent 交替进行"思考"和"行动":
Task: "帮我找出本月销售额最高的产品,并写一封祝贺邮件给它的负责人。"Thought: 我需要先查询本月销售数据,找到最高销售额的产品。Action: query_database("SELECT product, SUM(amount) FROM sales WHERE month=8 GROUP BY product ORDER BY SUM(amount) DESC LIMIT 1")Observation: {"product": "电竞椅 Pro Max", "amount": 520000, "owner": "李明"}Thought: 找到了,是李明的电竞椅。现在我需要李明的邮箱。Action: query_database("SELECT email FROM employees WHERE name='李明'")Observation: {"email": "liming@company.com"}Thought: 信息齐全,现在写邮件并发送。Action: send_email({"to": "liming@company.com", "subject": "恭喜!本月销售冠军", "body": "李明你好,你负责的'电竞椅 Pro Max'本月销售额达52万元..."})Observation: {"status": "sent"}Final Answer: 已发送祝贺邮件给李明。本月销售冠军是"电竞椅 Pro Max",销售额 52 万元。
2.3.2 Plan-and-Execute
先把完整计划列出来,再一步步执行:
Task: "帮我做一个竞品分析报告,关于 Notion 和 Obsidian"Plan: Step 1: 搜索 Notion 的核心功能、定价、目标用户 Step 2: 搜索 Obsidian 的核心功能、定价、目标用户 Step 3: 搜索第三方评测对比 Step 4: 生成对比表格 Step 5: 整合为报告(含 SWOT 分析和推荐结论)执行 Step 1 → 完成 ✓执行 Step 2 → 完成 ✓...执行 Step 5 → 完成 ✓
2.3.3 Self-Reflection
Agent 在执行过程中自我检查:
Step 3 执行结果: "数据只覆盖了欧美市场,缺少亚洲数据"Self-Reflection: "报告不完整,需要补充亚洲市场数据"→ 追加 Step 3.5: 搜索 Notion vs Obsidian 亚洲用户评价→ 重新生成报告
三、Agent 开发框架
3.1 主流框架对比
| 框架 | 特点 | 适合 |
|---|---|---|
| LangChain / LangGraph | 生态最全,图结构编排 | 复杂工作流 |
| AutoGPT | 最早的自主 Agent,全自动 | 实验探索 |
| CrewAI | 多 Agent 协作,角色扮演 | 团队模拟 |
| AutoGen(微软) | 多 Agent 对话,代码执行 | 代码生成 + 审查 |
| OpenAI Swarm | 轻量级,最小化抽象 | 教学、轻量原型 |
| MetaGPT | 仿软件公司 SOP | 软件开发全流程 |
| Dify / Coze | 低代码搭建 Agent | 非开发者、快速搭建 |
3.2 一个 LangChain Agent 的最小示例
pythonfrom langchain_openai import ChatOpenAIfrom langchain.agents import tool, AgentExecutor, create_openai_tools_agentfrom langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder@tooldef get_weather(city: str) -> str: """获取指定城市的天气""" # 实际应调用天气 API return f"{city}今天晴,25°C"llm = ChatOpenAI(model="gpt-4", temperature=0)tools = [get_weather]prompt = ChatPromptTemplate.from_messages([ ("system", "你是一个得力助手,可以使用工具完成用户请求。"), ("user", "{input}"), MessagesPlaceholder(variable_name="agent_scratchpad"),])agent = create_openai_tools_agent(llm, tools, prompt)executor = AgentExecutor(agent=agent, tools=tools, verbose=True)result = executor.invoke({"input": "北京天气怎么样?"})
四、多智能体协作(Multi-Agent)
单个 Agent 可以完成单一任务。现实世界的复杂任务,往往需要多个 Agent 像团队一样协作。
4.1 为什么需要多 Agent?
| 单个 Agent 的问题 | 多 Agent 如何解决 |
|---|---|
| 任务太复杂,单一 Agent 顾此失彼 | 拆分职责,各司其职 |
| 缺乏审查机制,错误无法发现 | 一个 Agent 产出,另一个 Agent review |
| 需要多领域知识 | 每个 Agent 专精一个领域 |
| 难以处理冲突需求 | 多个 Agent 辩论,达成共识 |
4.2 多 Agent 协作拓扑
拓扑 1:顺序流水线
[需求分析 Agent] → [架构设计 Agent] → [编码 Agent] → [测试 Agent] → [部署 Agent]
适合:软件开发全流程、文档生成流水线。上一个的输出是下一个的输入。
拓扑 2:星型(中心调度)
┌──────────┐ │ 调度者 │ │ Dispatcher│ └────┬─────┘ ┌────────────┼────────────┐ ▼ ▼ ▼ [研究员A] [分析员B] [写手C] └────────────┼────────────┘ ▼ 综合成报告
适合:需要协调不同专长的任务,如调研报告生成。
拓扑 3:辩论型
[Agent A: 这个方案好,因为...] ⟷ [Agent B: 不,有问题,因为...] ↓ [裁判 Agent: 综合来看...]
适合:策略决策、风险评估、代码设计评审。
拓扑 4:层级型
[CEO Agent] / | \ [CTO] [CMO] [CFO] / \ | / \ [工程师] [架构师] [分析师] [会计]
适合:模拟公司运作、大型项目的分层次决策。
4.3 CrewAI 示例
pythonfrom crewai import Agent, Task, Crew# 研究员researcher = Agent( role="市场研究员", goal="收集和分析 {topic} 的最新市场数据", backstory="你是一个经验丰富的市场分析师,善于从大量数据中提取关键洞察。", tools=[search_tool, scrape_tool], verbose=True)# 写手writer = Agent( role="商业报告写手", goal="基于研究数据撰写专业的商业分析报告", backstory="你是一个资深的商业报告作家,擅长将复杂数据转化为可读性强的报告。", verbose=True)research_task = Task( description="收集 {topic} 的市场规模、竞品、趋势", agent=researcher, expected_output="一份包含数据的市场调研摘要")writing_task = Task( description="基于上述调研,写一份完整的商业分析报告", agent=writer, expected_output="一份结构完整的 Markdown 报告")crew = Crew(agents=[researcher, writer], tasks=[research_task, writing_task])result = crew.kickoff(inputs={"topic": "AI 编程助手市场"})
五、Agent 的核心挑战
5.1 可靠性
问题:Agent 执行了 7 步,第 6 步出了个小错,前 5 步全部白费。
解法方向:
- 检查点(Checkpointing):每步完成后保存状态,出错了从中间恢复
- 重试与回退:出错自动重试 3 次,不行就换个方案
- 人机协同(Human-in-the-Loop):关键决策暂停,等人确认
5.2 幻觉在行动层的放大
聊天时说错了可以撤回,Agent 说错了可能直接:
- 删了数据库
- 发了错误邮件给全公司
- 花了一万块钱调了错误的 API
解法方向:
- 工具级权限控制(数据库只读、金额上限、高危操作二次确认)
- 沙箱执行(代码在 Docker 里跑,坏了不影响宿主机)
- Output Guardrails(输出经规则校验后才执行)
5.3 无限循环
Agent 可能陷入:试 A → 失败 → 试 B → 失败 → 试 A → 失败 → …
解法:
- 步数上限(Max Iterations)
- Token 预算(超过即停止)
- 循环检测(检测到重复动作模式时中断)
5.4 成本爆炸
Agent 每"思考"一次就要调一次 LLM。一个复杂任务可能调用 20-50 次 API,成本是单次问答的几十倍。
解法:
- 小模型做简单决策,大模型做复杂推理(级联)
- 缓存重复调用结果
- 批处理工具调用(一次调多个工具)
5.5 多 Agent 的协调成本
Agent 越多,通信开销越大。两个 Agent 各说各话,三四个 Agent 意见不统一。
解法:
- 明确角色边界(不要让两个 Agent 职责重叠)
- 强制的输出格式(结构化传递信息,减少歧义)
- 设置仲裁者 Agent(最后拍板)
六、Agent 的能力谱系
Level 0: 聊天机器人 — 你问它答,无工具无记忆Level 1: 带工具的 LLM — 能调用预定义工具,但无自主规划Level 2: 单 Agent — 自主规划 + 执行 + 观察 + 反思Level 3: 多 Agent 协作 — 多角色分工,相互审查Level 4: 自适应 Agent — 自己决定"造"新工具、学习新技能Level 5: 完全自主 Agent — 像人类一样的长期自主运作(目前不存在)
目前工业界主流在 Level 1-2,学术前沿在探索 Level 3-4。Level 5 在未来相当长时间内仍是科幻。
七、实践建议
如果你是第一次构建 Agent
- 从单个工具开始,先让 LLM 能调一个 API,跑通 Function Calling 流程
- 加第二个工具,让 Agent 在"搜索"和"计算"之间自己选择
- 引入规划,尝试让 Agent 做一个需要 2-3 步的任务
- 加记忆,让 Agent 记住用户偏好
- 多 Agent 最后再上——大多数场景单 Agent 就够了
选择框架的建议
只会用 Python,想做原型 → LangChain(生态最广)需要生产级可控状态 → LangGraph(图结构状态机)需要多 Agent 角色扮演 → CrewAI在微软生态(Azure/C#) → AutoGen不想写代码 → Dify / Coze想学理论 → 手写 ReAct,不依赖框架
八、总结
传统 LLM = 会说话的百科全书
Agent = 能动手的助手,会查、会算、会发邮件、会自我纠错
多 Agent = 一个 AI 团队,有分工、有协作、有审查
Agent 的本质是给 LLM 装上了"行动能力"和"闭环思考"。未来的 AI 应用,从"聊天窗口"向"自主执行"演进是确定性的方向。但安全、可靠性、成本,是这条路上的三座大山。
—— 2024-2025 是 Agent 元年,但"元年"之后才是真正落地的开始。





