---
title: "Claude Model Router：Hook、子代理与代理网关"
canonical: https://wavect.io/zh/blog/claude-model-router-hooks-vs-proxy/
language: zh
description: "Claude Model Router 没有切换模型？对比原生 /model、下一次会话 Hook、子代理路由和代理网关，掌握配置、缓存成本、实际模型与计费凭证的核查方法。"
image: "https://wavect.io/img/blog/headers/header_claude-model-router-hooks-vs-proxy.png"
---

[**返回**](/zh/blog/overview/)

[![Kevin Riedl](/img/team/kevin.webp)](/zh/team/kevin-riedl/)

[Kevin Riedl](/zh/team/kevin-riedl/) https://linkedin.com/in/wsdt

9 分钟 阅读 · 2026年10月7日 最近审核 2026年10月7日

[**下一篇**](/zh/blog/openai-decisions-api-model-routing/)

# Claude Model Router：到底何时切换模型？

要点速览

Claude Model Router 可能指不同的社区工具。tzachbon 的 Hook 提供模型建议，可选地设置下一次会话的默认值，并路由子代理。Musistudio 的 Claude Code Router 则把实际请求转发给配置好的服务商。Claude Code 本身也支持模型选择和子代理模型配置。应在你希望改变的位置核实实际模型，并在评估节省时计入缓存重建、分类调用和重试。

安装了 Claude 模型路由工具，日志推荐使用更便宜的模型，主对话却仍在使用原来的昂贵模型。这可能完全符合工具的设计。关键在于**路由器在哪个位置生效**：当前对话、下一次会话、被委派的子任务，还是发往 API 的请求。

