如何在会话中途切换模型
Anthropic 的模型配置指南将 /model 列为在会话期间更改模型的方法:运行 /model <alias|name> 立即切换,或运行不带参数的 /model 打开选择器。还有一个快捷键。Anthropic 的键盘参考列出,在 macOS 上使用 Option+P,或在 Windows 和 Linux 上使用 Alt+P,可以在不清除提示词的情况下切换模型。
仅限本次会话,还是所有会话
这是一个让人感到意外的细节。Anthropic 表示:“/model 会通过写入用户设置中的 model 字段,将你的选择保存为新会话的默认设置。”为了完成一个任务而选择模型,可能会改变你下一个会话的起始模型。
若要仅对当前会话进行更改,请使用选择器。Anthropic 表示:“要仅为本次会话切换,请使用 /model 打开选择器,并在模型所在行按 s。”输入带有名称的 /model 的行为类似于在选择器中按回车键,这会保存默认设置。
启动选项的工作方式不同。Anthropic 指出:“--model 标志和 ANTHROPIC_MODEL 环境变量仅适用于你启动的那个会话。”
切换时哪些内容会结转
对话内容
你的消息、Claude 的回复、Claude 读取的文件以及命令输出都会保留在会话中。新模型会接收到相同的对话。Anthropic 的提示词缓存指南确认内容不会改变:切换意味着下一次请求将读取整个对话历史记录,“即使内容完全相同”。
你的记忆文件
CLAUDE.md、规则和自动记忆(auto memory)是会话上下文的一部分,不与特定模型绑定。它们对新模型的作用与对旧模型的作用相同。
继承模型的子代理
切换的影响范围比主对话更广。Anthropic 表示:“如果你使用 /model 切换模型,该切换也会影响继承主对话模型的子代理”。拥有自己 model 设置的子代理将保持原样。关于为什么 Claude Code 子代理不共享记忆的指南涵盖了这些子代理启动时的状态。
取决于新模型的内容
对话是相同的,但读取对话的模型不同,其上下文窗口(context window)也不同。Anthropic 列出 Fable 模型、Sonnet 5 及更高版本、Haiku 5.5 以及 Opus 4.7 及更高版本默认以 1M 窗口运行,而没有扩展上下文的 Sonnet 4.6 和 Opus 4.6 在 200K 边界处进行压缩。适合一个模型窗口的长对话在另一个模型上可能需要压缩。Anthropic 的回退文档在一种情况下阐述了这一原则:Claude Code “不会回退到上下文窗口比主模型小的模型,因为在那里进行总结会先切断部分对话”。
还有一种情况需要注意。如果你切换到 Claude Code 无法识别的模型 ID(例如网关别名),它无法判断模型的窗口大小,会假设为 200K token。Claude Code v2.1.316 为此添加了警告:其更新日志称修复了 /model 使用“该版本无法识别的 ID 时不发出警告,且自动压缩将假设 200K 上下文窗口”的问题。
哪些内容会被重新读取
切换不会丢失对话,但会改变下一轮对话的成本。
Claude Code 会缓存对话,这样每一轮对话就不用支付处理所有内容的全部费用。该缓存属于特定模型。Anthropic 的提示词缓存指南指出:“每个模型都有自己的缓存。使用 /model 切换意味着下一次请求将读取整个对话历史记录,且没有缓存命中,即使内容完全相同。”
在短会话中,这影响很小。在长会话中,新模型的第一轮对话会从头开始处理所有内容,这可能会更慢并消耗更多额度。关于恢复警告的指南涵盖了当你回到旧会话时产生的相同影响。
Claude Code 何时会先询问
当切换会导致丢弃热缓存(warm cache)时,Claude Code 会向你确认。Anthropic 表示:“当你在终端运行 /model 时,仅当缓存仍处于热状态且新模型不是生成上一次响应的模型时,Claude Code 才会要求你确认切换。”
缓存将在最后一次请求或响应后的一个缓存生命周期内保持热状态。在那之后,就没有热缓存可以丢失了。“一旦时间超过,缓存就已过期,因此 Claude Code 会直接切换而不询问。”
更改努力程度(effort level)的工作方式相同。Anthropic 表示:“在大多数模型上,在会话中途更改努力程度意味着下一次请求将读取整个对话历史记录,且没有缓存命中。”
切换不会重置使用限制
如果你是因为达到限制而切换,请检查是哪种限制。Anthropic 的错误参考指出:“会话和每周限制在所有模型之间共享,因此切换模型不会恢复访问权限。”适用于单一模型系列的限制则不同;切换到该系列之外的模型可以让你继续工作。
当 Claude Code 自动切换时
并非所有的模型更改都始于 /model。Anthropic 的提示词缓存指南列出了几种情况,每种情况在相同意义上都是一种切换:由不同的模型读取对话。
opusplan
opusplan 设置是一种计划内的切换。Anthropic 将其描述为“在规划模式下使用 opus,然后切换到 sonnet 进行执行的特殊模式”。缓存指南补充道,“每次规划模式切换都是一次模型切换,并会启动新的缓存”。
指定模型的技能
技能(Skills)和命令可以在 frontmatter 中设置自己的模型。当其中一个指定了与会话不同的模型时,Anthropic 表示“那一轮对话也是一次模型切换”。它只持续一轮:“会话模型将在你的下一个提示词时恢复。”
自动模型回退
这种情况会在记录中留下通知。Fable 模型、Opus 5.5、Sonnet 5.5 和 Opus 5 运行时带有安全分类器,最常标记网络安全和生物学内容。对于某些被标记的请求,Claude Code 会在回退模型上重新运行请求。Anthropic 表示:“在你的主对话中,它会在记录中显示一条通知。”
与技能的模型不同,这种切换会持续下去。“回退之后,会话将在回退模型上继续。要返回原始模型,请运行 /model。”
回退可能会在你询问任何异常内容之前发生。Anthropic 解释说,它“可能会在会话的第一个请求时触发,在你发送任何异常内容之前,因为第一个请求携带了工作区上下文,例如你的 CLAUDE.md 内容和 git 状态。”你的记忆文件是分类器读取内容的一部分。
你可以选择被询问。运行 /config,找到消息被标记时切换模型的设置,选择“每次询问”(Ask each time),或将 switchModelsOnFlag 设置为 false。随后 Claude Code 会在标记请求处暂停,让你选择切换或编辑提示词并重试。关于 Fable 5.1 如何绑定思考块的指南涵盖了回退对模型早期推理的意义。
回退链
如果你为了可用性设置了回退模型,当主模型过载或不可用时可能会发生切换。这种切换很短。Anthropic 表示:“切换仅持续当前轮次,因此你的下一条消息将再次首先尝试主模型。”
查看每一次切换
模型切换有一个钩子(hook)。Anthropic 表示 PreModelSwitch “在 Claude Code 应用你或客户端请求的模型切换之前运行。使用它可以阻止切换、要求确认,或在切换发生前显示其成本”。
它涵盖你的切换,但不包括 Claude Code 自身的切换。“Claude Code 不会为它自己进行的切换运行 PreModelSwitch 钩子,例如自动模型回退或恢复会话时还原模型。”这些仅会触发 PostModelSwitch。
快速参考
- 带有名称的
/model: 立即切换并保存为默认设置。 /model选择器,然后按s: 仅为本次会话切换。- 启动时的
--model: 仅适用于该会话。 opusplan: 在规划和执行阶段之间切换。- 带有
model的技能: 切换一轮对话。 - 安全回退: 切换并保持,直到你切换回来。
- 可用性回退链: 仅为当前轮次切换。
在所有情况下,对话都会结转,而不同模型上的第一轮对话将在没有缓存的情况下读取它。
人们首先尝试的操作
为了完成一个任务而切换,然后纳闷为什么下一个会话从该模型开始。 带有名称的 /model 会保存你的默认设置。在选择器中使用 s 仅用于单个会话。
为了绕过使用限制而切换。 会话和每周限制在模型之间共享。
来回切换以比较答案。 每次切换都会在没有缓存的情况下重新读取整个对话。请改在分支(fork)或新会话中进行比较。
错过回退通知。 在安全回退之后,会话会停留在回退模型上。检查记录通知,如果需要请切换回来。
假设新模型以旧模型的方式看待会话。 它读取相同的对话,但拥有自己的上下文窗口以及对重要内容的独立判断。
解决方案:有目的地切换模型,并将决策保留在对话之外
第 1 步:决定切换是暂时的还是永久的
使用 /model 选择器并按 s 进行单次会话更改。仅当你打算更改默认设置时,才使用带有名称的 /model。如果你想批准自己进行的每一次切换,请添加 PreModelSwitch 钩子。
第 2 步:在自然中断处切换
在任务之间切换,而不是在任务中间切换,并预料到切换后的第一轮对话会耗时更长。如果会话很长,请考虑在切换前进行压缩或以简短总结重新开始,这样新模型读取的内容会更少。
第 3 步:将会话决策记录在每个模型都能读取的地方
长会话确定的决策不应依赖于对话在切换或压缩后的存续。将存储库规范放入 CLAUDE.md。如果你需要回退到较早的时间点,关于回溯 Claude Code 会话的指南解释了哪些编辑内容会恢复。
在 MemoryLake 中设置
模型切换会保留对话,但每个模型都会重新读取,且长对话最终会被压缩。对于超出单个会话或在其他工具中也重要的决策,需要一个不依赖于哪个模型正在读取或对话增长了多长的归宿。
MemoryLake 是一个记忆层,用于将这些决策保存在你维护的一个列表中,供 Claude Code 以及你连接的其他助手(如 ChatGPT 和 Codex)使用。
你用自己的语言亲自编写条目。不会从你的 Claude Code 会话、CLAUDE.md 文件、自动记忆或任何供应商的存储中读取、写入或删除任何内容。模型切换将继续按照 Anthropic 描述的方式工作。
第 1 步:创建 API 密钥
登录并从仪表板生成密钥。该密钥属于你的 MemoryLake 工作区,与你的 Claude 账户分开。

