Skip to content

代码导读:steer 何时成为模型上下文

返回主篇 · 图的文字版

固定 MoonshotAI/kimi-code@75a894e9ad5e8d49509664b3daaa1bbc9bb39432,只读 packages/agent-core 的静态实现。以下是源码可见的控制路径,不是一条实际录制的用户会话。

  1. prompt() 记录 turn.prompt 后调用 launch()launch() 拒绝与活动 turn 并行启动,成功时分配 turn ID、AbortController 和 worker。prompt/launch
  2. steer() 记录 turn.steer。活动 turn 存在时,只向 steerBuffer 追加并返回 null;空闲时调用 launch()。故返回 null 只说明未分配新 turn ID,不能证明模型已经看到输入。steer
  3. flushSteerBuffer() 依到达顺序调用 context.appendUserMessage(),随后清空数组;此处既不调用模型,也不执行工具。flushSteerBuffer
  4. runOneTurn() 发出 turn.started 并追加初始输入;用户来源的输入还会过 UserPromptSubmit hook。该 hook 可阻止本次模型 loop,作为结束边界;本篇未沿 hook 实现细查具体配置。turn 起点与 hook
  5. runStepLoop() 调用通用 runTurn(),把 buildMessages、工具集合与 hooks 交给它。beforeStep 先刷新 steer,再做压缩检测及注入;因此已刷新输入在下一步构建模型消息时可见。runStepLoop
  6. 若一步以 tool_use 结束,runTurn()继续下一步;否则它调用 shouldContinueAfterStop()。Kimi Code 的回调先刷新 steer;若有,则请求继续,即使模型这一步本来准备停。runTurn · 停止回调
  7. 没有 steer 时,停止回调仍可能因 goal outcome 或一次 Stop hook 阻拦而继续;否则返回 false。runTurn() 的 abort、maxSteps 检查可能先结束或抛错,不能把“已缓冲”写成“一定会有下一次模型调用”。停止优先序 · loop 上限与异常
  8. cancel() 用信号终止活动 turn;runOneTurn() 将中止与异常分别映射成 cancelledfailed,发出 turn.ended。活动 goal 会引入外层连续 turn 驱动,本篇的图只画一个 turn 内的 steer 决策。取消 · 结束映射 · goal 外层驱动

在线预览稿:书稿仍在校稿,系统篇以文内固定源码版本为准;静态阅读不等于运行验收。