两个名称相近的社区项目可以说明这个区别。 [tzachbon/claude-model-router-hook](https://github.com/tzachbon/claude-model-router-hook) 提供模型建议，并在子代理启动时调整模型选择；它可选的主会话自动切换功能只影响新会话。 [musistudio/claude-code-router](https://github.com/musistudio/claude-code-router) ，通常简称 CCR，则是本地网关，负责把请求转发给配置好的模型和服务商。仓库所有者也是项目身份的一部分：只搜索“Claude Model Router”，可能找到完全不同的软件。

**资料核查日期：2026 年 10 月 7 日。**本文比较文档中描述的行为，并给出评估流程。配置示例已与这些资料核对，但没有执行真实服务商基准测试，也不表示 Wavect 已为客户部署过这两个项目。

## Claude 模型路由器究竟切换什么？

**先问清楚：改变什么、何时改变、用什么证据确认。**路由建议、已保存的设置和实际模型响应，分别代表不同层次的证据。

| 生效位置 | 常见控制方式 | 需要检查的证据 |
| --- | --- | --- |
| 当前对话 | 原生 /model 选择 | 修改后实际激活的模型 |
| 下一次会话 | 保存的默认值，包括 Hook 可选的自动切换 | 重新启动新会话时选中的模型 |
| 委派任务 | 子代理模型配置或启动 Hook | 该子代理实际使用的模型 |
| 服务商请求 | 网关规则与上游配置 | 解析后的服务商、模型及响应中的用量 |

先选定你需要控制的位置。如果团队只是希望降低文件查找任务的成本，显式配置子代理模型可能已经足够。如果需要管理多个服务商、凭证和请求级备用模型，就涉及另一类基础设施需求。我们的 [LLM 网关与路由器对比](/zh/blog/llm-gateway-router-comparison-2026/) 讨论更广泛的选型和架构问题。

## Claude Code 不装插件也能切换模型吗？

**可以。**Anthropic 的 [模型配置文档](https://code.claude.com/docs/en/model-config) 介绍了启动参数、会话内选择和 `opusplan`。这个别名在规划模式中使用 Opus，在执行阶段使用 Sonnet。它按照工作阶段切换，并不是为每条提示词进行分类的通用路由器。

建立原生功能的基准时，可以这样启动会话：

```
claude --model sonnet
```

在交互式会话中，用 `/model opus` 选择 Opus，或用 `/model opusplan` 选择规划与执行的组合策略。模型可用性和组织设置仍然有效。模型别名适合快速试验；如果需要复现实验结果，应记录最终解析出的具体模型版本。

对于范围明确的委派任务，可以创建 `.claude/agents/repo-locator.md`。下面的示例遵循 Anthropic 的 [子代理配置文档](https://code.claude.com/docs/en/sub-agents) ，角色内容是我们的起步建议：

```
---
name: repo-locator
description: 针对范围明确的仓库问题查找文件和符号。
tools: Read, Glob, Grep
model: haiku
---
查找指定的文件或符号，返回路径和简短证据。
不要修改文件或推断修复方案。遇到歧义时交回主代理判断。
```

请 Claude 使用 `repo-locator` 完成一个具体查找任务，然后检查子代理实际使用的模型。单次调用中的模型参数可以覆盖 frontmatter 配置，组织限制也可能导致模型替换。配置描述的是预期行为，还不能证明实际执行完全一致。

## 为什么 Claude Model Router Hook 没有切换当前会话？

**该项目文档描述的主会话行为，是给出提醒或配置下一次会话。**项目的 [更新日志](https://github.com/tzachbon/claude-model-router-hook/blob/main/CHANGELOG.md) 说明，自动切换会写入新会话的默认模型。要修改当前对话，应使用原生 `/model`。

同一份日志记录了 2026 年 8 月对默认路由策略的更新：机械性任务使用 Haiku，实现、调试和更深入的推理使用 Opus，并采用不同的推理强度。旧教程如果声称常规实现任务会自动分配给 Sonnet，可能描述的是之前的策略。

在项目的 `.claude/model-router.json` 中放入一份简短配置，可以明确各项行为：

```
{
  "version": 2,
  "apply_mode": "warn",
  "subagent_enforcement": "on",
  "classifier": {
    "cli_fallback": false
  }
}
```

**这是我们用于评估的配置，并非项目的默认值。**它保留主会话提醒和子代理路由，同时关闭通过 Claude CLI 执行的可选分类回退。`apply_mode: warn` 不代表子代理路由也被关闭。 [项目 README](#source-hook) 分别介绍了这些开关，以及日志位置 `~/.claude/hooks/model-router-hook.log`。

还要把这个 Hook 与现有自动化一起检查。Anthropic 的 [Hook 参考文档](https://code.claude.com/docs/en/hooks) 说明了 `PreToolUse` 如何改写工具输入。命令型 Hook 也会使用你的用户账户权限执行。在增加另一个能修改代理启动参数的组件前，先审查已安装的命令和现有 Hook。

## 把 Claude Code Router 当作代理使用，会改变什么？

**改变的是请求路径。**CCR 接收模型请求，再按照配置进行转发。“本地网关”只说明这个组件运行在哪里；推理在哪里执行，取决于选择的上游服务商。如果上游是云服务商，它仍然会收到发送给其模型的内容。

当前的 [CCR CLI 指南](https://ccrdesk.top/en/guides/cli/) 把管理访问与模型调用访问分开：管理令牌和 CCR 客户端密钥是独立凭证。管理界面的访问权，以及调用模型的权限，应分别决定。

Anthropic 的 [网关文档](https://code.claude.com/docs/en/llm-gateway) 解释了计费与转发给上游的凭证之间的关系。仅设置 `ANTHROPIC_BASE_URL`，不会替换已经保存的订阅凭证。因此，安装路由器不会让其他服务商的推理费用自动包含在 Claude 订阅内。

验证时也不要只发送一句问候。 [官方网关兼容性指南](https://code.claude.com/docs/en/llm-gateway-protocol) 涵盖流式响应、能力标头、请求字段和缓存标记。转发错误可能造成请求失败，也可能让原本预期的功能失效。应执行一次完整的工具调用往返，并检查实际路由和用量，再决定是否采用某个服务商组合。

## 为什么更便宜的 Claude 模型，可能让整项任务更贵？

**切换模型可能把便宜的缓存读取变成一次新的缓存写入。**Anthropic 的 [API 成本优化 Cookbook](https://platform.claude.com/cookbook/cost-optimization-cost-optimization) 解释了缓存属于具体模型，以及子代理会从一个新前缀开始。保留对话文本，不等于把主模型的缓存也移交过去。

例如，一次很长的故障调查结束后，只剩一个简单的格式整理任务。把完整调查历史发送给更便宜的模型，可能比留在已有缓存的模型上整理结果更贵。另一个选项是只委派一段简短、可以独立理解的内容。应按照同样的验收结果比较这些方案，而不是默认选择单价最低的模型。

推理强度也需要同样谨慎。 [提示词缓存参考文档](https://platform.claude.com/docs/en/build-with-claude/prompt-caching) 区分了两种情况：请求顶层的 effort 变化会让已缓存的消息块失效；受支持的逐消息 effort 变化则可以保留之前的前缀。使用同一个模型，并不自动意味着仍能命中同一份缓存。

我们的评估原则是：把整项任务中的分类、生成、缓存写入、重试和人工修正都计入成本。优先在有意义的工作节点切换，只有测得的质量或总成本收益足够时，才增加新的切换。一个固定的节省百分比，无法说明你的实际任务组合是否受益。

## Claude 模型路由常见问题怎么排查？

| 现象 | 首先检查 |
| --- | --- |
| 推荐结果变了，主模型没变 | 确认 Hook 是只给提醒，还是配置下一次会话。当前会话应通过 /model 修改。 |
| 新会话仍然启动旧模型 | 检查启动参数、环境变量、项目设置和组织策略，它们可能优先于用户保存的默认值。 |
| 子代理使用了意料之外的模型 | 对比启动时的显式模型参数、frontmatter、组织限制和最终解析出的模型。 |
| 代理聊天正常，工具或流式响应却失败 | 用完整的工具调用往返，检查协议转发和模型能力。 |
| 模型单价降低，总账单却上升 | 比较缓存写入、额外尝试、分类器用量和重复上下文。 |

这些排查项依据上文的 [原生配置](#source-model-config) 、 [子代理](#source-subagents) 和 [网关接口约定](#source-gateway-protocol) 。先记录观察到的行为，再调整设置，避免一次修改多个变量。

## 团队应该如何评估自动模型路由？

1. **选定一种任务。** 把文件查找、范围明确的修改和原因不明的调试分开，并为每类任务定义验收方法。
2. **记录原生功能基准。** 固定仓库版本和任务指令，记录实际模型、完成时间和人工修正工作量。
3. **一次只改变一个位置。** 先比较显式子代理配置与 Hook 路由，再考虑把服务商切换加入同一实验。
4. **检查例外情况。** 在测试环境中覆盖显式模型覆盖、含糊请求、缓存已热的长会话，以及服务商故障。
5. **保留证据。** 保存路由理由、实际模型、用量和验收结果；更新客户端、插件或模型后，重新检查策略。

可以先从错误容易识别的一个流程开始。等路由版本达到质量目标，并改善总成本或完成时间后，再扩大使用范围。对于由应用管理的代理循环，我们的 [LiteAgents 路由指南](/zh/blog/liteagents-sdk-per-turn-model-routing/) 讨论 SDK 层的边界。 [OpenAI Decisions API 指南](/zh/blog/openai-decisions-api-model-routing/) 则介绍应用自行控制决策时，如何处理分类器输出和回退策略。

## Claude 模型路由常见问答

### Claude Model Router 是 Anthropic 的官方功能吗？

本文比较的 tzachbon/claude-model-router-hook 和 musistudio/claude-code-router 都是社区项目。Claude Code 另外提供原生模型选择、子代理配置及其他控制项。按照安装说明操作前，先核对仓库所有者。

### 不重启也能切换 Claude Code 的模型吗？

可以，原生 /model 会改变当前会话的模型选择。Hook 项目的可选自动切换则写入新会话的默认值。该项目对子代理的路由是另一套机制。

### warn 模式会关闭子代理路由吗？

不会。示例把 apply_mode 设为 warn，同时把 subagent_enforcement 设为 on。主会话收到建议，委派任务仍然可能被路由。应分别配置这两个开关。

### 模型路由一定能节省 token 吗？

不一定。选择更便宜的模型会改变 token 单价，却不一定减少所需 token 数量。分类、缓存重建、重试和额外评审可能抵消节省。应比较满足相同验收标准的完整任务。

### 使用本地 Claude 路由器，代码就不会离开电脑吗？

只有整个配置好的推理路径都在本地，才能这样判断。本地网关仍可把代码转发给云服务商。发送机密内容前，应检查上游服务商、分类调用、日志和回退目标。

模型与基础设施

## 继续浏览此集群

模型选择、推理经济性、本地部署、压缩与服务架构。

[从核心文章开始**在欧盟自托管 LLM：开放权重模型何时才真正划算**](/zh/blog/self-hosting-llms-eu-cost/)

- [OpenAI Decisions API：置信度、拒绝回答与任务路由](/zh/blog/openai-decisions-api-model-routing/)
- [Cloudflare Clef 与 Jev：价格、基准测试与迁移](/zh/blog/cloudflare-clef-vs-jev/)
- [Context Language Models 与上下文压缩：应该如何试点？](/zh/blog/context-language-models-vs-compaction/)
- [Caveman 3.0 与 Claude Code：本地输入压缩、原文恢复与基准](/zh/blog/caveman-3-claude-code-input-compression/)
- [LiteLLM Lens：用 SQL 与 API 分析智能体 Trace](/zh/blog/litellm-lens-agent-trace-analysis/)

[**返回**](/zh/blog/overview/)

[![Kevin Riedl](/img/team/kevin.webp)](/zh/team/kevin-riedl/)

[Kevin Riedl](/zh/team/kevin-riedl/) https://linkedin.com/in/wsdt

9 分钟 阅读 · 2026年10月7日 最近审核 2026年10月7日

[**下一篇**](/zh/blog/openai-decisions-api-model-routing/)

## Structured Data

```json
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@id": "https://wavect.io/#organization",
      "@type": [
        "Organization",
        "ProfessionalService",
        "LocalBusiness"
      ],
      "employee": [
        {
          "@id": "https://wavect.io/team/kevin-riedl/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Kevin Riedl",
          "url": "https://wavect.io/team/kevin-riedl/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        },
        {
          "@id": "https://wavect.io/team/christof-jori/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Christof Jori",
          "url": "https://wavect.io/team/christof-jori/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        }
      ],
      "founder": [
        {
          "@id": "https://wavect.io/team/kevin-riedl/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Kevin Riedl",
          "url": "https://wavect.io/team/kevin-riedl/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        },
        {
          "@id": "https://wavect.io/team/christof-jori/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Christof Jori",
          "url": "https://wavect.io/team/christof-jori/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        }
      ],
      "legalRepresentative": [
        {
          "@id": "https://wavect.io/team/kevin-riedl/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Kevin Riedl",
          "url": "https://wavect.io/team/kevin-riedl/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        },
        {
          "@id": "https://wavect.io/team/christof-jori/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Christof Jori",
          "url": "https://wavect.io/team/christof-jori/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        }
      ],
      "name": "Wavect GmbH",
      "subjectOf": {
        "@id": "https://wavect.io/verified-claims.json#dataset",
        "@type": "Dataset",
        "creator": {
          "@id": "https://wavect.io/#organization",
          "@type": [
            "Organization",
            "ProfessionalService",
            "LocalBusiness"
          ]
        },
        "description": "A machine-readable registry of quantitative and qualitative claims published by Wavect, with review dates, localized page appearances and public third-party citations where available.",
        "inLanguage": "en",
        "isAccessibleForFree": true,
        "license": "https://creativecommons.org/licenses/by/4.0/",
        "name": "Wavect verified publication claims",
        "url": "https://wavect.io/verified-claims.json"
      },
      "url": "https://wavect.io/"
    },
    {
      "@id": "https://wavect.io/team/kevin-riedl/#person",
      "@type": "Person",
      "jobTitle": "Managing Director",
      "name": "Kevin Riedl",
      "sameAs": [
        "https://www.wikidata.org/wiki/Q139796365",
        "https://www.linkedin.com/in/wsdt",
        "https://github.com/wsdt"
      ],
      "url": "https://wavect.io/team/kevin-riedl/",
      "worksFor": {
        "@id": "https://wavect.io/#organization",
        "@type": [
          "Organization",
          "ProfessionalService",
          "LocalBusiness"
        ]
      }
    },
    {
      "@id": "https://wavect.io/team/christof-jori/#person",
      "@type": "Person",
      "jobTitle": "Managing Director",
      "name": "Christof Jori",
      "sameAs": [
        "https://www.wikidata.org/wiki/Q139796367",
        "https://www.linkedin.com/in/jocr77/",
        "https://github.com/jo-chris"
      ],
      "url": "https://wavect.io/team/christof-jori/",
      "worksFor": {
        "@id": "https://wavect.io/#organization",
        "@type": [
          "Organization",
          "ProfessionalService",
          "LocalBusiness"
        ]
      }
    },
    {
      "@id": "https://wavect.io/#website",
      "@type": "WebSite",
      "inLanguage": [
        "en",
        "de",
        "es",
        "zh"
      ],
      "name": "Wavect",
      "potentialAction": {
        "@type": "SearchAction",
        "query-input": "required name=search_term_string",
        "target": {
          "@type": "EntryPoint",
          "urlTemplate": "https://wavect.io/search/?q={search_term_string}"
        }
      },
      "publisher": {
        "@id": "https://wavect.io/#organization",
        "@type": [
          "Organization",
          "ProfessionalService",
          "LocalBusiness"
        ]
      },
      "url": "https://wavect.io/"
    },
    {
      "@id": "https://wavect.io/zh/blog/claude-model-router-hooks-vs-proxy/#webpage",
      "@type": "WebPage",
      "dateModified": "2026-10-07",
      "inLanguage": "zh",
      "isPartOf": {
        "@id": "https://wavect.io/#website",
        "@type": "WebSite"
      },
      "lastReviewed": "2026-10-07",
      "url": "https://wavect.io/zh/blog/claude-model-router-hooks-vs-proxy/"
    }
  ]
}
```

```json
{
  "@context": "https://schema.org",
  "@type": "BlogPosting",
  "abstract": "Claude Model Router 可能指不同的社区工具。tzachbon 的 Hook 提供模型建议，可选地设置下一次会话的默认值，并路由子代理。Musistudio 的 Claude Code Router 则把实际请求转发给配置好的服务商。Claude Code 本身也支持模型选择和子代理模型配置。应在你希望改变的位置核实实际模型，并在评估节省时计入缓存重建、分类调用和重试。",
  "articleBody": " 博客概览/AI 与智能体/模型与基础设施 Claude Model Router：到底何时切换模型？ 要点速览 Claude Model Router 可能指不同的社区工具。tzachbon 的 Hook 提供模型建议，可选地设置下一次会话的默认值，并路由子代理。Musistudio 的 Claude Code Router 则把实际请求转发给配置好的服务商。Claude Code 本身也支持模型选择和子代理模型配置。应在你希望改变的位置核实实际模型，并在评估节省时计入缓存重建、分类调用和重试。 安装了 Claude 模型路由工具，日志推荐使用更便宜的模型，主对话却仍在使用原来的昂贵模型。这可能完全符合工具的设计。关键在于路由器在哪个位置生效：当前对话、下一次会话、被委派的子任务，还是发往 API 的请求。 两个名称相近的社区项目可以说明这个区别。tzachbon/claude-model-router-hook 提供模型建议，并在子代理启动时调整模型选择；它可选的主会话自动切换功能只影响新会话。musistudio/claude-code-router，通常简称 CCR，则是本地网关，负责把请求转发给配置好的模型和服务商。仓库所有者也是项目身份的一部分：只搜索“Claude Model Router”，可能找到完全不同的软件。 资料核查日期：2026 年 10 月 7 日。本文比较文档中描述的行为，并给出评估流程。配置示例已与这些资料核对，但没有执行真实服务商基准测试，也不表示 Wavect 已为客户部署过这两个项目。 Claude 模型路由器究竟切换什么？ 先问清楚：改变什么、何时改变、用什么证据确认。路由建议、已保存的设置和实际模型响应，分别代表不同层次的证据。 Claude Code 中四个不同的模型路由位置 生效位置常见控制方式需要检查的证据 当前对话原生 /model 选择修改后实际激活的模型 下一次会话保存的默认值，包括 Hook 可选的自动切换重新启动新会话时选中的模型 委派任务子代理模型配置或启动 Hook该子代理实际使用的模型 服务商请求网关规则与上游配置解析后的服务商、模型及响应中的用量 先选定你需要控制的位置。如果团队只是希望降低文件查找任务的成本，显式配置子代理模型可能已经足够。如果需要管理多个服务商、凭证和请求级备用模型，就涉及另一类基础设施需求。我们的 LLM 网关与路由器对比讨论更广泛的选型和架构问题。 Claude Code 不装插件也能切换模型吗？ 可以。Anthropic 的模型配置文档介绍了启动参数、会话内选择和 opusplan。这个别名在规划模式中使用 Opus，在执行阶段使用 Sonnet。它按照工作阶段切换，并不是为每条提示词进行分类的通用路由器。 建立原生功能的基准时，可以这样启动会话： claude --model sonnet 在交互式会话中，用 /model opus 选择 Opus，或用 /model opusplan 选择规划与执行的组合策略。模型可用性和组织设置仍然有效。模型别名适合快速试验；如果需要复现实验结果，应记录最终解析出的具体模型版本。 对于范围明确的委派任务，可以创建 .claude/agents/repo-locator.md。下面的示例遵循 Anthropic 的子代理配置文档，角色内容是我们的起步建议： --- name: repo-locator description: 针对范围明确的仓库问题查找文件和符号。 tools: Read, Glob, Grep model: haiku --- 查找指定的文件或符号，返回路径和简短证据。 不要修改文件或推断修复方案。遇到歧义时交回主代理判断。 请 Claude 使用 repo-locator 完成一个具体查找任务，然后检查子代理实际使用的模型。单次调用中的模型参数可以覆盖 frontmatter 配置，组织限制也可能导致模型替换。配置描述的是预期行为，还不能证明实际执行完全一致。 为什么 Claude Model Router Hook 没有切换当前会话？ 该项目文档描述的主会话行为，是给出提醒或配置下一次会话。项目的更新日志说明，自动切换会写入新会话的默认模型。要修改当前对话，应使用原生 /model。 同一份日志记录了 2026 年 8 月对默认路由策略的更新：机械性任务使用 Haiku，实现、调试和更深入的推理使用 Opus，并采用不同的推理强度。旧教程如果声称常规实现任务会自动分配给 Sonnet，可能描述的是之前的策略。 在项目的 .claude/model-router.json 中放入一份简短配置，可以明确各项行为： { \"version\": 2, \"apply_mode\": \"warn\", \"subagent_enforcement\": \"on\", \"classifier\": { \"cli_fallback\": false } } 这是我们用于评估的配置，并非项目的默认值。它保留主会话提醒和子代理路由，同时关闭通过 Claude CLI 执行的可选分类回退。apply_mode: warn 不代表子代理路由也被关闭。项目 README分别介绍了这些开关，以及日志位置 ~/.claude/hooks/model-router-hook.log。 还要把这个 Hook 与现有自动化一起检查。Anthropic 的 Hook 参考文档说明了 PreToolUse 如何改写工具输入。命令型 Hook 也会使用你的用户账户权限执行。在增加另一个能修改代理启动参数的组件前，先审查已安装的命令和现有 Hook。 把 Claude Code Router 当作代理使用，会改变什么？ 改变的是请求路径。CCR 接收模型请求，再按照配置进行转发。“本地网关”只说明这个组件运行在哪里；推理在哪里执行，取决于选择的上游服务商。如果上游是云服务商，它仍然会收到发送给其模型的内容。 当前的 CCR CLI 指南把管理访问与模型调用访问分开：管理令牌和 CCR 客户端密钥是独立凭证。管理界面的访问权，以及调用模型的权限，应分别决定。 Anthropic 的网关文档解释了计费与转发给上游的凭证之间的关系。仅设置 ANTHROPIC_BASE_URL，不会替换已经保存的订阅凭证。因此，安装路由器不会让其他服务商的推理费用自动包含在 Claude 订阅内。 验证时也不要只发送一句问候。官方网关兼容性指南涵盖流式响应、能力标头、请求字段和缓存标记。转发错误可能造成请求失败，也可能让原本预期的功能失效。应执行一次完整的工具调用往返，并检查实际路由和用量，再决定是否采用某个服务商组合。 为什么更便宜的 Claude 模型，可能让整项任务更贵？ 切换模型可能把便宜的缓存读取变成一次新的缓存写入。Anthropic 的 API 成本优化 Cookbook解释了缓存属于具体模型，以及子代理会从一个新前缀开始。保留对话文本，不等于把主模型的缓存也移交过去。 例如，一次很长的故障调查结束后，只剩一个简单的格式整理任务。把完整调查历史发送给更便宜的模型，可能比留在已有缓存的模型上整理结果更贵。另一个选项是只委派一段简短、可以独立理解的内容。应按照同样的验收结果比较这些方案，而不是默认选择单价最低的模型。 推理强度也需要同样谨慎。提示词缓存参考文档区分了两种情况：请求顶层的 effort 变化会让已缓存的消息块失效；受支持的逐消息 effort 变化则可以保留之前的前缀。使用同一个模型，并不自动意味着仍能命中同一份缓存。 我们的评估原则是：把整项任务中的分类、生成、缓存写入、重试和人工修正都计入成本。优先在有意义的工作节点切换，只有测得的质量或总成本收益足够时，才增加新的切换。一个固定的节省百分比，无法说明你的实际任务组合是否受益。 Claude 模型路由常见问题怎么排查？ 常见现象及下一步应检查的证据 现象首先检查 推荐结果变了，主模型没变确认 Hook 是只给提醒，还是配置下一次会话。当前会话应通过 /model 修改。 新会话仍然启动旧模型检查启动参数、环境变量、项目设置和组织策略，它们可能优先于用户保存的默认值。 子代理使用了意料之外的模型对比启动时的显式模型参数、frontmatter、组织限制和最终解析出的模型。 代理聊天正常，工具或流式响应却失败用完整的工具调用往返，检查协议转发和模型能力。 模型单价降低，总账单却上升比较缓存写入、额外尝试、分类器用量和重复上下文。 这些排查项依据上文的原生配置、子代理和网关接口约定。先记录观察到的行为，再调整设置，避免一次修改多个变量。 团队应该如何评估自动模型路由？ 选定一种任务。把文件查找、范围明确的修改和原因不明的调试分开，并为每类任务定义验收方法。 记录原生功能基准。固定仓库版本和任务指令，记录实际模型、完成时间和人工修正工作量。 一次只改变一个位置。先比较显式子代理配置与 Hook 路由，再考虑把服务商切换加入同一实验。 检查例外情况。在测试环境中覆盖显式模型覆盖、含糊请求、缓存已热的长会话，以及服务商故障。 保留证据。保存路由理由、实际模型、用量和验收结果；更新客户端、插件或模型后，重新检查策略。 可以先从错误容易识别的一个流程开始。等路由版本达到质量目标，并改善总成本或完成时间后，再扩大使用范围。对于由应用管理的代理循环，我们的 LiteAgents 路由指南讨论 SDK 层的边界。OpenAI Decisions API 指南则介绍应用自行控制决策时，如何处理分类器输出和回退策略。 Claude 模型路由常见问答 Claude Model Router 是 Anthropic 的官方功能吗？ 本文比较的 tzachbon/claude-model-router-hook 和 musistudio/claude-code-router 都是社区项目。Claude Code 另外提供原生模型选择、子代理配置及其他控制项。按照安装说明操作前，先核对仓库所有者。 不重启也能切换 Claude Code 的模型吗？ 可以，原生 /model 会改变当前会话的模型选择。Hook 项目的可选自动切换则写入新会话的默认值。该项目对子代理的路由是另一套机制。 warn 模式会关闭子代理路由吗？ 不会。示例把 apply_mode 设为 warn，同时把 subagent_enforcement 设为 on。主会话收到建议，委派任务仍然可能被路由。应分别配置这两个开关。 模型路由一定能节省 token 吗？ 不一定。选择更便宜的模型会改变 token 单价，却不一定减少所需 token 数量。分类、缓存重建、重试和额外评审可能抵消节省。应比较满足相同验收标准的完整任务。 使用本地 Claude 路由器，代码就不会离开电脑吗？ 只有整个配置好的推理路径都在本地，才能这样判断。本地网关仍可把代码转发给云服务商。发送机密内容前，应检查上游服务商、分类调用、日志和回退目标。 模型与基础设施 继续浏览此集群 模型选择、推理经济性、本地部署、压缩与服务架构。 从核心文章开始在欧盟自托管 LLM：开放权重模型何时才真正划算 OpenAI Decisions API：置信度、拒绝回答与任务路由 Cloudflare Clef 与 Jev：价格、基准测试与迁移 Context Language Models 与上下文压缩：应该如何试点？ Caveman 3.0 与 Claude Code：本地输入压缩、原文恢复与基准 LiteLLM Lens：用 SQL 与 API 分析智能体 Trace 集群中的上一篇OpenAI Decisions API：置信度、拒绝回答与任务路由集群中的下一篇Cloudflare Clef 与 Jev：价格、基准测试与迁移 查看相关服务： AI 咨询 看看生产环境中的应用: Twinsoft AI 先做决定: 如何为 MVP 选择技术栈 只收重要内容 关注与你相关的",
  "articleSection": "模型路由",
  "author": {
    "@id": "https://wavect.io/team/kevin-riedl/#person",
    "@type": "Person",
    "name": "Kevin Riedl",
    "sameAs": [
      "https://www.wikidata.org/wiki/Q139796365",
      "https://www.linkedin.com/in/wsdt",
      "https://github.com/wsdt"
    ],
    "url": "https://wavect.io/team/kevin-riedl/"
  },
  "citation": [
    {
      "@type": "WebPage",
      "name": "tzachbon/claude-model-router-hook",
      "url": "https://github.com/tzachbon/claude-model-router-hook"
    },
    {
      "@type": "WebPage",
      "name": "musistudio/claude-code-router",
      "url": "https://github.com/musistudio/claude-code-router"
    },
    {
      "@type": "WebPage",
      "name": "模型配置文档",
      "url": "https://code.claude.com/docs/en/model-config"
    },
    {
      "@type": "WebPage",
      "name": "子代理配置文档",
      "url": "https://code.claude.com/docs/en/sub-agents"
    },
    {
      "@type": "WebPage",
      "name": "更新日志",
      "url": "https://github.com/tzachbon/claude-model-router-hook/blob/main/CHANGELOG.md"
    },
    {
      "@type": "WebPage",
      "name": "Hook 参考文档",
      "url": "https://code.claude.com/docs/en/hooks"
    },
    {
      "@type": "WebPage",
      "name": "CCR CLI 指南",
      "url": "https://ccrdesk.top/en/guides/cli/"
    },
    {
      "@type": "WebPage",
      "name": "网关文档",
      "url": "https://code.claude.com/docs/en/llm-gateway"
    },
    {
      "@type": "WebPage",
      "name": "官方网关兼容性指南",
      "url": "https://code.claude.com/docs/en/llm-gateway-protocol"
    },
    {
      "@type": "WebPage",
      "name": "API 成本优化 Cookbook",
      "url": "https://platform.claude.com/cookbook/cost-optimization-cost-optimization"
    },
    {
      "@type": "WebPage",
      "name": "提示词缓存参考文档",
      "url": "https://platform.claude.com/docs/en/build-with-claude/prompt-caching"
    }
  ],
  "dateModified": "2026-10-07",
  "datePublished": "2026-10-07",
  "description": "Claude Model Router 可能指不同的社区工具。tzachbon 的 Hook 提供模型建议，可选地设置下一次会话的默认值，并路由子代理。Musistudio 的 Claude Code Router 则把实际请求转发给配置好的服务商。Claude Code 本身也支持模型选择和子代理模型配置。应在你希望改变的位置核实实际模型，并在评估节省时计入缓存重建、分类调用和重试。",
  "headline": "Claude Model Router：到底何时切换模型？",
  "image": "https://wavect.io/img/blog/headers/header_claude-model-router-hooks-vs-proxy.svg",
  "inLanguage": "zh",
  "keywords": "Claude Code, 模型路由, AI 工程",
  "mainEntityOfPage": {
    "@id": "https://wavect.io/zh/blog/claude-model-router-hooks-vs-proxy/",
    "@type": "WebPage"
  },
  "publisher": {
    "@id": "https://wavect.io/#organization",
    "@type": [
      "Organization",
      "ProfessionalService",
      "LocalBusiness"
    ]
  },
  "url": "https://wavect.io/zh/blog/claude-model-router-hooks-vs-proxy/",
  "wordCount": 334
}
```

```json
{
  "@context": "https://schema.org",
  "@type": "BreadcrumbList",
  "itemListElement": [
    {
      "@type": "ListItem",
      "item": "https://wavect.io/zh/",
      "name": "首页",
      "position": 1
    },
    {
      "@type": "ListItem",
      "item": "https://wavect.io/zh/blog/overview/",
      "name": "博客概览",
      "position": 2
    },
    {
      "@type": "ListItem",
      "item": "https://wavect.io/zh/blog/topics/ai-agents/",
      "name": "AI 与智能体",
      "position": 3
    },
    {
      "@type": "ListItem",
      "item": "https://wavect.io/zh/blog/clusters/models-infrastructure/",
      "name": "模型与基础设施",
      "position": 4
    },
    {
      "@type": "ListItem",
      "item": "https://wavect.io/zh/blog/claude-model-router-hooks-vs-proxy/",
      "name": "Claude Model Router：Hook、子代理与代理网关",
      "position": 5
    }
  ]
}
```

```json
{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "本文比较的 tzachbon/claude-model-router-hook 和 musistudio/claude-code-router 都是社区项目。Claude Code 另外提供原生模型选择、子代理配置及其他控制项。按照安装说明操作前，先核对仓库所有者。"
      },
      "name": "Claude Model Router 是 Anthropic 的官方功能吗？"
    },
    {
      "@type": "Question",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "可以，原生 /model 会改变当前会话的模型选择。Hook 项目的可选自动切换则写入新会话的默认值。该项目对子代理的路由是另一套机制。"
      },
      "name": "不重启也能切换 Claude Code 的模型吗？"
    },
    {
      "@type": "Question",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "不会。示例把 apply_mode 设为 warn，同时把 subagent_enforcement 设为 on。主会话收到建议，委派任务仍然可能被路由。应分别配置这两个开关。"
      },
      "name": "warn 模式会关闭子代理路由吗？"
    },
    {
      "@type": "Question",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "不一定。选择更便宜的模型会改变 token 单价，却不一定减少所需 token 数量。分类、缓存重建、重试和额外评审可能抵消节省。应比较满足相同验收标准的完整任务。"
      },
      "name": "模型路由一定能节省 token 吗？"
    },
    {
      "@type": "Question",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "只有整个配置好的推理路径都在本地，才能这样判断。本地网关仍可把代码转发给云服务商。发送机密内容前，应检查上游服务商、分类调用、日志和回退目标。"
      },
      "name": "使用本地 Claude 路由器，代码就不会离开电脑吗？"
    }
  ]
}
```
