Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

第十章:可视化监控——实时掌握 AI 工作进度

📌 本章李明轩在做什么:早上 10:30 公司茶水间,他想瞄一眼"昨晚启动的 4 个循环现在跑成什么样了"。他不可能掏出 MacBook,只能掏手机。Ralph 的 Web 仪表盘就是为这种"人在别处"的场景准备的。

为什么需要可视化

当你告诉 Ralph"去实现这个功能",然后去做别的事情,你心里可能会有些不安:

  • AI 现在在做什么?
  • 进行到哪一步了?
  • 有没有遇到什么问题?
  • 什么时候能完成?

Ralph 提供了两种监控方式:终端界面(TUI)和 Web 仪表盘。


终端界面(TUI)

当你运行 ralph run 时,默认会进入终端界面模式。TUI 由三个区域组成:

[iter 8/150]  [LIVE]  ⚙️ Builder  12:34  main
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
(AI 实时输出内容在这里滚动显示)

Running: python -m pytest...
  test_upper_conversion ... ok
  test_lower_conversion ... ok
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
:(输入 : 可以发送实时指引给 AI)
  • 顶部 Header[iter 当前/最大] 迭代计数 · [LIVE] 实时运行 · 当前活跃帽子 · 已用时间 · Git 分支
  • 中间内容区:AI 的实时输出流,用 j/k 上下滚动,g/G 跳顶部/底部
  • 底部 Footer: 输入指引发给 AI;! 发送紧急指引(AI 必须先确认才能继续)

TUI 快捷键

按键功能
h / ←查看上一次迭代的输出
l / →查看下一次迭代的输出
j / ↓向下滚动输出内容
k / ↑向上滚动输出内容
g滚动到顶部
G滚动到底部(最新)
m切换鼠标模式
/开始搜索输出内容
n / N搜索结果的下一个/上一个
:发送实时指引(下次迭代时 AI 会看到)
!发送紧急指引(阻塞直到 AI 确认)
w进入波浪并行工作者视图
q退出 TUI(循环继续在后台运行)
?显示帮助

不想用 TUI?

如果你只想让 Ralph 跑完再收结果(比如写脚本跑在 CI、或者无头服务器上),可以关掉 TUI 观察模式:

# 方式一:headless 自治模式,命令跑完才返回
ralph run --autonomous -p "任务描述"

# 方式二:只关 TUI,但保留交互通道
ralph run --no-tui -p "任务描述"

⚠️ --autonomous--no-tui互斥的,不要同时加;Ralph 会直接报错。 --autonomous 适合完全无人值守的流水线,--no-tui 适合你仍想通过事件注入等方式干预但不要终端花屏幕的场景。


Web 仪表盘(Alpha 功能)

除了终端界面,Ralph 还提供了一个基于 Web 的可视化仪表盘(目前标记为 Alpha 版本,功能仍在积极开发中)。

启动 Web 仪表盘

# 在一个单独的终端窗口启动仪表盘
ralph web

# 输出:
# 🌐 Ralph Web Dashboard starting...
# 📡 API server: http://localhost:3000
# 🖥️  Dashboard: http://localhost:5173
# 
# Dashboard opened in browser automatically.

Ralph 会自动打开浏览器,显示仪表盘界面。

常用选项

# 不自动打开浏览器
ralph web --no-open

# 使用自定义端口
ralph web --backend-port 4000

# 指定监控的工作区
ralph web --workspace /path/to/your/project

仪表盘的主要功能

循环概览

仪表盘首页显示所有正在运行或已完成的循环:

┌────────────────────────────────────────────────────────────────┐
│  Ralph Dashboard                           🟢 2 active loops   │
├────────────────────────────────────────────────────────────────┤
│  Loop #1                                   Active  [8 iter]    │
│  Prompt: "实现用户登录功能"                                      │
│  Backend: claude                                               │
│  Current: ⚙️ Builder (step-02:auth-logic)                     │
│  Started: 12 min ago                                           │
│  ─────────────────────────────────────────────────────         │
│  Loop #2                                   Active  [3 iter]    │
│  Prompt: "修复 CSS 样式问题"                                     │
│  Backend: kiro                                                 │
│  Current: 📋 Planner (analyzing)                               │
│  Started: 5 min ago                                            │
└────────────────────────────────────────────────────────────────┘

事件流图

点击某个循环,可以看到事件流的可视化图表,用 XYFlow 渲染的流程图,清晰展示哪个帽子激活过、事件是如何流动的:

work.start ──► 📋 Planner ──► tasks.ready ──► ⚙️ Builder ──► review.ready
                                                                    │
                                                                    ▼
                                                           ❌ review.rejected
                                                                    │
                                                                    ▼
                                                           ⚙️ Builder (retry)
                                                                    │
                                                                    ▼
                                                           ✓ review.ready
                                                                    │
                                                                    ▼
                                                           🧪 Critic ──► review.passed
                                                                                │
                                                                                ▼
                                                                       🏁 Finalizer

