知识模块
🤖 Agent 知识模块
六、主流 Agent 框架
AutoGPT 与 BabyAGI

AutoGPT 与 BabyAGI

AutoGPTBabyAGI 是自主 Agent(Autonomous Agent)的开创性框架,它们展示了 LLM 如何在没有人类干预的情况下自主完成复杂任务。这些框架启发了后续大量 Agent 系统的设计思路。


一、自主 Agent 概述

1.1 什么是自主 Agent?

┌─────────────────────────────────────────────────────────────┐
│                    自主 Agent vs 传统 Agent                  │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│   传统 Agent(被动式)                                       │
│   ┌─────────────────────────────────────────────────────┐  │
│   │                                                      │  │
│   │   用户输入 → Agent 执行 → 返回结果                   │  │
│   │       ↑                                          │   │
│   │       │                                          │   │
│   │   需要用户明确指令                                 │  │
│   │                                                      │  │
│   └─────────────────────────────────────────────────────┘  │
│                                                             │
│   自主 Agent(主动式)                                       │
│   ┌─────────────────────────────────────────────────────┐  │
│   │                                                      │  │
│   │   目标设定 → 自主规划 → 自主执行 → 自主评估          │  │
│   │       ↑                    ↓                         │  │
│   │       │               是否完成?                     │  │
│   │       │                /    \                        │  │
│   │       │             否      是                        │  │
│   │       │             │       │                        │  │
│   │       └────── 调整策略 ───→ 完成                      │  │
│   │                                                      │  │
│   └─────────────────────────────────────────────────────┘  │
│                                                             │
│   关键差异:                                                 │
│   • 传统 Agent:一次输入一次输出                            │
│   • 自主 Agent:给定目标,自主完成整个任务                  │
│                                                             │
└─────────────────────────────────────────────────────────────┘

1.2 自主 Agent 核心能力

能力描述重要性
目标分解将大目标拆解为子任务⭐⭐⭐⭐⭐
自主规划动态生成执行计划⭐⭐⭐⭐⭐
工具调用使用外部工具扩展能力⭐⭐⭐⭐
自我反思评估执行结果并调整⭐⭐⭐⭐⭐
记忆管理存储和检索历史信息⭐⭐⭐⭐

1.3 发展历程

┌─────────────────────────────────────────────────────────────┐
│                    自主 Agent 发展历程                       │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│   2023年3月                                                 │
│   ├── AutoGPT 发布                                         │
│   │   • 首个真正意义上的自主 Agent                          │
│   │   • GitHub 爆火,一个月 100k+ stars                    │
│   │   • 展示了 LLM 自主执行的可能性                        │
│   │                                                        │
│   2023年4月                                                 │
│   ├── BabyAGI 发布                                         │
│   │   • 更轻量的任务驱动架构                               │
│   │   • 任务队列 + 优先级管理                              │
│   │   • 代码简洁,易于理解和扩展                           │
│   │                                                        │
│   2023年下半年                                              │
│   ├── 大量变体出现                                         │
│   │   • AgentGPT、GPT-Engineer 等                          │
│   │   • 各领域专用自主 Agent                               │
│   │                                                        │
│   2024年                                                    │
│   ├── 自主能力增强                                         │
│   │   • 更强的规划和反思能力                               │
│   │   • 更好的工具使用和错误恢复                           │
│   │   • 多 Agent 协作成为趋势                              │
│                                                             │
└─────────────────────────────────────────────────────────────┘

二、AutoGPT 详解

2.1 核心架构

┌─────────────────────────────────────────────────────────────┐
│                    AutoGPT 架构                              │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│   ┌─────────────────────────────────────────────────────┐  │
│   │                    用户层                           │  │
│   │  ┌─────────────────────────────────────────────┐    │  │
│   │  │  目标输入:"研究 AI 发展趋势并写一篇报告"    │    │  │
│   │  └─────────────────────────────────────────────┘    │  │
│   └─────────────────────────────────────────────────────┘  │
│                          │                                  │
│                          ↓                                  │
│   ┌─────────────────────────────────────────────────────┐  │
│   │                 AutoGPT 核心循环                    │  │
│   │                                                      │  │
│   │  ┌───────────────────────────────────────────────┐  │  │
│   │  │              1. 思考 (Thinking)               │  │  │
│   │  │  ┌─────────────────────────────────────────┐  │  │  │
│   │  │  │ • 分析当前状态                          │  │  │  │
│   │  │  │ • 决定下一步行动                        │  │  │  │
│   │  │  │ • 选择要使用的工具                      │  │  │  │
│   │  │  └─────────────────────────────────────────┘  │  │  │
│   │  └───────────────────────────────────────────────┘  │  │
│   │                       │                              │  │
│   │                       ↓                              │  │
│   │  ┌───────────────────────────────────────────────┐  │  │
│   │  │              2. 执行 (Acting)                 │  │  │
│   │  │  ┌─────────────────────────────────────────┐  │  │  │
│   │  │  │ • 调用工具(搜索/文件/代码执行)        │  │  │  │
│   │  │  │ • 获取执行结果                          │  │  │  │
│   │  │  └─────────────────────────────────────────┘  │  │  │
│   │  └───────────────────────────────────────────────┘  │  │
│   │                       │                              │  │
│   │                       ↓                              │  │
│   │  ┌───────────────────────────────────────────────┐  │  │
│   │  │              3. 评估 (Evaluating)             │  │  │
│   │  │  ┌─────────────────────────────────────────┐  │  │  │
│   │  │  │ • 检查是否达成目标                      │  │  │  │
│   │  │  │ • 决定是否需要更多步骤                  │  │  │  │
│   │  │  │ • 更新任务列表                          │  │  │  │
│   │  │  └─────────────────────────────────────────┘  │  │  │
│   │  └───────────────────────────────────────────────┘  │  │
│   │                       │                              │  │
│   │              ┌────────┴────────┐                     │  │
│   │              ↓                 ↓                     │  │
│   │         [继续循环]        [任务完成]                  │  │
│   └─────────────────────────────────────────────────────┘  │
│                          │                                  │
│                          ↓                                  │
│   ┌─────────────────────────────────────────────────────┐  │
│   │                 支撑组件                            │  │
│   │  ┌──────────┐ ┌──────────┐ ┌──────────┐            │  │
│   │  │  Memory  │ │  Tools   │ │  Files   │            │  │
│   │  │  记忆    │ │  工具    │ │  文件    │            │  │
│   │  └──────────┘ └──────────┘ └──────────┘            │  │
│   └─────────────────────────────────────────────────────┘  │
│                                                             │
└─────────────────────────────────────────────────────────────┘

2.2 核心组件

组件功能实现方式
Prompt Generator生成提示词基于目标和历史动态生成
Command Registry命令注册表管理可用工具和命令
Memory记忆系统向量存储 + 本地文件
Workspace工作空间文件读写和管理
Feedback反馈机制用户反馈 + 自我评估

2.3 AutoGPT 代码解析

"""
AutoGPT 核心实现解析
简化版,展示核心逻辑
"""
 
from typing import List, Dict, Any
from dataclasses import dataclass
import json
 
 
@dataclass
class Task:
    """任务定义"""
    name: str
    description: str
    status: str = "pending"  # pending, in_progress, completed
    result: str = ""
 
 
