发布时间:2026/9/7 10:04:17
AutoGPT Classic Agent 架构解析:BaseAgent 抽象方法、内置 Agent 实现与自定义 Agent 构建指南 AutoGPT Classic Agent 架构解析BaseAgent 抽象方法、内置 Agent 实现与自定义 Agent 构建指南【免费下载链接】AutoGPTAutoGPT is the vision of accessible AI for everyone, to use and to build on. Our mission is to provide the tools, so that you can focus on what matters.项目地址: https://gitcode.com/GitHub_Trending/au/AutoGPT在 AutoGPT Classic 中Agent 是整个智能体系统的核心执行主体它由多个 Components 组合而成负责执行协议Protocols流水线并驱动任务循环。本文以官方文档中关于 Agents 的说明为主线结合classic/forge与classic/original_autogpt的实际源码完整讲解BaseAgent的两个关键抽象方法propose_action与execute的职责与实现AutoGPT 内置Agent的组件装配方式以及如何通过继承Agent或BaseAgent构建一个完全属于自己的 Agent。读完本文你可以理解 AutoGPT 的 Agent-Component-Protocol 三层协作模型并掌握编写自定义组件、覆盖默认行为、控制 Agent 执行流程的具体方法。Agent 与 Components 的关系Agent 由 Components组件组成负责执行流水线以及部分附加逻辑。组件是继承AgentComponent或实现一个或多个 Protocols 的类它们为 Agent 提供额外的能力或处理能力——例如向 prompt 中注入消息、执行代码、与外部服务交互等。组件可以被启用或禁用、可以被排序并且组件之间可以相互依赖。在 Agent 的__init__中通过self赋值的组件会在 Agent 实例化时被自动检测变量名可以是任意合法的 Python 变量名真正决定组件是否被识别的是它的类型AgentComponent或继承自它的任何 protocol。这一点在源码中有直接印证。BaseAgent使用了自定义元类AgentMeta在每次实例创建完成后自动调用组件收集逻辑# classic/forge/forge/agent/base.py class AgentMeta(ABCMeta): def __call__(cls, *args, **kwargs): # Create instance of the class (Agent or BaseAgent) instance super().__call__(*args, **kwargs) # Automatically collect modules after the instance is created instance._collect_components() return instance其中_collect_components会遍历实例的所有属性筛出AgentComponent类型的对象如果没有显式指定self.components还会对组件做拓扑排序_topological_sort依据每个组件声明的_run_after依赖计算执行顺序保证依赖先执行。这解释了文档中组件默认按字母顺序排列、可用run_after调整顺序的底层机制自动收集 拓扑排序显式赋值self.components时则完全覆盖该行为。组件与 Agent 的详细关系、组件配置ConfigurableComponent、排序run_after、禁用_enabled等机制可参考官方组件文档 components.md协议Protocols的完整列表与执行顺序见 protocols.md开箱即用的内置组件清单见 built-in-components.md。BaseAgent 的两个关键抽象方法所有 Agent 的基类是BaseAgent位于 base.py。它提供了收集组件、执行协议流水线等必要逻辑并定义了任何 Agent 要正常工作所必须实现的抽象方法。文档中列出的两个核心方法是propose_action负责基于 Agent 的当前状态提议一个动作返回ThoughtProcessOutput即 Agent 的思考与动作提案execute负责执行被提议的动作返回ActionResult。从源码结构看BaseAgent中这两个方法被声明为抽象方法abstractmethod并且当前的签名还包含第三个抽象方法do_not_execute用于处理用户拒绝denied某个提案后的反馈路径# classic/forge/forge/agent/base.py abstractmethod async def propose_action(self) - AnyProposal: ... abstractmethod async def execute( self, proposal: AnyProposal, user_feedback: str , ) - ActionResult: ... abstractmethod async def do_not_execute( self, denied_proposal: AnyProposal, user_feedback: str, ) - ActionResult: ...BaseAgent真正干活的公共部分是run_pipeline方法。它接收一个协议方法如MessageProvider.get_messages按组件顺序依次调用实现了该协议的每个启用组件并带有完整的重试与回滚机制单个组件端点失败抛出ComponentEndpointError时只重试该组件默认最多 3 次抛出EndpointPipelineError时回滚参数到流水线起点从头重新执行整条流水线每次执行前通过_selective_copy对入参做浅拷贝list/dict或深拷贝Pydantic 模型等保证失败后参数可以被安全还原。这与官方组件文档中的异常与重试描述一致Agent 默认重试三次仍未解决则重新抛出异常且所有传入参数会被自动处理、需要时回滚。相关异常类与协议方法定义见 components.py 和 protocols.py。此外BaseAgent还承担组件配置序列化能力dump_component_configs将所有可配置组件的配置序列化为 JSON 字符串load_component_configs则将 JSON 反序列化并应用回组件这也是 CLI 中--component-config-file选项能按配置类名如CodeExecutorConfiguration匹配组件的底层实现。支撑 Agent 循环的配置项BaseAgent还通过BaseAgentConfiguration定义了一系列影响 Agent 行为的配置例如fast_llm/smart_llm双模型配置big_brain控制是否始终使用聪明模型、cycle_budget允许 Agent 无人监督运行的循环数None表示无限、1表示每步需用户批准、0表示停止、default_cycle_instruction每轮思考的默认指令等。这些配置共同决定了propose_action→execute循环的运行节奏与成本约束。AutoGPT 内置 AgentAgent是 AutoGPT 提供的主 Agent它是BaseAgent的子类带有全部内置组件SystemComponent、ActionHistoryComponent、FileManagerComponent、CodeExecutorComponent、WatchdogComponent 等清单见 built-in-components.md并实现了BaseAgent的抽象方法propose_action与execute。当前仓库中该实现的入口位于 agent.py类签名为class Agent(BaseAgent[AnyActionProposal], Configurable[AgentSettings]):它的构造函数接收settings: AgentSettings、llm_provider: MultiProvider、file_storage: FileStorage、app_config: AppConfig以及可选的permission_manager与execution_context。propose_action的实际流程文档描述propose_action为基于当前状态提议一个动作。阅读Agent.propose_action的实现可以看到一条清晰的流水线重置执行 traceself.reset_trace()便于调试观察每一步通过run_pipeline依次收集各组件提供的 directivesget_resources、get_constraints、get_best_practices并合并到self.state.directives通过run_pipeline(CommandProvider.get_commands)收集所有组件提供的命令并剔除被禁用的命令调用MessageProvider.get_messages流水线获取各组件注入的消息当前时间、历史摘要、API 预算等依据配置的 prompt 策略构建ChatPrompt调用complete_and_parse请求 LLM 并解析出动作提案通过run_pipeline(AfterParse.after_parse, output)通知各组件提案已被解析最后返回动作提案。值得注意的是当前实现中 Agent 支持多种 prompt 策略one_shot、rewoo、plan_execute、reflexion、tree_of_thoughts、lats、multi_agent_debate由app_config.prompt_strategy决定每种策略对应独立的 ActionProposal 类型其并集构成AnyActionProposal。这意味着BaseAgent中返回ThoughtProcessOutput这一概念在实现层面演进为更通用的AnyProposal类型参数BaseAgent是泛型类BaseAgent[Generic[AnyProposal]]各策略的提案结构可在此文件中查看位于classic/original_autogpt/autogpt/agents/prompt_strategies/目录。execute的实际流程execute接收一个动作提案完成以下工作重新收集并过滤命令列表若配置了权限管理器permission_manager先对每个工具调用做权限检查被拒绝时转入do_not_execute路径并让 Agent 以反馈形式换一种方法通过_get_command按名字匹配命令并执行单个工具直接执行多个工具则用asyncio.gather并行执行对输出做 token 长度保护——结果超过send_token_limit // 3时替换为错误结果防止撑爆 prompt通过run_pipeline(AfterExecute.after_execute, result)把执行结果交给各组件例如 ActionHistoryComponent 会把结果写入历史返回ActionResult成功为ActionSuccessResult失败为ActionErrorResult。这些结果类型定义在 action.py 中。构建你自己的 Agent文档给出的最简单方式是扩展Agent类并添加额外的组件。这样既能复用所有内置组件也能复用执行 Protocols 的默认逻辑。文档原文示例如下class MyComponent(AgentComponent): pass class MyAgent(Agent): def __init__( self, settings: AgentSettings, llm_provider: MultiProvider, file_storage: FileStorage, app_config: AppConfig, ): # Call the parent constructor to bring in the default components super().__init__(settings, llm_provider, file_storage, app_config) # Add your custom component self.my_component MyComponent()由于组件检测是基于类型而非变量名的这里把self.my_component赋值为AgentComponent的实例即可在实例化时被自动收集进self.components并参与排序。如果组件实现了某个 protocol例如MessageProvider那么在父类已经跑通的对应流水线上你的组件就会自动插队生效——例如自定义组件实现get_messages其返回的消息会在每个思考循环中被自动注入 prompt无需改动propose_action一行代码。这是组件取代插件这一设计理念的直接体现能力是声明式的、可组合的。更深入的定制覆盖行为或直接继承 BaseAgent对于更强的定制需求文档指出可以覆盖propose_action和execute甚至直接对BaseAgent子类化从而完全掌控 Agent 的组件与行为。两种路线的取舍如下继承Agent并覆盖方法保留全套内置组件与工具命令只替换如何思考或如何执行的部分逻辑。例如重写propose_action换成自己的推理流程但execute中的命令匹配、权限检查、token 保护、AfterExecute通知等机制依然可用直接继承BaseAgent从零开始装配组件集合适合实现完全不同的 Agent 范式。仓库中的 forge_agent.py 就是这样一个范例ForgeAgent同时继承ProtocolAgent与BaseAgent它只挂载了自己需要的组件SystemComponent、TodoComponent、HTTPClientComponent等并自行实现了propose_action组装 directives/commands/messages 后构建 prompt注释中明确提示此处需要替换为你的 LLM 调用逻辑可参考 original_autogpt 的 complete_and_parse与execute命令匹配、执行、异常转换并触发AfterExecute流水线。组件装配的三种实操技巧结合组件文档与源码定制 Agent 时还有三个常用手段排序对单个组件用run_after声明依赖例如 agent.py 中ActionHistoryComponent声明了.run_after(WatchdogComponent).run_after(SystemComponent)注意避免循环依赖且排序依赖由_topological_sort保证禁用设置组件的_enabled属性可为布尔值或每次执行前求值的Callable[[], bool]可配合_disabled_reason在调试信息中说明原因要移除父类引入的组件直接把对应属性置为None例如self.watchdog None配置需要外部配置的组件继承ConfigurableComponent[MyConfig]用 pydanticBaseModel定义配置字段敏感字段建议用UserConfigurable(from_envENV_VAR_NAME, excludeTrue)从环境变量注入。小结AutoGPT 的 Agent 体系可以概括为三点BaseAgent定义了提议—执行两个抽象方法并通过run_pipeline 组件自动收集机制提供协议流水线执行、重试回滚与配置序列化能力内置Agent实现了这两个方法装配了全部内置组件并支持多种 prompt 策略开发者继承Agent加组件是最轻量的扩展路径覆盖方法或直接继承BaseAgent则提供完全的定制自由度。围绕该主题继续深入建议按顺序阅读agents.md、components.md、protocols.md、built-in-components.md、creating-components.md以及源码 base.py、agent.py、forge_agent.py。【免费下载链接】AutoGPTAutoGPT is the vision of accessible AI for everyone, to use and to build on. Our mission is to provide the tools, so that you can focus on what matters.项目地址: https://gitcode.com/GitHub_Trending/au/AutoGPT创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

