18-其他类型Agent:从Plan-Execute到Multi-Agent协作

11 阅读17分钟

Agent架构全景

在上一章中,我们学习了ReactAgent——通过交替进行推理和行动来解决问题。但ReactAgent并非唯一的Agent范式,不同的任务需要不同的架构。本章将介绍其他主流的Agent类型。

Agent架构分类

Agent架构
├── 单步Agent
│   ├── Function Calling Agent(直接工具调用)
│   └── Zero-Shot Agent(单次推理)
├── 多步Agent
│   ├── ReAct Agent(边思考边行动)✓ 已学习
│   ├── Plan-and-Execute Agent(先规划后执行)
│   └── Reflexion Agent(反思型)
├── 自主Agent
│   ├── AutoGPT(目标驱动)
│   └── BabyAGI(任务分解)
└── Multi-Agent(多智能体协作)
    ├── 辩论型(Debate)
    └── 协作型(Collaboration)

1. Plan-and-Execute Agent

核心思想

先完整规划,再依次执行,类似于人类做项目的方式:

传统做法(ReAct):
→ 思考 → 行动 → 观察 → 再思考 → 再行动...
(边做边想)

Plan-and-Execute:
→ 规划阶段(一次性制定完整计划)
→ 执行阶段(按计划逐步执行)

工作流程

┌─────────────────────────────────────┐
│  Planner(规划器)                   │
│  输入:用户任务                      │
│  输出:完整的执行计划                │
└──────────────┬──────────────────────┘
               ↓
┌─────────────────────────────────────┐
│  Executor(执行器)                  │
│  按计划逐步执行,调用工具            │
└──────────────┬──────────────────────┘
               ↓
┌─────────────────────────────────────┐
│  Re-Planner(重新规划器,可选)      │
│  如果执行失败,修改计划              │
└─────────────────────────────────────┘

实现示例

class PlanAndExecuteAgent:
    def __init__(self, llm, tools):
        self.llm = llm
        self.tools = tools

    def run(self, task: str) -> str:
        # 阶段1:制定计划
        plan = self.plan(task)
        print(f"Plan:\n{plan}\n")

        # 阶段2:执行计划
        results = []
        for i, step in enumerate(plan.steps):
            print(f"Executing Step {i+1}: {step.description}")
            result = self.execute_step(step)
            results.append(result)

            # 如果执行失败,重新规划
            if result.status == "failed":
                print(f"Step {i+1} failed, re-planning...")
                plan = self.replan(task, plan, results)

        # 阶段3:合成最终答案
        answer = self.synthesize(task, results)
        return answer

    def plan(self, task: str):
        """制定执行计划"""
        prompt = f"""
任务:{task}

请制定一个详细的执行计划,将任务分解为3-5个步骤。

每个步骤应包含:
1. 步骤描述
2. 需要使用的工具
3. 期望输出

输出格式:
Step 1: [描述]
Tool: [工具名]
Expected: [期望结果]

Step 2: ...
"""
        response = self.llm.generate(prompt)
        plan = self._parse_plan(response)
        return plan

    def execute_step(self, step):
        """执行单个步骤"""
        tool_name = step.tool
        tool_input = step.input

        try:
            tool = self.tools[tool_name]
            result = tool(tool_input)
            return ExecutionResult(status="success", output=result)
        except Exception as e:
            return ExecutionResult(status="failed", error=str(e))

    def synthesize(self, task: str, results: List):
        """基于所有结果合成最终答案"""
        prompt = f"""
原始任务:{task}

执行结果:
{self._format_results(results)}

请基于这些结果,给出最终答案。
"""
        answer = self.llm.generate(prompt)
        return answer

完整示例

任务:查询"明天北京的天气,并推荐合适的穿衣"

=== 规划阶段 ===
Plan:
Step 1: 获取明天的日期
Tool: get_time
Expected: 2024-03-16

Step 2: 查询北京明天的天气
Tool: search_weather
Expected: 温度、天气状况

Step 3: 基于天气推荐穿衣
Tool: llm_reasoning
Expected: 穿衣建议

=== 执行阶段 ===
Executing Step 1: 获取明天的日期
Result: 2024-03-16

Executing Step 2: 查询北京明天的天气
Result: 晴,温度10-20°C,微风

Executing Step 3: 基于天气推荐穿衣
Result: 建议穿长袖+薄外套

=== 合成答案 ===
明天(3月16日)北京天气晴朗,温度10-20°C。建议穿着:
- 早晚:长袖+薄外套
- 中午:可以只穿长袖

优缺点

优点

  • ✅ 计划清晰,易于理解
  • ✅ 可以并行执行独立步骤
  • ✅ 便于监控进度
  • ✅ Token消耗相对固定(不像ReAct可能多次规划)

缺点

  • ❌ 不灵活,难以应对意外情况
  • ❌ 如果早期步骤失败,整个计划可能失效
  • ❌ 难以处理需要动态调整的任务

适用场景

  • 任务步骤明确、可预知
  • 需要并行执行多个独立操作
  • 对可解释性要求高

2. Reflexion Agent(反思型Agent)

核心思想

通过自我反思和评估来改进行动,类似于人类的"trial and error"学习过程。

传统Agent:
尝试 → 失败 → 结束(或重试)

Reflexion Agent:
尝试 → 失败 → 反思(为什么失败?)→ 改进策略 → 重新尝试

三大组件

┌─────────────────────────────────────┐
│  Actor(执行者)                     │
│  执行任务,生成输出                  │
└──────────────┬──────────────────────┘
               ↓
┌─────────────────────────────────────┐
│  Evaluator(评估者)                 │
│  评估输出质量,判断是否成功          │
└──────────────┬──────────────────────┘
               ↓
┌─────────────────────────────────────┐
│  Self-Reflection(自我反思)         │
│  分析失败原因,生成改进建议          │
└──────────────┬──────────────────────┘
               ↓
        反馈给Actor

实现示例

class ReflexionAgent:
    def __init__(self, llm, evaluator, max_iterations=3):
        self.llm = llm
        self.evaluator = evaluator
        self.max_iterations = max_iterations
        self.memory = []  # 存储历史尝试和反思

    def run(self, task: str) -> str:
        for iteration in range(self.max_iterations):
            print(f"\n=== Iteration {iteration + 1} ===")

            # 1. Actor:执行任务
            context = self._build_context(task)
            output = self.actor(task, context)
            print(f"Output: {output}")

            # 2. Evaluator:评估结果
            evaluation = self.evaluator(task, output)
            print(f"Evaluation: {evaluation}")

            if evaluation.is_correct:
                return output

            # 3. Self-Reflection:反思
            reflection = self.reflect(task, output, evaluation)
            print(f"Reflection: {reflection}")

            # 4. 存储到记忆
            self.memory.append({
                "iteration": iteration + 1,
                "output": output,
                "evaluation": evaluation,
                "reflection": reflection
            })

        return "达到最大迭代次数,任务未完成"

    def actor(self, task: str, context: str) -> str:
        """执行者:生成输出"""
        prompt = f"""
任务:{task}

{context}

请完成这个任务。
"""
        return self.llm.generate(prompt)

    def reflect(self, task: str, output: str, evaluation) -> str:
        """反思:分析失败原因"""
        prompt = f"""
任务:{task}
你的输出:{output}
评估结果:{evaluation.feedback}

请分析:
1. 为什么这个输出是错误的?
2. 哪些方面需要改进?
3. 下次应该怎么做?

输出格式:
原因:...
改进点:...
下次策略:...
"""
        return self.llm.generate(prompt)

    def _build_context(self, task: str) -> str:
        """构建上下文(包含历史反思)"""
        if not self.memory:
            return ""

        context = "以下是你之前的尝试和反思,请从中学习:\n\n"
        for m in self.memory:
            context += f"尝试 {m['iteration']}:\n"
            context += f"输出:{m['output']}\n"
            context += f"评估:{m['evaluation'].feedback}\n"
            context += f"反思:{m['reflection']}\n\n"

        return context

实际示例

任务:编写一个Python函数,计算斐波那契数列的第n项

=== Iteration 1 ===
Output:
def fib(n):
    if n <= 1:
        return n
    return fib(n-1) + fib(n+1)  # 错误!

Evaluation: 错误。fib(10)导致无限递归

Reflection:
原因:递归调用写错了,应该是fib(n-1) + fib(n-2)
改进点:检查递归的base case和递归公式
下次策略:仔细验证递归逻辑

=== Iteration 2 ===
Output:
def fib(n):
    if n <= 1:
        return n
    return fib(n-1) + fib(n-2)  # 正确!

Evaluation: 正确。所有测试用例通过

任务完成!

优缺点

优点

  • ✅ 能够从错误中学习
  • ✅ 逐步改进输出质量
  • ✅ 适合需要多次迭代的任务

缺点

  • ❌ 需要可靠的评估器(evaluator)
  • ❌ 迭代次数多,token消耗大
  • ❌ 可能陷入相同错误的循环

适用场景

  • 代码生成(有明确的测试标准)
  • 数学问题(有正确答案)
  • 需要反复优化的创作任务

3. AutoGPT类型的自主Agent

核心思想

完全自主的目标驱动型Agent,给定一个高层目标,自己分解任务、执行、监控进度,直到完成。

用户:帮我调研并写一份关于AI的报告

AutoGPT:
1. 分解任务:
   - 搜索AI相关资料
   - 整理要点
   - 撰写报告
   - 审阅修改
2. 自主执行每个步骤
3. 监控进度(到哪一步了?)
4. 完成目标

关键特性

1. 目标驱动

goal = "创建一个Python爬虫,抓取新闻网站"
agent.run(goal)  # 完全自主完成

2. 长期记忆

# 短期记忆:当前任务上下文
# 长期记忆:之前完成的任务、学到的经验

3. 自我评估

# 每一步后问:我是否朝目标前进?还需要做什么?

简化实现

class AutoGPTAgent:
    def __init__(self, llm, tools):
        self.llm = llm
        self.tools = tools
        self.task_history = []
        self.long_term_memory = []

    def run(self, goal: str, max_iterations=10):
        """运行自主Agent"""
        print(f"Goal: {goal}\n")

        for i in range(max_iterations):
            print(f"\n=== Iteration {i+1} ===")

            # 1. 生成下一步行动
            next_action = self.think(goal)
            print(f"Next Action: {next_action}")

            if next_action.type == "finish":
                print(f"Goal achieved: {next_action.result}")
                return next_action.result

            # 2. 执行行动
            result = self.execute(next_action)
            print(f"Result: {result}")

            # 3. 评估进度
            progress = self.evaluate_progress(goal, self.task_history)
            print(f"Progress: {progress}")

            # 4. 记录历史
            self.task_history.append({
                "action": next_action,
                "result": result,
                "progress": progress
            })

        return "达到最大迭代次数"

    def think(self, goal: str):
        """思考下一步做什么"""
        prompt = f"""
目标:{goal}

当前进度:
{self._format_history()}

可用工具:
{self._format_tools()}

请决定下一步行动:
1. 我们已经完成了什么?
2. 还需要做什么才能达成目标?
3. 下一步应该执行什么操作?

输出格式:
Thought: [思考]
Action: [工具名或finish]
Action Input: [参数]
"""
        response = self.llm.generate(prompt)
        return self._parse_action(response)

    def evaluate_progress(self, goal: str, history: List) -> str:
        """评估当前进度"""
        prompt = f"""
目标:{goal}

已完成的步骤:
{self._format_history()}

请评估:
1. 我们离目标还有多远?(0-100%)
2. 当前策略是否有效?
3. 是否需要调整方向?

输出格式:
Progress: [数字]%
Assessment: [评估]
Recommendation: [建议]
"""
        return self.llm.generate(prompt)

实际示例

目标:创建一个简单的待办事项网页应用

=== Iteration 1 ===
Thought: 需要先设计应用的功能和结构
Action: plan
Action Input: 设计待办事项应用
Result: 应用需要:添加任务、删除任务、标记完成

Progress: 10%
Assessment: 方向正确,开始规划
Recommendation: 继续细化技术栈

=== Iteration 2 ===
Thought: 确定使用HTML+CSS+JavaScript
Action: create_file
Action Input: index.html
Result: 创建了基础HTML文件

Progress: 30%
Assessment: 有了基础结构
Recommendation: 添加样式和交互

=== Iteration 3 ===
Thought: 添加CSS样式
Action: create_file
Action Input: style.css
Result: 创建了CSS文件,设计了界面

Progress: 50%
...

=== Iteration 6 ===
Thought: 所有功能已实现,测试通过
Action: finish
Action Input: 待办事项应用已完成
Goal achieved: 应用已创建,包含添加、删除、标记功能

优缺点

优点

  • ✅ 高度自主,无需逐步指导
  • ✅ 能够处理开放式、长期任务
  • ✅ 自我监控和调整

缺点

  • ❌ Token消耗巨大(每步都要完整推理)
  • ❌ 容易偏离目标(需要强约束)
  • ❌ 可能产生意外操作(安全风险)
  • ❌ 调试困难(自主性太高)

