Skip to content

Latest commit

 

History

History
120 lines (76 loc) · 8.06 KB

File metadata and controls

120 lines (76 loc) · 8.06 KB

循环与监督

/kloop            # 启动循环,默认预算 20 次评测(/kloop 30 自定义)
/kloop stop       # 停;/kloop status 查看
/supervise on     # 开启外部模型监督(需先有监督模型:配置或当场指定,见下)
/supervise use deepseek-official/deepseek-v4-flash   # 本会话换监督模型
/supervise use default                               # 回到配置默认

也可以全程不打命令

评测页顶部分两行:

  • 循环行——优化评测上限 + 本轮输出语言 + 启动/停止
  • 监督行——外部监督开关 + 监督模型 + 思考强度(模型列表来自宿主 llm 服务,与对话共用;思考强度只展示模型适配器实际声明的选项)

与 slash 命令驱动同一份状态。

循环运行中监督行整体置灰锁定:中途改开关、模型或思考强度会让同一轮运行前后条件不同;要调整,请先停止循环(评测进度保留,重新启动后接着走)。/supervise 命令作为显式入口不受此限。

对话页也有双态入口:

  • 未启动时 composer 工具行里有一个「⟳ 启动循环」触发器,点开是 DSH 菜单样式的启动卡(优化评测上限 / 本轮输出语言 / 监督开关 / 监督模型 / 思考强度 / 启动,底部提示曲线在评测页);启动卡会按按钮上下方的可用空间定位,内容过长时在卡内滚动,不会越出视口
  • 循环中 composer 上方出现状态条(轮次/预算进度 + 停止按钮),停止即消失

空会话也能直接启动

任务不一定来自对话——用户常把 prompt/任务说明放在工作目录里。

会话里还没有任务时,循环的第一条驱动消息不说「继续原任务」,而是明确指示:盘点工作目录找用户准备的任务文件;工作目录里也没有就问用户并停下,绝不把工作目录之外的东西当任务。

(与 persona 同款红线,封死从邻居目录「考古」旧任务的路径。)

续跑与停止的判定

循环在每次 turn 落定后检查投影出的 run 状态:

情况 行为
finalize 已记录 停
评测数达预算,或连续 2 轮零新评测 先投一条收尾消息(要求原样恢复最优 artifact、finalize 最好的诚实结果并总结),随即 disarm
/kloop stop/面板/状态条的停止按钮 人类决定:立即 disarm 并中止在跑的轮次(排队中的人类消息保留),不投收尾
人类在对话框手动终止回合(turn 以 aborted 收场) 同样立即解除循环
其余 投递续跑消息(预算进度 + 停滞计数 + 监督结果)

预算耗尽永远是干净的收束,不是静默断电。人的停止永远压过机器的续跑——想继续就重新启动。

人类插话永远优先:智能体非 idle 时本轮跳过,监督复审后还会二次确认 idle 与 armed 才续投。

预算只按已完成的优化评测计。循环已经进入收尾后产生的最终验证,以及插件自行执行的复测,都保留在评测记录中,但不消耗优化评测预算。

单个 turn 内,智能体可能在循环获得下一次检查机会前连续完成多次评测,因此仍可能小幅超出上限。面板不会再把这类记录算成第 13 次“预算内迭代”:它会分别显示优化评测、预算外评测和收尾验证。例如上限为 12,同一 turn 实际返回 13 条优化阶段结果时,进度保持 12/12,另显示 1 次预算外评测;记录不会丢失。

监督记录是从会话日志解析回来的

每轮续投消息里的建议块(或 OK 行)由投影按固定锚点解析成 rounds,面板的「监督记录」卡与迭代表展开里的「该轮监督」都来自它——重启、回放后依然完整。

监督模型的两层解析

面板下拉//supervise use 的会话级覆盖 > 插件 config 默认。