2026/9/7 9:59:17

FLUX.1开源AI图像生成:技术图表与免费部署实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/7 9:59:17

rdma_bench框架解析:RDMA基准测试与性能调优实践

简介:一套来自USENIX ATC论文的rdma_bench开源框架,定位于帮助RDMA与InfiniBand网络性能研究人员、内核驱动开发者快速搭建依赖InfiniBand HCA硬件的基准测试工作台,评估不同硬件、驱动(如Mellanox OFED或上游驱动)及消…

2026/9/7 9:59:17

Matlab PCA完整实战:主成分分析流程、代码与主成分数量确定

简介:基于Matlab的PCA主成分分析实例,以不同浓度混合物的拉曼光谱数据为实验对象,面向需要掌握主成分分析方法的本科生、研究生及相关领域科研人员。资源包含配套的Matlab脚本与训练集数据表格,脚本完整实现了从数据读取、标准化处…

2026/9/7 13:44:49

TikTok技术爆款内容解析:短视频时代的技术传播新逻辑

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/7 13:44:49

科普大模型入门指南:定义、应用与训练方法

目录 一、大模型的简单认知 (一)官方定义 (二)聚焦到大语言模型 (三)大模型的应用举例 二、如何得到大模型 (一)整体的一般步骤 训练自己的模型 使用预训练模型 选择适当的…

2026/9/7 13:44:49

AI技术社区运营:从Kimi大使计划看开发者生态构建

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/7 13:44:49

基于Lua脚本的物联网网关实现西门子PLC数据采集与边缘计算

先交代一下背景。我这边前段时间接了一个现场项目,产线上有十几台西门子S7-200 Smart和两台S7-1200,要统一采集数据进MES系统,顺便做几个温度超限报警推送。按老套路来做,要么加一台工控机写多线程采集程序,要么用大牌…

2026/9/7 13:39:49

直击高频编程考点:图论总结及经典算法题总结

目录 一、图论基础分析 (一)基本介绍 (二)JDK中的应用分析 (三)其他框架中的使用介绍 二、相关编程练习题 (一)单词接龙(Word Ladder) (二)克隆图(Clone Graph) (三)岛屿数量(Number of Islands) (四)网络延迟时间(Network Delay Time) (五)…

2026/9/7 0:47:43

超人会飞不算本事:系统稳定依赖清晰规则与边界设计

开头先不绕弯子。“#斯坦李吐槽dc 所以超人是无缘无故会飞的嘛哈哈哈哈哈哈哈锤哥真是技术人才啊!#雷神 #复联”这类调侃式短标题,第一波冲击力在于它把两个宇宙的角色塞进同一个吐槽箱里,但细想一下就能发现,它真正碰到的根本不是…