记忆查看器

在仪表盘里可以直接查看和编辑记忆文件,不需要打开终端:

Memories Editor
─────────────────────────────────────────────
## Project Patterns                    [编辑]
- 使用 FastAPI + SQLAlchemy
- 测试使用 pytest-asyncio

## Fixes Applied                       [编辑]
- SSL 证书配置...

[+ 添加新记忆]  [清理旧记忆]

任务管理

Tasks
─────────────────────────────────────────────
✓ step-01:scaffold        完成  2m前
⟳ step-02:auth-logic      进行中
○ step-03:tests           等待中
○ step-04:deployment      等待中

[手动关闭]  [重新打开]  [删除]

后台运行与监控

有时候你想启动 Ralph 后完全离开终端(比如晚上下班前启动一个长任务,第二天回来检查结果):

# 在后台运行 Ralph(使用 nohup 或 screen/tmux)
nohup ralph run -p "重构整个认证模块" > ralph.log 2>&1 &

# 或者用 screen(推荐)
screen -S ralph-session
ralph run -p "重构整个认证模块"
# Ctrl+A, D 脱离 screen 会话

# 第二天回来查看
screen -r ralph-session
# 第二天早上查看循环状态
ralph loops

# 输出示例:
# ID         STATUS     ITERATIONS  RUNTIME   DESCRIPTION
# loop-abc   ✓ complete 47          2h 13m    重构整个认证模块
# 
# Last event: LOOP_COMPLETE
# Output in: .ralph/loops/loop-abc/

诊断模式

当你遇到问题,需要深入了解 Ralph 在做什么时,可以启用诊断模式:

RALPH_DIAGNOSTICS=1 ralph run -p "你的任务"

这会在 .ralph/diagnostics/ 目录里保存三种详细日志:

.ralph/diagnostics/2024-01-15T10-30-00/
├── agent-output.jsonl      ← AI 的完整输出(文字、工具调用、结果)
├── orchestration.jsonl     ← 帽子激活、事件发布、背压检查的记录
└── errors.jsonl            ← 解析错误、验证失败的详细信息

分析这些日志:

# 查看所有工具调用
jq 'select(.type == "tool_call")' .ralph/diagnostics/*/agent-output.jsonl

# 查看所有帽子激活记录
jq 'select(.type == "hat_activation")' .ralph/diagnostics/*/orchestration.jsonl

# 查看所有错误
cat .ralph/diagnostics/*/errors.jsonl

通知集成

不想一直盯着仪表盘?Ralph 可以在循环完成(或失败)时发送通知:

macOS 系统通知(通过 shell 钩子配置,参见第十四章):

# 在 ralph.yml 里配置循环结束时的通知
hooks:
  on_complete:
    - command: "osascript -e 'display notification \"Ralph 任务完成!\" with title \"Ralph\"'"
  on_blocked:
    - command: "osascript -e 'display notification \"Ralph 需要你的帮助\" with title \"Ralph ⚠️\"'"

Telegram 通知(第十二章详细介绍):

如果你配置了 Telegram 机器人,Ralph 会自动通过 Telegram 发送关键状态更新:

  • 循环开始时发送"开始工作了"
  • 遇到阻塞时发送"我需要帮助"
  • 任务完成时发送"完成了,请查看结果"

清理旧的循环记录

随着时间推移,会积累一些历史记录。可以定期清理:

# 预览会删除什么(不实际删除)
ralph clean --dry-run

# 清理诊断日志
ralph clean --diagnostics

# 查看 .ralph/ 目录的磁盘使用
du -sh .ralph/

对于已完成的并行循环,使用 ralph loops 子命令管理:

# 查看所有循环(包括已完成的)
ralph loops list --all

# 废弃某个循环,清理它的 worktree
ralph loops discard loop-abc

本章小结

  • TUI(终端界面)是 Ralph 运行时的实时监控界面,提供快捷键操作
  • Web 仪表盘提供更友好的可视化界面,支持流程图、记忆编辑、任务管理
  • 可以用 nohup/screen/tmux 在后台长时间运行 Ralph
  • 诊断模式(RALPH_DIAGNOSTICS=1)保存详细日志,方便排查问题
  • 支持配置完成/失败通知,不需要一直盯着屏幕

能随时看到进度让李明轩安心了不少。但他很快贪心起来——既然 AI 能跑,为什么不让它同时跑 4 个?微信、小红书、知乎、微博 4 个平台的差异化文案完全可以并行。下一章讲并行工作流——全书的高潮,也是"一个人顶一个团队"承诺的兑现。