Skip to content

【实现】 Agent Loop 重构 Phase 5:节点上下文、Artifact 与缓存抽象 #727

Description

@wynxing

关联 RFC / 架构

目标问题

当前 Context 已有 stable/dynamic prompt,但 provider request 仍以单字符串表达,主会话 transcript 承担全部执行历史,节点间缺少结构化 Artifact handoff。多阶段编排若继续复制父历史,会放大上下文污染、compact 风险和 token 成本,也无法稳定观测前缀缓存。

实现设计(How)

  • 引入 PromptBundle 和固定有序 PromptBlock:role_stable、workspace_stable、workflow_state、node_context、turn_delta。
  • PromptBlock 携带 provider-neutral stability 与 digest;adapter 可映射厂商缓存能力,不支持时无损拼接。
  • 为 Explore、Synthesize、Execute、Verify、Finalize 定义版本化 Artifact Contract。
  • 每个 Node 使用私有 transcript,只注入目标、最小 Context Slice、依赖 Artifact 和本节点历史,不继承父节点完整 transcript。
  • Artifact 不可变,replan 创建新 revision;依赖记录 Artifact ID/digest,恢复时校验输入一致性。
  • Compact 增加 node scope,只压缩 NodeTranscript 并生成 NodeTaskState;Session compact 保留现有用户会话语义。
  • 记录 block token/digest、共享前缀、cache read/create token、TTFT 和截断原因;不默认发送 synthetic warm-up。

影响模块:internal/context、provider request types/adapters、Runtime node context、compact、Artifact Store 和 usage/metrics。

边界与非目标:不把厂商 cache_control/cachedContent 字段泄漏到 Runtime;不缓存模型输出;不把敏感附件正文写入指标;本阶段不以 warm-up 调用换取缓存。

任务拆解

  • 定义 PromptBundle、PromptBlock、PromptStability 和确定性 digest。
  • 将现有 prompt sources 映射到五类 block 并固定顺序。
  • 扩展 provider-neutral GenerateRequest,同时保留 adapter 无缓存降级。
  • 为各角色实现最小 Node Context Slice 构建。
  • 定义并校验五类节点 Artifact Contract 和 schema version。
  • 将节点间自然语言回灌改为 Artifact 引用与受预算展开。
  • 实现 NodeTranscript trim/compact 和 NodeTaskState。
  • 增加 prefix/cache/TTFT usage 字段、事件和指标映射。
  • 为 Anthropic 等显式缓存 adapter 实现映射时保持厂商差异封装。
  • 更新 Context Compact、Provider Schema 和缓存设计文档。

测试与验证(Done)

  • 正常路径:五类 block 顺序稳定,节点只接收允许的 Artifact 和 transcript。
  • 边界条件:空 block、超大 Artifact、digest 变化、Artifact revision、node compact 和稳定规则超预算。
  • 异常分支:Artifact schema 非法、引用缺失、digest 不一致、adapter 不支持缓存和 compact generator 失败。
  • 隔离性:并行 Explore 不能读取其他节点中间消息,Synthesize 只能看到已提交 Artifact。
  • 缓存性:只改变 turn_delta 时 stable digest 不变;工具 schema 和 workspace rules 稳定排序。
  • Provider conformance:缓存提示可忽略,厂商字段不出现在 Runtime/Context 公共类型。
  • 安全性:日志与指标不包含密钥、完整敏感附件或未裁剪工具输出。
  • go test ./... 通过,新增修改逻辑达到 100% 覆盖目标。

风险与回滚

  • 风险:Prompt block 改变模型行为。使用 【实现】 Agent Loop 重构 Phase 0:建立任务质量评测基线与迁移护栏 #722 对比并保留确定性拼接快照测试。
  • 风险:Artifact 摘要丢失关键事实。关键 acceptance、用户约束和证据引用设为不可静默裁剪。
  • 风险:Provider 缓存能力不一致。所有 adapter 必须支持忽略提示的普通请求降级。
  • 回滚:adapter 可退回拼接 SystemPrompt;Artifact 和 NodeTranscript 数据保留,不影响 Session 主消息读取。

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions