你说得对,让我查看代码确认 Ralph Loop 和 _agent_loop 的区别:
toolName: viewfiles
status: success
filePath: c:\GitHub\kimi-cli\src\kimicli\soul\kimisoul.py
toolName: searchbyregex
status: success
Ralph Loop vs agentloop 的区别
┌─────────────────────────────────────────────────────────────────┐
│ 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)
修正后的流程图:
Ralph Loop 是外层的任务自动循环,而 _agent_loop 是内层的步骤执行循环,两者是嵌套关系。