模型下拉来自 models 路由(llm.listProviders()/listModels(),发现失败的 provider 仍列出、模型手填走 /supervise use)。思考强度下拉会进一步调用 llm.resolveModelInfo(),只列出适配器为当前模型声明的 effort id;适配器未声明时保持模型默认值,不硬编码 low、medium、high 一类档位。会话覆盖只换路由与思考强度,temperature/maxTokens 等复审纪律仍随 config。

没配 config 也可以:下拉选一个(或 /supervise use)后 /supervise on 即可用。

config 写法(~/.dsh/cordis.patch.yml 的插件行,或 profile patch):

- id: kernel-opt
  config:
    supervisor:
      provider: deepseek-official   # Models 设置里的 provider 路由
      model: deepseek-v4-flash      # 建议与主模型不同档,便宜的就够
      reasoningEffort: medium        # 可选;必须是该模型适配器声明的 id
      language: 中文                 # 可选;命令启动时使用,不写则跟随智能体
      instructions: |               # 可选;本项目的加码规矩,追加在 rubric 之后
        没报 DRAM 带宽的 run 一律点出来。

本轮输出语言如何决定

插件自己的固定界面文案始终跟随 DSH 当前界面语言。通过面板或 composer 启动循环时,「本轮输出语言」默认取启动那一刻的界面语言,也可以手动选择中文或 English;选定后会在本轮保持不变,即使中途切换界面语言也不会让评测环境、当前方案、监督记录或智能体回复突然换语言。新的运行会重新按当时界面语言解析。

这个选择同时约束智能体面向用户的回复、kernel_plan/kernel_env 文本和监督模型输出。语言指令随循环续投消息写入会话日志,因此回放能重建同一份模型输入。

使用 /kloop 启动时没有浏览器语言参数:监督复审优先使用 config 的 supervisor.language,未配置时跟随智能体自己的方案/汇报语言;智能体本身则按 preset persona 和用户语言决定。

无论哪种语言,判定前缀 OK: / DONE: 都保持 ASCII 原样:投影按这个字面量识别「通过」,复审模型要是把它一起翻译了,每一次通过都会被记成建议并注入给智能体。

instructions 是追加,不是替换

它只能往 rubric 上加「本项目还要看什么」,删不掉任何一条既有检查——复审纪律归插件,和「路由覆盖只换模型、不换标准」是同一条边界。

监督者看什么

run 的进行方式与证据:

  • 预算纪律
  • 正确性优先
  • 方法族多样性
  • plan 与 diff 是否对得上(改动记录是它独立的证据,plan 只是被审方自述)
  • 评测器报的 native_metrics
  • 有没有 profile 过
  • 每个自报点的命令行像不像真实评测
  • 该收尾时收尾

它读改动,不读整份 kernel——摘要里带的是最近几次迭代的真实 diff(digestChanges():末 4 次有改动的迭代、每次至多 3 处、每处截 220 字符),所以「plan 与 diff 对不对得上」有独立证据可查;至于 kernel 本身对不对、快不快,那是评测器用实测回答的问题。

已知缺口:改动只从结构化文件工具采(changeTools,默认 write/edit)。用 shell 改文件——sed -i、heredoc、python -c 写盘——那一轮不会留下任何 diff 行,「plan vs diff」这条就静默失效。

回复 OK 则不注入建议;失败、超时或没给出任何答复都让这一轮不留下复审记录,永不卡住主循环——沉默不算通过,尤其不算对提前收尾的放行。

maxTokens 默认 16000

这是按思考预算给的:rubric 只要三句话,但复审模型会使用面板/config 指定的思考强度;未指定时使用模型默认值。推理与答复共用同一个输出预算。

实测 V4-Flash 在 15 行的 digest 上烧掉 4000 token 推理后一个字没答(finish: max-tokens)。

单纯调大上限只是把悬崖往后挪,所以预算耗尽的复审会关掉推理重试一次:浅一点的复审也好过没有复审。