class AutoGPT:
    """
    AutoGPT 核心实现
    
    核心循环:
    1. 思考:分析当前状态,决定下一步
    2. 执行:调用工具,获取结果
    3. 评估:检查进度,更新任务列表
    """
    
    SYSTEM_PROMPT = """
你是一个自主 AI Agent,你的目标是完成用户指定的任务。
 
当前状态:
- 目标:{goal}
- 已完成任务:{completed_tasks}
- 待执行任务:{pending_tasks}
- 记忆摘要:{memory_summary}
 
你可以使用以下命令:
{commands}
 
请按以下格式输出:
THOUGHTS: 你的思考过程
REASONING: 为什么这样做
PLAN: 执行计划
CRITICISM: 自我批评和改进
SPEAK: 与用户交流的内容
COMMAND: 要执行的命令
ARGS: 命令参数(JSON格式)
"""
    
    def __init__(
        self,
        name: str,
        role: str,
        goals: List[str],
        llm,
        tools: Dict[str, callable]
    ):
        self.name = name
        self.role = role
        self.goals = goals
        self.llm = llm
        self.tools = tools
        
        # 任务列表
        self.task_list: List[Task] = []
        
        # 记忆系统
        self.memory: List[str] = []
        
        # 执行历史
        self.history: List[Dict] = []
    
    def _build_prompt(self) -> str:
        """构建提示词"""
        completed = [t for t in self.task_list if t.status == "completed"]
        pending = [t for t in self.task_list if t.status == "pending"]
        
        commands = "\n".join([
            f"- {name}: {desc}"
            for name, desc in self.tools.items()
        ])
        
        return self.SYSTEM_PROMPT.format(
            goal=self.goals[0] if self.goals else "无目标",
            completed_tasks=[t.name for t in completed],
            pending_tasks=[t.name for t in pending],
            memory_summary=self.memory[-5:] if self.memory else "无",
            commands=commands
        )
    
    def _parse_response(self, response: str) -> Dict:
        """解析 LLM 响应"""
        result = {}
        
        # 解析各字段
        sections = response.split("\n\n")
        for section in sections:
            if ":" in section:
                key, value = section.split(":", 1)
                result[key.strip().lower()] = value.strip()
        
        # 解析命令参数
        if "args" in result:
            try:
                result["args"] = json.loads(result["args"])
            except:
                result["args"] = {}
        
        return result
    
    def _execute_command(self, command: str, args: Dict) -> str:
        """执行命令"""
        if command not in self.tools:
            return f"错误:未知命令 '{command}'"
        
        try:
            tool = self.tools[command]
            result = tool(**args)
            return str(result)
        except Exception as e:
            return f"执行错误:{str(e)}"
    
    def think(self) -> Dict:
        """思考:生成下一步计划"""
        prompt = self._build_prompt()
        response = self.llm.invoke(prompt)
        parsed = self._parse_response(response)
        
        return parsed
    
    def act(self, thought: Dict) -> str:
        """行动:执行命令"""
        command = thought.get("command", "")
        args = thought.get("args", {})
        
        if not command:
            return "无需执行命令"
        
        result = self._execute_command(command, args)
        
        # 记录历史
        self.history.append({
            "thought": thought,
            "command": command,
            "args": args,
            "result": result
        })
        
        return result
    
    def reflect(self, result: str) -> bool:
        """反思:评估是否完成"""
        # 检查目标是否达成
        # 这里简化处理,实际需要更复杂的逻辑
        
        # 添加到记忆
        self.memory.append(result)
        
        # 检查是否应该结束
        # 可以基于:
        # 1. 用户确认
        # 2. 达到最大步数
        # 3. LLM 判断完成
        return False
    
    def run(self, max_iterations: int = 50):
        """运行主循环"""
        for i in range(max_iterations):
            print(f"\n=== 迭代 {i + 1} ===")
            
            # 1. 思考
            thought = self.think()
            print(f"思考: {thought.get('thoughts', '')[:100]}...")
            
            # 2. 执行
            result = self.act(thought)
            print(f"结果: {result[:100]}...")
            
            # 3. 反思
            is_complete = self.reflect(result)
            
            if is_complete:
                print("\n目标已达成!")
                break
        
        return self.history
 
 
# ========== 定义工具 ==========
 
def google_search(query: str) -> str:
    """Google 搜索"""
    # 实际实现调用搜索 API
    return f"搜索 '{query}' 的结果..."
 
 
def write_to_file(filename: str, content: str) -> str:
    """写入文件"""
    try:
        with open(filename, 'w', encoding='utf-8') as f:
            f.write(content)
        return f"成功写入文件 {filename}"
    except Exception as e:
        return f"写入失败:{e}"
 
 
def read_file(filename: str) -> str:
    """读取文件"""
    try:
        with open(filename, 'r', encoding='utf-8') as f:
            return f.read()
    except Exception as e:
        return f"读取失败:{e}"
 
 
# ========== 使用示例 ==========
 
if __name__ == "__main__":
    from langchain_openai import ChatOpenAI
    
    # 创建 LLM
    llm = ChatOpenAI(model="gpt-4")
    
    # 定义工具
    tools = {
        "google_search": "搜索互联网获取信息",
        "write_to_file": "将内容写入文件",
        "read_file": "读取文件内容"
    }
    
    # 创建 AutoGPT
    agent = AutoGPT(
        name="ResearchBot",
        role="研究助手",
        goals=["研究 2024 年 AI 发展趋势,写一份报告"],
        llm=llm,
        tools={
            "google_search": google_search,
            "write_to_file": write_to_file,
            "read_file": read_file
        }
    )
    
    # 运行
    history = agent.run(max_iterations=10)

2.4 AutoGPT 的局限与改进

┌─────────────────────────────────────────────────────────────┐
│                    AutoGPT 局限与改进                        │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│   主要局限:                                                 │
│   ┌─────────────────────────────────────────────────────┐  │
│   │ 1. 成本高昂                                         │  │
│   │    • 每次迭代都调用 LLM                             │  │
│   │    • 长任务可能消耗大量 Token                       │  │
│   │                                                      │  │
│   │ 2. 容易陷入循环                                     │  │
│   │    • 相同错误重复出现                               │  │
│   │    • 缺乏有效的终止判断                             │  │
│   │                                                      │  │
│   │ 3. 规划能力有限                                     │  │
│   │    • 只能短期规划                                   │  │
│   │    • 缺乏全局视角                                   │  │
│   │                                                      │  │
│   │ 4. 可靠性问题                                       │  │
│   │    • 可能产生幻觉                                   │  │
│   │    • 工具调用可能出错                               │  │
│   └─────────────────────────────────────────────────────┘  │
│                                                             │
│   改进方向:                                                 │
│   ┌─────────────────────────────────────────────────────┐  │
│   │ 1. 分层规划                                         │  │
│   │    • 先制定高层计划                                 │  │
│   │    • 再逐步细化执行                                 │  │
│   │                                                      │  │
│   │ 2. 增强反思机制                                     │  │
│   │    • 检测重复行为                                   │  │
│   │    • 自动调整策略                                   │  │
│   │                                                      │  │
│   │ 3. 人机协作                                         │  │
│   │    • 关键决策请求用户确认                           │  │
│   │    • 降低错误风险                                   │  │
│   │                                                      │  │
│   │ 4. 成本控制                                         │  │
│   │    • 使用缓存                                       │  │
│   │    • 选择性调用大模型                               │  │
│   └─────────────────────────────────────────────────────┘  │
│                                                             │
└─────────────────────────────────────────────────────────────┘

三、BabyAGI 详解

3.1 核心架构

┌─────────────────────────────────────────────────────────────┐
│                    BabyAGI 架构                              │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│   BabyAGI 采用任务驱动的架构,核心是三个 Agent 协作:        │
│                                                             │
│   ┌─────────────────────────────────────────────────────┐  │
│   │                                                      │  │
│   │   ┌──────────────────────────────────────────────┐  │  │
│   │   │           Task Queue (任务队列)               │  │  │
│   │   │  ┌────────────────────────────────────────┐  │  │  │
│   │   │  │ 优先级 1: 搜索 AI 发展趋势              │  │  │  │
│   │   │  │ 优先级 2: 整理搜索结果                  │  │  │  │
│   │   │  │ 优先级 3: 撰写报告初稿                  │  │  │  │
│   │   │  │ 优先级 4: 审核并完善报告                │  │  │  │
│   │   │  └────────────────────────────────────────┘  │  │  │
│   │   └──────────────────────────────────────────────┘  │  │
│   │                         │                            │  │
│   │            ┌────────────┼────────────┐              │  │
│   │            ↓            ↓            ↓              │  │
│   │   ┌─────────────┐ ┌─────────────┐ ┌─────────────┐  │  │
│   │   │  Execution  │ │   Task      │ │   Task      │  │  │
│   │   │    Agent    │ │  Creation   │ │Prioritization│  │  │
│   │   │  执行 Agent │ │   Agent     │ │   Agent     │  │  │
│   │   │             │ │ 任务创建    │ │ 优先级排序  │  │  │
│   │   └──────┬──────┘ └──────┬──────┘ └──────┬──────┘  │  │
│   │          │               │               │          │  │
│   │          │               │               │          │  │
│   │          ↓               ↓               ↓          │  │
│   │   ┌─────────────────────────────────────────────┐  │  │
│   │   │              Vector Store                   │  │  │
│   │   │              向量存储(记忆)                │  │  │
│   │   └─────────────────────────────────────────────┘  │  │
│   │                                                      │  │
│   └─────────────────────────────────────────────────────┘  │
│                                                             │
│   执行流程:                                                 │
│   1. TaskPrioritizationAgent: 从队列中取最高优先级任务      │
│   2. ExecutionAgent: 执行任务,存储结果到向量库             │
│   3. TaskCreationAgent: 基于执行结果创建新任务             │
│   4. 重复直到队列为空                                       │
│                                                             │
└─────────────────────────────────────────────────────────────┘

3.2 核心组件详解

组件功能输入输出
Execution Agent执行具体任务任务描述执行结果
Task Creation Agent创建新任务目标、已完成任务、执行结果新任务列表
Task Prioritization Agent任务优先级排序任务列表排序后的任务列表
Task Queue任务队列管理新任务待执行任务
Vector Store存储执行结果结果内容检索结果

3.3 BabyAGI 代码实现

"""
BabyAGI 核心实现
任务驱动的自主 Agent
"""
 
from typing import List, Dict, Any
from dataclasses import dataclass, field
from collections import deque
import chromadb
from chromadb.utils import embedding_functions
 
 
@dataclass(order=True)
class Task:
    """任务定义"""
    priority: int
    name: str = field(compare=False)
    description: str = field(compare=False)
 
 
class BabyAGI:
    """
    BabyAGI 实现
    
    核心循环:
    1. 从任务队列取出最高优先级任务
    2. ExecutionAgent 执行任务
    3. TaskCreationAgent 创建新任务
    4. TaskPrioritizationAgent 排序任务
    """
    
    EXECUTION_PROMPT = """
你是一个任务执行 Agent。请执行以下任务:
 
目标:{objective}
任务:{task}
已完成的任务:{completed_tasks}
 
请执行任务并返回结果:
"""
    
    TASK_CREATION_PROMPT = """
你是一个任务创建 Agent。基于以下信息创建新任务:
 
目标:{objective}
刚完成的任务:{last_task}
执行结果:{result}
已完成任务列表:{completed_tasks}
 
请创建最多 3 个新任务来推进目标,每个任务一行。
格式:任务名称 | 任务描述
"""
    
    PRIORITIZATION_PROMPT = """
你是一个任务优先级排序 Agent。请对以下任务按优先级排序:
 
目标:{objective}
任务列表:{tasks}
 
请返回排序后的任务,每行一个,格式:
优先级数字 | 任务名称 | 任务描述
优先级数字越小越重要(1 最重要)
"""
    
    def __init__(
        self,
        objective: str,
        llm,
        first_task: str = "制定实现目标的计划"
    ):
        self.objective = objective
        self.llm = llm
        
        # 任务队列(优先级队列)
        self.task_queue: List[Task] = []
        
        # 已完成任务
        self.completed_tasks: List[Dict] = []
        
        # 向量存储(使用 Chroma)
        self.chroma_client = chromadb.Client()
        self.collection = self.chroma_client.create_collection("task_results")
        
        # 添加初始任务
        self._add_task(1, "初始任务", first_task)
    
    def _add_task(self, priority: int, name: str, description: str):
        """添加任务到队列"""
        task = Task(priority=priority, name=name, description=description)
        self.task_queue.append(task)
        self.task_queue.sort()  # 按优先级排序
    
    def _get_next_task(self) -> Task:
        """获取下一个任务"""
        if self.task_queue:
            return self.task_queue.pop(0)
        return None
    
    def execution_agent(self, task: Task) -> str:
        """执行 Agent:执行具体任务"""
        prompt = self.EXECUTION_PROMPT.format(
            objective=self.objective,
            task=task.description,
            completed_tasks=[t["name"] for t in self.completed_tasks]
        )
        
        result = self.llm.invoke(prompt)
        return result
    
    def task_creation_agent(
        self,
        last_task: Task,
        result: str
    ) -> List[Dict]:
        """任务创建 Agent:基于执行结果创建新任务"""
        prompt = self.TASK_CREATION_PROMPT.format(
            objective=self.objective,
            last_task=last_task.name,
            result=result[:500],  # 限制长度
            completed_tasks=[t["name"] for t in self.completed_tasks]
        )
        
        response = self.llm.invoke(prompt)
        
        # 解析新任务
        new_tasks = []
        for line in response.strip().split("\n"):
            if "|" in line:
                parts = line.split("|")
                if len(parts) >= 2:
                    new_tasks.append({
                        "name": parts[0].strip(),
                        "description": parts[1].strip()
                    })
        
        return new_tasks
    
    def prioritization_agent(self, tasks: List[Dict]) -> List[Task]:
        """优先级排序 Agent:为新任务分配优先级"""
        if not tasks:
            return []
        
        task_str = "\n".join([
            f"- {t['name']}: {t['description']}"
            for t in tasks
        ])
        
        prompt = self.PRIORITIZATION_PROMPT.format(
            objective=self.objective,
            tasks=task_str
        )
        
        response = self.llm.invoke(prompt)
        
        # 解析排序结果
        prioritized = []
        for line in response.strip().split("\n"):
            if "|" in line:
                parts = line.split("|")
                if len(parts) >= 3:
                    try:
                        priority = int(parts[0].strip())
                        prioritized.append(Task(
                            priority=priority,
                            name=parts[1].strip(),
                            description=parts[2].strip()
                        ))
                    except ValueError:
                        continue
        
        return prioritized
    
    def store_result(self, task: Task, result: str):
        """存储执行结果到向量数据库"""
        self.collection.add(
            documents=[result],
            metadatas=[{"task": task.name}],
            ids=[f"task_{len(self.completed_tasks)}"]
        )
    
    def retrieve_relevant(self, query: str, n: int = 3) -> List[str]:
        """检索相关结果"""
        results = self.collection.query(
            query_texts=[query],
            n_results=n
        )
        return results["documents"][0] if results["documents"] else []
    
    def run(self, max_iterations: int = 20):
        """运行主循环"""
        for i in range(max_iterations):
            print(f"\n{'='*50}")
            print(f"迭代 {i + 1}")
            print('='*50)
            
            # 1. 获取下一个任务
            task = self._get_next_task()
            if task is None:
                print("任务队列为空,执行完成!")
                break
            
            print(f"\n执行任务: {task.name}")
            print(f"描述: {task.description}")
            
            # 2. Execution Agent 执行任务
            result = self.execution_agent(task)
            print(f"\n执行结果:\n{result[:200]}...")
            
            # 3. 存储结果
            self.store_result(task, result)
            
            # 4. 记录已完成任务
            self.completed_tasks.append({
                "name": task.name,
                "description": task.description,
                "result": result
            })
            
            # 5. Task Creation Agent 创建新任务
            new_tasks = self.task_creation_agent(task, result)
            print(f"\n创建新任务: {len(new_tasks)} 个")
            
            if new_tasks:
                # 6. Prioritization Agent 排序
                prioritized = self.prioritization_agent(new_tasks)
                
                # 7. 添加到队列
                for t in prioritized:
                    self._add_task(t.priority, t.name, t.description)
            
            # 8. 显示队列状态
            print(f"\n当前队列: {len(self.task_queue)} 个任务")
        
        print("\n" + "="*50)
        print("执行结束")
        print(f"完成任务: {len(self.completed_tasks)} 个")
        
        return self.completed_tasks
 
 
