第三章:模型配置详解
模型配置是整个 my-opencode-deepseek-config 方案的核心基础设施。它定义了「用什么模型、怎么用、谁来用」——这三个问题的答案直接决定了协作质量、响应速度和控制成本。本章从 DeepSeek V4 双模型体系出发,逐层拆解 Provider 配置、Thinking 模式、模型路由策略、参数调优和跨模型协作机制。
3.1 DeepSeek V4 双模型体系
这套方案只使用两个模型,通过角色分工实现精度与效率的平衡。
3.1.1 deepseek-v4-pro:重型推理引擎
deepseek-v4-pro 是 DeepSeek 的旗舰推理模型,具备强大的逻辑推理、深度分析和长文本理解能力。在本方案中,它承担所有需要「深思熟虑」的任务:
| 角色 | 场景 | 核心需求 |
|---|---|---|
| Orchestrator | 主控调度,分析用户意图,路由到最优子代理 | 精准分类、上下文理解 |
| Planner | 战略规划,编写 Spec,设计架构,分解项目 | 结构化思维、系统设计 |
| Oracle | 根因分析,深度调试,复杂代码理解 | 逻辑链推理、因果追溯 |
| Reviewer | 代码审查,找 Bug,评估质量 | 语义理解、模式识别 |
| Consultant | 方案评估,最佳实践建议,技术选型 | 多维度权衡、经验知识 |
| Deep Worker | 多文件重实现,复杂重构,端到端工程 | 长链推理、并行规划 |
| UI Builder | 前端界面构建,布局设计,样式实现 | 视觉理解、组件化思维 |
Pro 的关键特征是慢思考(slow thinking):它在回答前会进行内部推理链,得出更准确、更完整的结论。代价是响应时间更长、Token 消耗更高。
3.1.2 deepseek-v4-flash:快速轻量引擎
deepseek-v4-flash 是 DeepSeek 的快速推理模型,强调低延迟和高吞吐。在本方案中,它处理所有「不需要深度推理」的工作:
| 角色 | 场景 | 核心需求 |
|---|---|---|
| Explore | 代码库搜索,找文件,发现模式,跨模块查找 | 快速读取、模式匹配 |
| Librarian | 外部文档检索,Web 搜索,API 参考查询 | 信息检索、摘要提取 |
| Light Orchestrator | 简单任务执行,单文件编辑,配置修改,打字修正 | 快速响应、精准执行 |
此外,三个后台系统 Agent 也使用 Flash 模型:
title:为会话自动生成标题summary:为长对话自动生成摘要compaction:在上下文接近窗口上限时执行压缩
Flash 的关键特征是快、省:低延迟响应 + 低 Token 成本,适合高频率的检索和小修改操作。
3.1.3 模型 ID 命名规则
在 OpenCode 中,模型通过 provider_id/model_id 格式唯一标识。本方案中的两个模型:
deepseek/deepseek-v4-pro
deepseek/deepseek-v4-flash
其中 deepseek 是 Provider ID,deepseek-v4-pro 和 deepseek-v4-flash 是模型 ID。这种命名规则贯穿整个配置体系——无论是在 opencode.jsonc 的顶层 model 字段、Agent 定义文件中的 model 字段,还是命令路由中,都以同样的格式引用模型。
重要:由于模型 ID 本身包含斜杠
/,在agent配置中建议始终使用model字段明确指定模型,而非依赖默认继承。这避免了 Provider 枚举时模型 ID 被错误解析为路径。
3.1.4 成本对比
Pro 和 Flash 的定价差异显著,按 DeepSeek 官方定价(以 2026 年初为参考):
| 模型 | 输入价格(/M tokens) | 输出价格(/M tokens) | 相对比例 |
|---|---|---|---|
| deepseek-v4-pro | 较高 | 较高 | ~3-5x Flash |
| deepseek-v4-flash | 较低 | 较低 | 基准 |
以一个典型开发会话为例:Pro 完成一次「深度分析 + 多文件修改」可能消耗 50K-200K tokens,而 Flash 完成一次「代码库搜索 + 报告」可能只消耗 5K-15K tokens。将高频、低认知负担的任务交给 Flash,是本方案控制成本的核心策略。
3.2 为什么只用 DeepSeek
本方案只使用 DeepSeek 一个 Provider,不是临时选择,而是经过深思熟虑的设计决策。
3.2.1 模型隔离设计:双重锁机制
在 opencode.jsonc 中,通过白名单和黑名单实现双重锁定:
{
"enabled_providers": ["deepseek"],
"disabled_providers": ["openai", "anthropic", "google", "openrouter"]
}
enabled_providers(白名单):只允许deepseekProvider 加载。设置为非空数组后,只有列表中的 Provider 可用。disabled_providers(黑名单):显式禁用openai、anthropic、google、openrouter。即使系统中配置了这些 Provider 的 API Key 或环境变量,OpenCode 也不会加载它们。
双重锁的价值在于防御性:白名单定义了「允许谁」,黑名单再次确认「禁止谁」。即使白名单被意外修改(例如合并了其他配置文件),黑名单仍然生效——在配置合并机制中,黑名单的优先级高于白名单。
3.2.2 团队统一的考虑
当团队多人共用同一套配置时,统一 Provider 的核心收益是消除行为差异:
- 同一个任务,运行在 Claude 和 DeepSeek 上可能产生不同的输出风格、代码结构、甚至不同的 Bug 修复策略。
- 在代码审查中,Pro Agent 给出的反馈应该基于同一个模型的能力基准——如果 Reviewer 用 Claude 而 Deep Worker 用 DeepSeek,审查意见的「精度预期」就不一致。
- 团队积累的
AGENTS.md规则和 Prompt 优化经验,都是在特定模型行为上迭代的结果。切换模型相当于丢弃这些积累。
简言之:用同一个模型家族的 Pro + Flash 组合,比「跨 Provider 混搭」更能保证一致性和可预测性。
3.2.3 成本可控性
多 Provider 混搭的隐性成本不仅来自「贵模型用多了」,更来自不可预测性:
- 不同 Provider 对同样的系统提示词可能产生不同长度的响应。
- 不同 Provider 的上下文窗口大小、压缩策略、缓存机制各不相同。
- 切换模型时,由于行为差异导致的返工(推倒重来)是最大的成本黑洞。
只用一个 Provider + 两个模型的组合,让成本完全可量化:每月用量 = Pro 用量 × Pro 单价 + Flash 用量 × Flash 单价,不存在「某次不小心调了 Opus」的意外账单。
3.2.4 避免「模型大杂烩」
在 AI 辅助编程领域有一个常见的反模式:给每个 Agent 配备不同 Provider 的模型(例如 Orchestrator 用 GPT-5、Deep Worker 用 Claude、Explore 用 Gemini Flash)。这种策略的隐性代价是:
- 上下文漂移:Orchestrator 用 GPT 分析任务后传给 Claude 执行的子上下文,GPT 的表达方式和 Claude 的解读方式存在细微差异,导致信息损耗。
- 审查不校准:Reviewer(Codex)审查 Deep Worker(Claude)的代码时,两个模型的「好代码」标准不同,可能产生无意义的争议。
- 维护负担:5 个 Agent × 3 个 Provider = 15 个模型行为需要理解和调优。出了 Bug,排查时还要先排除「是不是模型行为差异导致的」。
- 配置复杂化:每个 Provider 有独立的 options(API Key、baseURL、timeout、headers),配置膨胀且容易出错。
纯 DeepSeek 方案把「模型行为」这个变量彻底剔除。所有 Agent 共享同一个底层的训练数据和推理范式,行为差异仅来自 Prompt 和温度参数,而非模型本身。
3.3 Provider 配置详解
完整的 Provider 配置如下(来自 opencode.jsonc):
{
"model": "deepseek/deepseek-v4-pro",
"small_model": "deepseek/deepseek-v4-flash",
"enabled_providers": ["deepseek"],
"disabled_providers": ["openai", "anthropic", "google", "openrouter"]
}
3.3.1 model:默认主模型
"model": "deepseek/deepseek-v4-pro"
model 字段定义了全局默认模型。其加载优先级如下:
- 命令行
--model/-m标志 - 配置文件中的
model字段 - 上次使用的模型(会话记忆)
- 按内部优先级选第一个可用模型
在本方案中,所有未显式指定 model 的 Agent(包括自定义 Agent)都将使用 deepseek-v4-pro。但实际所有 Agent 都在各自的定义文件中显式指定了模型,所以这个字段的作用是兜底——防止任何 Agent 因缺少模型配置而用错模型。
3.3.2 small_model:轻量模型
"small_model": "deepseek/deepseek-v4-flash"
small_model 定义了轻量任务默认模型。OpenCode 会将以下后台任务分流到此模型:
- 标题生成(
titleAgent):根据会话内容自动生成描述性标题 - 摘要生成(
summaryAgent):在上下文压缩时生成阶段性摘要 - 上下文压缩(
compactionAgent):将长对话压缩为简洁的上下文摘要
在本方案中,这三个后台 Agent 都在 agent 配置块中显式指定了模型和回退:
"agent": {
"title": {
"model": "deepseek/deepseek-v4-flash",
"fallback": "deepseek/deepseek-v4-pro"
},
"summary": {
"model": "deepseek/deepseek-v4-flash",
"fallback": "deepseek/deepseek-v4-pro"
},
"compaction": {
"model": "deepseek/deepseek-v4-flash",
"fallback": "deepseek/deepseek-v4-pro"
}
}
small_model 字段和这些 Agent 级配置共存的设计是防御性冗余:即使 Agent 级配置被意外覆盖或删除,small_model 仍然生效。
fallback 字段指定了 Flash 模型不可用时的回退模型。当 deepseek-v4-flash 连接失败、返回错误或超时时,系统自动降级到 deepseek-v4-pro 完成任务——这保证了后台任务永远不会因模型不可用而失败。
3.3.3 enabled_providers:白名单
"enabled_providers": ["deepseek"]
白名单的工作机制:
- 设为空数组或不设置:所有已认证的 Provider 都可用。
- 设为非空数组:只有列表中的 Provider ID 可用,其他 Provider 即使已认证也不会加载。
- 被白名单排除的 Provider 不会出现在
/models列表中,Agent 无法选择或使用它们。
在本方案中,白名单只包含 deepseek,意味着只有 DeepSeek 的模型可以加载和使用。
3.3.4 disabled_providers:黑名单
"disabled_providers": ["openai", "anthropic", "google", "openrouter"]
黑名单的工作机制:
- 即使对应的 API Key 已设置或环境变量已配置,被列入黑名单的 Provider 也不会加载。
- 黑名单优先级高于白名单:如果某个 Provider ID 同时出现在两个列表中,黑名单生效。
- 被禁用的 Provider 不会消耗任何启动时间(跳过加载流程)。
本方案显式禁用了四个主流 Provider:OpenAI、Anthropic、Google、OpenRouter。它们的 API Key 可能因其他工具的需求而配置在系统中,但 OpenCode 不会误用。
3.4 Thinking/Reasoning 模式配置
DeepSeek V4 Pro 支持思考模式(Thinking Mode)——一种让模型在回答前进行内部推理链增强的机制。本方案通过 Provider 级别的 options 配置为 Pro 模型启用此模式:
"provider": {
"deepseek": {
"models": {
"deepseek-v4-pro": {
"options": {
"thinking": { "type": "enabled" }
}
}
}
}
}
注意:如果你的
opencode.jsonc中尚未包含此 Provider 配置块,请添加。Thinking 模式仅对 Pro 模型生效,Flash 模型不支持或不需要此配置。
3.4.1 Thinking 模式的工作机制
Thinking 模式是 DeepSeek 对标 OpenAI o-series 和 Anthropic Extended Thinking 的推理增强功能。当启用时:
- 模型在生成最终回答之前,先进行一段内部推理链(think step)。
- 推理链对用户不可见(除非显式设置为可见),但会显著提升答案的准确性和完整性。
- 推理链消耗额外的 Token(称为 “reasoning tokens” 或 “thinking tokens”),计入输入 Token 费用。
它和「让模型在 Prompt 里写 Let me think step by step」有本质区别:
- Prompt 里的 CoT(Chain of Thought)是显式推理:模型把推理过程写进输出,占用输出 Token。
- Thinking 模式是隐式推理:模型在内部完成推理,只输出结论,不占用输出 Token,但消耗思考 Token(通常按输入 Token 计费)。
3.4.2 适用场景
| 场景 | Thinking 模式的价值 |
|---|---|
| 复杂架构设计 | 模型能系统性地考虑组件关系、数据流、边界条件 |
| 根因分析 | 多步因果链推理,减少「猜闷儿」式诊断 |
| 代码审查 | 深度理解代码意图后再评判,减少误报 |
| 多文件重构 | 推演改动的影响范围,减少遗漏 |
| 技术选型 | 多维度权衡比较,输出结构化的评估 |
不适合的场景:简单的单文件修改、打字修正、配置变更、模板填充——这些 Flash 模型已经足够。
3.4.3 成本权衡
Thinking 模式的代价是思考 Token 消耗:
| 指标 | 关闭 Thinking | 开启 Thinking |
|---|---|---|
| 简单任务输出质量 | 几乎无差异 | 几乎无差异 |
| 复杂任务输出质量 | 可能有遗漏 | 更完整、更准确 |
| Token 总消耗 | 基准 | 基准 + 思考 Token(约 10%-50% 增幅) |
| 响应时间 | 快 | 略慢(取决于推理链长度) |
实践建议:Keep it on。对于需要 Pro 模型的任务(深度分析、规划、审查),思考 Token 的额外成本远小于「返工一次」的代价。一张错误的设计图,在实现阶段可能浪费 10 倍于思考 Token 的成本。
3.4.4 可以配置的 Thinking 选项
如果你的场景对推理深度有特殊要求,可以进一步配置:
"provider": {
"deepseek": {
"models": {
"deepseek-v4-pro": {
"options": {
"thinking": {
"type": "enabled",
"budgetTokens": 16000
}
}
}
}
}
}
type: "enabled":开启思考模式(默认)。type: "disabled":关闭思考模式。budgetTokens:设置思考 Token 预算上限,超过此上限模型会尽早输出答案。
budgetTokens 是成本控制的重要旋钮:对于中度复杂的任务,8K-16K 的预算通常足够;只有在极端复杂的推演场景(如大规模系统重构方案),才需要更大的预算。
DeepSeek V4 Pro 的 Thinking 模式基于模型原生能力,不需要额外的 API 参数适配。如果你使用的是 DeepSeek 兼容 API(通过代理或自建网关),需要确认网关是否转发
thinking请求参数。
3.5 模型路由策略
本方案通过「模型感知路由」实现精准的任务-模型匹配。路由发生在两个层面:Agent 分配层和Orchestrator 调度层。
3.5.1 Flash 优先原则
在 AGENTS.md 的 Core Principles 中明确规定:
Right-size the model to the task. Prefer flash for search, lookup, and simple edits; reserve pro for reasoning and heavy implementation. When borderline, prefer flash.
这条规则的具体含义:
| 任务特征 | 首选模型 | 理由 |
|---|---|---|
| 搜索、查找、文件匹配 | Flash | 不需要推理,只需要读 + 返回 |
| 外部文档检索、API 查询 | Flash | 需要快速获取信息,不是深度分析 |
| 简单编辑(单文件、打字修正、配置) | Flash | 操作明确,不需要推演 |
| Web 搜索、信息摘要 | Flash | 信息检索和提炼,不是创造 |
| 规划、架构设计、Spec 编写 | Pro | 需要结构化思维和系统设计 |
| 根因分析、调试 | Pro | 需要多步因果推理 |
| 代码审查 | Pro | 需要语义理解和模式识别 |
| 多文件实现、重构 | Pro | 需要长链推理和并行规划 |
| 方案评估、技术选型 | Pro | 需要多维度权衡和经验知识 |
当任务处于边界时,AGENTS.md 明确规定:prefer flash。宁可先用 Flash 快速探路、发现不够再升级,也不要一开始就用 Pro 消耗大量 Token。
3.5.2 Pro 专注推理
Pro 模型的所有使用场景都有一个共同特征:需要推理。它不是「写代码快」的模型——在本方案中,代码编写是 Deep Worker 的职责,Deep Worker 之所以用 Pro,不是因为 Pro 写代码快,而是因为 Deep Worker 在写代码前需要:
- 读取和理解多文件上下文
- 推演改动的连锁影响
- 设计修改方案
- 并行规划执行步骤
- 自我验证
这些步骤都需要推理。如果 Deep Worker 只需要做一个简单的单行改动,Orchestrator 根本不会调度它——Light Orchestrator(Flash)就足够了。
3.5.3 自动升级机制
当 Flash Agent 无法完成任务时,本方案内置了升级路径:
- Orchestrator 层面:Orchestrator 分析 Flash Agent 返回的结果。如果结果不完整、质量不满足要求,或 Agent 明确表示「这个任务超出了我的能力」,Orchestrator 将任务升级到 Pro Agent 并附带完整上下文。
- Agent 内部:后台系统 Agent(title/summary/compaction)在 Flash 模型不可用时,通过
fallback字段自动降级到 Pro 模型。 - fallback 链:
deepseek-v4-flash → deepseek-v4-pro,不引入第三方模型。
升级时,Orchestrator 会将 Flash Agent 已完成的探索结果作为上下文传递给 Pro Agent,避免重复工作。这是本方案「不浪费 Token」的核心设计之一。
3.5.4 Agent 模型分配总览
下面是所有 Agent 的模型分配:
Pro(deepseek-v4-pro):
├── orchestrator — 主控调度
├── planner — 战略规划
├── oracle — 深度分析、根因调试
├── reviewer — 代码审查
├── consultant — 方案评估、脑力激荡
├── deep-worker — 重型实现
├── ui-builder — 前端界面构建
└── (build / plan) — 内置主智能体(备用)
Flash(deepseek-v4-flash):
├── explore — 代码库搜索(只读)
├── librarian — 外部文档检索(只读)
├── light-orchestrator— 简单任务执行
├── title — 标题生成(系统)
├── summary — 摘要生成(系统)
└── compaction — 上下文压缩(系统)
这种分配遵循的核心原则是:让 Pro 做需要思考的事,让 Flash 做需要手快的事。
3.6 模型参数调优
不同 Agent 需要不同的行为参数。本方案根据角色需求差异化配置了 temperature 和 steps。
3.6.1 Temperature 设置
Temperature 控制模型输出的随机性(0.0 = 确定,1.0 = 最大随机性):
| Agent | Temperature | 原因 |
|---|---|---|
| Oracle | 0.1 | 根因分析需要确定性,不能给出随机答案 |
| Explore | 0.1 | 搜索和文件匹配逻辑要求精确 |
| Reviewer | 0.2 | 代码审查需要一致性,同一段代码应得出相似的审查结论 |
| Deep Worker | 0.2 | 实现需要准确性,但保留一丝灵活性应对多种实现方式 |
| Librarian | 0.2 | 文档检索需要准确性,不需要创造性 |
| Planner | 0.3 | 规划和设计允许适度的创造性,探索不同方案 |
| UI Builder | 0.3 | UI 构建涉及一定的审美判断,适度灵活性有价值 |
| Light Orchestrator | 0.3 | 简单任务很少需要创造性,但偶尔需要灵活处理 |
| Consultant | 0.5 | 脑力激荡和方案评估需要多样化的视角 |
核心规律:分析型角色(Oracle、Explore、Reviewer)用 0.1-0.2 的低温度保证确定性;创造性角色(Consultant、Planner)用 0.3-0.5 获得多样性。
3.6.2 Steps 限制
steps 限制了 Agent 在单次会话中最多执行多少次「思考-行动」循环:
| Agent | Steps | 原因 |
|---|---|---|
| Orchestrator | 100 | 作为主调度器,可能需要处理大量子任务 |
| Deep Worker | 100 | 复杂实现可能涉及多轮探索-修改-验证 |
| Planner | 60 | 规划阶段不应无限制推演 |
| UI Builder | 60 | UI 实现通常步骤较多 |
| Explore | 40 | 搜索任务不需要太多轮,找到就返回 |
| Oracle | 40 | 根因分析达到一定深度后,继续追问收益递减 |
| Reviewer | 40 | 审查应聚焦,不应无休止检查 |
| Consultant | 30 | 方案评估有边际效益 |
| Librarian | 30 | 检索应快速收敛 |
| Light Orchestrator | 30 | 简单任务,限制更紧 |
Steps 既是成本控制阀门,也是质量保证——限制步数迫使 Agent 在有限步骤内给出最优解,而非无限试探。达到上限时,Agent 会收到系统提示,要求总结已完成工作并列出剩余任务。
3.6.3 上下文窗口
| 模型 | 上下文窗口 | 实际可用 |
|---|---|---|
| deepseek-v4-pro | 128K tokens | ~118K(保留 ~10K 给 compression buffer) |
| deepseek-v4-flash | 128K tokens | ~118K |
本方案的 compaction 配置:
"compaction": {
"auto": true,
"prune": false,
"tail_turns": 8,
"preserve_recent_tokens": 12000,
"reserved": 10240
}
auto: true:上下文接近窗口上限时自动压缩prune: false:不自动裁剪旧工具输出(保留用于回溯)tail_turns: 8:保留最近 8 轮对话的完整历史preserve_recent_tokens: 12000:在压缩后额外保留最近 ~12K tokens 的对话reserved: 10240:为压缩过程预留 ~10K tokens 缓冲
对于 Deep Worker 这种可能产生超长会话的 Agent(100 steps × 每轮输出),compaction 是防止上下文溢出和 Token 失控的关键机制。
3.6.4 各 Agent 关键参数汇总
| Agent | Model | Temperature | Steps | 读写权限 |
|---|---|---|---|---|
| orchestrator | v4-pro | 默认 | 100 | 完整 |
| planner | v4-pro | 0.3 | 60 | 完整 |
| oracle | v4-pro | 0.1 | 40 | 只读 |
| reviewer | v4-pro | 0.2 | 40 | 只读 |
| consultant | v4-pro | 0.5 | 30 | 只读 |
| deep-worker | v4-pro | 0.2 | 100 | 完整 |
| ui-builder | v4-pro | 0.3 | 60 | 完整 |
| explore | v4-flash | 0.1 | 40 | 只读 |
| librarian | v4-flash | 0.2 | 30 | 只读 |
| light-orchestrator | v4-flash | 0.3 | 30 | 完整 |
未显式设置 temperature 的 Agent(如 Orchestrator)使用模型默认值。DeepSeek V4 系列的默认 temperature 通常在 0.6-0.7 之间(取决于版本),Orchestrator 的调度决策不需要严格的确定性,默认值即可。
3.7 多模型协作模式
Pro Agent 和 Flash Agent 不是独立运作的孤岛,它们通过 Orchestrator 的调度机制协同工作,形成完整的任务处理流水线。
3.7.1 协作流程:一个典型任务的生命周期
以「在项目中添加一个新功能」为例:
用户请求
│
▼
[Orchestrator (Pro)]
├── 分析意图:实现新功能 → 属于"Explicit implementation"
│
▼
[Planner (Pro)]
├── 系统分析,编写 Spec
├── 输出:功能分解、文件清单、实现步骤
│
▼
[Explore (Flash)] ← 被 Deep Worker 内部调用
├── 并行搜索相关代码位置
├── 返回:受影响文件的精确列表
│
▼
[Deep Worker (Pro)]
├── 读取 Explore 提供的文件清单
├── 逐文件实现
├── 遇到外部库 API 不确定
│ │
│ ▼
│ [Librarian (Flash)]
│ ├── 搜索官方文档
│ ├── 返回:API 签名和用法
│ │
│ ▼
├── 使用 Librarian 的 API 信息继续实现
├── 自我验证
├── 完成
│
▼
[Reviewer (Pro)] ← 可选,取决于任务复杂度
├── 审查变更
├── 输出:审查意见
│
▼
[Light Orchestrator (Flash)] ← 提交阶段
├── 运行 `git diff`
├── 生成 Conventional Commits 消息
├── 执行 `git commit`
│
▼
完成
在这个流程中,Pro Agent 承担了所有需要思考的阶段(分析、规划、实现、审查),Flash Agent 在中间穿插处理检索和简单操作。每次 Flash Agent 完成任务后,它的结果被注入主流程的上下文,Pro Agent 无需重新探索。
3.7.2 Orchestrator 的模型感知路由
Orchestrator 了解每个子 Agent 的模型能力和限制(参见 orchestrator.md 中完整的意图-路由映射表)。它的路由逻辑是模型感知的:
- 当任务需要推理时 → 路由到 Pro Agent(planner、oracle、reviewer、deep-worker、consultant、ui-builder)
- 当任务只需要检索时 → 路由到 Flash Agent(explore、librarian)
- 当任务是简单执行时 → 路由到 Flash Agent(light-orchestrator)
- 当任务处于边界时 → 优先路由到 Flash Agent(AGENTS.md 规则:”When borderline, prefer flash”)
这种「右尺寸模型」的路由策略,是方案成本效率的核心——它确保没有一个推理 Token 浪费在搜索上,也没有一个搜索等待推理链完成。
3.7.3 上下文在模型间的传递机制
当 Orchestrator 将任务从一个 Agent 传递给另一个时,上下文的传递遵循以下原则:
-
子会话隔离:每个子 Agent 在独立的子会话中工作。子会话拥有启动时注入的完整系统上下文(AGENTS.md、Skill 等),但不会累积主会话的历史噪音。
-
结果而非过程:子 Agent 完成任务后,只返回精炼结论给主会话,而非原始探索过程。例如 Explore 返回「函数 X 在
src/foo.ts:42定义,被a.ts、b.ts、c.ts调用」,而不是返回每次grep的完整输出。 -
路径引用而非内容复制:返回结论中使用文件路径和行号引用(如
src/app.ts:42),而非粘贴完整文件内容。调用方 Agent 可以自行决定需要读取哪些部分。 -
升级时带完整上下文:当 Flash Agent 无法完成任务、Orchestrator 升级到 Pro Agent 时,它将 Flash Agent 的完整子会话上下文传递给 Pro Agent——这样 Pro Agent 不需要重复 Flash 已经做过的工作。
这套传递机制的 Token 效率体现在:主会话只累积「谁做了什么 + 结论是什么」,不累积每次搜索的原始输出。一个包含 10 次子代理调用的会话,如果每次都复制原始上下文,上下文体积可能膨胀到数万 tokens;而用精炼结论,可能只有数千 tokens。
3.7.4 后备链中的模型切换
本方案的后备链是单 Provider 内降级,而非跨 Provider 切换:
deepseek-v4-flash (首选)
├── 成功 → 完成
└── 失败/不可用 → deepseek-v4-pro (fallback)
这种设计的优势:
- 行为一致性:回退到 Pro 后,模型输出风格与 Flash 相近(同家族),不会产生风格突变。
- 配置简单化:不需要维护多个 Provider 的 API Key、baseURL、timeout 等参数。
- 失败可预测:Flash 失败的原因通常是服务故障或配额耗尽,回退到 Pro 后这些问题通常不存在。
跨 Provider 后备链(如 DeepSeek Flash 失败 → 回退到 Claude Haiku)虽然听起来更安全,但实际引入了行为差异和配置复杂度。在本方案的「Pure-config philosophy」下,单 Provider 后备链更简洁、更可控。
3.7.5 多模型协作的收益量化
以一个月的使用数据为例(假设日均 50 次 Agent 调用):
| Agent 类型 | 日均调用次数 | 单次平均 Token | 使用模型 | 日均成本占比 |
|---|---|---|---|---|
| Orchestrator | 50 (每次请求) | 3K | Pro | ~5% |
| Planner | 3 | 8K | Pro | ~1% |
| Deep Worker | 5 | 50K | Pro | ~9% |
| Oracle | 2 | 30K | Pro | ~2% |
| Reviewer | 3 | 15K | Pro | ~2% |
| Pro 小计 | 63 | — | — | ~19% |
| Explore | 15 | 5K | Flash | ~3% |
| Librarian | 8 | 4K | Flash | ~1% |
| Light Orchestrator | 10 | 6K | Flash | ~2% |
| title/summary/compaction | 50+ | 1K | Flash | ~2% |
| Flash 小计 | 83+ | — | — | ~8% |
注:此为估算值,实际取决于任务复杂度。关键不在于数字的精确性,而在于比例关系:Flash 处理了 ~57% 的调用次数,但只消耗了 ~30% 的 Token 成本——因为单次成本低且任务都足够简单。
如果把所有 146+ 次调用都交给 Pro,总成本大约会翻 3-4 倍。这就是双模型协作的价值:高频调用的成本被 Flash 压到了最低,Pro 只在高价值的推理场景下出场。
3.8 小结
本章全面解构了 my-opencode-deepseek-config 的模型配置体系,核心要点回顾:
-
双模型体系:
deepseek-v4-pro负责推理(规划、分析、审查、实现),deepseek-v4-flash负责检索和简单执行(搜索、文档查询、配置修改、后台任务)。 -
单一 Provider 设计:通过白名单 + 黑名单双重锁定,只用 DeepSeek。避免多 Provider 混搭导致的行为不一致、成本不可控和配置复杂化。
-
Thinking 模式:为 Pro 模型启用内部推理链,提升复杂任务的质量。思考 Token 的额外成本远小于返工的代价。
-
模型感知路由:Orchestrator 根据任务需求,将任务精确路由到「能力恰好匹配」的 Agent。Flash 优先原则确保高频任务的成本最优。
-
参数差异化:分析型 Agent 用低 temperature(0.1-0.2),创造性 Agent 用中 temperature(0.3-0.5)。Steps 限制了每个 Agent 的迭代次数,兼顾成本控制和输出质量。
-
多模型协作:Pro 和 Flash 不是替代关系,而是互补关系。Flash 做探索、检索和简单执行,产出精炼结论注入主流程;Pro 做推理、规划和复杂实现,利用 Flash 的检索成果快速起步。
这套模型配置体系是「纯配置驱动」理念的体现——不需要额外的中间件或路由框架,仅通过 OpenCode 的原生配置机制,就实现了生产级的任务分发和模型协作。
下一章:第四章:多 Agent 体系完全解析 —— 深入剖析 11 个 Agent 的设计哲学、职责边界和协作关系。