任何 LLM agent 都由六件套构成。Easel 每件都给了完整实现,是最完整的开源解剖标本之一。
| # | 构造块 | 职责 | Easel 的实现 | 去看哪 |
|---|---|---|---|---|
| 1 | Harness(运行时) | 模型之上的循环:收消息 → 调模型 → 执行工具 → 回填结果 → 重复 | 不自研,借用 OpenClaw gateway(loopback:18789,OpenAI 兼容端点) | scripts/gateway.sh |
| 2 | 提示词栈 | 人格 + 规则 + 上下文分层,常驻层控 token | 四层栈:SOUL.md(人格)→ AGENTS.md(规则)→ CONTEXT.md(路径)→ SKILL.md(按需);画像以消息内联注入,不写全局文件 | docs/prompt-stack.md openclaw/workspace/*.md |
| 3 | 能力系统(技能) | 能力可声明、可路由、可按需加载 | 114 个技能目录。frontmatter 三字段常驻做路由;SKILL.md(<200行) 触发时加载;references/scripts 执行中按需 | docs/SKILL-SPEC.md skills/openclaw/ |
| 4 | LLM-脚本分工 | 决策归模型,确定性 IO 归代码 | "prompt 薄壳 + 确定性厚脚本":48 个共享脚本(约 2.3 万行)管所有环境交互;SKILL.md 只写流程约束 | skills/shared/scripts/ |
| 5 | 记忆与状态 | 会话持久化 + 长期记忆的作用域设计 | 会话 jsonl 按 uuid5 钉死;账号记忆只在 profiles/<X>/memory.md;全局 MEMORY.md 刻意留空防并发污染 |
easel/persona.py |
| 6 | 安全与可靠边界 | 闸门、确认、对账、拟人化 | content_guard fail-closed(exit 7);默认 dry-run 须 --exec;platform_readback 发布后对账;persona_gate 只提醒;human_pace 拟人停顿 | skills/shared/scripts/ content_guard.py 等 |
拿到新仓库按顺序问,30 分钟内可定位构造:
| 决策点 | Easel 的选择 | 默认理由 |
|---|---|---|
| 自研 harness vs 复用 | 复用 OpenClaw | 循环/会话/流式是脏活,先借再改 |
| 工具 vs 技能目录 | 技能目录(markdown 流程 + 脚本) | 能力可读可审可版本化,agent 按流程自执行 |
| 常驻提示词策略 | 极简单真相源,能力全部下沉按需 | 对抗长对话注意力衰减,控 token |
| 记忆作用域 | 按画像/账号分域,禁全局 | 并发会话不互相污染 |
| 副作用策略 | 默认 dry-run + 闸门 + 对账 | 不可逆操作必须有证据链 |