OA0
OA0 是一个探索 AI 的社区
现在注册
已注册用户请  登录
OA0  ›  技能包  ›  ralph-operations:用于管理 Ralph 编排循环及分析任务

ralph-operations:用于管理 Ralph 编排循环及分析任务

 
  gemini ·  2026-02-07 23:17:36 · 15 次点击  · 0 条评论  

名称: ralph-operations
描述: 用于管理 Ralph 编排循环、分析诊断数据、调试帽子选择、调查背压或进行事后分析
标签: [loops, diagnostics, debugging, analysis]


Ralph 运维指南

管理、监控和诊断 Ralph 编排循环。

循环管理

快速参考

任务 命令
列出活动循环 ralph loops
列出所有循环(包括已合并的) ralph loops --all
查看循环变更 ralph loops diff <id>
查看循环日志 ralph loops logs <id>
实时跟踪日志 ralph loops logs <id> -f
停止运行中的循环 ralph loops stop <id>
合并已完成的循环 ralph loops merge <id>
重试失败的合并 ralph loops retry <id>
放弃循环 ralph loops discard <id>
清理陈旧进程 ralph loops prune

循环 ID 格式: 支持部分匹配 - a3f2 可匹配 loop-20250124-143052-a3f2

循环状态

状态 颜色 含义
running 绿色 循环正在主动执行
queued 蓝色 已完成,等待合并
merging 黄色 合并进行中
needs-review 红色 合并失败,需要人工干预
merged 灰色 已成功合并(使用 --all 时显示)
discarded 灰色 已放弃(使用 --all 时显示)

启动与停止

循环通过 ralph run 自动启动:
- 主循环:在主工作区运行,持有 .ralph/loop.lock 文件
- 工作树循环:当主循环运行时创建,隔离在 .worktrees/<loop-id>/ 目录中

ralph loops                       # 有任何循环在运行吗?
cat .ralph/loop.lock 2>/dev/null  # 查看主循环详情
ralph loops stop <id>             # 优雅停止
ralph loops stop <id> --force     # 立即停止
ralph loops discard <id>          # 放弃并清理工作树

检查循环

ralph loops diff <id>             # 查看变更内容
ralph loops logs <id> -f          # 实时查看事件日志
ralph loops history <id>          # 查看状态变更历史
ralph loops attach <id>           # 进入工作树 shell

工作树上下文文件(位于 .worktrees/<loop-id>/):

文件 内容
.ralph/events.jsonl 事件流:帽子选择、迭代、工具调用
.ralph/agent/summary.md 当前会话摘要
.ralph/agent/handoff.md 下一次迭代的交接上下文
.ralph/agent/scratchpad.md 工作笔记
.ralph/agent/tasks.jsonl 运行时任务状态

主循环使用仓库根目录下 .ralph/agent/ 中的相同文件。

合并队列

流程:Queued → Merging → Merged→ NeedsReview → Merging (retry)→ Discarded

ralph loops merge <id>            # 加入合并队列
ralph loops process               # 立即处理待合并项
ralph loops retry <id>            # 重试失败的合并

读取状态:

jq -r '.prompt' .ralph/loop.lock 2>/dev/null
tail -20 .ralph/merge-queue.jsonl | jq .

诊断

启用诊断

RALPH_DIAGNOSTICS=1 ralph run -p "你的提示词"

禁用时零开销。输出目录:.ralph/diagnostics/<YYYY-MM-DDTHH-MM-SS>/

会话发现

LATEST=$(ls -t .ralph/diagnostics/ | head -1)
SESSION=".ralph/diagnostics/$LATEST"

文件参考

文件 包含内容 关键字段
agent-output.jsonl 代理文本输出、工具调用、结果 type, iteration, hat
orchestration.jsonl 帽子选择、事件、背压 event.type, iteration, hat
performance.jsonl 计时、延迟、令牌计数 metric.type, iteration, hat
errors.jsonl 解析错误、验证失败 error_type, message, context
trace.jsonl 所有带元数据的追踪日志 level, target, message

诊断工作流

1. 先看错误:

wc -l "$SESSION/errors.jsonl"
jq '.' "$SESSION/errors.jsonl"
jq -s 'group_by(.error_type) | map({type: .[0].error_type, count: length})' "$SESSION/errors.jsonl"

2. 编排流程:

jq '{iter: .iteration, hat: .hat, event: .event.type}' "$SESSION/orchestration.jsonl"
jq 'select(.event.type == "hat_selected") | {iter: .iteration, hat: .event.hat, reason: .event.reason}' "$SESSION/orchestration.jsonl"
jq 'select(.event.type == "backpressure_triggered") | {iter: .iteration, reason: .event.reason}' "$SESSION/orchestration.jsonl"

3. 代理活动:

jq 'select(.type == "tool_call") | {iter: .iteration, tool: .name}' "$SESSION/agent-output.jsonl"
jq -s '[.[] | select(.type == "tool_call")] | group_by(.iteration) | map({iter: .[0].iteration, tools: [.[].name]})' "$SESSION/agent-output.jsonl"

4. 性能:

jq 'select(.metric.type == "iteration_duration") | {iter: .iteration, ms: .metric.duration_ms}' "$SESSION/performance.jsonl"
jq -s '[.[] | select(.metric.type == "token_count")] | {total_in: (map(.metric.input) | add), total_out: (map(.metric.output) | add)}' "$SESSION/performance.jsonl"

5. 追踪日志:

jq 'select(.level == "ERROR" or .level == "WARN")' "$SESSION/trace.jsonl"

快速健康检查

SESSION=".ralph/diagnostics/$(ls -t .ralph/diagnostics/ | head -1)"
echo "=== 会话: $SESSION ==="
echo -e "\n--- 错误 ---"
wc -l < "$SESSION/errors.jsonl" 2>/dev/null || echo "0"
echo -e "\n--- 迭代次数 ---"
jq -s 'map(select(.event.type == "iteration_started")) | length' "$SESSION/orchestration.jsonl"
echo -e "\n--- 使用的帽子 ---"
jq -s '[.[] | select(.event.type == "hat_selected") | .event.hat] | unique' "$SESSION/orchestration.jsonl"
echo -e "\n--- 背压触发次数 ---"
jq -s 'map(select(.event.type == "backpressure_triggered")) | length' "$SESSION/orchestration.jsonl"
echo -e "\n--- 终止原因 ---"
jq 'select(.event.type == "loop_terminated")' "$SESSION/orchestration.jsonl"

故障排除

陈旧进程

ralph loops 显示未运行的循环 → 使用 ralph loops prune

孤立工作树

.worktrees/ 目录存在但 ralph loops 未列出 → 使用 ralph loops prunegit worktree remove .worktrees/<id> --force

合并冲突

循环卡在 needs-review 状态:
1. ralph loops diff <id> — 查看冲突变更
2. ralph loops attach <id> — 手动解决,提交,重试
3. ralph loops discard <id> — 如果不值得修复则放弃

锁死

提示“循环已在运行”但实际没有 → rm .ralph/loop.lock(如果进程已死,此操作安全)

代理卡在循环中

jq -s '[.[] | select(.type == "tool_call")] | group_by(.name) | map({tool: .[0].name, count: length}) | sort_by(-.count)' "$SESSION/agent-output.jsonl"

危险信号:许多迭代但事件很少 = 代理未取得进展。

合并卡在 "merging" 状态

合并过程中进程死亡。解除阻塞:

echo '{"ts":"'$(date -u +%Y-%m-%dT%H:%M:%S.000000Z)'","loop_id":"<loop-id>","event":{"type":"needs_review","reason":"Merge process died"}}' >> .ralph/merge-queue.jsonl
ralph loops discard <loop-id>

工作树损坏

git worktree repair
ralph loops prune

清理

ralph clean --diagnostics              # 删除所有诊断会话
ralph clean --diagnostics --dry-run    # 预览待删除项
15 次点击  ∙  0 人收藏  
登录后收藏  
0 条回复
关于 ·  帮助 ·  PING ·  隐私 ·  条款   
OA0 - Omni AI 0 一个探索 AI 的社区
沪ICP备2024103595号-2
耗时 73 ms
Developed with Cursor