WorkBuddy 模型定义与配置研究

研究对象:/Applications/WorkBuddy.app/Contents/Resources/app.asar.unpacked/(WorkBuddy 应用解包目录) 核心结论:可用模型不是硬编码在程序里,而是由 cli/ 目录下一组声明式产品配置文件(product*.json 定义。机制为「一个基座 + 四个部署覆盖层」,运行时由环境变量选择渠道并合并生成最终模型清单。


一、模型定义的落点

模型定义全部集中在 cli/ 目录下的 5 个产品配置文件里,resources/ 目录中没有模型定义(那里是提示词模板、技能、插件)。

文件大小角色deploymentTypemodels 数说明
cli/product.json315 KB基座 / 默认SaaS44全量配置,47 个顶层键,含 endpoint、prompts、agents、tools 等所有默认项
cli/product.cloudhosted.json23 KB覆盖层—(继承)24云托管渠道
cli/product.internal.json30 KB覆盖层—(继承)42内部渠道
cli/product.ioa.json54 KB覆盖层—(继承)82iOA 企业渠道,模型最全、schema 最丰富
cli/product.selfhosted.json9.6 KB覆盖层—(继承)1私有化部署,仅保留 1 个 default

关键结构特征:基座 vs 覆盖层

  • product.json 是唯一拥有全部 47 个顶层键的完整基座
  • 其余 4 个文件是差异覆盖层(overlay),只包含需要改写的键。例如 product.cloudhosted.json 仅含 8 个键:agents / models / links / productFeatures / galileo / commit / date / genieVersion
  • 运行时把「基座 + 选中的覆盖层」按同名键合并(overlay 覆盖 base),得到该部署渠道最终生效的配置。


二、渠道选择机制

product.json 里声明了配置来源的环境变量:

"productConfigPathEnv": "ACC_PRODUCT_CONFIG_PATH",
"productConfigEnv": ["ACC_PRODUCT_CONFIG_V3", "ACC_PRODUCT_CONFIG_V2", "ACC_PRODUCT_CONFIG"]
  • ACC_PRODUCT_CONFIG_PATH:指向一个外部配置文件路径(直接换掉配置)。
  • ACC_PRODUCT_CONFIG_V3 / V2 / V1:按优先级从环境变量内联读取配置(V3 优先,向后兼容 V2/V1)。
  • 主程序 cli/dist/codebuddy.js 中出现了对 product.cloudhosted.json / internal / ioa / selfhosted 的引用,以及 cloudhosted(6 次)、selfhosted(9 次)等关键字——即由部署渠道决定加载哪个覆盖层。

解析顺序:环境变量选渠道 → 载入基座 product.json → 叠加对应 overlay → 合并 → 得到最终模型清单(见上文架构图)。


三、单个模型条目(model entry)的 Schema

以 iOA 中字段最完整的条目为例:

{
  "id": "deepseek-v4-pro-ioa",
  "name": "Deepseek-V4-Pro",
  "vendor": "f",
  "credits": "x0.13 credits",
  "maxOutputTokens": 50000,
  "maxInputTokens": 1000000,
  "maxAllowedSize": 1000000,
  "supportsToolCall": true,
  "supportsImages": true,
  "supportsReasoning": true,
  "onlyReasoning": true,
  "temperature": 1,
  "reasoning": { "effort": "high", "summary": "auto" },
  "descriptionEn": "DeepSeek flagship model, supporting 1M context window",
  "descriptionZh": "DeepSeek 旗舰模型,支持 1M 上下文窗口",
  "relatedModels": { "lite": "deepseek-v4-flash-ioa", "reasoning": "deepseek-v4-pro-ioa" }
}

字段可分为五组:

1) 身份标识

字段含义
id唯一标识,程序内部路由用(如 deepseek-v4-proautodefault
nameUI 展示名(如 Deepseek-V4-Pro
vendor供应商/后端路由代号:v / f / e / j / i / tencent(详见第五节)
descriptionZh / descriptionEn双语描述,供 UI 悬浮说明

2) 能力与容量

字段含义
maxInputTokens最大输入 token(如 1,000,000)
maxOutputTokens最大输出 token
maxAllowedSize单次允许的最大尺寸(通常≈输入上限)
supportsToolCall是否支持工具调用(Agent 能力前提)
supportsImages是否支持图像输入(多模态)
disabledMultimodal显式禁用多模态开关

3) 推理配置(思考模型)