# ========== 使用示例 ==========
 
if __name__ == "__main__":
    from langchain_openai import ChatOpenAI
    
    # 创建 LLM
    llm = ChatOpenAI(model="gpt-4", temperature=0)
    
    # 创建 BabyAGI
    baby_agi = BabyAGI(
        objective="研究 2024 年 AI Agent 发展趋势并撰写报告",
        llm=llm,
        first_task="制定研究计划"
    )
    
    # 运行
    results = baby_agi.run(max_iterations=10)
    
    # 输出结果
    print("\n\n完成的任务:")
    for i, task in enumerate(results, 1):
        print(f"\n{i}. {task['name']}")
        print(f"   结果: {task['result'][:100]}...")

3.4 BabyAGI 与 AutoGPT 对比

┌─────────────────────────────────────────────────────────────┐
│                    BabyAGI vs AutoGPT                        │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│   ┌─────────────────────────────────────────────────────┐  │
│   │                    AutoGPT                           │  │
│   ├─────────────────────────────────────────────────────┤  │
│   │                                                      │  │
│   │  架构:单一 Agent 循环                               │  │
│   │  思考 → 执行 → 评估 → 循环                           │  │
│   │                                                      │  │
│   │  特点:                                              │  │
│   │  • 重量级,功能丰富                                  │  │
│   │  • 内置大量工具和命令                                │  │
│   │  • 支持文件操作和代码执行                            │  │
│   │  • 配置复杂                                          │  │
│   │                                                      │  │
│   │  适用场景:                                          │  │
│   │  • 需要丰富工具的复杂任务                            │  │
│   │  • 需要文件操作的任务                                │  │
│   │  • 研究和探索性任务                                  │  │
│   │                                                      │  │
│   └─────────────────────────────────────────────────────┘  │
│                                                             │
│   ┌─────────────────────────────────────────────────────┐  │
│   │                    BabyAGI                           │  │
│   ├─────────────────────────────────────────────────────┤  │
│   │                                                      │  │
│   │  架构:任务队列 + 三 Agent 协作                      │  │
│   │  执行 → 创建 → 排序 → 执行                           │  │
│   │                                                      │  │
│   │  特点:                                              │  │
│   │  • 轻量级,代码简洁                                  │  │
│   │  • 任务驱动,结构清晰                                │  │
│   │  • 易于理解和扩展                                    │  │
│   │  • 配置简单                                          │  │
│   │                                                      │  │
│   │  适用场景:                                          │  │
│   │  • 需要自定义扩展的场景                              │  │
│   │  • 学习自主 Agent 原理                               │  │
│   │  • 任务分解明确的场景                                │  │
│   │                                                      │  │
│   └─────────────────────────────────────────────────────┘  │
│                                                             │
│   对比总结:                                                 │
│   ┌──────────────┬──────────────┬──────────────────────┐   │
│   │    对比项    │   AutoGPT    │      BabyAGI        │   │
│   ├──────────────┼──────────────┼──────────────────────┤   │
│   │ 复杂度       │ 高          │ 低                   │   │
│   │ 工具数量     │ 多          │ 少                   │   │
│   │ 任务管理     │ 隐式        │ 显式队列             │   │
│   │ 可扩展性     │ 中          │ 高                   │   │
│   │ 学习曲线     │ 陡峭        │ 平缓                 │   │
│   │ 生产就绪     │ 中          │ 低                   │   │
│   └──────────────┴──────────────┴──────────────────────┘   │
│                                                             │
└─────────────────────────────────────────────────────────────┘

