- 移除 GovAI, nomifun-tauri, 算力盒子 的 submodule 引用 - 添加所有子项目的完整源代码 - 保留原始 .git 为 .git.bak 备份
4.5 KiB
智能决策(IDMM)
IDMM——Intelligent Decision-Making Mode,智能决策模式——是 Nomi 面向 无人值守任务的稳定性层。它是一个会话监督器,盯守每一轮对话,一旦停滞 立即介入,让长时间自动化任务跑到终态,而不是卡在一次提供商抖动、或一个 不再向前推进的模型上。
如果说 AutoWork 是推动工作向前的引擎, IDMM 就是让每一轮持续运转的守卫。两者天生互补:AutoWork 负责认领并执行 需求,IDMM 则确保它启动的每一轮都真的能跑完。
IDMM 是一个可选的监督器(
nomifun-idmmcrate)。在会话头部——与开启 AutoWork 相同的位置——按会话开启。
为什么需要它
智能体对话失败,绝大多数是无聊、可恢复的方式,而不是什么有趣的原因:
- 提供商返回一次瞬时的
429/5xx,对话本会就此放弃; - 模型反复重试同一个失败调用,陷入循环;
- 模型在某个工具调用上空转,迟迟不决定下一步;
- 对话干脆陷入沉默,最终撞上硬性超时。
交互式会话里,你自己推一把就好。但无人值守的会话——通宵跑的 AutoWork 队列、定时任务、多智能协同里的某个队友——没有人盯着。IDMM 就是那个盯守者。
两个层级
检测到停滞时,IDMM 会用能解决问题的、最省的手段去化解,必要时才逐级升级。
规则层(无需 LLM)
一套确定性策略完全不调用模型就能处理常见的机械性停滞——又快又省:
- 提供商故障——瞬时错误与限流被吸收,对话在合理退避下重试,而不是直接 失败。
- 重试循环——识别并打断反复出现的相同重试。
- 工具空转——对于不断重复发起同一工具调用却毫无进展的模型,把它拉回 正轨。
大多数介入都到此为止,不会进入下一层。
旁路模型层(备用模型)
当停滞确实是一个决策问题——主模型卡住了、规则无法化解——IDMM 会请一个 轻量旁路模型做出下一步决策,让会话不至于死锁。旁路模型是一个小而便宜的 「第二意见」模型:它唯一的职责是把这一轮解开,而不是接管整个工作。
这就是产品语境里的旁路模型(Sidecar):一个待在主智能体旁边、仅在需要 时才介入的模型。
会话守卫与会话保活
规则层与旁路模型合在一起,构成了会话守卫(Session guard):IDMM 在故障与 决策停滞中保活目标,并把这一轮护送到终态。这正是 Nomi 所说的「会话保活」 ——不是一个傻乎乎的心跳,而是一个主动的监督器,去解决那个本会让对话卡死的 根因。
它如何与 AutoWork 协同
IDMM 与 AutoWork 相互独立、彼此互补:
- AutoWork 认领下一条需求、注入、等待这一轮跑完、并完成它。
- 当 AutoWork 启动一轮时,会请求 IDMM(若已接入)在这一轮期间确保对该目标 的监督。
- IDMM 让这一轮不至于卡住,从而干净地抵达
done/failed,而不是超时。
最终效果是:AutoWork 提供向前的推进力,IDMM 提供存活性。一个队列可以无人值守 地跑上数小时,单次的瞬时失败不再让整轮任务中止。
AutoWork: 认领 ─▶ 注入 ─▶ [ 对话运行 ] ─▶ 完成(done/failed)
▲
│ 确保监督
IDMM 守卫 ──▶ 规则层 ──▶ (升级)──▶ 旁路模型
每层策略的细节和介入日志 API 见 crates/backend/nomifun-idmm/。
开启方式
IDMM 在会话头部开启,与 AutoWork 是同一处控制入口。对你打算无人值守长跑 的会话或终端目标打开它即可。规则层无需任何配置;旁路模型层会从你配置好的 提供商里使用一个轻量模型。
何时使用
- 建议开启:任何无人值守的长跑——AutoWork 队列、定时 (cron)任务、通宵批处理,或长时间运行的终端型 agent 会话。
- 可以不开:你自己盯着、随时能介入的短交互会话。
另请参阅
- AutoWork 与需求——IDMM 最常守护的引擎。
- 定时任务——受益于监督的无人值守任务。
- 终端——IDMM 可以监督长时间运行的终端目标。