大家好,我是jobleap.cn的小九。
AutoGPT 是一款基于大语言模型(LLM)的自主智能代理框架,能够自主规划、执行任务、调用工具并迭代优化结果,无需人工持续干预。本文将从环境搭建、核心 API 解析到实战案例,全面讲解 AutoGPT 的常用用法,串联其核心 API,帮助你快速掌握该框架的使用。
一、前置准备
1. 环境要求
- Python 版本:3.10+(AutoGPT 对 Python 版本兼容性要求较高)
- 依赖:OpenAI API 密钥(核心 LLM 驱动)、可选的第三方工具依赖(如 requests、beautifulsoup4 等)
2. 安装 AutoGPT
# 安装核心库
pip install autogpt==0.7.0 # 指定稳定版本,避免新版API变动
# 安装常用依赖(自定义工具/内存管理)
pip install python-dotenv requests beautifulsoup4 redis
3. 配置 API 密钥
创建 .env 文件,配置 OpenAI API 密钥(AutoGPT 核心依赖 OpenAI LLM):
# .env 文件内容
OPENAI_API_KEY=your_openai_api_key_here
OPENAI_API_BASE=https://api.openai.com/v1 # 国内用户可配置代理地址
二、AutoGPT 核心 API 解析
AutoGPT 的核心能力围绕「智能代理(Agent)」展开,核心 API 包括:初始化代理、目标设置、工具注册、内存管理、运行代理、日志配置等。
1. 初始化 AutoGPT 代理(核心 API)
AutoGPT 类是框架的核心,用于创建智能代理实例,参数决定代理的角色、目标、资源限制等。
关键参数说明:
| 参数名 | 作用 | 示例 |
|---|---|---|
ai_name |
代理名称 | "DataAnalystGPT" |
ai_role |
代理角色描述 | "专业的数据分析师,负责爬取数据并生成分析报告" |
goals |
代理目标列表(优先级从高到低) | ["爬取https://example.com/data的表格数据", "分析数据的趋势", "生成markdown格式报告"] |
api_budget |
API 调用预算(美元) | 1.0 |
memory |
内存实例(默认本地内存) | LocalMemory() |
llm_provider |
LLM 提供商(默认 openai) | "openai" |
代码示例:
from autogpt import AutoGPT
from autogpt.memory import LocalMemory
from dotenv import load_dotenv
# 加载.env中的API密钥
load_dotenv()
# 初始化内存(本地内存,可选Redis内存)
memory = LocalMemory()
# 初始化AutoGPT代理
agent = AutoGPT(
ai_name="DataAnalystGPT",
ai_role="专业的数据分析师,负责爬取指定网页数据、分析趋势并生成markdown报告",
goals=[
"爬取https://example.com/sample-data的HTML表格数据",
"计算数据中每月销售额的平均值和增长率",
"将分析结果生成名为sales_analysis.md的markdown报告",
"报告保存到当前目录"
],
api_budget=1.0,
memory=memory
)
2. 动态设置/修改代理目标(set_goals API)
若需在运行中修改代理目标,使用 set_goals 方法,覆盖原有目标列表。
代码示例:
# 动态修改目标(比如新增“发送报告到指定邮箱”)
new_goals = [
"爬取https://example.com/sample-data的HTML表格数据",
"计算每月销售额增长率",
"生成sales_analysis.md报告",
"将报告通过邮件发送到test@example.com"
]
agent.set_goals(new_goals)
3. 注册自定义工具(register_tool API)
AutoGPT 内置了文件操作、网页浏览等基础工具,但实际场景需自定义工具(如爬虫、数据分析),通过 register_tool 注册自定义工具。
自定义工具开发规范:
- 工具函数需用
@tool装饰器标记; - 函数需包含清晰的描述(供 LLM 理解工具用途);
- 参数需明确类型和说明。
代码示例(自定义爬虫工具):
from autogpt.tools.decorators import tool
import requests
from bs4 import BeautifulSoup
# 自定义工具:爬取网页表格数据
@tool("crawl_table_data", "爬取指定URL的HTML表格数据,返回结构化列表")
def crawl_table_data(url: str) -> list:
"""
爬取指定URL的HTML表格数据,返回结构化的列表(每行数据为一个字典)
参数:
url (str): 目标网页URL
返回:
list: 表格数据,格式如[{"月份": "1月", "销售额": "10000"}, ...]
"""
try:
response = requests.get(url, timeout=10)
response.raise_for_status()
soup = BeautifulSoup(response.text, "html.parser")
table = soup.find("table")
if not table:
return ["未找到表格数据"]
# 解析表格头部
headers = [th.text.strip() for th in table.find("thead").find_all("th")]
# 解析表格行
rows = []
for tr in table.find("tbody").find_all("tr"):
cells = [td.text.strip() for td in tr.find_all("td")]
rows.append(dict(zip(headers, cells)))
return rows
except Exception as e:
return [f"爬取失败:{str(e)}"]
# 注册自定义工具到代理
agent.register_tool(crawl_table_data)
4. 内存管理 API(核心:add_memory/get_memory)
AutoGPT 通过内存保存任务上下文、工具调用记录等,支持本地内存(LocalMemory)和 Redis 内存(RedisMemory),核心 API 包括:
| API 方法 | 作用 |
|---|---|
add_memory(content) |
向内存中添加内容 |
get_memory(query) |
根据查询词检索内存内容 |
clear_memory() |
清空内存 |
代码示例:
# 手动添加内存(记录任务开始时间)
agent.memory.add_memory("2025-12-05 10:00:00 开始执行销售数据爬取任务")
# 检索内存(查看任务相关记录)
memory_results = agent.memory.get_memory("销售数据爬取")
print("内存检索结果:", memory_results)
5. 运行代理 API(核心:run_continuous/run_once)
这是触发代理执行任务的核心 API,有两种运行模式:
| 方法 | 作用 | 适用场景 |
|---|---|---|
run_continuous() |
连续运行,直到完成所有目标或达到 API 预算 | 全自动任务执行 |
run_once() |
单次运行(执行一步思考+行动) | 调试/分步执行 |
代码示例:
# 连续运行代理(直到完成所有目标)
print("开始执行AutoGPT代理任务...")
agent.run_continuous()
6. 日志配置 API(set_logging_config)
AutoGPT 默认输出日志到控制台,可通过 set_logging_config 配置日志级别、输出文件等。
代码示例:
import logging
from autogpt.utils.logging import set_logging_config
# 配置日志:级别为INFO,输出到文件和控制台
set_logging_config(
log_level=logging.INFO,
log_file="autogpt_task.log" # 日志保存到该文件
)
三、实战案例:串联所有核心 API 完成完整任务
任务目标
创建一个 AutoGPT 代理,完成以下完整流程:
- 爬取指定网页的销售数据表格;
- 分析数据(计算每月销售额增长率);
- 生成 markdown 格式分析报告;
- 保存报告到本地;
- 记录任务日志并通过内存保存上下文。
完整代码
# 1. 导入依赖
from autogpt import AutoGPT
from autogpt.memory import LocalMemory
from autogpt.tools.decorators import tool
from autogpt.utils.logging import set_logging_config
from dotenv import load_dotenv
import requests
from bs4 import BeautifulSoup
import logging
# 2. 基础配置
load_dotenv() # 加载API密钥
set_logging_config(log_level=logging.INFO, log_file="sales_analysis.log") # 配置日志
# 3. 自定义工具:爬取表格数据+数据分析
@tool("crawl_table_data", "爬取指定URL的HTML表格数据,返回结构化列表")
def crawl_table_data(url: str) -> list:
"""爬取指定URL的HTML表格数据,返回结构化字典列表"""
try:
response = requests.get(url, timeout=10)
response.raise_for_status()
soup = BeautifulSoup(response.text, "html.parser")
table = soup.find("table")
if not table:
return ["未找到表格数据"]
headers = [th.text.strip() for th in table.find("thead").find_all("th")]
rows = []
for tr in table.find("tbody").find_all("tr"):
cells = [td.text.strip() for td in tr.find_all("td")]
rows.append(dict(zip(headers, cells)))
return rows
except Exception as e:
return [f"爬取失败:{str(e)}"]
@tool("calculate_growth_rate", "计算每月销售额增长率,输入为销售数据列表,返回带增长率的列表")
def calculate_growth_rate(sales_data: list) -> list:
"""
计算每月销售额增长率,公式:(本月销售额-上月销售额)/上月销售额 * 100%
参数:
sales_data (list): 销售数据列表,格式如[{"月份": "1月", "销售额": "10000"}, ...]
返回:
list: 新增增长率字段的销售数据
"""
try:
# 转换销售额为数字
for item in sales_data:
item["销售额"] = float(item["销售额"].replace(",", ""))
# 计算增长率
for i in range(1, len(sales_data)):
prev_sales = sales_data[i-1]["销售额"]
curr_sales = sales_data[i]["销售额"]
growth_rate = (curr_sales - prev_sales) / prev_sales * 100
sales_data[i]["增长率(%)"] = round(growth_rate, 2)
# 第一个月增长率为0
sales_data[0]["增长率(%)"] = 0.0
return sales_data
except Exception as e:
return [f"计算失败:{str(e)}"]
# 4. 初始化代理
memory = LocalMemory()
agent = AutoGPT(
ai_name="SalesAnalystGPT",
ai_role="专业的销售数据分析师,负责爬取销售数据、计算增长率并生成markdown报告",
goals=[
"调用crawl_table_data工具爬取https://example.com/sales-data的表格数据",
"调用calculate_growth_rate工具计算每月销售额增长率",
"生成包含月份、销售额、增长率的markdown分析报告",
"将报告保存为sales_analysis.md到当前目录",
"在内存中记录报告生成完成的时间"
],
api_budget=2.0,
memory=memory
)
# 5. 注册自定义工具
agent.register_tool(crawl_table_data)
agent.register_tool(calculate_growth_rate)
# 6. 运行代理
if __name__ == "__main__":
print("=== 启动SalesAnalystGPT代理 ===")
agent.run_continuous()
# 运行完成后检索内存
print("\n=== 内存中的任务记录 ===")
memory_records = agent.memory.get_memory("报告生成")
for record in memory_records:
print(record)
四、关键注意事项
- API 密钥权限:确保 OpenAI API 密钥有足够的额度,且支持 gpt-3.5-turbo/gpt-4(AutoGPT 优先使用 gpt-4 以保证自主能力);
- 工具描述的重要性:自定义工具的文档字符串(docstring)需清晰、详细,LLM 会根据描述判断是否调用该工具;
- 内存选择:本地内存适合单机调试,Redis 内存适合分布式/长期运行的代理;
- 目标设计原则:目标列表需清晰、可量化、优先级明确,避免模糊描述(如“分析数据”→“计算每月销售额增长率”);
- 调试技巧:使用
run_once()替代run_continuous()分步调试,查看代理的思考过程和工具调用逻辑。
五、扩展方向
- 集成更多工具:如数据库操作(SQLAlchemy)、邮件发送(smtplib)、Excel 处理(pandas)等;
- 切换 LLM 提供商:AutoGPT 支持 Azure OpenAI、Anthropic 等,只需修改
llm_provider参数; - 高级内存管理:使用 Pinecone/FAISS 向量数据库作为内存,提升上下文检索效率;
- 多代理协作:通过 AutoGPT 的多代理 API 实现分工协作(如爬取代理+分析代理+报告代理)。
通过以上教程,你已掌握 AutoGPT 核心 API 的使用方法,并能串联所有常用 API 完成端到端的自主任务。AutoGPT 的核心价值在于“自主决策”,合理设计目标和工具,可大幅降低重复任务的人工成本。
posted on
浙公网安备 33010602011771号