Skip to content

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

@wynxing

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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions