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

43 lines
2.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# ADR-0010: 方案③触发采用独立 OpenClaw session
**状态**: 已接受
**日期**: 2026-08-18
**决策者**: 架构团队
**相关**: ADR-0009触发式执行取代 Cron 池、CONTEXT.md触发式执行
## Context
方案③ADR-0009`docker 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`(每次唯一)**
```bash
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 隔离)