v0.9.* agentic-runtime

V0.9 的版本主题是 agentic-runtime。该版本主要围绕 ADK 的消息协议、Agent 运行控制和多轮运行时能力展开,在保留 *schema.Message 默认路径的同时,引入 AgenticMessage 及配套泛型抽象,为更丰富的模型原生 Agent 协议、服务端工具调用、运行中断与恢复打下基础。

1. AgenticMessage 与 ADK 支持

V0.9 新增 schema.AgenticMessage,用于表达比传统 schema.Message 更完整的 Agentic 消息结构。

  • AgenticMessage 采用 content block 模型,支持文本、推理内容、工具调用、工具结果、服务端工具、MCP 工具和多模态内容等结构化片段。
  • []ContentBlock 能更完整地保留不同模型协议响应中的 block 时序;新增 block 类型也更适配 OpenAI Responses API、Claude、Gemini 等协议中的 tool use、reasoning、streaming metadata 等结构。
  • components/model 新增 AgenticModel 组件,用于接入以 AgenticMessage 为输入输出的模型实现。
  • ADK 对 AgenticMessage 路径提供 typed agent、typed event、typed runner 和 typed ChatModelAgent 支持,使 AgenticModel 能进入 ADK 的 Agent 生命周期。

2. ChatModelAgent 能力扩展

V0.9 对 ChatModelAgent 的运行控制、模型调用可靠性和 middleware 扩展点进行了系统增强。

Cancel

  • 新增 Agent Cancel 能力,用于从外部主动终止正在运行的 Agent。
  • 支持安全点取消、递归取消、取消超时升级,以及取消过程中的 checkpoint 持久化。
  • 取消期间发生的 interrupt 会统一进入取消语义,调用方可以通过 CancelError 区分主动取消与普通业务失败。

Model Retry

  • Retry 从简单的 error retry 扩展为 ShouldRetry(ctx, RetryContext) -> RetryDecision
  • Retry 决策可以读取模型输出、拒绝不满足条件的输出、修改下一次输入、追加模型 option,并覆盖 backoff。

Model Failover

  • 新增 Model Failover 能力,用于在模型调用失败后切换到备用模型。
  • Failover 决策可以读取失败 attempt 的输出、错误、原始输入和 attempt 序号,并选择下一次使用的模型。
  • 支持为备用模型改写输入;也支持优先复用上一次调用成功的模型,降低每次从固定主模型开始试错的成本。

Middleware 增强

  • ChatModelAgentMiddleware 新增 AfterAgent,用于在 Agent 成功结束后执行收尾逻辑。
  • Summarization、reduction、skill、filesystem、plan-task、patch-tool-calls 等 middleware 完成泛型化,支持 AgenticMessage 路径。
  • Summarization middleware 新增 TypedMiddleware.Summarize,同步 summarization 能力从独立函数转为 middleware 内聚能力。
  • Filesystem middleware 增强多模态读取能力,并增加 PDF pages 校验。
  • 新增 agentsmd middleware,用于加载和注入 AGENTS.md 风格的项目指令。
  • ChatModelAgentState 增加 ToolInfosDeferredToolInfos,作为 middleware 调整模型可见工具集合的主路径。
  • ToolInfos 表示当前模型调用直接可见的工具;DeferredToolInfos 表示可由模型通过工具搜索机制按需发现的候选工具。
  • Tool search middleware 支持三类工具加载方式:使用模型侧原生 tool search 能力从 deferred tools 中按需加载;按模型协议要求提供固定 schema 的 ToolSearchTool,由模型通过该入口搜索 deferred tools;不依赖模型侧协议,使用 Eino 提供的自定义 tool_search tool 检索工具,并把命中的工具追加到常规 ToolInfos
  • Compose 新增 AgenticToolsNodeToolsNode 增加 tool name 和 argument alias 支持。

3. TurnLoop

V0.9 新增 TurnLoop,用于把一次性的 Agent run 提升为可持续运行、可被外部驱动的 turn 级运行时。

  • 面向多轮运行:TurnLoop 持续接收外部输入,每个 turn 独立规划输入、构造 Agent、消费事件,适合长期在线的交互式 Agent。
  • 支持输入合并:GenInput 在 turn 边界决定本轮消费哪些输入、哪些继续等待,应用可以实现批处理、去重、合并用户连续输入等策略。
  • 支持抢占:带 preempt option 的 Push 会原子地写入新输入并请求取消当前 turn,使高优先级输入可以打断正在运行的 Agent。
  • 支持声明式 checkpoint/resume:恢复时,应用不需要自行还原输入队列;TurnLoop 会区分被中断的输入、尚未处理的输入和恢复后新到达的输入,应用只需声明这些输入如何重新进入后续 turn。