第 2 步:上传你的第一批记忆
从第 3 步中适用于单个存储库之外的决策开始:规范、约束及其背后的原因。每条记录一个要点,并注明日期。

第 3 步:连接你的 AI 和代理
连接 Claude Code 和你使用的其他助手。无论运行哪个模型,在下一个会话中以及在其他工具中,这些决策都是可用的。

这在实践中改变了什么
第一个区别是切换不再让你感到意外。你知道哪些切换持续一轮,哪些持续整个会话,哪些会更改你的默认设置。
第二个区别是减少了缓慢且昂贵的轮次。你在自然中断处切换并预料到重新读取,而不是在任务中途来回切换。
第三个区别是决策不再寄托于单个对话。当模型更改或会话压缩时,重要的内容已经记录下来。对于不应增加对话负担的简短问题,关于 /btw 的指南涵盖了侧边问题。
在 Claude Code 中切换模型的最佳实践
在选择器中按 s 进行一次性切换。 带有名称的 /model 会保存你的默认设置。
在任务之间切换。 切换后的第一轮对话会在没有缓存的情况下读取整个对话。
检查记录中的回退通知。 安全回退会使会话保持在新模型上。
如果回退对你很重要,请选择“每次询问”。 这样你可以决定是切换还是编辑提示词。
不要为了逃避共享限制而切换。 会话和每周限制适用于所有模型。
留意无法识别的模型 ID。 Claude Code 会为它们假设 200K 窗口。
将决策保留在对话之外。 存储库使用 CLAUDE.md,其余部分使用维护的列表。
如果切换引发了 1M 上下文错误,关于使用额度消息的指南解释了其含义以及对话在压缩时保留的内容。
结论
你可以使用 /model 在 Claude Code 会话中途切换模型,对话会结转:包括消息、文件读取、命令输出和记忆文件。每个模型都有自己的缓存,因此切换后的第一轮对话会重新读取整个对话,而且带有名称的 /model 还会将选择保存为默认设置,除非你在选择器中按 s。
Claude Code 也会自动切换:使用 opusplan 在规划和执行之间切换、当技能指定模型时切换一轮、在回退链中切换一轮,以及在安全回退后切换会话的剩余部分。了解其中的区别,在自然中断处切换,并将会话决策保存在不依赖于模型读取的地方。