你说得对,让我查看代码确认 Ralph Loop 和 _agent_loop 的区别:
toolName: view_files
status: success
filePath: c:\GitHub\kimi-cli\src\kimi_cli\soul\kimisoul.py
toolName: search_by_regex status: success
Ralph Loop vs _agent_loop 的区别
┌─────────────────────────────────────────────────────────────────┐
│ run() 入口 │
└────────────────────────────┬────────────────────────────────────┘
│
┌───────────────────┼───────────────────┐
│ │ │
▼ ▼ ▼
┌──────────┐ ┌─────────────┐ ┌──────────┐
│ 斜杠命令 │ │ Ralph Loop │ │ 普通对话 │
└──────────┘ │ FlowRunner │ └────┬─────┘
└──────┬──────┘ │
│ │
┌────────┴────────┐ │
│ FlowRunner.run()│ │
│ (任务级循环) │ │
└────────┬────────┘ │
│ │
┌────────┴────────┐ │
│ _flow_turn() │ │
│ ───────────── │ │
│ _turn() │◄───────┘
└────────┬────────┘
│
┌────────┴────────┐
│ _agent_loop() │
│ (步骤级循环) │
└─────────────────┘
关键区别:
| 特性 | Ralph Loop | _agent_loop |
|---|---|---|
| 层级 | 任务级循环 | 步骤级循环 |
| 实现 | FlowRunner.ralph_loop() | KimiSoul._agent_loop() |
| 用途 | 自动重复执行任务,让 LLM 决定何时停止 | 执行单次对话的多步骤 |
| 停止条件 | LLM 选择 "STOP" 或达到最大迭代 | 无工具调用或工具被拒绝 |
| 内部调用 | 调用 _flow_turn() → _turn() | 被 _turn() 调用 |
Ralph Loop 的 Flow 结构:
BEGIN ──► R1(执行任务) ──► R2(决策)
│
┌─────────┴─────────┐
▼ ▼
CONTINUE STOP
(回到 R2) (END)
修正后的流程图:
flowchart TD
subgraph run["run() 入口"]
A1[刷新 OAuth Token] --> A2[发送 TurnBegin]
A2 --> A3{解析用户输入}
end
A3 -->|斜杠命令| B1[执行斜杠命令]
A3 -->|Ralph Loop 模式| B2[FlowRunner.ralph_loop]
A3 -->|普通对话| B3[_turn]
B1 --> EXIT[发送 TurnEnd]
subgraph ralph["Ralph Loop (任务级循环)"]
B2 --> R1[FlowRunner.run]
R1 --> R2{node.kind?}
R2 -->|begin| R3[跳到下一个节点]
R2 -->|task| R4[_flow_turn]
R2 -->|decision| R4
R2 -->|end| R5[结束 Flow]
R3 --> R2
R4 --> R6{choice?}
R6 -->|CONTINUE| R2
R6 -->|STOP| R5
R5 --> EXIT
end
subgraph turn["_turn()"]
B3 --> C1[检查 LLM/能力]
C1 --> C2[checkpoint + append_message]
C2 --> C3[_agent_loop]
end
subgraph agent_loop["_agent_loop() (步骤级循环)"]
C3 --> D1[step_no++]
D1 --> D2{超限?}
D2 -->|YES| D3[MaxStepsReached]
D2 -->|NO| D4[_step]
D4 --> D5{有工具?}
D5 -->|YES| D1
D5 -->|NO| D6[返回 TurnOutcome]
end
D6 --> EXIT
Ralph Loop 是外层的任务自动循环,而 _agent_loop 是内层的步骤执行循环,两者是嵌套关系。