把高成本判断留给 Luna:一套 OpenCode + DeepSeek + MiniMax 的协作配置

3080 字
15 分钟
把高成本判断留给 Luna:一套 OpenCode + DeepSeek + MiniMax 的协作配置

这套配置的价值,不在于把几个模型堆在一起,而在于把任务按能力和成本拆开:bestcodex/gpt-5.6-luna 负责判断、路由和验收,opencode-go/deepseek-v4-flash 负责可拆分的纯文本执行,MiniMax MCP 负责图片、音乐、视频、TTS 和音色等产物。

这样做的结果是,主控模型不用承担所有重复执行,子 Agent 也不用假装自己拥有视觉能力。真正重要的部分,是每次委派都把边界和工具权限重新写进任务契约里,避免子 Agent 依赖历史上下文。

相关阅读:Best Codex 中转:三把钥匙、一个 Luna——那边讲 Key 与额度;这篇讲接到 OpenCode 之后怎么分活。

这套组合为什么划算

成本收益来自路由,而不是来自「所有任务都换成便宜模型」。

工作类型更合适的角色原因
需求理解、复杂取舍、视觉入口、最终验收luna-orchestrator / bestcodex/gpt-5.6-luna需要更长上下文、更强推理或图片输入能力
文件扫描、结构化分析、代码修改、测试和工具结果处理deepseek-v4-flash-worker / opencode-go/deepseek-v4-flash任务可以拆开,输入和输出都能用文本表达
图片、音乐、视频、TTS、音色和图片理解MiniMax / minimax-coding 工具产物由专用能力生成或解析,不占用主控的全部推理链

主控模型只在需要判断的地方出现,纯文本执行交给子 Agent,媒体能力按需触发。任务越清晰,这个分工越省成本;任务越模糊,越应该先让 Luna 收敛目标,再派发执行。

三个角色,各自守住一条边界

角色接收什么负责什么交付什么不做什么
luna-orchestrator用户需求、原始图片、视频上下文、子任务结果识别模态、选择能力、拆分任务、判断风险、Review 和验收结构化任务、路由决策、最终结论不把空结果、无证据结果或未完成的异步任务判为成功
deepseek-v4-flash-worker结构化文字、路径、URL、Prompt、歌词、文本、task_id 和工具返回结果执行独立纯文本任务,并在范围内直接调用已暴露且获准的工具非空结果、文件变更清单、验证证据、工具结果或任务状态不把原始图片或视频字节作为模型输入,不猜测视觉内容,不伪造工具结果
MiniMax / minimax-codingprompttextlyricsvoice_idtask_idimage_source 等结构化参数生成媒体、理解图片、查询音色、执行相关搜索文件路径、结构化分析文字、task_id 或状态不主动扩大任务,不把 enabled 自动解释成余额充足

有一个容易被误解的点:DeepSeek 是纯文本模型,不等于它只能写调用方案。它可以直接调用当前会话已经暴露、并且权限和认证都通过的 OpenCode 原生工具与 MCP。它不能接收媒体字节,但可以把路径、URL、Prompt 或 task_id 作为工具参数传出去,再处理工具返回的文本结果。

真正防止「失忆」的不是上下文,而是委派契约

子 Agent 不应该依赖主控上一轮说过什么。每次通过原生 task 委派时,都重复注入下面这段固定声明:

DeepSeek V4 Flash 是纯文本执行 Agent,不接收图片、剪贴板附件或未转换的多媒体,只处理主控提供的结构化文字,并返回非空结果、修改文件、验证命令、验证结果和剩余风险。

同一个任务里还要补上正向能力声明:

DeepSeek 可以直接调用当前会话已注册且权限/认证通过的 OpenCode 原生工具和 MCP;多媒体只能通过工具参数处理,不能作为原始模型输入。工具不可见或调用失败时,必须返回非空阻塞结果,不得猜测或伪造媒体结果。

这两段话缺一不可。只有限制没有授权,DeepSeek 会把自己误判成「只能分析文本、不能碰工具」;只有授权没有限制,它可能把图片附件当作模型输入,或者把无法验证的媒体结果说成已完成。

固定契约至少要覆盖五件事:

  1. 任务范围:只做当前子任务,不擅自扩大。
  2. 输入边界:原始媒体不进模型,结构化参数可以交给工具。
  3. 工具权限:只能使用当前会话实际暴露且获准的工具。
  4. 失败行为:工具不可见、未连接、认证失败或调用失败时,返回非空阻塞结果。
  5. 验收证据:返回工具结果、文件路径或任务状态,以及验证命令、验证结果和剩余风险。

媒体任务的标准接力

图片理解时,image_source 是传给视觉工具的路径或 URL,不是把图片字节交给 DeepSeek。标准流程是:

  1. Luna 或 DeepSeek 根据任务范围准备 image_source 和分析 Prompt。
  2. minimax-coding_understand_image 处理图片,返回 OCR、对象、颜色、布局或其他结构化文字。
  3. DeepSeek 消费这段结构化文字,继续做判断、改写、代码修改或下一步编排。
  4. Luna 检查返回内容是否非空,检查路径、状态、文件变更和需求覆盖。

生成任务也遵循同样的接力方式。DeepSeek 可以直接调用媒体工具,但要先识别副作用:生图和生音频会产生文件和额度消耗,视频可能是异步任务,播放会产生本地设备副作用,网页搜索会产生外部网络请求。

视频任务尤其不能把「已提交」当成「已完成」:MiniMax_generate_video 返回 task_id 后,必须继续使用 MiniMax_query_video_generation 查询到终态,并以最终产物和 Review 结果为准。

当前工具面

当前 OpenCode 会话登记并暴露的能力族如下。具体参数以当次运行时工具签名为准,能力索引不替代工具定义。

能力工具入口
图片生成MiniMax_text_to_image
图片理解和 OCRminimax-coding_understand_image
音乐生成MiniMax_music_generation
文本转语音MiniMax_text_to_audio
视频生成与查询MiniMax_generate_videoMiniMax_query_video_generation
音色列表MiniMax_list_voices
音频播放MiniMax_play_audio
音色设计MiniMax_voice_design
音色克隆MiniMax_voice_clone
网页搜索minimax-coding_web_search

这套工具面让产物不再只有文本和代码,还可以包括图片、音乐、语音、视频、OCR 结果和结构化媒体分析。DeepSeek 的职责不是拥有这些媒体模态,而是把结构化任务送到正确的工具,并继续处理返回结果。

已验证什么,不能越界推断什么

验证结论要分层写,不能把配置状态和业务成功混在一起。

状态当前结论
配置启用MiniMaxminimax-coding 在全局 OpenCode 配置中为 enabled
工具可见当前会话暴露了 MiniMax 媒体工具和 minimax-coding 工具
只读调用成功MiniMax_list_voices 使用 systemvoice_cloning 两种参数均成功返回;后者返回空列表
DeepSeek 直接调用工具已验证。DeepSeek 子 Agent 直接调用 MiniMax_list_voices 成功,不只是生成调用方案
生成端点逐项成功尚未逐项验证,不能把配置声明写成全部生成工具已验收
权益或余额充足当前没有从工具栏得到明确余额查询结果,不能从 enabled 推断
服务端模型真实路由子 Agent 不能独立证明请求最终命中的服务端节点,只能报告配置路由和运行行为

「工具已注册」「MCP 已连接」「认证通过」「权益充足」「业务调用成功」是五个不同状态。任何一项都不能替代另外四项。

主控验收标准

Luna 收到 task_result 后,至少检查以下内容:

检查点不通过时的处理
结果非空重试一次或报告阻塞
Agent 和模型路由正确不验收,检查委派方式和运行信息
工具结果真实存在不接受只有模板或计划的文字
文件变更符合授权发现越界修改时暂停验收
验证命令和结果齐全不把「应该通过」算作证据
异步任务已到终态继续查询或报告未完成
剩余风险已列出要求补充边界,不用乐观措辞掩盖未知项

这套验收机制把模型的「记性」变成了可检查的契约。子 Agent 即使忘了上下文,也会在当前 Prompt 中重新获得能力边界和工具入口;它即使给出错误结论,Luna 仍然可以通过结果、权限和验证证据把错误拦下来。

最容易写错的几句话

容易误导的说法更准确的说法
MiniMax 已启用,所以媒体功能一定可用MCP 处于 enabled 状态,工具是否可用要看当前会话暴露、认证和实际调用结果
图片交给 DeepSeek 处理图片通过 image_source 交给视觉工具,DeepSeek 只处理工具返回的结构化文字
DeepSeek 只能生成调用方案DeepSeek 可以直接调用当前会话已暴露且获准的工具,纯文本边界只限制模型输入,不限制工具编排能力
调用方案已经生成,所以任务完成只有实际调用获得返回,并完成验证和 Review,才算执行完成
视频任务已经提交,所以视频生成完成必须保存 task_id,查询到终态并确认产物
音色列表为空,所以 MiniMax 没有权益空列表只说明当前分类没有可枚举条目,不能推出权益状态
纯文本模型不能做媒体任务纯文本模型不能直接理解媒体字节,但可以通过工具参数编排媒体任务

维护这套体系的几条硬规则

  1. opencode.json 是运行时配置来源,capability-index.md 是能力登记表,AGENTS.mdsession-bootstrap.md 是协作规则和新会话同步层。
  2. 修改 Agent、模型、MCP、Skill、Plugin 或权限后,同时更新能力索引,并重新做 JSON 解析和运行时检查。
  3. 每次原生 task 委派都重复注入固定能力声明,不依赖历史上下文。
  4. 运行时工具栏优先于旧文档。工具名、参数和可用性发生变化时,以当次实际暴露签名为准。
  5. 修改配置后重启 OpenCode。配置不是热加载的,当前会话不会自动获得所有新规则。
  6. 凭据只从认证存储或环境变量读取,不进入 Prompt、日志、能力索引或知识笔记。
  7. 媒体工具按需触发。涉及生成、播放、外部网络或异步任务时,先标明副作用,再执行和验收。

适合迁移到其他项目的原则

  • 按输入模态和任务复杂度分工,不按「谁都能做」分工。
  • 把工具权限、失败处理和验收证据写进每次委派契约。
  • 让低成本模型承担可验证的执行,让高能力模型承担路由和最终判断。
  • 把多媒体当作工具参数和工具结果管理,不把媒体字节硬塞给纯文本模型。
  • 将配置状态、运行时状态和业务结果分层记录。
  • 用真实调用验证工具链,不用静态 enabled 字段替代运行时证据。
  • 对异步产物坚持「状态到终态」的验收,而不是看到 task_id 就结束。
  • 保留失败和未知项。未知不是失败,但把未知写成成功会让整套协作失去可信度。

这套方案的核心不是让某一个模型变得无所不能,而是让每个角色都知道自己能做什么、该把什么交给工具、什么时候必须停下来等主控验收。这样,成本、能力和产物多样性才会同时成立。

评论区

像发消息一样写就好:点工具栏插入表情 / 图片,表情会直接显示。插图 ≤5MB。