agentic_huge_data_base / wiki
页面 jcode · 2.2 智能体运行时·DeepWiki 中文全文译文

2.2 · 智能体运行时(Agent Runtime)

代理式研究运行时 · 聚焦本章的模块关系、源码依据与实现要点。

项目jcode 章节2.2 状态全文译文 模块智能体运行时、工作流与编排、接口与服务契约、界面与交互
源码线索
  • crates/jcode-message-types/src/lib.rs
  • src/agent/compaction.rs
  • src/agent/interrupts.rs
  • src/agent/provider.rs
  • src/agent/turn_execution.rs
  • src/agent/turn_loops.rs
  • src/agent/turn_streaming_broadcast.rs
  • src/agent/turn_streaming_mpsc.rs
  • src/agent_tests.rs
  • src/message/tests.rs
模块标签
  • 智能体运行时
  • 工作流与编排
  • 接口与服务契约
  • 界面与交互
  • 测试、发布与运维

章节正文

智能体运行时

智能体运行时(代理运行时)

相关源文件

本章引用的主要源码文件:

  • crates/jcode-message-types/src/lib.rs
  • src/agent/compaction.rs
  • src/agent/interrupts.rs
  • src/agent/provider.rs
  • src/agent/turn_execution.rs
  • src/agent/turn_loops.rs
  • src/agent/turn_streaming_broadcast.rs
  • src/agent/turn_streaming_mpsc.rs
  • src/agent_tests.rs
  • src/message/tests.rs
  • src/provider/gemini_tests.rs
  • src/provider/openai/stream.rs
  • src/provider/openai_tests/parsing_tools.rs
  • src/provider/openrouter_sse_stream.rs
  • src/provider/state.rs
  • src/server/client_lifecycle_tests.rs
  • src/session/render.rs
  • src/session_tests/cases.rs
  • src/tui/app/remote/queue_recovery.rs
  • src/tui/app/tests/commands_accounts_01/part_02.rs
  • src/tui/app/tests/commands_accounts_02/part_02.rs
  • src/tui/app/tests/remote_events_reload_02/part_01.rs
  • src/tui/app/tests/remote_events_reload_02/part_02.rs

Agent Runtime(代理运行时)是 jcode 的核心执行引擎。它管理单个对话会话的生命周期,处理用户输入、大语言模型(LLM)提供者交互、工具执行和内存管理之间的状态转换。该引擎设计为高度可中断,并支持上下文压缩和子代理生成等高级功能。

智能体结构体

Agent 结构体是维护会话状态和执行 run_turn 循环的主要实体。它封装了大语言模型(LLM)提供者、工具注册表、会话历史以及用于异步交互的各种信号队列。

字段描述
providerProvider trait 的实现(例如 Anthropic、OpenAI)src/agent/mod.rs:88
session包含消息历史和元数据的 Session 对象 src/agent/mod.rs:91
registry可用工具的 Registry src/agent/mod.rs:89
soft_interrupt_queue用于在回合中注入消息的线程安全队列 src/agent/mod.rs:115
background_tool_signal将正在运行的工具移至后台任务的信号 src/agent/mod.rs:117
graceful_shutdown停止生成并保存状态的信号 src/agent/mod.rs:119
cache_tracker跟踪消息前缀以检测仅追加违规 src/agent/mod.rs:121

来源: src/agent/mod.rs:87-136

run_turn 状态机

代理运行时在 run_turn_streaming_mpsc(用于每个客户端的流式传输)或 run_turn_streaming(用于广播)中作为状态机运行。如果大语言模型(LLM)调用工具,单个"回合"会涉及多次迭代。

回合执行流程
  1. 修复与准备repair_missing_tool_outputs 扫描缺失的工具输出并修复记录 src/agent/turn_streaming_mpsc.rs:14-20
  2. 压缩检查messages_for_provider 评估上下文是否超过 Token 限制,并在必要时触发压缩 src/agent/turn_streaming_mpsc.rs:21-45
  3. 内存注入build_memory_prompt_nonblocking_shared 执行非阻塞相关性检查,将长期记忆作为 <system-reminder> 用户消息注入 src/agent/turn_streaming_mpsc.rs:50-89
  4. 提供者调用complete_split 使用静态和动态部分构建提示,以优化缓存 src/agent/turn_streaming_mpsc.rs:110-116
  5. 流处理:处理传入事件(文本增量、工具调用增量),并通过 ServerEvent 广播给客户端 src/agent/turn_streaming_mpsc.rs:149-160
  6. 工具执行:执行请求的工具。如果工具通过 background_tool_signal 标记为后台运行,则将其移交给 BackgroundTaskManager src/agent/mod.rs:117-118
  7. 循环/完成:如果执行了工具,则追加结果并重复循环。如果存在 SoftInterrupt,则在下次大语言模型(LLM)调用前注入 src/agent/turn_streaming_mpsc.rs:13-160
代理运行时管线
jcode · 代理运行时管线 · 图 1
jcode · 代理运行时管线 · 图 1

来源: src/agent/mod.rs:138-180, src/agent/turn_execution.rs:71-120, src/agent/turn_streaming_mpsc.rs:4-160

中断系统

运行时支持几种中断类型,以允许对代理的执行进行控制:

  1. 硬取消:通过 Request::Cancel 协议消息立即停止当前提供者请求。
  2. 软中断:在不停止当前生成的情况下向对话中注入消息。消息在 SoftInterruptQueue 中排队,并在下一个安全点(通常在工具执行之间)注入 src/agent/interrupts.rs:122-152
  3. 后台工具信号:由 Request::BackgroundTool 触发,允许将长时间运行的工具移至后台任务,同时代理继续其回合 src/agent/interrupts.rs:160-164
  4. 优雅关闭:信号用于检查当前部分响应并干净退出 src/agent/interrupts.rs:170-176

来源: src/agent/interrupts.rs:1-176

子代理生成

运行时允许代理生成"子代理"来处理专门任务。这主要用于 Swarm 系统和环境模式。

生成逻辑
  • 会话管理:服务器管理按会话 ID 索引的活动代理实例。
  • 上下文移交:新会话可以使用现有会话数据初始化,以提供连续性 src/agent/turn_execution.rs:132-143
  • 通知:代理可以通过 push_alert 向其他代理推送警报,这些警报会在接收者的下一个回合中注入 src/agent/interrupts.rs:111-118
Swarm 成员生命周期
jcode · Swarm 成员生命周期 · 图 2
jcode · Swarm 成员生命周期 · 图 2

来源: src/agent/turn_execution.rs:71-120, src/agent/interrupts.rs:166-172

缓存跟踪与验证

为确保高效的提供者交互,Agent 使用 CacheTracker 来检测消息历史中的仅追加违规。

  • 违规检测:在每个 API 请求之前,record_client_cache_request 检查当前消息前缀是否与之前的前缀匹配。如果消息被移除或前缀被修改,则记录违规 src/agent/turn_streaming_mpsc.rs:66-67
  • 重置逻辑:在上下文压缩或会话回滚时重置跟踪器 src/agent/turn_execution.rs:184
  • 压缩处理:在压缩时,由于消息历史结构已发生根本性变化,跟踪器会被重置 src/agent/turn_streaming_mpsc.rs:24-25

来源: src/agent/turn_streaming_mpsc.rs:21-67, src/agent/turn_execution.rs:184-185