Agent框架横评(一):AutoGPT我的第一个AI员工
一、开场:AutoGPT是什么
大家好,我是老金。
2023年3月,AutoGPT火遍全网。
它让AI自主完成任务,不需要人类一步步指挥。
今天讲讲AutoGPT的架构和使用。
二、AutoGPT是什么
2.1 定位
AutoGPT是一个实验性的开源项目,目标是让GPT-4实现自主AI Agent。
核心思想:
- 给AI一个目标
- AI自己拆解任务
- AI自己执行、反思、改进
- 直到目标达成
2.2 架构
┌─────────────────────────────────────────────────────────┐
│ AutoGPT架构 │
├─────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────┐ │
│ │ 用户目标 │ │
│ │ "帮我写一个天气APP" │ │
│ └────────────────────┬────────────────────────────┘ │
│ ↓ │
│ ┌─────────────────────────────────────────────────┐ │
│ │ 任务拆解 (GPT) │ │
│ │ 1. 写需求文档 │ │
│ │ 2. 设计数据库 │ │
│ │ 3. 写前端代码 │ │
│ │ 4. 写后端代码 │ │
│ └────────────────────┬────────────────────────────┘ │
│ ↓ │
│ ┌─────────────────────────────────────────────────┐ │
│ │ 执行循环 │ │
│ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │
│ │ │ 执行 │→ │ 审查 │→ │ 反思 │ │ │
│ │ └──────────┘ └──────────┘ └──────────┘ │ │
│ │ ↑ │ │ │
│ │ └───────────────────────────────────┘ │ │
│ └────────────────────┬────────────────────────────┘ │
│ ↓ │
│ ┌─────────────────────────────────────────────────┐ │
│ │ 任务队列 │ │
│ │ PriorityQueue + 任务状态管理 │ │
│ └─────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────┘
三、核心原理
3.1 Agent循环
# AutoGPT核心循环
class AutoGPT:
def __init__(self, model: str = "gpt-4"):
self.model = model
self.full_message_history: List[Message] = []
self.next_action_count = 0
async def run(self, goal: str):
"""主循环"""
user_input = f"目标: {goal}"
while self.next_action_count str:
"""执行工具"""
tool_name = tool_call.function.name
args = json.loads(tool_call.function.arguments)
tool = self.get_tool(tool_name)
result = await tool.execute(**args)
return result
3.2 任务管理
# 任务队列
class TaskQueue:
def __init__(self):
self.tasks: List[Task] = []
self.completed: Set[str] = set()
self.task_id_counter = 0
def add_task(self, description: str, priority: int = 0):
"""添加任务"""
task = Task(
id=self.task_id_counter,
description=description,
priority=priority,
status="pending"
)
heapq.heappush(self.tasks, (-priority, task))
self.task_id_counter += 1
return task.id
def get_next_task(self) -> Optional[Task]:
"""获取下一个任务"""
while self.tasks:
_, task = heapq.heappop(self.tasks)
if task.id not in self.completed:
task.status = "in_progress"
return task
return None
def complete_task(self, task_id: str):
"""标记任务完成"""
self.completed.add(task_id)
def generate_tasks(self, goal: str, gpt_response: str) -> List[str]:
"""GPT生成子任务"""
# 使用GPT解析响应中的任务列表
prompt = f"""
从以下AI响应中提取子任务列表:
{gpt_response}
返回JSON数组格式的任务描述列表。
"""
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[{"role": "user", "content": prompt}]
)
tasks = json.loads(response.choices[0].message.content)
return tasks
3.3 反思机制
# 反思机制
class Reflector:
def __init__(self, model: str = "gpt-4"):
self.model = model
async def should_continue(self, goal: str, result: str) -> bool:
"""判断是否继续"""
prompt = f"""
目标: {goal}
最近结果: {result}
判断目标是否达成。回复YES或NO。
"""
response = await self.chat([{"role": "user", "content": prompt}])
return "YES" in response.upper()
async def critique(self, action: str, result: str) -> str:
"""批评机制"""
prompt = f"""
执行: {action}
结果: {result}
批评这次执行,指出问题。回复改进建议。
"""
return await self.chat([{"role": "user", "content": prompt}])
async def replan(self, goal: str, tasks_done: List[str]) -> str:
"""重新规划"""
prompt = f"""
原始目标: {goal}
已完成任务: {', '.join(tasks_done)}
根据当前进度,重新规划剩余任务。
"""
return await self.chat([{"role": "user", "content": prompt}])
四、快速使用
4.1 安装
# 克隆仓库
git clone https://github.com/Significant-Gravitas/AutoGPT.git
cd AutoGPT
# 安装
pip install -r requirements.txt
# 配置API Key
export OPENAI_API_KEY=sk-your-key
4.2 基本使用
# 启动交互式CLI
python -m autogpt
# 或命令行模式
python -m autogpt --goal "帮我写一个Python爬虫,抓取豆瓣电影Top250"
4.3 配置
# autogpt_config.yaml
llm:
model: gpt-4
api_type: openai
agent:
max_loop: 100
max_budget: 100.0 # 美元
plugins:
enabled: []
search:
search_memory: true
browse_website: true
五、工具集
5.1 内置工具
| 工具 | 功能 |
|---|---|
| google-search | 搜索信息 |
| browse-website | 浏览网页 |
| write-to-file | 写文件 |
| read-file | 读文件 |
| execute-code | 执行代码 |
| complete-task | 完成任务 |
5.2 自定义工具
# my_tools.py
from autogpt.tools import Tool
class MyCustomTool(Tool):
name = "my_custom_tool"
description = "执行自定义任务"
def __init__(self):
super().__init__()
def execute(self, **kwargs) -> str:
# 实现逻辑
return f"执行结果: {kwargs}"
def validate_arguments(self, arguments: dict) -> bool:
# 参数验证
return "param" in arguments
六、优缺点分析
6.1 优点
| 优点 | 说明 |
|---|---|
| 简单易用 | 安装即用,CLI交互 |
| 开源免费 | 完全开源,社区活跃 |
| 自主性强 | 能自主拆解、规划 |
| 可扩展 | 支持插件扩展 |
6.2 缺点
| 缺点 | 说明 |
|---|---|
| Token消耗大 | 多次LLM调用 |
| 容易跑偏 | 缺乏约束 |
| 速度慢 | 循环调用耗时 |
| 调试困难 | 黑盒执行 |
6.3 适用场景
✅ 适合:
- 探索性任务
- 快速原型
- 单人小项目
❌ 不适合:
- 精确控制需求
- 成本敏感场景
- 实时交互应用
七、性能优化
7.1 减少Token消耗
# 使用gpt-3.5-turbo替代gpt-4
config = {
"llm": {
"model": "gpt-3.5-turbo", # 更便宜
"max_tokens": 2000
},
"agent": {
"max_loop": 50 # 限制循环次数
}
}
7.2 添加约束
# 在goal中添加约束
goal_with_constraints = """
目标: {original_goal}
约束:
1. 只能使用Python标准库
2. 代码行数不超过500行
3. 必须包含注释
"""
八、总结
适用人群
| 人群 | 建议 |
|---|---|
| 新手入门 | ⭐⭐⭐⭐⭐ 适合练手 |
| 原型开发 | ⭐⭐⭐⭐⭐ 快速验证 |
| 生产项目 | ⭐⭐ 谨慎使用 |
框架评分
| 维度 | 评分 | 说明 |
|---|---|---|
| 易用性 | 9/10 | 零门槛上手 |
| 功能完整 | 7/10 | 基础功能够用 |
| 稳定性 | 6/10 | 有时会跑偏 |
| 成本控制 | 5/10 | Token消耗大 |
| 社区活跃 | 8/10 | GitHub 150k+ ⭐ |
下期预告
下一篇:LangChain Agents——让LLM应用开发更简单!
相关阅读
正文完