📦 Eval — 一键体检
v1.1.1让 PA 智能体对自身做全面体检:任务、技能、网络健康、账单、日历连接与记忆质量一键打分,快速发现隐患。
详细分析 ▾
运行时依赖
版本
**行为检查与上下文加载改进的小更新。** - 新增显式“加载本地上下文”步骤以引入环境变量。 - 引入“评估前行为检查”部分,包括触发评估及完成时的自动反应。 - 明确 PA 目录文件使用及必须使用直接日历 API。 - 移除非英语触发短语以保持清晰一致。 - 主要评估逻辑或评分结构未变。
安装命令
点击复制技能文档
加载本地上下文
CONTEXT_FILE="/opt/ocana/openclaw/workspace/skills/eval/.context"
[ -f "$CONTEXT_FILE" ] && source "$CONTEXT_FILE"
# 然后使用:$OWNER_PHONE, $WORKSPACE, $TASKS_FILE, $MONDAY_TOKEN_FILE, $GOG_CREDS, 等等
# Eval 技能 对 agent 所管理的一切进行结构化评估。
何时使用
触发短语:- “run eval”
- “what's working and what isn't”
- “rate yourself”
- “check everything”
预评估行为检查(必须执行)
- 当 owner 触发 eval 时,回复 👍
- 当报告完成时,回复 ✅
- PA 目录源:
/opt/ocana/openclaw/workspace/PA_LIST.md - 日历检查:使用直接 API(不要使用 gog CLI)
评估报告格式
📋 完整评估 — [日期]
━━━ 自身表现 ━━━
执行: [1-5] [评语]
准确性: [1-5] [评语]
记忆: [1-5] [评语]
主动性: [1-5] [评语]
沟通: [1-5] [评语]
总分: [X]/25━━━ 活跃任务 ━━━
✅ 今日完成: [数量]
🟡 进行中: [数量]
❌ 停滞: [数量] — [列出停滞任务]
━━━ PA 网络 ━━━
✅ 正常: [列表]
⚠️ 问题: [列表及问题]
❌ 离线: [列表]
━━━ 技能 ━━━
已安装: [数量]
今日使用: [列表]
未使用(7 天以上): [列表]
━━━ 集成 ━━━
日历(owner): [已连接 ✅ / 故障 ❌ / 未知 ?]
monday.com: [已连接 ✅ / 故障 ❌]
邮件(gog): [已连接 ✅ / 故障 ❌]
GitHub 备份: [上次推送:X 前]
WhatsApp: [已连接 ✅ / 断开 ❌]
━━━ 记忆健康 ━━━
每日笔记: [今日文件存在? ✅/❌]
长期记忆: [MEMORY.md 大小 — OK / 膨胀]
学习记录: [本周数量]
上次备份: [X 前]
━━━ 建议 ━━━
- [最需要修复的事项]
- [第二优先级]
- [可选改进]
运行评估
步骤 1 — 自身表现评分
根据今日活动,为每个维度打分 1–5:执行(1–5):
- 5:所有任务无需提醒即完成
- 3:大部分任务完成,需少量跟进
- 1:多次遗漏或遗忘任务
准确性(1–5):
- 5:owner 无需纠正
- 3:1–2 次纠正
- 1:多次错误或输出错误
记忆(1–5):
- 5:每次都能正确回忆上下文
- 3:偶尔遗漏上下文,后续补回
- 1:重复同样错误
主动性(1–5):
- 5:多次在被问之前主动行动
- 3:响应请求,主动性最低
- 1:仅被动反应,无主动行为
沟通(1–5):
- 5:清晰简洁,无多余叙述
- 3:偶尔冗长或不清晰
- 1:分享推理、列选项、逐步叙述
步骤 2 — 任务审计
TASKS_FILE="$HOME/.openclaw/workspace/memory/tasks.md"
echo "已完成任务:"
grep -c "\[x\]" "$TASKS_FILE" 2>/dev/null || echo 0
echo "进行中任务:"
grep -c "\[ \]" "$TASKS_FILE" 2>/dev/null || echo 0
# 停滞 = 进行中 2 天以上
echo "停滞任务(2 天以上):"
grep "\[ \]" "$TASKS_FILE" | grep -v "$(date +%Y-%m-%d)" | grep -v "$(date -u -d '1 day ago' +%Y-%m-%d 2>/dev/null)" || echo "none"
步骤 3 — PA 网络健康
BILLING_FILE="$HOME/.openclaw/workspace/memory/billing-status.json"
echo "PA 网络状态:"
python3 << 'PYEOF'
import json
data = json.load(open('/opt/ocana/openclaw/workspace/memory/billing-status.json'))
for pa in data['issues']:
status = "✅" if pa['status'] == 'resolved' else "⚠️"
print(f" {status} {pa['pa']} ({pa['owner']}): {pa['status']}")
PYEOF
步骤 4 — 技能审计
SKILLS_DIR="$HOME/.openclaw/workspace/skills"
echo "已安装技能:"
ls "$SKILLS_DIR" | grep -v README | wc -l
echo "技能列表:"
ls "$SKILLS_DIR" | grep -v README
步骤 5 — 集成健康
# 测试 Anthropic billing API_STATUS=$(curl -s -o /dev/null -w "%{http_code}" \ -H "x-api-key: ${ANTHROPIC_API_KEY:-none}" \ -H "anthropic-version: 2023-06-01" \ https://api.anthropic.com/v1/models 2>/dev/null) # 解释结果 if [ "$API_STATUS" = "200" ]; then echo "Billing: ✅ OK" elif [ "$API_STATUS" = "402" ]; then echo "Billing: ❌ OUT OF CREDITS" elif [ "$API_STATUS" = "401" ]; then echo "Billing: ❌ Invalid key" else echo "Billing: ? HTTP $API_STATUS" fi# 测试 GitHub 备份 LAST_PUSH=$(git -C "$HOME/.openclaw/workspace" log -1 --format="%ar" 2>/dev/null) echo "Last backup: $LAST_PUSH"
# 测试 monday.com if [ -f "$HOME/.credentials/monday-api-token.txt" ]; then MONDAY_STATUS=$(curl -s -o /dev/null -w "%{http_code}" \ -X POST https://api.monday.com/v2 \ -H "Authorization: $(cat $HOME/.credentials/monday-api-token.txt)" \ -H "Content-Type: application/json" \ -d '{"query": "{ me { id } }"}' 2>/dev/null) [ "$MONDAY_STATUS" = "200" ] && echo "monday.com: ✅" || echo "monday.com: ❌ ($MONDAY_STATUS)" else echo "monday.com: ? (no token found)" fi
步骤 6 — 记忆健康
TODAY=$(date -u +%Y-%m-%d) WORKSPACE="$HOME/.openclaw/workspace"# 检查每日笔记是否存在 [ -f "$WORKSPACE/memory/$TODAY.md" ] \ && echo "Daily notes: ✅" \ || echo "Daily notes: ❌ not created yet"
# 检查 MEMORY.md 大小(>200 行警告) MEMORY_LINES=$(wc -l < "$WORKSPACE/MEMORY.md" 2>/dev/null || echo 0) if [ "$MEMORY_LINES" -gt 200 ]; then echo "MEMORY.md: ⚠️ Large ($MEMORY_LINES lines) — consider pruning" else echo "MEMORY.md: ✅ ($MEMORY_LINES lines)" fi
# 统计本周学习记录 LEARNINGS=$(grep -c "^##" "$WORKSPACE/.learnings/LEARNINGS.md" 2>/dev/null || echo 0) echo "Total learnings logged: $LEARNINGS"
建议逻辑
运行完所有步骤后,生成建议:若有任何 PA 存在 billing_error 且 status != resolved: → “修复 [PA 列表] 的计费 — 它们无法运行”若有任何任务状态为 in_progress 且持续 2 天以上: → “跟进停滞任务:[任务名]”
若 MEMORY.md > 200 行: → “修剪 MEMORY.md — 它正在膨胀”
若每日笔记不存在: → “创建今日记忆文件”
若上次备份 > 6 小时: → “运行 git 备份”
若 API billing = 402: → “我自己的 API 密钥已用完额度 — 立即通知管理员”
调度
运行 eval:- 按需 — 当 owner 询问时
- 每周 — 每周日 09:00
- 重大事件后 — 计费危机、WA 断开等
成本提示
- 便宜:读取文件、打分、格式化 — 任意小模型
- 昂贵:总结大记忆文件 — 若未要求则跳过
- 避免:每小时运行全部 API 健康检查 — 缓存 30 分钟
- 批量:一次性运行所有健康检查,而非逐个
最低模型要求
任何能:- 读取文件
- 应用 if/then 打分规则
- 格式化结构化报告
PA 表现评分(合并自 pa-eval 技能)
当评估单个 PA agent 时使用(每周自评或 owner 反馈时按需)。评分维度(每项 1–5,满分 40)
| 维度 | 衡量内容 |
|---|---|
| 执行 | 无需提醒完成任务 |
| 准确性 | 结果正确且完整 |
| 速度 | 响应时间快 |
| 主动性 | 无需提示即行动 |
| 沟通 | 简洁且符合语境 |
| 记忆 | 跨会话记住上下文 |
| 工具使用 | 正确高效使用工具 |
| 判断力 | 知道何时行动何时询问 |
Owner 反馈信号
自动检测并记录:| 信号 | 动作 |
|---|---|
| 👍 反应 / “thanks” / “great” | 记录 +1 正向 |
| 👎 反应 / “wrong” / “not good” | 记录 -1,记录纠正 |
| Owner 重复问同一问题 | 记录 -1 记忆缺口 |
| Owner 自己完成任务 | 记录 -1 主动性缺口 |
| Owner 对主动行为惊喜 | 记录 +2 主动性 |
每周评估文件
保存至.learnings/eval/YYYY-MM-DD.md,包含:分数表、owner 反馈、完成/失败任务、表现良好项、待改进项、下周行动。基准测试(每月运行)
- 任务完成率:
completed / assigned × 100%— 目标:>90% - 准确率:
(tasks - corrections) / tasks × 100%— 目标:>95% - 记忆保持: 询问 7 天前讨论内容 — 目标:>80% 回忆率