【Agent】深入解析 Agent 运行机制

《Deep Dive into the Agent Runtime Mechanism》的完整中文翻译,适合开发者和AI系统集成工程师参考。

https://github.com/Intelligent-Internet/CommonGround/blob/main/docs/framework/01-agent-runtime.md


深入解析 Agent 运行机制

版本:0.1
目标受众:开发者、AI 系统集成工程师
目的:提供关于 Agent 内部工作原理、核心机制和生命周期的深度与准确理解。


1. 引言:什么是 Agent?

1.1 核心概念

在本项目中,Agent(智能体) 是一个能够自主思考和行动的实体,其行为、角色和能力由其 Agent Profile(智能体配置文件)(一个 YAML 文件)所定义。
它不是一个单一的类,而是由一个通用执行引擎驱动的高度可配置组件。

1.2 核心实现

所有 Agent 的基础是定义在 nodes/base_agent_node.py 中的 AgentNode 类。这个类是一个可复用的异步 PocketFlow 节点,封装了 Agent 的完整生命周期。从战略规划、任务执行到用户交互,所有活动都由不同配置的 AgentNode 实例完成。

1.3 文档目标

本文将深入分析 AgentNode 的内部机制,解释其如何通过 Turn(回合) 模型管理生命周期,并阐明其如何与 Agent 配置文件工具系统状态管理机制 等核心机制协同工作,从而实现复杂的 AI 行为。


2. Agent 类型与角色划分

系统通过为 AgentNode 加载不同的 Agent Profile 实现角色区分:

  • 2.1. Partner Agent(合作智能体):作为用户接口,负责需求沟通、协作规划,最终启动并监控 Principal Agent。
  • 2.2. Principal Agent(主智能体):作为项目大脑,将高级目标拆解为具体的 Work Modules,并分配给下属执行。
  • 2.3. Associate Agent(执行智能体):作为任务执行者,负责完成 Principal 分配的具体工作模块。
  • 2.4. 指令生成工具模式:系统采用了简化的工具架构,不再执行复杂子流程,而是生成高质量、结构化的执行指令。例如,generate_message_summary 工具生成一条详细提示,引导 Associate Agent 完成摘要。这种模式简化了系统复杂度,同时保留强大功能。

3. Agent 执行核心:Turn(回合)

一个 Turn 是 Agent 思考与行为的最小单位,也是实现系统全流程可观测性的核心数据结构。每次 Agent 完成一个完整的“思考-行动”循环,都会记录为一个 Turn

3.1 Turn 定义

Turn 数据结构定义于 agent_core/models/turn.py,记录内容包括:

  • 身份信息turn_idagent_infoflow_id(用于追踪连续执行流)
  • 状态与时间status(运行中、完成、错误)、start_timeend_time
  • 触发来源source_turn_idssource_tool_call_id,明确指出哪个事件触发了本回合
  • 输入信息:所有处理的 InboxItem 及其格式化后的内容(由 Ingestor 处理)
  • 输出信息:最终的决策,即下一步 action
  • 内部交互记录:与 LLM 的完整交互 (llm_interaction) 与所有工具调用详情 (tool_interactions)

3.2 AgentNode 执行循环

核心为异步的三段式执行流:prep_asyncexec_asyncpost_async

a. prep_async(准备阶段 - 思考输入)
  1. 处理未完成的工具调用 (_resolve_dangling_tool_calls)

  2. 执行 Pre-Turn 观察器 (_process_observers('pre_turn')):根据 Profile 的设置添加事件(如开场简报)到 inbox

  3. 处理 Inbox (_process_inbox)

    • 事件按优先级排序(如 TOOL_RESULT 高于 USER_PROMPT
    • 每个事件通过对应的 Ingestor 格式化为 LLM 可读文本
    • 注入 messages 供 LLM 使用
  4. 创建并启动新回合 (_create_and_start_new_turn)

  5. 构建系统提示 (_construct_system_prompt)

b. exec_async(执行阶段 - LLM交互)
  1. 调用 LLM:通过 call_litellm_acompletion 发出请求,包含 messagessystem_prompt 和可用工具列表
  2. 处理流式响应:由 LLMResponseAggregator 聚合响应流,同时通过 WebSocket 实时推送 llm_chunk 给前端
c. post_async(后处理阶段 - 决策与行动)
  1. 处理 LLM 响应 (_process_llm_response):若有工具调用请求,更新到 state.current_action
  2. 执行 Post-Turn 观察器 (_process_observers('post_turn'))
  3. 决定下一步行动 (_decide_next_action_with_flow_decider):依据 flow_decider 规则及当前状态确定 PocketFlow 的下一步方向
  4. 完成当前 Turn 状态 (_finalize_current_turn_status)

4. 核心机制详解

4.1 状态与上下文管理(agent_core/state/management.py

使用层级上下文精确管理状态:

  • RunContext:顶层运行上下文,包含所有全局状态与配置

  • TeamState:所有 Agent 共享的团队状态,核心为 work_modules(团队白板)

  • SubContext:Agent 实例级上下文,包括:

    • state:私有可序列化状态(如 messages, inbox, deliverables
    • runtime_objects:不可序列化的运行对象(如 asyncio.Event
    • refs:指向其父 RunContextTeamState 的引用

4.2 声明式行为配置:Agent Profile (agent_profiles/)

YAML 格式配置文件控制 Agent 行为:

  • system_prompt_construction:构建系统提示
  • tool_access_policy:控制可用工具
  • observers:响应式机制核心,基于条件判断执行操作(如向 inbox 添加事件)
  • flow_decider:Agent 的决策逻辑规则集

4.3 事件驱动核心:Inbox(收件箱)

Agent 间异步通信的基础设施:

  • InboxItem:标准事件结构,含 sourcepayload
  • _process_inbox:根据优先级处理事件
  • Ingestor:将 InboxItem 内容格式化为可读消息

4.4 工具机制(agent_core/framework/tool_registry.py

工具调用流程

  1. LLM 输出中包含 tool_calls
  2. AgentNode 解析并记录至 state.current_action
  3. PocketFlow 将控制流路由至对应工具节点
  4. 工具执行后,将结果封装为 InboxItemsource: TOOL_RESULT)并返回至调用者 inbox
  5. 调用 Agent 在下一次 _process_inbox 中读取结果并继续执行

指令生成模式

工具仅生成结构化提示,由调用 Agent 在后续回合中自行执行
例如:generate_message_summary 生成摘要指令,generate_markdown_report 生成报告指令


5. 附录:Agent 架构图(Mermaid)


flowchart TD
 subgraph subGraph0["声明式配置(agent_profiles/)"]
        Profiles["👤 Agent Profiles (YAML)"]
        LLMConfigs["⚙️ LLM Configs (YAML)"]
        Protocols["📜 Handover Protocols (YAML)"]
  end
 subgraph subGraph1["框架服务层(agent_core/framework/)"]
        ToolRegistry["🛠️ 工具注册器"]
        HandoverSvc["🤝 接力服务"]
        TurnManager["📈 Turn 管理器"]
  end
 subgraph subGraph2["核心逻辑与编排层(agent_core/)"]
        StateMgmt["🗂️ 状态管理<br>agent_core/state/management.py<br><i>(RunContext 管理)</i>"]
        AgentEngine["🧠 执行引擎<br>agent_core/nodes/base_agent_node.py<br><i>(Inbox、观察器、FlowDecider)</i>"]
        subGraph0
        subGraph1
  end
 subgraph subGraph3["展示与 API 层"]
        UI["🌐 Web UI (Next.js)"]
        Server["🚀 FastAPI Server (HTTP/WebSocket)<br>api/server.py"]
  end
 subgraph subGraph4["后端服务与基础设施"]
        RAG["📚 RAG 联邦服务<br>agent_core/rag/federation.py"]
        MCPool["🔌 MCP 会话池<br>agent_core/services/server_manager.py"]
        IIC["💾 IIC 持久化<br>agent_core/iic/core/iic_handlers.py<br><i>(iic, json 文件)</i>"]
        FileMon["👀 文件监控器<br>agent_core/services/file_monitor.py"]
  end
 subgraph subGraph5[" "]
    direction LR
        subGraph3
        subGraph4
  end
    UI -- HTTP/WebSocket --> Server
    Server -- 创建/管理 --> StateMgmt
    StateMgmt -- 提供上下文 --> AgentEngine
    StateMgmt <-- 保存/加载快照 --> IIC
    Profiles -- 配置 --> AgentEngine
    LLMConfigs -- 配置 --> AgentEngine
    Protocols -- 供 --> HandoverSvc 读取
    AgentEngine -- 使用 --> TurnManager & HandoverSvc
    AgentEngine -- 获取工具 --> ToolRegistry
    AgentEngine -- 执行工具 --> RAG & MCPool
    FileMon -- 触发索引 --> RAG
    MCPool -. 启动时发现工具 .-> ToolRegistry

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值