AgentEvalTool/docs/adr/0010-isolated-openclaw-session-for-triggers.md
sinohqb 0096c22e27
All checks were successful
CI / test (push) Successful in 3m58s
docs: v1.1.1 release notes + ADR-0010 + context/CLAUDE updates
更新本次智能评估全链路修复与 UI/UX 优化的必要文档:
- ADR-0010 新增:方案③触发采用独立 OpenClaw session(main 持久 session 上下文
  缓存污染导致 worker 幻觉不执行)+ 时段分布约束
- CONTEXT.md:触发式执行词条补充时段约束与独立会话语义
- release-notes-v1.1.1.md 新增:智能评估全链路稳定化、任务队列监控、UI/UX 一致性
- docs/README.md:补 v1.1.0/v1.1.1 发布说明索引,版本升 v1.2
- CLAUDE.md:补智能评估执行机制(方案③)章节(scan loop 职责 + 独立 session/
  时段分布/状态一致性关键约束)
2026-08-18 19:01:14 +08:00

2.8 KiB
Raw Blame History

ADR-0010: 方案③触发采用独立 OpenClaw session

状态: 已接受 日期: 2026-08-18 决策者: 架构团队 相关: ADR-0009触发式执行取代 Cron 池、CONTEXT.md触发式执行

Context

方案③ADR-0009docker exec openclaw-eval openclaw agent --agent main -m "<worker/planner skill>" --json 触发 OpenClaw headless agent 执行 worker / planner skill。t480 实测发现:评估进入 executing 后一直卡"等待 OpenClaw 创建会话"——任务入队pending但 worker 从不认领。

排查diagnosing-bugs 闭环)确认:

  • scan loop 每 60s 正常触发 worker时间戳证实
  • worker 被触发后 0 次工具调用,直接幻觉输出"评估 pending_approval"(实际 executing
  • model usage 显示 cacheRead ~12 万 token--agent main 复用 main 持久 session,多次触发累积了大量历史上下文缓存
  • 验证:手动用独立 --session-id 触发 → worker 恢复正常取任务、建会话、close

根因OpenClaw main agent 的持久 session 在多次触发后上下文缓存膨胀LLM 不再执行 worker skill 的 API 步骤,而是从旧上下文幻觉输出——复用 main session 的"缓存命中"收益在触发式执行(高频、长链工具调用)下不可靠。

Decision

方案③的 worker / planner 触发命令--session-id(每次唯一)

docker exec openclaw-eval openclaw agent --agent main \
  --session-id agenteval-worker-<unix-ts> \
  -m "<worker skill 指令>" --json
  • worker 用 agenteval-worker-<ts>、planner 用 agenteval-planner-<ts>,每次触发独立 session
  • 触发 timeout 从 300s 调到 600s独立 session 首次加载 skill + 执行更慢)

为什么独立 session 可行worker/planner 的决策完全基于平台状态(任务队列、评估/会话/决策日志 API不依赖跨触发记忆——每次干净 session 无副作用。

时段分布约束(同一决策):触发指令明确"仅执行当前 offset 所在时段内欠账的会话,绝不创建未来时段会话"worker 完成当前时段后 complete 任务,平台每 60s 再次触发推进后续时段——保证 1h 窗口的交互按时段(如 0-20/20-40/40-60min分布而非一次性建完。

Consequences

  • 每次触发新建 session:无上下文缓存命中,首次加载 skill 更慢(触发一次约 1-5 分钟),但行为可靠(不再幻觉)
  • 无跨触发状态worker/planner 无记忆,全部状态在平台 DB设计本如此
  • scan loop 节奏worker 执行当前时段(分钟级),完成后平台每 60s 触发推进;与 1h 窗口时段匹配
  • 旧 main session 的历史缓存不影响新触发(独立 session 隔离)