ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

AutoGPT Classic Agent 体系深度解析:从 BaseAgent 抽象层到自定义智能体实践

AutoGPT Classic Agent 体系深度解析:从 BaseAgent 抽象层到自定义智能体实践 AutoGPT Classic Agent 体系深度解析从 BaseAgent 抽象层到自定义智能体实践【免费下载链接】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/original_autogpt中的智能体模块展开系统讲解BaseAgent基类的抽象方法设计、Agent主智能体的组件装配与协议流水线执行机制以及如何通过继承扩展一个属于你自己的 Agent。读完后你将理解 AutoGPT 智能体的提案-执行双循环架构、内置组件与提示策略的协作方式并能基于Agent类快速搭建可扩展的自定义智能体。一、Agent 是什么组件与流水线的组合AutoGPT 经典版将智能体Agent定义为由一系列组件Components组成、负责执行流水线pipeline及额外逻辑的对象。所有智能体的基类是BaseAgent它内置了收集组件、按协议顺序执行流水线的必要逻辑。模块入口位于 agents 包对外暴露三个核心符号from .agent import Agent from .agent_manager import AgentManager from .prompt_strategies.one_shot import OneShotAgentActionProposal __all__ [AgentManager, Agent, OneShotAgentActionProposal]即主智能体Agent、负责状态持久化与加载的AgentManager以及默认提示策略下的动作提案类型OneShotAgentActionProposal。BaseAgent的实际定义在 Forge 框架中见 base.py。值得注意的是BaseAgent使用了自定义元类AgentMetaclass 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这意味着实例化智能体时会自动扫描实例属性、收集所有AgentComponent并排序开发者不需要手动维护组件注册表。_collect_components通过dir(self)遍历属性找出所有组件再用_topological_sort依据组件的run_after声明做拓扑排序——这就是Agent.history上.run_after(WatchdogComponent).run_after(SystemComponent)这类链式调用能够生效的原因见 agent.py 中组件装配。二、两个实为三个关键抽象方法官方文档指出BaseAgent为智能体正常工作提供了两个抽象方法propose_action基于智能体当前状态提出一个动作action文档中说明其返回ThoughtProcessOutput当前源码中已演进为类型化的动作提案对象见下文execute负责执行所提出的动作返回ActionResult。在 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: ...do_not_execute处理的是人类否决的场景当用户拒绝批准某个动作时它把拒绝意见写入历史并返回ActionInterruptedByHuman结果实现见 agent.py让智能体在下一轮循环中知道该换一种方式而不是原地打转。2.1 propose_action指令、命令与消息的流水线组装Agent.propose_actionagent.py是思考阶段的核心其流程可概括为收集指令Directives通过run_pipeline依次调用DirectiveProvider.get_resources/get_constraints/get_best_practices把各组件产出的资源、约束、最佳实践合并进directives收集命令Commandsrun_pipeline(CommandProvider.get_commands)从所有组件中取出可执行命令随后_remove_disabled_commands过滤掉被app_config.disabled_commands禁用的命令准备消息调用self.history.prepare_messages()做惰性压缩再经MessageProvider.get_messages管道获取最终消息序列构建提示词把消息、任务、AI 人格ai_profile、指令、命令规格function_specs_from_commands交给当前prompt_strategy.build_promptLLM 补全并解析complete_and_parse调用self.llm_provider.create_chat_completion由策略的parse_response_content解析出动作提案并执行AfterParse.after_parse后处理管道最后cycle_count 1。返回类型上agent.py 定义了所有提示策略提案的联合类型AnyActionProposal ( OneShotAgentActionProposal | PlanExecuteActionProposal | ReWOOActionProposal | ReflexionActionProposal | ToTActionProposal | LATSActionProposal | DebateActionProposal )也就是说文档中提到的ThoughtProcessOutput在现有实现中已经细化为每种提示策略各有一个专属提案类型的联合类型Agent类签名也随之变为BaseAgent[AnyActionProposal]。2.2 execute权限检查、单/并行执行与结果防护Agent.executeagent.py实现了执行阶段的完整闭环权限前置检查若配置了permission_manager先对每个工具调用check_command一旦有命令被拒立即走do_not_execute路径把Permission denied for command ...作为反馈写回历史单工具与并行工具proposal.get_tools()取出工具列表单个工具走_execute_tool按名称在self.commands中反向查找Command并调用兼容同步/异步返回多个工具则通过asyncio.gather并行执行结果聚合为全部失败 →ActionErrorResult部分成功 → 成功输出加_errors字段全部成功 →ActionSuccessResult三种形态见_execute_tools_parallel输出膨胀防护执行结果若超过send_token_limit // 3的 token 数会被替换为命令返回内容过多请勿用相同参数再次执行的错误结果防止提示词上下文被撑爆后处理管道最后执行AfterExecute.after_execute管道把结果通知给Watchdog、ActionHistory等关心每步执行完毕事件的组件ReWOO 变量回填若当前策略是 ReWOO执行结果还会被记录到计划变量的命名空间中供后续步骤做变量替换。命令查找本身也有工程细节_get_command以逆序遍历命令列表后注册的组件命令优先级更高而find_obscured_commands能识别出所有名字都被别的命令遮蔽的冗余命令便于开发者排查命名冲突。三、流水线执行引擎run_pipeline 与协议BaseAgent的必要逻辑集中在run_pipeline方法base.py。它的工作方式是通过方法名反查协议类如DirectiveProvider确保传入的确实是协议方法对self.components中每个属于该协议且enabled的组件调用其同名方法把返回值list[T]追加进method_result支持两级重试单个组件遇到ComponentEndpointError时原地重试上限retry_limit3整个管道遇到EndpointPipelineError时回滚参数从头重跑参数在每次尝试前用_selective_copy做选择性深拷贝保证失败重试时状态干净。这套协议 组件机制让各组件可以按run_after声明的依赖关系有序地贡献输出而Agent本身无需硬编码任何组件调用顺序——组件顺序由元类收集后的拓扑排序决定。相关协议定义位于 forge/agent/protocols 引入的AfterExecute、AfterParse、CommandProvider、DirectiveProvider、MessageProvider等模块组件体系AgentComponent及其错误类型则定义在forge.agent.components。仓库文档侧对这两套机制有对应说明可参考 components.md 与 protocols.md 深入阅读。四、Agent 主智能体内置组件全景Agent是 AutoGPT 提供的主智能体BaseAgent的子类实现了上述全部抽象方法。其构造函数agent.py接收参数类型作用settingsAgentSettings智能体状态任务、AI 人格、动作历史、上下文llm_providerMultiProvider多模型 LLM 访问入口file_storageFileStorage文件存储CLI 模式下根目录即工作区app_configAppConfig应用级配置LLM 选型、提示策略、禁用命令等permission_managerOptional[CommandPermissionManager]可选的命令权限管理器execution_contextOptional[ExecutionContext]执行上下文根智能体自建含子智能体工厂从源码结构看构造函数装配了完整的内置组件矩阵涵盖文档所称的 Built-in Components系统与历史SystemComponent、ActionHistoryComponent基于EpisodicActionHistory按fast_llm计 token、按send_token_limit控制长度、WatchdogComponent守护步数与 token 预算人机交互非noninteractive_mode下装配UserInteractionComponent文件与执行FileManagerComponentCLI 模式以工作区为根、CodeExecutorComponentDocker 沙箱容器名{agent_id}_sandbox、GitOperationsComponent、ArchiveHandlerComponent、ClipboardComponent能力组件ImageGeneratorComponent、WebSearchComponent、WebPlaywrightComponent、HTTPClientComponent、DataProcessorComponent、MathUtilsComponent、TextUtilsComponent、TodoComponent、ContextComponent扩展能力PlatformBlocksComponent设置PLATFORM_API_KEY时可用平台 Block、SkillComponent扫描{workspace}/.autogpt/skills与~/.autogpt/skills下的SKILL.md技能目录。AgentSettingsagent.py在基类状态之上扩展了history: EpisodicActionHistory[AnyActionProposal]与context: AgentContext两个字段构成可序列化、可恢复的智能体状态。4.1 可插拔的提示策略Agent通过_create_prompt_strategy依据app_config.prompt_strategy在运行时选择策略agent.py支持七种配置值策略类提案类型rewooReWOOPromptStrategyReWOOActionProposal两阶段先规划后执行执行期可跳过 LLM 调用plan_executePlanExecutePromptStrategyPlanExecuteActionProposalreflexionReflexionPromptStrategyReflexionActionProposaltree_of_thoughtsTreeOfThoughtsPromptStrategyToTActionProposallatsLATSPromptStrategyLATSActionProposalmulti_agent_debateMultiAgentDebateStrategyDebateActionProposal默认one_shotOneShotAgentPromptStrategyOneShotAgentActionProposal各策略源码分别位于 prompt_strategies 目录例如one_shot.py实现单轮思考即行动模式。另外注意一个实现细节策略是否启用prefill预填充响应以约束输出格式取决于模型供应商——self.llm.provider_name ! anthropic时才开启这是因为 Anthropic 模型不接受 prefill 写法。4.2 执行上下文与子智能体Agent还承担根智能体root agent的角色_create_root_execution_context创建携带完整资源访问权、默认资源预算、以及DefaultAgentFactory用于孵化子智能体的ExecutionContext深度标记为 0。从源码结构看这是子智能体sub-agent机制的入口相关重构计划见 SUB_AGENT_REFACTOR_PLAN.md。五、状态持久化AgentManageragent_manager.py 中的AgentManager负责智能体状态的存取以file_storage.clone_with_subroot(agents)建立独立的 agents 子目录list_agents通过扫描*/state.json列出全部智能体load_agent_state读取state.json并AgentSettings.parse_raw还原出完整状态generate_id用agent_name-{uuid4前8位}生成唯一 ID。这解释了为什么AgentSettings需要是可序列化的 Pydantic 模型——它既是运行期状态容器也是持久化格式本身。六、构建你自己的 Agent官方文档给出的最简路径是继承Agent追加自己的组件。这样即可复用全部内置组件与默认的协议执行逻辑。将文档示例与当前Agent构造函数签名对齐后的完整写法如下class MyComponent(AgentComponent): pass class MyAgent(Agent): def __init__( self, settings: AgentSettings, llm_provider: MultiProvider, file_storage: FileStorage, app_config: AppConfig, ): # 调用父类构造器引入全部默认组件 super().__init__(settings, llm_provider, file_storage, app_config) # 追加自定义组件元类会自动收集并参与流水线 self.my_component MyComponent()要点说明无需手动注册AgentMeta元类会在实例创建后自动把self.my_component收集进self.components并做拓扑排序前提是组件为AgentComponent子类控制执行顺序若自定义组件需要在其他组件之后运行可用.run_after(某组件类)声明依赖深度定制文档同时指出若需更彻底的定制可以覆写propose_action与execute甚至直接继承BaseAgent从零实现——这样你就完全掌控组件集合与行为。参考Agent的完整实现agent.py可以看到指令管道 → 提示构建 → LLM 补全解析 → 权限检查 → 工具执行 → 后处理管道的标准骨架自定义智能体可照此裁剪。七、小结与延伸阅读AutoGPT 经典版的 Agent 体系可以概括为三层抽象层BaseAgent位于 classic/forge/forge/agent/base.py定义propose_action/execute/do_not_execute抽象契约、组件自动收集与拓扑排序、带重试的run_pipeline执行引擎主智能体层Agent位于 classic/original_autogpt/autogpt/agents/agent.py装配二十余个内置组件实现权限前置检查、单/并行工具执行、token 膨胀防护并通过七种可插拔提示策略驱动思考扩展层继承Agent加组件即可获得增量能力覆写抽象方法或直接继承BaseAgent可获得完全控制权。原始设计说明见 agents/README.md如需继续深入建议按顺序阅读 agents 包源码、提示策略实现 以及 Forge 侧的 components 文档 与 protocols 文档。【免费下载链接】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),仅供参考
返回列表