适用场景

  • 开放式研究任务
  • 创作类任务(写作、设计)
  • 不需要实时响应的后台任务

注意事项

  • 🚨 必须有权限控制(不能随意执行系统命令)
  • 🚨 需要监控token消耗
  • 🚨 建议在沙箱环境运行

4. Function Calling Agent

核心思想

利用大模型原生的Function Calling能力,让模型自动决定何时调用哪个函数。

传统Agent:通过prompt engineering让模型输出工具名
Function Calling:模型原生支持,输出结构化的函数调用

OpenAI Function Calling示例

import openai

class FunctionCallingAgent:
    def __init__(self, api_key):
        openai.api_key = api_key
        self.messages = []
        self.functions = self._define_functions()

    def _define_functions(self):
        """定义可用函数"""
        return [
            {
                "name": "search_web",
                "description": "在互联网上搜索信息",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "query": {
                            "type": "string",
                            "description": "搜索关键词"
                        }
                    },
                    "required": ["query"]
                }
            },
            {
                "name": "calculate",
                "description": "执行数学计算",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "expression": {
                            "type": "string",
                            "description": "数学表达式,如 '2+2' 或 '10*5'"
                        }
                    },
                    "required": ["expression"]
                }
            }
        ]

    def run(self, user_message: str) -> str:
        """运行Agent"""
        self.messages.append({
            "role": "user",
            "content": user_message
        })

        while True:
            # 调用模型
            response = openai.ChatCompletion.create(
                model="gpt-4",
                messages=self.messages,
                functions=self.functions,
                function_call="auto"  # 自动决定是否调用函数
            )

            message = response.choices[0].message

            # 如果模型决定调用函数
            if message.get("function_call"):
                function_name = message["function_call"]["name"]
                function_args = json.loads(message["function_call"]["arguments"])

                print(f"Calling: {function_name}({function_args})")

                # 执行函数
                function_result = self._execute_function(
                    function_name,
                    function_args
                )

                print(f"Result: {function_result}")

                # 将函数结果添加到对话历史
                self.messages.append(message)
                self.messages.append({
                    "role": "function",
                    "name": function_name,
                    "content": str(function_result)
                })

            else:
                # 模型给出最终回答
                return message["content"]

    def _execute_function(self, name: str, args: dict):
        """执行函数"""
        if name == "search_web":
            return self.search_web(args["query"])
        elif name == "calculate":
            return self.calculate(args["expression"])
        else:
            return f"Unknown function: {name}"

    def search_web(self, query: str) -> str:
        # 实际搜索实现
        return f"Search results for: {query}"

    def calculate(self, expression: str) -> str:
        try:
            result = eval(expression)
            return str(result)
        except Exception as e:
            return f"Error: {e}"

使用示例

agent = FunctionCallingAgent(api_key="your-key")
response = agent.run("明天北京的天气怎么样?")

# 执行过程:
# 1. 模型识别需要查询天气
# 2. 自动调用 search_web(query="明天北京天气")
# 3. 获得结果
# 4. 基于结果生成自然语言回答

优缺点

优点

  • ✅ 原生支持,无需复杂prompt engineering
  • ✅ 结构化输出,易于解析
  • ✅ 参数验证(模型会尝试匹配参数类型)
  • ✅ 可靠性高

缺点

  • ❌ 依赖特定模型(OpenAI、Claude等)
  • ❌ 不如ReAct灵活(无法细粒度控制思考过程)
  • ❌ 成本可能较高(需要支持Function Calling的高级模型)

适用场景

  • 使用支持Function Calling的模型
  • 工具调用频繁但逻辑简单的任务
  • 需要高可靠性的生产环境

5. Multi-Agent系统

核心思想

多个Agent协作完成任务,每个Agent有专门的角色和能力。

单Agent:一个人干所有活
Multi-Agent:团队协作,各司其职

架构模式

模式1:Manager-Worker(管理者-工人)

┌─────────────────┐
│  Manager Agent  │ ← 分配任务、协调工作
└────────┬────────┘
         │
    ┌────┴────┬────────┬────────┐
    ↓         ↓        ↓        ↓
┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐
│Worker 1│ │Worker 2│ │Worker 3│ │Worker 4│
│(搜索)  │ │(计算)  │ │(写作)  │ │(代码)  │
└────────┘ └────────┘ └────────┘ └────────┘