2026/9/7 0:14:19

超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论

把“蜘蛛侠 vs 超人”放在 CSDN 上聊,可能很多人第一反应是走错片场了。但如果把这两个角色看成“两个持续运营了 80 多年的文化产品”,你会发现,这场比较本质上是两个不同 IP 策略的长期结果对比:超人赢在定义了整个超级英雄题材…

2026/9/7 0:14:17

基于CNN的调制信号识别:MATLAB实现时频图分类实战

简介:本资源是一套面向通信工程与信号处理方向学习者、研究者的深度学习实践方案,聚焦调制信号自动检测与识别这一典型无线通信任务,解决传统方法依赖人工特征、低信噪比下性能下降等痛点。压缩包共12个文件(10.73MB)&…

2026/9/7 0:03:36

基于YOLOv8和PyQt5的麦穗稻穗检测识别系统设计与实现

这次我们来看一个把目标检测算法和桌面端工具结合得很典型的项目:基于 YOLOv8 PyQt5 的麦穗稻穗检测识别系统。这个项目本身不是新概念,但它的价值在于落地形态很完整。YOLOv8 负责核心的麦穗稻穗目标检测,PyQt5 负责提供可视化的桌面交互界…

2026/9/7 0:03:36

UL 1642锂电池安全标准全解析:测试项目、认证流程与避坑指南

简介:UL 1642是锂电池安全领域的重要规范,本中文版资源适合锂电池制造商、检测机构工程师及产品认证相关人员阅读,用于理解电池在设计与制造层面的安全要求、测试方法与合规要点。资源共1个PDF文件,压缩包大小834KB,便…

2026/9/7 0:03:36

BS EN 13814-1-2019游乐设施安全标准:设计与制造核心要点解析

简介:BS EN 13814-1:2019是英国采纳欧洲标准EN 13814-1:2019的正式版本,由BSI标准出版,重点规定游乐设施和游乐设备在设计与制造环节的安全准则,与BS EN 13814-2:2019、BS EN 13814-3:2019共同取代旧版BS EN 13814:2004。该标准面…

2026/9/6 11:40:10

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/6 19:33:50

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/6 10:19:40

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…