四、面试问答

Q1: 自主 Agent 与普通 Agent 的核心区别是什么?

回答要点:

维度普通 Agent自主 Agent
输入每次用户指令只需初始目标
执行单次交互多轮自主执行
规划无或简单动态任务规划
终止用户决定自主判断

Q2: AutoGPT 的核心循环是什么?

回答要点:

思考 (Thinking)

执行 (Acting)

评估 (Evaluating)

是否完成? ──否──→ 回到思考



结束

Q3: BabyAGI 的三个 Agent 各自负责什么?

回答要点:

  1. Execution Agent:执行具体任务,返回结果
  2. Task Creation Agent:基于执行结果创建新任务
  3. Task Prioritization Agent:为新任务分配优先级

Q4: 自主 Agent 目前面临的主要挑战?

回答要点:

  1. 成本问题:大量 LLM 调用导致 Token 消耗大
  2. 可靠性:可能陷入循环、产生幻觉
  3. 可控性:难以精确控制执行过程
  4. 安全性:自主执行可能带来风险
  5. 评估:缺乏有效的评估标准

五、小结

AutoGPT 和 BabyAGI 开创了自主 Agent 的先河:

核心贡献

  • 展示了可能性:LLM 可以自主完成复杂任务
  • 提供了设计模式:思考-执行-评估循环
  • 启发了后续发展:任务驱动架构、多 Agent 协作

关键要点

  1. 自主性:给定目标后无需人类干预
  2. 任务分解:将大目标拆解为子任务
  3. 自我反思:评估进度并调整策略

下一步学习

  • 学习 Semantic Kernel 的企业级方案
  • 探索现代自主 Agent 的改进方案
  • 实践人机协作的 Agent 设计