实现示例

class ManagerWorkerSystem:
    def __init__(self, llm):
        self.llm = llm
        self.manager = ManagerAgent(llm)
        self.workers = {
            "searcher": SearchAgent(),
            "calculator": CalculatorAgent(),
            "writer": WriterAgent(),
            "coder": CoderAgent()
        }

    def run(self, task: str) -> str:
        # Manager分解任务
        plan = self.manager.plan(task)

        # 分配给各个Worker
        results = {}
        for subtask in plan.subtasks:
            worker_name = subtask.assigned_to
            worker = self.workers[worker_name]

            result = worker.execute(subtask)
            results[subtask.id] = result

        # Manager综合结果
        final_answer = self.manager.synthesize(task, results)
        return final_answer

模式2:Debate(辩论型)

多个Agent从不同角度分析问题,通过辩论达成共识。

┌────────────┐    ┌────────────┐    ┌────────────┐
│  Agent A   │───▶│  Agent B   │───▶│  Agent C   │
│  (正方)    │    │  (反方)    │    │  (裁判)    │
└────────────┘    └────────────┘    └────────────┘
     │                  │                  │
     └──────────────────┴──────────────────┘
              多轮辩论,达成共识

示例

class DebateSystem:
    def __init__(self, llm):
        self.advocate = Agent(llm, role="advocate")    # 正方
        self.critic = Agent(llm, role="critic")        # 反方
        self.judge = Agent(llm, role="judge")          # 裁判

    def run(self, question: str, rounds=3) -> str:
        conversation = []

        for round in range(rounds):
            # 正方发言
            advocate_arg = self.advocate.speak(
                question, conversation
            )
            conversation.append({
                "role": "advocate",
                "argument": advocate_arg
            })

            # 反方反驳
            critic_arg = self.critic.speak(
                question, conversation
            )
            conversation.append({
                "role": "critic",
                "argument": critic_arg
            })

        # 裁判总结
        final_answer = self.judge.summarize(
            question, conversation
        )
        return final_answer

应用示例

Question: 人工智能是否会取代程序员?

Round 1:
Advocate: AI将大幅提升生产力,能自动生成代码...
Critic: 但AI无法理解复杂的业务逻辑,缺乏创造力...

Round 2:
Advocate: AI正在快速进步,GPT-4已经能写出专业代码...
Critic: 代码质量和维护性仍然是问题,需要人类审查...

Round 3:
Advocate: AI可以作为辅助工具,让程序员更高效...
Critic: 同意,AI是工具而非替代品,程序员角色会演变...

Judge Summary:
AI不会完全取代程序员,但会改变工作方式。程序员需要:
1. 学会使用AI工具
2. 专注于高层设计和创造性工作
3. 掌握AI无法替代的技能(如沟通、业务理解)

模式3:Collaboration(协作型)

多个专家Agent平等协作,共同解决问题。

class CollaborationSystem:
    def __init__(self, llm):
        self.agents = {
            "researcher": ResearchAgent(llm),
            "analyst": AnalystAgent(llm),
            "writer": WriterAgent(llm),
            "reviewer": ReviewerAgent(llm)
        }

    def run(self, task: str) -> str:
        """协作完成任务"""
        shared_memory = SharedMemory()

        # Researcher收集信息
        research_data = self.agents["researcher"].work(task)
        shared_memory.add("research", research_data)

        # Analyst分析数据
        analysis = self.agents["analyst"].work(
            task, shared_memory.get("research")
        )
        shared_memory.add("analysis", analysis)

        # Writer撰写报告
        draft = self.agents["writer"].work(
            task,
            shared_memory.get("research"),
            shared_memory.get("analysis")
        )
        shared_memory.add("draft", draft)

        # Reviewer审阅修改
        final_report = self.agents["reviewer"].work(
            shared_memory.get("draft")
        )

        return final_report

Multi-Agent的优缺点

优点

  • ✅ 专业化:每个Agent擅长特定任务
  • ✅ 并行化:多个Agent同时工作
  • ✅ 鲁棒性:单个Agent失败不影响整体
  • ✅ 可扩展:容易添加新的Agent

缺点

  • ❌ 复杂度高:需要协调和通信机制
  • ❌ Token消耗大:多个Agent都要调用LLM
  • ❌ 可能产生冲突:不同Agent意见不一致
  • ❌ 调试困难:多个Agent交互复杂

