乐于分享
好东西不私藏

OpenClaw的大模型选择原理

OpenClaw的大模型选择原理
前几天一位很大的领导来调研龙虾的研究和使用情况,当时问了一个问题“大模型是如何选择的?”。我当时的回答是“先选择主模型,再选择其他模型”。这个回答无疑是正确的,但是沿着这个问题,还有另外一个隐藏的问题,为什么OpenClaw不通过任务自动选择模型,而是需要手工去选择呢?今天早上再深度研究下,最后回答这个问题。
一.大模型是如何选择的?
1)模型选择的层次结构
(1)会话级别覆盖(Session Override),通过/model命令设置,存储在会话当中
(2)渠道级别模型映射,根据来源的channels.modelByChannel,来原则特定的模型
(3)根据Agent 配置(Agent Config),每个Agent都有自己的模型,agents.list[].model
(4)全局默认模型,agents.defaults.model
(5)内置模型,Bulit-in Default
2)配置格式
(1)全局默认配置 

// ~/.openclaw/openclaw.json

   {                                                                                                                                                                                                                       agents: {                                                                                                                                                                                                               defaults: {                                                                                                                                                                                                             model: {                                                                                                                                                                                                                primary: "anthropic/claude-opus-4-6",    // 主模型                                                                                                                                                                    fallbacks: ["minimax/MiniMax-M2.7"],     // 备用模型列表                                                                                                                                                            },                                                                                                                                                                                                                    models: {                                                                                                                                                                                                               "anthropic/claude-opus-4-6": {                                                                                                                                                                                          alias: "opus",                         // 简称                                                                                                                                                                        params: { temperature: 0.7 }          // 模型参数                                                                                                                                                                   },                                                                                                                                                                                                                    "minimax/MiniMax-M2.7": {                                                                                                                                                                                               alias: "minimax"                                                                                                                                                                                                    },                                                                                                                                                                                                                  },                                                                                                                                                                                                                  },                                                                                                                                                                                                                  },                                                                                                                                                                                                                  } 
(2)Agent专属配置
   {                                                                                                                                                                                                                       agents: {                                                                                                                                                                                                               list: [                                                                                                                                                                                                                 {                                                                                                                                                                                                                       id: "coding-agent",                                                                                                                                                                                                   model: "openai/gpt-5.4",              // Agent 专属模型                                                                                                                                                             },                                                                                                                                                                                                                    {                                                                                                                                                                                                                       id: "creative-agent",                                                                                                                                                                                                 model: {                                                                                                                                                                                                                primary: "google/gemini-3.1-pro",                                                                                                                                                                                     fallbacks: ["anthropic/claude-sonnet-4-6"],                                                                                                                                                                         },                                                                                                                                                                                                                  },                                                                                                                                                                                                                  ],                                                                                                                                                                                                                  },                                                                                                                                                                                                                  } 
(3)渠道模型映射配置
   {                                                                                                                                                                                                                       channels: {                                                                                                                                                                                                             modelByChannel: {                                                                                                                                                                                                       discord: {                                                                                                                                                                                                              "123456789": "anthropic/claude-opus-4-6",                                                                                                                                                                           },                                                                                                                                                                                                                    telegram: {                                                                                                                                                                                                             "-1001234567890": "openai/gpt-5.4-mini",                                                                                                                                                                            },                                                                                                                                                                                                                  },                                                                                                                                                                                                                  },                                                                                                                                                                                                                  } 
3)模型条目结构
 type ModelCatalogEntry = {                                                                                                                                                                                              idstring;              // 模型 ID,如 "claude-opus-4-6"                                                                                                                                                             namestring;            // 显示名称                                                                                                                                                                                  providerstring;        // 提供商,如 "anthropic"                                                                                                                                                                    contextWindow?: number;  // 上下文窗口大小                                                                                                                                                                            reasoning?: boolean;    // 是否支持推理                                                                                                                                                                               input?: ("text" | "image" | "document")[];  // 支持的输入类型                                                                                                                                                       };   
二.为什么不自动选择大模型?

首先从OpenClaw的设计哲学出发,他的设计哲学有四点:

1.本地优先(Local-First),用户的数据留在本地,不依赖云服务

2.用户控制(User Control),每个决策都应该用户有意识的选择

3.透明可预测(Transparent & Predictable),行为应该可预测,不应该隐藏“魔法”

4.成本感知(Cost Aware),用户应该知道用什么模型、花多少钱

如果进行大模型自动选择,会出现这些问题:

1.不可预测性,用户不知道这次会用到什么模型

2.难以调试,当结果不好时,不知道是不是模型选择的问题

3.复杂度定义模糊,"复杂" vs "简单" 没有明确边界

4.错误成本高,用错模型的代价比用对大模型更高

5.上下文依赖,复杂度往往在对话过程中才显现

如果要实现有几种方法,一是基于启发式的规则,就是在代码里面写关键词检测,二是基于小模型的预分类,先用一个小模型进行任务预分类,将不同任务路由到不同大模型,三是基于历史反馈的强化,记录每次任务结果和模型选择,用户反馈的满意结果,再通过强化学习进行优化。

但这三种方法目前我来看都不可靠,且实现成本巨大。

OpenClaw目前做法无疑是认为,让机器做选择,比让机器自猜更高,这说明了大模型猜测任务复杂的不可靠性,引入复杂机器学习路由,将带来更多的不确定性和不可预测性。

让用户决定用哪个模型,比让机器猜更可靠——猜错的代价远高于多花点钱。
因此OpenClaw最好的方法就是一上来就选择一个性能最强的主模型。这是最好,也是最经济的方法。