Claude API 的模型切换,核心是把模型 ID 放到配置或请求参数里,而不是在业务代码中写死。这样同一套调用逻辑可以分别验证 Opus 和 Sonnet,后续升级模型时也只需要调整配置。
先把模型 ID 放进配置
复杂推理、架构分析和多文件重构可以使用claude-opus-4-1-20250805;日常编码、文档分析和批量任务可以先使用claude-sonnet-4-20250514。示例用环境变量保存模型名:
import os from openai import OpenAI client = OpenAI( api_key=os.environ["API_KEY"], base_url="https://api.highwayapi.ai/openai", ) model = os.getenv("CLAUDE_MODEL", "claude-sonnet-4-20250514") response = client.chat.completions.create( model=model, messages=[ {"role": "user", "content": "审查这份迁移方案,指出三个最高风险的假设"} ], ) print(response.choices[0].message.content)如果使用jiekou.vip 等兼容入口,只需按平台文档替换base_url和密钥,模型切换逻辑不变。不要把密钥直接写进代码或提交到仓库。
按任务选择模型
可以先用一个简单的函数把任务类型映射到模型:
MODELS = { "hard": "claude-opus-4-1-20250805", "normal": "claude-sonnet-4-20250514", } def choose_model(task_type: str) -> str: return MODELS["hard" if task_type == "hard" else "normal"]实际使用时,先按任务集测试正确性,再决定路由规则。建议至少准备四类输入:真实代码修复、长文档分析、工具调用和批量分类。记录成功率、响应延迟、输入输出 token、重试次数,以及每个成功任务的综合消耗。
处理失败和重试
模型切换不能代替错误处理。请求层至少要区分鉴权失败、参数错误、限流和临时网络故障。参数错误和鉴权失败应该直接暴露;限流和临时网络故障可以采用带上限的指数退避。
import time def call_with_retry(model, messages, attempts=3): for attempt in range(attempts): try: return client.chat.completions.create( model=model, messages=messages, ) except Exception: if attempt == attempts - 1: raise time.sleep(2 ** attempt)生产代码中应把异常类型和可重试条件写得更具体,不要对所有异常无限重试。
一套代码验证两个模型
先固定提示词、输入样本和输出约束,只改变CLAUDE_MODEL:
CLAUDE_MODEL=claude-sonnet-4-20250514 python evaluate.py CLAUDE_MODEL=claude-opus-4-1-20250805 python evaluate.py比较时不要只看单次回答。对每个模型使用同一批任务,记录正确率、失败类型和成功任务的综合消耗。简单任务如果 Sonnet 已经满足要求,就没有必要全部切换到 Opus;复杂任务则应优先保证结果质量。
小结
模型切换最好放在配置层,调用层只接收模型 ID。先用 Sonnet 作为默认模型跑通任务集,再把确实需要更强推理的任务路由到 Opus。模型 ID、请求地址和速率限制都可能变化,正式接入前应以当前平台文档为准。