适用场景

  • 复杂的跨领域任务
  • 需要多种专业能力
  • 任务可以并行处理
  • 对质量要求高(通过debate提升)

Agent架构对比

综合对比表

Agent类型复杂度Token消耗灵活性可控性适用场景
Function Calling简单工具调用
ReAct通用任务
Plan-Execute明确步骤的任务
Reflexion需要迭代优化
AutoGPT很高很高开放式长期任务
Multi-Agent很高很高复杂跨领域任务

决策树:如何选择Agent?

任务是否只需一次工具调用?
├─ 是 → Function Calling Agent
└─ 否 → 任务步骤是否明确可预知?
    ├─ 是 → Plan-and-Execute Agent
    └─ 否 → 是否需要从错误中学习?
        ├─ 是 → Reflexion Agent
        └─ 否 → 是否是开放式长期任务?
            ├─ 是 → AutoGPT
            └─ 否 → 是否需要多个专业能力?
                ├─ 是 → Multi-Agent System
                └─ 否 → ReAct Agent(通用选择)

实际选择建议

生产环境推荐

  1. 首选:Function Calling Agent(简单可靠)
  2. 次选:ReAct Agent(灵活通用)
  3. 特殊需求:Plan-Execute(明确任务)或Multi-Agent(复杂任务)

研究/实验

  • Reflexion(迭代改进)
  • AutoGPT(探索自主性)
  • Multi-Agent Debate(提升决策质量)

实战:构建一个Multi-Agent系统

场景:智能客服系统

class CustomerServiceSystem:
    def __init__(self, llm):
        self.agents = {
            # 前台接待
            "receptionist": Agent(
                llm,
                role="分析用户问题,分类并路由",
                tools=["classify_intent"]
            ),

            # 技术支持
            "tech_support": Agent(
                llm,
                role="解决技术问题",
                tools=["search_docs", "run_diagnostics"]
            ),

            # 账户管理
            "account_manager": Agent(
                llm,
                role="处理账户相关问题",
                tools=["query_db", "update_account"]
            ),

            # 销售顾问
            "sales_advisor": Agent(
                llm,
                role="产品推荐和咨询",
                tools=["search_products", "check_inventory"]
            ),

            # 质检
            "quality_checker": Agent(
                llm,
                role="检查回复质量,确保满意度",
                tools=[]
            )
        }

    def handle_request(self, user_message: str) -> str:
        # 1. Receptionist分类问题
        classification = self.agents["receptionist"].classify(
            user_message
        )

        # 2. 路由到相应的专业Agent
        if classification.category == "technical":
            handler = self.agents["tech_support"]
        elif classification.category == "account":
            handler = self.agents["account_manager"]
        elif classification.category == "sales":
            handler = self.agents["sales_advisor"]
        else:
            return "抱歉,我无法理解您的问题"

        # 3. 专业Agent处理
        response = handler.handle(user_message)

        # 4. Quality Checker审核
        quality_check = self.agents["quality_checker"].check(
            user_message, response
        )

        if quality_check.score < 0.7:
            # 质量不达标,重新处理
            response = handler.handle(
                user_message,
                feedback=quality_check.suggestions
            )

        return response

使用示例

system = CustomerServiceSystem(llm)

# 技术问题
response = system.handle_request("我的应用登录不了")
# Receptionist: 分类为"technical"
# Tech Support: 运行诊断,查询文档
# Quality Checker: 检查回复完整性
# 输出: "请尝试以下步骤:1. 清除缓存 2. 重启应用..."

# 账户问题
response = system.handle_request("我想修改绑定手机号")
# Receptionist: 分类为"account"
# Account Manager: 查询账户信息,提供修改步骤
# 输出: "您可以通过以下方式修改..."

新兴Agent范式

1. BabyAGI

核心思想:任务列表 + 自动执行 + 优先级排序

class BabyAGI:
    def __init__(self, llm):
        self.llm = llm
        self.task_list = []

    def run(self, objective: str):
        # 初始化任务列表
        self.task_list = [Task(1, "初始任务:" + objective)]

        while self.task_list:
            # 1. 获取优先级最高的任务
            task = self.task_list.pop(0)

            # 2. 执行任务
            result = self.execute_task(task)

            # 3. 基于结果创建新任务
            new_tasks = self.create_new_tasks(
                objective, task, result
            )
            self.task_list.extend(new_tasks)

            # 4. 重新排序任务
            self.task_list = self.prioritize_tasks(
                objective, self.task_list
            )

