大家好,我是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 代理,完成以下完整流程:

  1. 爬取指定网页的销售数据表格;
  2. 分析数据(计算每月销售额增长率);
  3. 生成 markdown 格式分析报告;
  4. 保存报告到本地;
  5. 记录任务日志并通过内存保存上下文。

完整代码

# 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)

四、关键注意事项

  1. API 密钥权限:确保 OpenAI API 密钥有足够的额度,且支持 gpt-3.5-turbo/gpt-4(AutoGPT 优先使用 gpt-4 以保证自主能力);
  2. 工具描述的重要性:自定义工具的文档字符串(docstring)需清晰、详细,LLM 会根据描述判断是否调用该工具;
  3. 内存选择:本地内存适合单机调试,Redis 内存适合分布式/长期运行的代理;
  4. 目标设计原则:目标列表需清晰、可量化、优先级明确,避免模糊描述(如“分析数据”→“计算每月销售额增长率”);
  5. 调试技巧:使用 run_once() 替代 run_continuous() 分步调试,查看代理的思考过程和工具调用逻辑。

五、扩展方向

  1. 集成更多工具:如数据库操作(SQLAlchemy)、邮件发送(smtplib)、Excel 处理(pandas)等;
  2. 切换 LLM 提供商:AutoGPT 支持 Azure OpenAI、Anthropic 等,只需修改 llm_provider 参数;
  3. 高级内存管理:使用 Pinecone/FAISS 向量数据库作为内存,提升上下文检索效率;
  4. 多代理协作:通过 AutoGPT 的多代理 API 实现分工协作(如爬取代理+分析代理+报告代理)。

通过以上教程,你已掌握 AutoGPT 核心 API 的使用方法,并能串联所有常用 API 完成端到端的自主任务。AutoGPT 的核心价值在于“自主决策”,合理设计目标和工具,可大幅降低重复任务的人工成本。

 posted on 2025-12-05 15:08  蒙蒙01  阅读(0)  评论(0)    收藏  举报