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 和 typedChatModelAgent支持,使 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 校验。
- 新增
agentsmdmiddleware,用于加载和注入AGENTS.md风格的项目指令。 ChatModelAgentState增加ToolInfos和DeferredToolInfos,作为 middleware 调整模型可见工具集合的主路径。ToolInfos表示当前模型调用直接可见的工具;DeferredToolInfos表示可由模型通过工具搜索机制按需发现的候选工具。- Tool search middleware 支持三类工具加载方式:使用模型侧原生 tool search 能力从 deferred tools 中按需加载;按模型协议要求提供固定 schema 的
ToolSearchTool,由模型通过该入口搜索 deferred tools;不依赖模型侧协议,使用 Eino 提供的自定义tool_searchtool 检索工具,并把命中的工具追加到常规ToolInfos。 - Compose 新增
AgenticToolsNode,ToolsNode增加 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。