Skip to content

NNRP/1-preview4 设计:Runtime Object 与控制协议

NNRP/1-preview3 证明了 SDK 可以共享 Rust 侧协议产物,并发出一致的 preview 包。但它没有证明所有场景都能通过替换 HTTP 或 SSE 获得收益。因此 preview4 的重心从“替换传输层”转向“运行时对象效率”:避免大型或快速变化的运行时状态反复退化为 JSON 解析,把调度决策显式化,并让一致性测试套件能在线路层验证协议语义。

定位

Preview4 面向协议边界确实承载运行时状态的场景:

  • AI Coding Agent 中的 subagent 调度、工具调用、artifact 流和多模态上下文。
  • 神经渲染或 runtime 服务中的部分结果、deadline、丢弃原因与分段 trace。
  • adapter 生态中,即使模型计算路径占主导,也不能因为推理引擎不支持 NNRP 卡住业务接入。

它不是在宣称 token streaming、vLLM chat completions 或 cache lookup 会自动快过成熟 HTTP 路径。Cache 只是对象生命周期工具之一,不是核心承诺。

架构

Preview4 保留 preview3 建立的粗粒度 FFI 与运行时边界。新增的是这些边界之上的协议语义,而不是把边界调用拆成更多细碎字段级调用。

Runtime Object 生命周期

重载荷应该可以被命名、引用、增量更新和释放。面向小响应的 token JSON profile 仍然有效,但它不能成为 tensor、图像区域、工具 artifact 或可复用上下文的唯一表示。

控制帧族

帧族作用
CANCEL / ABORT停止过期任务。CANCEL 是协作式取消;ABORT 允许在结果已经无用时硬中断。
SUPERSEDE用新操作替代旧操作,同时保留 trace 连续性。
PRIORITY_UPDATE入队后动态调整优先级,让紧急任务可以越过过期任务。
DEADLINE / EXPIRE_AT声明任务何时失效,过期后可以直接丢弃。
PROGRESS / PARTIAL_RESULT在最终结果前返回可用进度与部分 artifact。
BACKPRESSURE / CREDIT_UPDATE让任一侧调整发送窗口,不需要额外发明限流通道。
CAPABILITY_NEGOTIATION不只声明支持,还要声明成本、偏好、限制与降级行为。
ROUTE_HINT / EXECUTION_HINT为 subagent 和 runtime 调度携带提示,避免再套很重的 JSON 或 protobuf。
CACHE_REFERENCE / CACHE_MISS / CACHE_INVALIDATE在确实能复用的场景里正式化缓存引用与失效,不假设所有画面或 prompt 都适合缓存。
TRACE_CONTEXT跨帧携带 E2E 分段计时与关联 ID。
RESULT_DROP_REASON解释结果为什么被丢弃,例如 deadline 过期、被新请求替代、背压或对端取消。
DEGRADE_PROFILE首选 profile 不可用或成本过高时协商更便宜的 profile。
BUDGET_UPDATE在会话中更新 compute、token、memory 或 bandwidth 预算。
ERROR_RECOVERABLE / RETRY_AFTER区分可重试压力与终止失败。

Profile 扩展

Preview4 应先补 profile 族,而不是把所有场景塞进 token stream profile:

  • runtime.control:控制帧、deadline、priority、progress、backpressure、trace 与 drop reason。
  • runtime.object:对象声明、对象引用、delta、release 与成本元数据。
  • coding.agent:subagent 路由、工具调用 artifact、执行提示与取消策略。
  • multimodal.artifact:图像、音频、视频、工具 artifact 的类型化描述符与部分结果通道。
  • render.runtime:帧 deadline、局部区域结果、drop reason 与 trace stage。
  • cache.reference:适合复用的场景下的 cache reference、miss、invalidate 与 lease。

线路级一致性测试

Preview4 的一致性测试必须引入主动线路级 runner。SDK adapter 测试仍然有价值,但 adapter 由实现自己维护,容易把语义漂移藏在本地调用里。

线路级 runner 可以:

  • 扮演 NNRP 客户端,连接到实现侧服务端;
  • 扮演 NNRP 服务端,接受实现侧客户端;
  • 扮演代理,注入帧顺序、超时、背压与关闭行为;
  • 断言帧级事件、终止状态、trace 传播与 drop reason。

这样可以在上层 SDK 或 adapter 掩盖问题之前,直接观察语义兼容性。

非目标

  • 不用额外 wrapper 去“优化”同一条 HTTP/SSE vLLM chat completion 路径。
  • 不在没有实测复用的动态画面或 prompt 上承诺 cache 收益。
  • 不把粗粒度 Rust FFI 拆成大量细碎边界调用。
  • 不让 transport 或 profile 包变成隐藏实现上的空开关。

退出标准

  • 协议文档中存在 runtime control 与 runtime object profile 基线。
  • 线路级一致性测试的 schema、target manifest、execution plan 与 result report 都存在。
  • 低代码一致性测试生成器能生成 wire target manifest。
  • 至少一个 SDK/runtime 可以被 wire runner 测试,而不是用自己的 adapter 充当语义 oracle。

NNRP Documentation