2. CAMEL (Communicative Agents)

核心思想:两个Agent通过对话完成任务

# AI User: 提出需求
# AI Assistant: 实现需求
# 通过多轮对话,逐步细化和实现

user_agent = Agent(role="user", task="设计一个网站")
assistant_agent = Agent(role="assistant")

for round in range(10):
    user_message = user_agent.speak()
    assistant_response = assistant_agent.respond(user_message)

    if assistant_response.task_complete:
        break

3. Generative Agents(生成式智能体)

核心思想:模拟人类的记忆和行为

  • 记忆流:记住所有经历
  • 反思:定期总结和学习
  • 规划:基于记忆和目标规划行为
class GenerativeAgent:
    def __init__(self, name, traits):
        self.name = name
        self.traits = traits  # 性格特征
        self.memory_stream = []  # 记忆流
        self.reflections = []    # 反思

    def perceive(self, observation):
        """感知环境"""
        self.memory_stream.append({
            "time": now(),
            "type": "observation",
            "content": observation
        })

    def reflect(self):
        """定期反思"""
        if len(self.memory_stream) > 100:
            reflection = self.llm.reflect(
                self.memory_stream[-100:]
            )
            self.reflections.append(reflection)

    def plan(self, goal):
        """基于记忆规划行为"""
        relevant_memories = self.retrieve_memories(goal)
        plan = self.llm.plan(
            goal, relevant_memories, self.traits
        )
        return plan

最佳实践

1. 何时使用哪种Agent?

简单任务(单次工具调用)

✅ Function Calling Agent
❌ AutoGPT(杀鸡用牛刀)

中等任务(需要3-5步)

✅ ReAct Agent(灵活)
✅ Plan-Execute Agent(如果步骤明确)
❌ Multi-Agent(过于复杂)

复杂任务(跨领域、长期)

✅ Multi-Agent System
✅ AutoGPT(如果可控性要求不高)
❌ 单个ReAct Agent(能力有限)

2. 成本控制

Token消耗对比(100步任务):

Agent类型平均Token成本(GPT-4)
Function Calling5,000$0.15
ReAct20,000$0.60
Plan-Execute15,000$0.45
Reflexion30,000$0.90
AutoGPT50,000+$1.50+
Multi-Agent40,000+$1.20+

优化建议

  • 缓存常用查询结果
  • 使用更便宜的模型处理简单步骤
  • 设置最大迭代次数
  • 监控和报警

3. 安全考虑

权限控制

class SafeAgent:
    def __init__(self, llm, tools, allowed_operations):
        self.allowed_operations = allowed_operations

    def execute_tool(self, tool_name, args):
        # 检查权限
        if tool_name not in self.allowed_operations:
            raise PermissionError(
                f"Tool '{tool_name}' not allowed"
            )

        # 检查参数
        if self._is_dangerous(tool_name, args):
            raise SecurityError(
                f"Dangerous operation detected"
            )

        return self.tools[tool_name](args)

沙箱化

# 在Docker容器中运行Agent
# 限制文件系统访问
# 限制网络访问
# 监控系统调用

小结

核心要点

Agent架构选择

  1. Function Calling:简单、可靠,首选
  2. ReAct:通用、灵活,次选
  3. Plan-Execute:明确任务,高可控
  4. Reflexion:需要迭代优化
  5. AutoGPT:开放式任务,需谨慎
  6. Multi-Agent:复杂任务,需要协调

关键设计原则

1. 从简单开始

  • 先尝试单Agent
  • 再考虑Multi-Agent

2. 可观测性

  • 记录每一步
  • 监控token消耗
  • 追踪错误

3. 容错机制

  • 设置最大步数
  • 捕获异常
  • 提供降级方案

4. 用户控制

  • 关键操作需要确认
  • 提供中断机制
  • 允许人工干预

未来趋势

1. 混合架构

  • ReAct + Planning
  • Function Calling + Reflexion
  • 自适应选择架构

2. 更好的协调

  • Multi-Agent通信协议
  • 共享记忆和知识
  • 冲突解决机制

3. 自我改进

  • 从经验中学习
  • 自动优化prompt
  • 发现新的工具组合

4. 标准化

  • Agent通信标准
  • 工具定义标准
  • 评估基准

掌握多种Agent架构,能够根据不同场景选择最合适的方案,是构建实用AI系统的关键能力!