字段含义
supportsReasoning是否支持推理/思考
onlyReasoning是否为「仅推理」模型
temperature采样温度(多数思考模型固定为 1)
reasoning.effort推理强度:high / medium
reasoning.summary思考摘要模式:auto

iOA 中推理配置分布:{effort: medium, summary: auto} × 25、{effort: high, summary: auto} × 7、{effort: high} × 1。

4) 计费与默认

字段含义
credits计费倍率字符串,如 "x0.13 credits";区间约 x0.00 ~ x5.00
isDefault是否默认选中(auto 模型带此标记,描述「平衡效果与速度」)

5) 模型联动 relatedModels

用于 UI 上的「快速 / 深度思考」切换:

"relatedModels": { "lite": "deepseek-v4-flash-ioa", "reasoning": "deepseek-v4-pro-ioa" }

点击「快速」跳到 lite 指向的模型,点击「深度思考」跳到 reasoning 指向的模型,实现同族模型间的快慢切换。iOA 中 33/82 条目含此字段(基座 product.json 的 44 条目中则为 0,说明该联动在 iOA/cloudhosted 渠道才启用)。


四、特殊模型条目

id作用
default兜底默认模型(vendor v),私有化 selfhosted 仅保留它
auto智能路由模型,带 isDefault: true,描述「平衡效果与速度」,由后端自动选择实际模型
default-1.1 / default-1.2别名指向 Claude-3.7-Sonnet / Claude-4.0-Sonnet
codewise-* / completion-gf / codewise-navi-*代码补全专用模型(配合 completion 配置块,非对话模型)
hunyuan-image-v3.0 / kling-v3-t2v / kling-v3-i2v图像/视频生成模型(无 token 能力字段)

代码补全的独立配置——顶层 completion 块单独定义补全行为,与对话模型解耦:

"completion": {
  "sensitivity": "medium", "maxInputTokens": 4000, "maxInputCharacters": 10000,
  "suffixPercent": 0.2, "currentFileMaxLines": 200, "stopWords": ["\n\n", "// "],
  "jumpToHere": { "model": "codewise-navi-v1-2-taco", "models": ["codewise-navi-v1-2-taco"] }
}

五、vendor 代号分布

vendor 是后端路由代号(非明文厂商名),各渠道分布:

文件vfejitencent(无)
product.json1207583
cloudhosted1135311
internal1207581
ioa223372711
selfhosted1

推断:v = 内置默认,tencent = 腾讯自研(混元/codewise 系列),f/e/j/i = 不同的第三方聚合/网关后端(DeepSeek、GLM、Kimi、MiniMax 等经不同通道接入,同一模型在不同渠道可能走不同 vendor,例如 minimax-m2.5 在 product.json 为 f、在 cloudhosted 为 e)。无 vendor 的多为图像/视频/补全类特殊模型。


六、其它模型相关配置

顶层键作用
fillToolCallContentModelWhitelist["glm", "claude"]——需要补齐工具调用内容的模型白名单(这些模型家族的 tool_call 内容需特殊处理)
tokenUsageThresholdstoken 用量阈值(4 项),驱动上下文压缩/告警
requestMaxStepLimit单请求最大 Agent 步数上限
completion代码补全专属模型与参数(见第四节)
productFeatures105 项功能开关,覆盖层常改写此块以按渠道启停功能
agents / outputStyles / tools / prompts与模型协同的智能体、输出风格、工具、提示词定义

七、总结:这套配置的设计取舍

  1. 声明式、数据驱动:新增/下线模型只需改 JSON,无需改代码——运营灵活度高。
  2. 基座 + 覆盖层(overlay):一份完整基座 + 多份差异覆盖,避免 5 份完整配置的重复维护;不同部署渠道(SaaS / 云托管 / 内部 / iOA / 私有化)共享同一套基座逻辑,只覆盖模型清单与少量键。
  3. 能力用布尔开关声明supportsToolCall / supportsImages / supportsReasoning 让上层 UI 与调度按能力过滤模型(例如只在支持工具调用的模型上启用 Agent)。
  4. 计费与模型解耦credits 倍率字符串独立于能力,便于定价调整。
  5. 模型族联动relatedModels 把「同一模型的快/慢/思考变体」组织成族,支撑 UI 的一键切换体验。
  6. 私有化极简selfhosted 仅留 default,交由部署方自行接入自有模型端点。

可关注点:同一逻辑模型在不同渠道 vendor 不一致(走不同网关),排查线上问题时需先确认当前生效的是哪个 product.*.json 覆盖层。