[{"data":1,"prerenderedAt":2341},["ShallowReactive",2],{"blog-claude-code-custom-model-guide":3},{"id":4,"title":5,"body":6,"category":2328,"date":2329,"description":16,"extension":2330,"meta":2331,"navigation":688,"path":2332,"seo":2333,"series":2334,"seriesOrder":208,"stem":2335,"tags":2336,"__hash__":2340},"blog\u002Fblog\u002Fclaude-code-custom-model-guide.md","Claude Code 自定义模型接入指南：环境变量、网关与切换工具",{"type":7,"value":8,"toc":2306},"minimark",[9,13,17,28,31,37,45,50,53,118,129,132,135,144,148,151,213,216,249,256,297,314,317,325,328,345,349,352,645,648,736,739,751,756,760,763,768,800,803,845,851,855,899,902,944,948,992,995,1036,1055,1063,1067,1070,1076,1079,1104,1107,1123,1126,1129,1168,1173,1177,1180,1183,1234,1241,1490,1493,1532,1535,1542,1548,1551,1556,1560,1563,1646,1649,1680,1683,1724,1727,1732,1739,1745,1751,1754,1781,1784,1895,1902,1932,1935,1938,1952,1960,1964,1967,1970,1991,1997,2000,2003,2042,2049,2053,2056,2089,2092,2097,2101,2104,2222,2225,2231,2234,2239,2242,2245,2274,2281,2284,2290,2296,2302],[10,11,5],"h1",{"id":12},"claude-code-自定义模型接入指南环境变量网关与切换工具",[14,15,16],"p",{},"前阵子听到一个很典型的故事：朋友本地已经装好了 Claude Code CLI，公司也提供了可用的模型服务，但他不知道怎么把公司模型接进 CC。最后为了走完初始化和登录流程，硬是买了一个 Claude Pro。",[14,18,19,20,27],{},"这里顺带说一下，国内购买 Claude Code 还蛮麻烦的，推荐一个非常好用的代充平台 ",[21,22,26],"a",{"href":23,"rel":24},"https:\u002F\u002Fbewild.ai?code=BYZDOTME",[25],"nofollow","BeWild","，我的海外 AI 服务全都是在这个平台代充的。",[14,29,30],{},"这件事有点荒诞，但并不罕见。Claude Code（后面简称 CC）默认体验确实围绕 Anthropic 自家账号和 Claude 模型展开；而国内很多团队的现实是：直连 Claude 不稳定，或者公司已经统一采购了模型网关、DeepSeek、OpenRouter、硅基流动、火山、Ollama、私有化模型。于是问题就变成：",[14,32,33],{},[34,35,36],"strong",{},"CC 能不能继续用？能。关键是分清三件事：认证给谁、请求发到哪、模型名怎么映射。",[14,38,39,40,44],{},"这篇把 CC 接入自定义模型的几种方案拆清楚，重点梳理环境变量的作用，再讲 Claude Code Router、Claude Code Proxy、",[41,42,43],"code",{},"cc-switch"," 这类工具到底在帮你省什么事。",[46,47,49],"h2",{"id":48},"_1-先分清代理网关模型不是一回事","1. 先分清：代理、网关、模型不是一回事",[14,51,52],{},"很多配置失败，根源是把三个层次混在一起：",[54,55,56,72],"table",{},[57,58,59],"thead",{},[60,61,62,66,69],"tr",{},[63,64,65],"th",{},"层次",[63,67,68],{},"解决什么问题",[63,70,71],{},"典型配置",[73,74,75,93,107],"tbody",{},[60,76,77,81,84],{},[78,79,80],"td",{},"网络代理",[78,82,83],{},"让请求能出网",[78,85,86,89,90],{},[41,87,88],{},"HTTP_PROXY","、",[41,91,92],{},"HTTPS_PROXY",[60,94,95,98,101],{},[78,96,97],{},"LLM Gateway",[78,99,100],{},"统一鉴权、审计、限流、路由",[78,102,103,106],{},[41,104,105],{},"ANTHROPIC_BASE_URL","、各云厂商 base URL",[60,108,109,112,115],{},[78,110,111],{},"模型路由\u002F协议适配",[78,113,114],{},"把 CC 请求转成别的模型能懂的格式",[78,116,117],{},"Claude Code Router、Claude Code Proxy",[14,119,120,121,124,125,128],{},"网络代理只是“帮你走到目标服务器”。它不会把 Anthropic Messages 协议变成 OpenAI Chat Completions，也不会把 ",[41,122,123],{},"claude-sonnet-4-6"," 自动变成 ",[41,126,127],{},"deepseek-chat","。",[14,130,131],{},"LLM Gateway 是“公司统一入口”。它通常仍然提供 Anthropic Messages、Bedrock、Vertex 这类 CC 能理解的 API 形态，只是把鉴权、审计、模型路由放到网关层。",[14,133,134],{},"协议适配工具则更像“翻译官”。当你的模型服务只支持 OpenAI-compatible API，而 CC 发的是 Anthropic 风格请求时，中间必须有人翻译请求、响应、流式输出、工具调用、模型名。",[14,136,137,140,141,143],{},[34,138,139],{},"小结："," 先判断你手里的服务是哪一类。能提供 Anthropic Messages API 的，优先走 ",[41,142,105],{},"；只有 OpenAI-compatible API 的，需要 Router\u002FProxy 这类适配层。",[46,145,147],{"id":146},"_2-最小可用直连-anthropic-compatible-网关","2. 最小可用：直连 Anthropic-compatible 网关",[14,149,150],{},"如果公司已经提供了兼容 Anthropic Messages 的网关，最小配置通常只有三行：",[152,153,158],"pre",{"className":154,"code":155,"language":156,"meta":157,"style":157},"language-bash shiki shiki-themes github-dark","export ANTHROPIC_BASE_URL=\"https:\u002F\u002Fllm-gateway.example.com\"\nexport ANTHROPIC_API_KEY=\"your-gateway-key\"\nexport ANTHROPIC_MODEL=\"claude-sonnet-4-6\"\nclaude\n","bash","",[41,159,160,180,193,206],{"__ignoreMap":157},[161,162,165,169,173,176],"span",{"class":163,"line":164},"line",1,[161,166,168],{"class":167},"snl16","export",[161,170,172],{"class":171},"s95oV"," ANTHROPIC_BASE_URL",[161,174,175],{"class":167},"=",[161,177,179],{"class":178},"sU2Wk","\"https:\u002F\u002Fllm-gateway.example.com\"\n",[161,181,183,185,188,190],{"class":163,"line":182},2,[161,184,168],{"class":167},[161,186,187],{"class":171}," ANTHROPIC_API_KEY",[161,189,175],{"class":167},[161,191,192],{"class":178},"\"your-gateway-key\"\n",[161,194,196,198,201,203],{"class":163,"line":195},3,[161,197,168],{"class":167},[161,199,200],{"class":171}," ANTHROPIC_MODEL",[161,202,175],{"class":167},[161,204,205],{"class":178},"\"claude-sonnet-4-6\"\n",[161,207,209],{"class":163,"line":208},4,[161,210,212],{"class":211},"svObZ","claude\n",[14,214,215],{},"这里的关键点：",[217,218,219,225,235],"ul",{},[220,221,222,224],"li",{},[41,223,105],{},"：把 CC 的模型请求发到自定义 API endpoint，而不是默认的 Anthropic endpoint。",[220,226,227,230,231,234],{},[41,228,229],{},"ANTHROPIC_API_KEY","：作为 ",[41,232,233],{},"X-Api-Key"," 发送。官方文档明确说，设置它后会优先使用 API key，而不是你已登录的 Pro\u002FMax\u002FTeam\u002FEnterprise 订阅。",[220,236,237,240,241,244,245,248],{},[41,238,239],{},"ANTHROPIC_MODEL","：指定默认模型。",[41,242,243],{},"--model"," 和 CC 内部的 ",[41,246,247],{},"\u002Fmodel"," 会覆盖它。",[14,250,251,252,255],{},"如果网关用 Bearer token，而不是 ",[41,253,254],{},"x-api-key","，则用：",[152,257,259],{"className":154,"code":258,"language":156,"meta":157,"style":157},"export ANTHROPIC_BASE_URL=\"https:\u002F\u002Fllm-gateway.example.com\"\nexport ANTHROPIC_AUTH_TOKEN=\"your-gateway-token\"\nexport ANTHROPIC_MODEL=\"claude-sonnet-4-6\"\nclaude\n",[41,260,261,271,283,293],{"__ignoreMap":157},[161,262,263,265,267,269],{"class":163,"line":164},[161,264,168],{"class":167},[161,266,172],{"class":171},[161,268,175],{"class":167},[161,270,179],{"class":178},[161,272,273,275,278,280],{"class":163,"line":182},[161,274,168],{"class":167},[161,276,277],{"class":171}," ANTHROPIC_AUTH_TOKEN",[161,279,175],{"class":167},[161,281,282],{"class":178},"\"your-gateway-token\"\n",[161,284,285,287,289,291],{"class":163,"line":195},[161,286,168],{"class":167},[161,288,200],{"class":171},[161,290,175],{"class":167},[161,292,205],{"class":178},[161,294,295],{"class":163,"line":208},[161,296,212],{"class":211},[14,298,299,302,303,306,307,310,311,128],{},[41,300,301],{},"ANTHROPIC_AUTH_TOKEN"," 会变成 ",[41,304,305],{},"Authorization: Bearer \u003Ctoken>","。不要自己把 ",[41,308,309],{},"Bearer "," 写进去，否则很容易变成 ",[41,312,313],{},"Bearer Bearer xxx",[14,315,316],{},"有些网关会把 Claude 模型名映射到内部模型，比如：",[152,318,323],{"className":319,"code":321,"language":322,"meta":157},[320],"language-text","claude-opus-4-6   -> company-coding-large\nclaude-sonnet-4-6 -> company-coding-balanced\nclaude-haiku-4-5  -> company-coding-fast\n","text",[41,324,321],{"__ignoreMap":157},[14,326,327],{},"这时你的本地仍然可以写 Claude 风格模型名，真实模型由网关决定。",[14,329,330,332,333,336,337,340,341,344],{},[34,331,139],{}," 如果公司网关已经兼容 Anthropic Messages，别急着上复杂工具。三类变量先配对：",[41,334,335],{},"BASE_URL"," 管请求去哪，",[41,338,339],{},"API_KEY\u002FAUTH_TOKEN"," 管怎么鉴权，",[41,342,343],{},"MODEL"," 管默认用谁。",[46,346,348],{"id":347},"_3-环境变量总表每个变量到底管什么","3. 环境变量总表：每个变量到底管什么",[14,350,351],{},"下面这张表按“接模型相关度”排序，而不是按字母排序。",[54,353,354,367],{},[57,355,356],{},[60,357,358,361,364],{},[63,359,360],{},"变量",[63,362,363],{},"作用",[63,365,366],{},"什么时候用",[73,368,369,381,396,410,425,441,457,470,483,496,509,522,541,554,571,588,605,618,631],{},[60,370,371,375,378],{},[78,372,373],{},[41,374,105],{},[78,376,377],{},"覆盖 Anthropic API endpoint",[78,379,380],{},"接入 Anthropic-compatible 网关、LiteLLM、Bifrost、自建代理",[60,382,383,387,393],{},[78,384,385],{},[41,386,229],{},[78,388,389,390,392],{},"作为 ",[41,391,233],{}," 发送",[78,394,395],{},"网关或 Anthropic API 使用 API key 鉴权",[60,397,398,402,407],{},[78,399,400],{},[41,401,301],{},[78,403,389,404,392],{},[41,405,406],{},"Authorization: Bearer",[78,408,409],{},"网关使用 Bearer token 鉴权",[60,411,412,416,419],{},[78,413,414],{},[41,415,239],{},[78,417,418],{},"设置默认模型",[78,420,421,422,424],{},"想固定默认模型，或跳过 ",[41,423,247],{}," 手动选择",[60,426,427,432,438],{},[78,428,429],{},[41,430,431],{},"ANTHROPIC_CUSTOM_MODEL_OPTION",[78,433,434,435,437],{},"给 ",[41,436,247],{}," 增加一个自定义模型入口",[78,439,440],{},"网关模型名不是 CC 内置模型名",[60,442,443,448,454],{},[78,444,445],{},[41,446,447],{},"ANTHROPIC_CUSTOM_MODEL_OPTION_NAME",[78,449,450,451,453],{},"自定义模型在 ",[41,452,247],{}," 里显示的名字",[78,455,456],{},"想让模型选择列表更友好",[60,458,459,464,467],{},[78,460,461],{},[41,462,463],{},"ANTHROPIC_CUSTOM_MODEL_OPTION_DESCRIPTION",[78,465,466],{},"自定义模型描述",[78,468,469],{},"团队共享时标注用途",[60,471,472,477,480],{},[78,473,474],{},[41,475,476],{},"ANTHROPIC_DEFAULT_OPUS_MODEL",[78,478,479],{},"覆盖 Opus 档默认模型",[78,481,482],{},"企业网关希望把 Opus 档指向内部强模型",[60,484,485,490,493],{},[78,486,487],{},[41,488,489],{},"ANTHROPIC_DEFAULT_SONNET_MODEL",[78,491,492],{},"覆盖 Sonnet 档默认模型",[78,494,495],{},"最常用，适合日常编码模型",[60,497,498,503,506],{},[78,499,500],{},[41,501,502],{},"ANTHROPIC_DEFAULT_HAIKU_MODEL",[78,504,505],{},"覆盖 Haiku 档默认模型",[78,507,508],{},"后台摘要、标题、轻量任务",[60,510,511,516,519],{},[78,512,513],{},[41,514,515],{},"ANTHROPIC_SMALL_FAST_MODEL",[78,517,518],{},"旧版小模型变量，已 deprecated",[78,520,521],{},"老教程里常见，新配置尽量不用",[60,523,524,529,536],{},[78,525,526],{},[41,527,528],{},"CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY",[78,530,531,532,535],{},"启用网关 ",[41,533,534],{},"\u002Fv1\u002Fmodels"," 发现",[78,537,538,539],{},"网关支持模型列表，希望出现在 ",[41,540,247],{},[60,542,543,548,551],{},[78,544,545],{},[41,546,547],{},"CLAUDE_CODE_ALWAYS_ENABLE_EFFORT",[78,549,550],{},"对自定义模型也发送 effort 参数",[78,552,553],{},"网关模型支持 effort，但模型名不是 CC 已知 ID",[60,555,556,561,568],{},[78,557,558],{},[41,559,560],{},"CLAUDE_CODE_DISABLE_THINKING",[78,562,563,564,567],{},"不发送 ",[41,565,566],{},"thinking"," 参数",[78,569,570],{},"网关或第三方模型不认识 thinking 字段",[60,572,573,578,581],{},[78,574,575],{},[41,576,577],{},"CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS",[78,579,580],{},"去掉 Anthropic beta 头和实验字段",[78,582,583,584,587],{},"网关报 ",[41,585,586],{},"anthropic-beta"," 或额外字段错误",[60,589,590,595,602],{},[78,591,592],{},[41,593,594],{},"CLAUDE_CODE_ATTRIBUTION_HEADER",[78,596,597,598,601],{},"设为 ",[41,599,600],{},"0"," 可去掉 CC 归因块",[78,603,604],{},"自建网关按完整 body 做 prompt cache 时",[60,606,607,612,615],{},[78,608,609],{},[41,610,611],{},"API_TIMEOUT_MS",[78,613,614],{},"API 请求超时时间",[78,616,617],{},"慢网关、本地模型、长思考任务容易超时",[60,619,620,625,628],{},[78,621,622],{},[41,623,624],{},"API_FORCE_IDLE_TIMEOUT",[78,626,627],{},"控制流式响应空闲超时",[78,629,630],{},"慢模型长时间不吐 token 时",[60,632,633,640,642],{},[78,634,635,637,638],{},[41,636,88],{}," \u002F ",[41,639,92],{},[78,641,80],{},[78,643,644],{},"公司网络要求所有出站流量走代理",[14,646,647],{},"一个比较稳的企业网关配置像这样：",[152,649,651],{"className":154,"code":650,"language":156,"meta":157,"style":157},"export ANTHROPIC_BASE_URL=\"https:\u002F\u002Fllm-gateway.example.com\"\nexport ANTHROPIC_AUTH_TOKEN=\"your-token\"\nexport ANTHROPIC_MODEL=\"claude-sonnet-4-6\"\n\n# 网关兼容性开关：按需打开，不要一上来全开\nexport CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY=1\nexport CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1\nexport API_TIMEOUT_MS=900000\n",[41,652,653,663,674,684,690,697,711,723],{"__ignoreMap":157},[161,654,655,657,659,661],{"class":163,"line":164},[161,656,168],{"class":167},[161,658,172],{"class":171},[161,660,175],{"class":167},[161,662,179],{"class":178},[161,664,665,667,669,671],{"class":163,"line":182},[161,666,168],{"class":167},[161,668,277],{"class":171},[161,670,175],{"class":167},[161,672,673],{"class":178},"\"your-token\"\n",[161,675,676,678,680,682],{"class":163,"line":195},[161,677,168],{"class":167},[161,679,200],{"class":171},[161,681,175],{"class":167},[161,683,205],{"class":178},[161,685,686],{"class":163,"line":208},[161,687,689],{"emptyLinePlaceholder":688},true,"\n",[161,691,693],{"class":163,"line":692},5,[161,694,696],{"class":695},"sAwPA","# 网关兼容性开关：按需打开，不要一上来全开\n",[161,698,700,702,705,707],{"class":163,"line":699},6,[161,701,168],{"class":167},[161,703,704],{"class":171}," CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY",[161,706,175],{"class":167},[161,708,710],{"class":709},"sDLfK","1\n",[161,712,714,716,719,721],{"class":163,"line":713},7,[161,715,168],{"class":167},[161,717,718],{"class":171}," CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS",[161,720,175],{"class":167},[161,722,710],{"class":709},[161,724,726,728,731,733],{"class":163,"line":725},8,[161,727,168],{"class":167},[161,729,730],{"class":171}," API_TIMEOUT_MS",[161,732,175],{"class":167},[161,734,735],{"class":709},"900000\n",[14,737,738],{},"注意两条经验：",[740,741,742,748],"ol",{},[220,743,744,745,128],{},"CC 启动时读取环境变量，改完变量要重启 ",[41,746,747],{},"claude",[220,749,750],{},"真实 token 不要写进项目仓库，也不要放进博客、截图、日志。个人本地可以放 shell profile；团队共享时用占位符和公司密钥管理系统。",[14,752,753,755],{},[34,754,139],{}," 环境变量不是越多越好。先配请求地址、鉴权、默认模型；只有遇到网关兼容性问题，再逐个打开 beta\u002Fthinking\u002Ftimeout 相关开关。",[46,757,759],{"id":758},"_4-bedrockvertexfoundry官方第三方云路径","4. Bedrock、Vertex、Foundry：官方第三方云路径",[14,761,762],{},"如果公司不是给你一个 Anthropic-compatible 网关，而是走云厂商托管 Claude，CC 也有专门开关。",[764,765,767],"h3",{"id":766},"amazon-bedrock","Amazon Bedrock",[152,769,771],{"className":154,"code":770,"language":156,"meta":157,"style":157},"export CLAUDE_CODE_USE_BEDROCK=1\nexport AWS_REGION=us-east-1\nclaude\n",[41,772,773,784,796],{"__ignoreMap":157},[161,774,775,777,780,782],{"class":163,"line":164},[161,776,168],{"class":167},[161,778,779],{"class":171}," CLAUDE_CODE_USE_BEDROCK",[161,781,175],{"class":167},[161,783,710],{"class":709},[161,785,786,788,791,793],{"class":163,"line":182},[161,787,168],{"class":167},[161,789,790],{"class":171}," AWS_REGION",[161,792,175],{"class":167},[161,794,795],{"class":171},"us-east-1\n",[161,797,798],{"class":163,"line":195},[161,799,212],{"class":211},[14,801,802],{},"如果公司还有一层 Bedrock 网关：",[152,804,806],{"className":154,"code":805,"language":156,"meta":157,"style":157},"export CLAUDE_CODE_USE_BEDROCK=1\nexport ANTHROPIC_BEDROCK_BASE_URL=\"https:\u002F\u002Fllm-gateway.example.com\u002Fbedrock\"\nexport CLAUDE_CODE_SKIP_BEDROCK_AUTH=1\nclaude\n",[41,807,808,818,830,841],{"__ignoreMap":157},[161,809,810,812,814,816],{"class":163,"line":164},[161,811,168],{"class":167},[161,813,779],{"class":171},[161,815,175],{"class":167},[161,817,710],{"class":709},[161,819,820,822,825,827],{"class":163,"line":182},[161,821,168],{"class":167},[161,823,824],{"class":171}," ANTHROPIC_BEDROCK_BASE_URL",[161,826,175],{"class":167},[161,828,829],{"class":178},"\"https:\u002F\u002Fllm-gateway.example.com\u002Fbedrock\"\n",[161,831,832,834,837,839],{"class":163,"line":195},[161,833,168],{"class":167},[161,835,836],{"class":171}," CLAUDE_CODE_SKIP_BEDROCK_AUTH",[161,838,175],{"class":167},[161,840,710],{"class":709},[161,842,843],{"class":163,"line":208},[161,844,212],{"class":211},[14,846,847,850],{},[41,848,849],{},"CLAUDE_CODE_SKIP_BEDROCK_AUTH=1"," 的意思是：AWS 鉴权由网关处理，本机不用再签 SigV4。",[764,852,854],{"id":853},"google-vertex-ai","Google Vertex AI",[152,856,858],{"className":154,"code":857,"language":156,"meta":157,"style":157},"export CLAUDE_CODE_USE_VERTEX=1\nexport CLOUD_ML_REGION=us-east5\nexport ANTHROPIC_VERTEX_PROJECT_ID=\"your-project-id\"\nclaude\n",[41,859,860,871,883,895],{"__ignoreMap":157},[161,861,862,864,867,869],{"class":163,"line":164},[161,863,168],{"class":167},[161,865,866],{"class":171}," CLAUDE_CODE_USE_VERTEX",[161,868,175],{"class":167},[161,870,710],{"class":709},[161,872,873,875,878,880],{"class":163,"line":182},[161,874,168],{"class":167},[161,876,877],{"class":171}," CLOUD_ML_REGION",[161,879,175],{"class":167},[161,881,882],{"class":171},"us-east5\n",[161,884,885,887,890,892],{"class":163,"line":195},[161,886,168],{"class":167},[161,888,889],{"class":171}," ANTHROPIC_VERTEX_PROJECT_ID",[161,891,175],{"class":167},[161,893,894],{"class":178},"\"your-project-id\"\n",[161,896,897],{"class":163,"line":208},[161,898,212],{"class":211},[14,900,901],{},"走 Vertex 网关时：",[152,903,905],{"className":154,"code":904,"language":156,"meta":157,"style":157},"export CLAUDE_CODE_USE_VERTEX=1\nexport ANTHROPIC_VERTEX_BASE_URL=\"https:\u002F\u002Fllm-gateway.example.com\u002Fvertex\"\nexport CLAUDE_CODE_SKIP_VERTEX_AUTH=1\nclaude\n",[41,906,907,917,929,940],{"__ignoreMap":157},[161,908,909,911,913,915],{"class":163,"line":164},[161,910,168],{"class":167},[161,912,866],{"class":171},[161,914,175],{"class":167},[161,916,710],{"class":709},[161,918,919,921,924,926],{"class":163,"line":182},[161,920,168],{"class":167},[161,922,923],{"class":171}," ANTHROPIC_VERTEX_BASE_URL",[161,925,175],{"class":167},[161,927,928],{"class":178},"\"https:\u002F\u002Fllm-gateway.example.com\u002Fvertex\"\n",[161,930,931,933,936,938],{"class":163,"line":195},[161,932,168],{"class":167},[161,934,935],{"class":171}," CLAUDE_CODE_SKIP_VERTEX_AUTH",[161,937,175],{"class":167},[161,939,710],{"class":709},[161,941,942],{"class":163,"line":208},[161,943,212],{"class":211},[764,945,947],{"id":946},"microsoft-foundry","Microsoft Foundry",[152,949,951],{"className":154,"code":950,"language":156,"meta":157,"style":157},"export CLAUDE_CODE_USE_FOUNDRY=1\nexport ANTHROPIC_FOUNDRY_RESOURCE=\"your-resource\"\nexport ANTHROPIC_FOUNDRY_API_KEY=\"your-api-key\"\nclaude\n",[41,952,953,964,976,988],{"__ignoreMap":157},[161,954,955,957,960,962],{"class":163,"line":164},[161,956,168],{"class":167},[161,958,959],{"class":171}," CLAUDE_CODE_USE_FOUNDRY",[161,961,175],{"class":167},[161,963,710],{"class":709},[161,965,966,968,971,973],{"class":163,"line":182},[161,967,168],{"class":167},[161,969,970],{"class":171}," ANTHROPIC_FOUNDRY_RESOURCE",[161,972,175],{"class":167},[161,974,975],{"class":178},"\"your-resource\"\n",[161,977,978,980,983,985],{"class":163,"line":195},[161,979,168],{"class":167},[161,981,982],{"class":171}," ANTHROPIC_FOUNDRY_API_KEY",[161,984,175],{"class":167},[161,986,987],{"class":178},"\"your-api-key\"\n",[161,989,990],{"class":163,"line":208},[161,991,212],{"class":211},[14,993,994],{},"走 Foundry 网关时：",[152,996,998],{"className":154,"code":997,"language":156,"meta":157,"style":157},"export CLAUDE_CODE_USE_FOUNDRY=1\nexport ANTHROPIC_FOUNDRY_BASE_URL=\"https:\u002F\u002Fllm-gateway.example.com\"\nexport CLAUDE_CODE_SKIP_FOUNDRY_AUTH=1\nclaude\n",[41,999,1000,1010,1021,1032],{"__ignoreMap":157},[161,1001,1002,1004,1006,1008],{"class":163,"line":164},[161,1003,168],{"class":167},[161,1005,959],{"class":171},[161,1007,175],{"class":167},[161,1009,710],{"class":709},[161,1011,1012,1014,1017,1019],{"class":163,"line":182},[161,1013,168],{"class":167},[161,1015,1016],{"class":171}," ANTHROPIC_FOUNDRY_BASE_URL",[161,1018,175],{"class":167},[161,1020,179],{"class":178},[161,1022,1023,1025,1028,1030],{"class":163,"line":195},[161,1024,168],{"class":167},[161,1026,1027],{"class":171}," CLAUDE_CODE_SKIP_FOUNDRY_AUTH",[161,1029,175],{"class":167},[161,1031,710],{"class":709},[161,1033,1034],{"class":163,"line":208},[161,1035,212],{"class":211},[14,1037,1038,1039,1041,1042,1044,1045,89,1048,89,1051,1054],{},"这些变量和 ",[41,1040,105],{}," 不是同一个入口。",[41,1043,105],{}," 面向 Anthropic Messages；",[41,1046,1047],{},"ANTHROPIC_BEDROCK_BASE_URL",[41,1049,1050],{},"ANTHROPIC_VERTEX_BASE_URL",[41,1052,1053],{},"ANTHROPIC_FOUNDRY_BASE_URL"," 面向对应云厂商 API 形态。",[14,1056,1057,1059,1060,1062],{},[34,1058,139],{}," 云厂商路径优先用官方开关，不要硬套 ",[41,1061,105],{},"。Bedrock、Vertex、Foundry 的 API 形态不同，CC 需要知道自己正在和哪类 provider 说话。",[46,1064,1066],{"id":1065},"_5-openai-compatible-模型为什么需要-routerproxy","5. OpenAI-compatible 模型：为什么需要 Router\u002FProxy",[14,1068,1069],{},"国内最常见的模型服务是 OpenAI-compatible：",[152,1071,1074],{"className":1072,"code":1073,"language":322,"meta":157},[320],"POST \u002Fv1\u002Fchat\u002Fcompletions\nAuthorization: Bearer xxx\nmodel: deepseek-chat\n",[41,1075,1073],{"__ignoreMap":157},[14,1077,1078],{},"但 CC 不是普通聊天客户端。它要处理：",[217,1080,1081,1084,1087,1090,1093,1096,1099],{},[220,1082,1083],{},"Anthropic Messages 请求格式",[220,1085,1086],{},"streaming response",[220,1088,1089],{},"tool use \u002F tool result",[220,1091,1092],{},"thinking \u002F beta header",[220,1094,1095],{},"prompt cache",[220,1097,1098],{},"大小模型分工",[220,1100,1101,1103],{},[41,1102,247],{}," 动态切换",[14,1105,1106],{},"所以你不能只写：",[152,1108,1110],{"className":154,"code":1109,"language":156,"meta":157,"style":157},"export ANTHROPIC_BASE_URL=\"https:\u002F\u002Fapi.deepseek.com\"\n",[41,1111,1112],{"__ignoreMap":157},[161,1113,1114,1116,1118,1120],{"class":163,"line":164},[161,1115,168],{"class":167},[161,1117,172],{"class":171},[161,1119,175],{"class":167},[161,1121,1122],{"class":178},"\"https:\u002F\u002Fapi.deepseek.com\"\n",[14,1124,1125],{},"这通常会失败，因为 DeepSeek API 并不直接暴露 Anthropic Messages 协议。你需要中间层把 CC 的请求翻译成模型服务能懂的格式。",[14,1127,1128],{},"社区常见有两类工具：",[54,1130,1131,1144],{},[57,1132,1133],{},[60,1134,1135,1138,1141],{},[63,1136,1137],{},"工具类型",[63,1139,1140],{},"代表",[63,1142,1143],{},"适合谁",[73,1145,1146,1157],{},[60,1147,1148,1151,1154],{},[78,1149,1150],{},"路由器",[78,1152,1153],{},"Claude Code Router",[78,1155,1156],{},"想接多个 provider、按任务路由、动态切模型",[60,1158,1159,1162,1165],{},[78,1160,1161],{},"简单代理",[78,1163,1164],{},"Claude Code Proxy",[78,1166,1167],{},"只想把 Claude 模型档位映射到 OpenAI-compatible 模型",[14,1169,1170,1172],{},[34,1171,139],{}," OpenAI-compatible 不是 Anthropic-compatible。名字里都有 “API”，但协议细节不同。CC 这种 agent 工具对协议细节非常敏感。",[46,1174,1176],{"id":1175},"_6-claude-code-router多-provider多模型路由","6. Claude Code Router：多 provider、多模型路由",[14,1178,1179],{},"Claude Code Router（CCR）的心智模型是：本地启动一个兼容 CC 的服务，CC 把请求发给 CCR，CCR 再按配置转发给不同模型 provider。",[14,1181,1182],{},"安装后一般有两种使用方式：",[152,1184,1186],{"className":154,"code":1185,"language":156,"meta":157,"style":157},"# 方式一：通过 ccr 包装启动\nccr code\n\n# 方式二：让当前 shell 的 claude 命令自动走 CCR\nccr start\neval \"$(ccr activate)\"\nclaude\n",[41,1187,1188,1193,1201,1205,1210,1217,1230],{"__ignoreMap":157},[161,1189,1190],{"class":163,"line":164},[161,1191,1192],{"class":695},"# 方式一：通过 ccr 包装启动\n",[161,1194,1195,1198],{"class":163,"line":182},[161,1196,1197],{"class":211},"ccr",[161,1199,1200],{"class":178}," code\n",[161,1202,1203],{"class":163,"line":195},[161,1204,689],{"emptyLinePlaceholder":688},[161,1206,1207],{"class":163,"line":208},[161,1208,1209],{"class":695},"# 方式二：让当前 shell 的 claude 命令自动走 CCR\n",[161,1211,1212,1214],{"class":163,"line":692},[161,1213,1197],{"class":211},[161,1215,1216],{"class":178}," start\n",[161,1218,1219,1222,1225,1227],{"class":163,"line":699},[161,1220,1221],{"class":709},"eval",[161,1223,1224],{"class":178}," \"$(",[161,1226,1197],{"class":211},[161,1228,1229],{"class":178}," activate)\"\n",[161,1231,1232],{"class":163,"line":713},[161,1233,212],{"class":211},[14,1235,1236,1237,1240],{},"核心配置在 ",[41,1238,1239],{},"~\u002F.claude-code-router\u002Fconfig.json","。一个简化例子：",[152,1242,1246],{"className":1243,"code":1244,"language":1245,"meta":157,"style":157},"language-json shiki shiki-themes github-dark","{\n  \"PROXY_URL\": \"http:\u002F\u002F127.0.0.1:7890\",\n  \"LOG\": true,\n  \"API_TIMEOUT_MS\": 600000,\n  \"Providers\": [\n    {\n      \"name\": \"deepseek\",\n      \"baseUrl\": \"https:\u002F\u002Fapi.deepseek.com\",\n      \"apiKey\": \"$DEEPSEEK_API_KEY\",\n      \"models\": [\"deepseek-chat\"]\n    },\n    {\n      \"name\": \"openrouter\",\n      \"baseUrl\": \"https:\u002F\u002Fopenrouter.ai\u002Fapi\u002Fv1\",\n      \"apiKey\": \"$OPENROUTER_API_KEY\",\n      \"models\": [\"anthropic\u002Fclaude-sonnet-4.5\", \"openai\u002Fgpt-5\"]\n    }\n  ],\n  \"Router\": {\n    \"default\": \"deepseek,deepseek-chat\",\n    \"background\": \"deepseek,deepseek-chat\",\n    \"think\": \"openrouter,anthropic\u002Fclaude-sonnet-4.5\"\n  }\n}\n","json",[41,1247,1248,1253,1267,1279,1291,1299,1304,1316,1328,1341,1356,1362,1367,1379,1391,1403,1421,1427,1433,1442,1455,1467,1478,1484],{"__ignoreMap":157},[161,1249,1250],{"class":163,"line":164},[161,1251,1252],{"class":171},"{\n",[161,1254,1255,1258,1261,1264],{"class":163,"line":182},[161,1256,1257],{"class":709},"  \"PROXY_URL\"",[161,1259,1260],{"class":171},": ",[161,1262,1263],{"class":178},"\"http:\u002F\u002F127.0.0.1:7890\"",[161,1265,1266],{"class":171},",\n",[161,1268,1269,1272,1274,1277],{"class":163,"line":195},[161,1270,1271],{"class":709},"  \"LOG\"",[161,1273,1260],{"class":171},[161,1275,1276],{"class":709},"true",[161,1278,1266],{"class":171},[161,1280,1281,1284,1286,1289],{"class":163,"line":208},[161,1282,1283],{"class":709},"  \"API_TIMEOUT_MS\"",[161,1285,1260],{"class":171},[161,1287,1288],{"class":709},"600000",[161,1290,1266],{"class":171},[161,1292,1293,1296],{"class":163,"line":692},[161,1294,1295],{"class":709},"  \"Providers\"",[161,1297,1298],{"class":171},": [\n",[161,1300,1301],{"class":163,"line":699},[161,1302,1303],{"class":171},"    {\n",[161,1305,1306,1309,1311,1314],{"class":163,"line":713},[161,1307,1308],{"class":709},"      \"name\"",[161,1310,1260],{"class":171},[161,1312,1313],{"class":178},"\"deepseek\"",[161,1315,1266],{"class":171},[161,1317,1318,1321,1323,1326],{"class":163,"line":725},[161,1319,1320],{"class":709},"      \"baseUrl\"",[161,1322,1260],{"class":171},[161,1324,1325],{"class":178},"\"https:\u002F\u002Fapi.deepseek.com\"",[161,1327,1266],{"class":171},[161,1329,1331,1334,1336,1339],{"class":163,"line":1330},9,[161,1332,1333],{"class":709},"      \"apiKey\"",[161,1335,1260],{"class":171},[161,1337,1338],{"class":178},"\"$DEEPSEEK_API_KEY\"",[161,1340,1266],{"class":171},[161,1342,1344,1347,1350,1353],{"class":163,"line":1343},10,[161,1345,1346],{"class":709},"      \"models\"",[161,1348,1349],{"class":171},": [",[161,1351,1352],{"class":178},"\"deepseek-chat\"",[161,1354,1355],{"class":171},"]\n",[161,1357,1359],{"class":163,"line":1358},11,[161,1360,1361],{"class":171},"    },\n",[161,1363,1365],{"class":163,"line":1364},12,[161,1366,1303],{"class":171},[161,1368,1370,1372,1374,1377],{"class":163,"line":1369},13,[161,1371,1308],{"class":709},[161,1373,1260],{"class":171},[161,1375,1376],{"class":178},"\"openrouter\"",[161,1378,1266],{"class":171},[161,1380,1382,1384,1386,1389],{"class":163,"line":1381},14,[161,1383,1320],{"class":709},[161,1385,1260],{"class":171},[161,1387,1388],{"class":178},"\"https:\u002F\u002Fopenrouter.ai\u002Fapi\u002Fv1\"",[161,1390,1266],{"class":171},[161,1392,1394,1396,1398,1401],{"class":163,"line":1393},15,[161,1395,1333],{"class":709},[161,1397,1260],{"class":171},[161,1399,1400],{"class":178},"\"$OPENROUTER_API_KEY\"",[161,1402,1266],{"class":171},[161,1404,1406,1408,1410,1413,1416,1419],{"class":163,"line":1405},16,[161,1407,1346],{"class":709},[161,1409,1349],{"class":171},[161,1411,1412],{"class":178},"\"anthropic\u002Fclaude-sonnet-4.5\"",[161,1414,1415],{"class":171},", ",[161,1417,1418],{"class":178},"\"openai\u002Fgpt-5\"",[161,1420,1355],{"class":171},[161,1422,1424],{"class":163,"line":1423},17,[161,1425,1426],{"class":171},"    }\n",[161,1428,1430],{"class":163,"line":1429},18,[161,1431,1432],{"class":171},"  ],\n",[161,1434,1436,1439],{"class":163,"line":1435},19,[161,1437,1438],{"class":709},"  \"Router\"",[161,1440,1441],{"class":171},": {\n",[161,1443,1445,1448,1450,1453],{"class":163,"line":1444},20,[161,1446,1447],{"class":709},"    \"default\"",[161,1449,1260],{"class":171},[161,1451,1452],{"class":178},"\"deepseek,deepseek-chat\"",[161,1454,1266],{"class":171},[161,1456,1458,1461,1463,1465],{"class":163,"line":1457},21,[161,1459,1460],{"class":709},"    \"background\"",[161,1462,1260],{"class":171},[161,1464,1452],{"class":178},[161,1466,1266],{"class":171},[161,1468,1470,1473,1475],{"class":163,"line":1469},22,[161,1471,1472],{"class":709},"    \"think\"",[161,1474,1260],{"class":171},[161,1476,1477],{"class":178},"\"openrouter,anthropic\u002Fclaude-sonnet-4.5\"\n",[161,1479,1481],{"class":163,"line":1480},23,[161,1482,1483],{"class":171},"  }\n",[161,1485,1487],{"class":163,"line":1486},24,[161,1488,1489],{"class":171},"}\n",[14,1491,1492],{},"这里几个字段很关键：",[217,1494,1495,1501,1507,1513,1519,1527],{},[220,1496,1497,1500],{},[41,1498,1499],{},"Providers","：定义有哪些模型供应商，每个供应商的 base URL、key、模型列表是什么。",[220,1502,1503,1506],{},[41,1504,1505],{},"Router.default","：普通请求默认走谁。",[220,1508,1509,1512],{},[41,1510,1511],{},"Router.background","：后台\u002F轻量任务走谁，适合便宜模型。",[220,1514,1515,1518],{},[41,1516,1517],{},"Router.think","：思考类任务走谁，适合强模型。",[220,1520,1521,1524,1525,128],{},[41,1522,1523],{},"PROXY_URL","：CCR 自己访问上游 provider 时使用的网络代理，不等于 CC 的 ",[41,1526,105],{},[220,1528,1529,1531],{},[41,1530,611],{},"：上游响应慢时非常有用。",[14,1533,1534],{},"CCR 的价值不是“能把模型接上”这么简单，而是把 CC 的模型调度能力重新打开了。比如你可以日常编码走便宜的国产模型，复杂架构或长思考走更强模型，后台摘要走小模型。",[14,1536,1537,1538,1541],{},"还有一个很实用的点：CCR 支持在 Claude Code 里通过 ",[41,1539,1540],{},"\u002Fmodel provider,model"," 动态切换，比如：",[152,1543,1546],{"className":1544,"code":1545,"language":322,"meta":157},[320],"\u002Fmodel openrouter,anthropic\u002Fclaude-sonnet-4.5\n",[41,1547,1545],{"__ignoreMap":157},[14,1549,1550],{},"这比每次退出终端、改环境变量、重新启动舒服太多。",[14,1552,1553,1555],{},[34,1554,139],{}," 如果你要接多个模型，或者团队内部希望统一模型路由，Claude Code Router 是更完整的方案。它解决的不只是连接问题，还有成本、速度、质量的调度问题。",[46,1557,1559],{"id":1558},"_7-claude-code-proxy简单映射三档模型","7. Claude Code Proxy：简单映射三档模型",[14,1561,1562],{},"Claude Code Proxy 更像轻量翻译层。它通常把 CC 里的 Claude 模型档位映射成 OpenAI-compatible 模型：",[152,1564,1566],{"className":154,"code":1565,"language":156,"meta":157,"style":157},"OPENAI_API_KEY=\"your-openai-compatible-key\"\nOPENAI_BASE_URL=\"https:\u002F\u002Fapi.example.com\u002Fv1\"\n\nBIG_MODEL=\"your-large-coding-model\"\nMIDDLE_MODEL=\"your-balanced-coding-model\"\nSMALL_MODEL=\"your-fast-model\"\n\nHOST=\"127.0.0.1\"\nPORT=\"8082\"\n",[41,1567,1568,1578,1588,1592,1602,1612,1622,1626,1636],{"__ignoreMap":157},[161,1569,1570,1573,1575],{"class":163,"line":164},[161,1571,1572],{"class":171},"OPENAI_API_KEY",[161,1574,175],{"class":167},[161,1576,1577],{"class":178},"\"your-openai-compatible-key\"\n",[161,1579,1580,1583,1585],{"class":163,"line":182},[161,1581,1582],{"class":171},"OPENAI_BASE_URL",[161,1584,175],{"class":167},[161,1586,1587],{"class":178},"\"https:\u002F\u002Fapi.example.com\u002Fv1\"\n",[161,1589,1590],{"class":163,"line":195},[161,1591,689],{"emptyLinePlaceholder":688},[161,1593,1594,1597,1599],{"class":163,"line":208},[161,1595,1596],{"class":171},"BIG_MODEL",[161,1598,175],{"class":167},[161,1600,1601],{"class":178},"\"your-large-coding-model\"\n",[161,1603,1604,1607,1609],{"class":163,"line":692},[161,1605,1606],{"class":171},"MIDDLE_MODEL",[161,1608,175],{"class":167},[161,1610,1611],{"class":178},"\"your-balanced-coding-model\"\n",[161,1613,1614,1617,1619],{"class":163,"line":699},[161,1615,1616],{"class":171},"SMALL_MODEL",[161,1618,175],{"class":167},[161,1620,1621],{"class":178},"\"your-fast-model\"\n",[161,1623,1624],{"class":163,"line":713},[161,1625,689],{"emptyLinePlaceholder":688},[161,1627,1628,1631,1633],{"class":163,"line":725},[161,1629,1630],{"class":171},"HOST",[161,1632,175],{"class":167},[161,1634,1635],{"class":178},"\"127.0.0.1\"\n",[161,1637,1638,1641,1643],{"class":163,"line":1330},[161,1639,1640],{"class":171},"PORT",[161,1642,175],{"class":167},[161,1644,1645],{"class":178},"\"8082\"\n",[14,1647,1648],{},"然后让 CC 指向这个代理：",[152,1650,1652],{"className":154,"code":1651,"language":156,"meta":157,"style":157},"export ANTHROPIC_BASE_URL=\"http:\u002F\u002Flocalhost:8082\"\nexport ANTHROPIC_API_KEY=\"any-value\"\nclaude\n",[41,1653,1654,1665,1676],{"__ignoreMap":157},[161,1655,1656,1658,1660,1662],{"class":163,"line":164},[161,1657,168],{"class":167},[161,1659,172],{"class":171},[161,1661,175],{"class":167},[161,1663,1664],{"class":178},"\"http:\u002F\u002Flocalhost:8082\"\n",[161,1666,1667,1669,1671,1673],{"class":163,"line":182},[161,1668,168],{"class":167},[161,1670,187],{"class":171},[161,1672,175],{"class":167},[161,1674,1675],{"class":178},"\"any-value\"\n",[161,1677,1678],{"class":163,"line":195},[161,1679,212],{"class":211},[14,1681,1682],{},"它的核心映射思路是：",[54,1684,1685,1695],{},[57,1686,1687],{},[60,1688,1689,1692],{},[63,1690,1691],{},"CC 请求里的模型",[63,1693,1694],{},"代理转发到",[73,1696,1697,1706,1715],{},[60,1698,1699,1702],{},[78,1700,1701],{},"haiku 类",[78,1703,1704],{},[41,1705,1616],{},[60,1707,1708,1711],{},[78,1709,1710],{},"sonnet 类",[78,1712,1713],{},[41,1714,1606],{},[60,1716,1717,1720],{},[78,1718,1719],{},"opus 类",[78,1721,1722],{},[41,1723,1596],{},[14,1725,1726],{},"这类工具适合“我只有一个模型服务，只想让 CC 先跑起来”的场景。缺点也明显：复杂路由、动态模型选择、provider 管理通常不如 CCR 完整。",[14,1728,1729,1731],{},[34,1730,139],{}," Proxy 是一把小刀，Router 是工具箱。个人临时接入可以先用 Proxy；团队长期使用，建议直接评估 Router 或公司统一网关。",[46,1733,1735,1736,1738],{"id":1734},"_8-cc-switch-这类工具本质是在切配置集","8. ",[41,1737,43],{}," 这类工具，本质是在切配置集",[14,1740,1741,1742,1744],{},"很多人提到 ",[41,1743,43],{},"，通常不是指某个唯一标准工具，而是一类“配置切换器”：",[152,1746,1749],{"className":1747,"code":1748,"language":322,"meta":157},[320],"default   -> 官方 Anthropic \u002F Claude Pro\ncompany   -> 公司 LLM Gateway\ndeepseek  -> 本地 CCR + DeepSeek\nlocal     -> 本地 Ollama \u002F 私有模型\n",[41,1750,1748],{"__ignoreMap":157},[14,1752,1753],{},"它们本质上做三件事：",[740,1755,1756,1765,1772],{},[220,1757,1758,1759,89,1761,89,1763,128],{},"切换环境变量：",[41,1760,105],{},[41,1762,229],{},[41,1764,239],{},[220,1766,1767,1768,1771],{},"切换配置文件：例如 CCR 的 ",[41,1769,1770],{},"config.json","、不同 provider preset。",[220,1773,1774,1775,89,1778,128],{},"包装启动命令：例如 ",[41,1776,1777],{},"ccr code",[41,1779,1780],{},"claude --model xxx",[14,1782,1783],{},"自己写一个极简版本并不难：",[152,1785,1787],{"className":154,"code":1786,"language":156,"meta":157,"style":157},"cc-company() {\n  export ANTHROPIC_BASE_URL=\"https:\u002F\u002Fllm-gateway.example.com\"\n  export ANTHROPIC_AUTH_TOKEN=\"$COMPANY_LLM_TOKEN\"\n  export ANTHROPIC_MODEL=\"claude-sonnet-4-6\"\n  claude \"$@\"\n}\n\ncc-router() {\n  ccr start\n  eval \"$(ccr activate)\"\n  claude \"$@\"\n}\n",[41,1788,1789,1797,1808,1825,1835,1848,1852,1856,1863,1870,1881,1891],{"__ignoreMap":157},[161,1790,1791,1794],{"class":163,"line":164},[161,1792,1793],{"class":211},"cc-company",[161,1795,1796],{"class":171},"() {\n",[161,1798,1799,1802,1804,1806],{"class":163,"line":182},[161,1800,1801],{"class":167},"  export",[161,1803,172],{"class":171},[161,1805,175],{"class":167},[161,1807,179],{"class":178},[161,1809,1810,1812,1814,1816,1819,1822],{"class":163,"line":195},[161,1811,1801],{"class":167},[161,1813,277],{"class":171},[161,1815,175],{"class":167},[161,1817,1818],{"class":178},"\"",[161,1820,1821],{"class":171},"$COMPANY_LLM_TOKEN",[161,1823,1824],{"class":178},"\"\n",[161,1826,1827,1829,1831,1833],{"class":163,"line":208},[161,1828,1801],{"class":167},[161,1830,200],{"class":171},[161,1832,175],{"class":167},[161,1834,205],{"class":178},[161,1836,1837,1840,1843,1846],{"class":163,"line":692},[161,1838,1839],{"class":211},"  claude",[161,1841,1842],{"class":178}," \"",[161,1844,1845],{"class":709},"$@",[161,1847,1824],{"class":178},[161,1849,1850],{"class":163,"line":699},[161,1851,1489],{"class":171},[161,1853,1854],{"class":163,"line":713},[161,1855,689],{"emptyLinePlaceholder":688},[161,1857,1858,1861],{"class":163,"line":725},[161,1859,1860],{"class":211},"cc-router",[161,1862,1796],{"class":171},[161,1864,1865,1868],{"class":163,"line":1330},[161,1866,1867],{"class":211},"  ccr",[161,1869,1216],{"class":178},[161,1871,1872,1875,1877,1879],{"class":163,"line":1343},[161,1873,1874],{"class":709},"  eval",[161,1876,1224],{"class":178},[161,1878,1197],{"class":211},[161,1880,1229],{"class":178},[161,1882,1883,1885,1887,1889],{"class":163,"line":1358},[161,1884,1839],{"class":211},[161,1886,1842],{"class":178},[161,1888,1845],{"class":709},[161,1890,1824],{"class":178},[161,1892,1893],{"class":163,"line":1364},[161,1894,1489],{"class":171},[14,1896,1897,1898,1901],{},"更稳一点，可以给每套配置单独的 ",[41,1899,1900],{},"CLAUDE_CONFIG_DIR","：",[152,1903,1905],{"className":154,"code":1904,"language":156,"meta":157,"style":157},"alias claude-work='CLAUDE_CONFIG_DIR=~\u002F.claude-work claude'\nalias claude-personal='CLAUDE_CONFIG_DIR=~\u002F.claude-personal claude'\n",[41,1906,1907,1920],{"__ignoreMap":157},[161,1908,1909,1912,1915,1917],{"class":163,"line":164},[161,1910,1911],{"class":167},"alias",[161,1913,1914],{"class":171}," claude-work",[161,1916,175],{"class":167},[161,1918,1919],{"class":178},"'CLAUDE_CONFIG_DIR=~\u002F.claude-work claude'\n",[161,1921,1922,1924,1927,1929],{"class":163,"line":182},[161,1923,1911],{"class":167},[161,1925,1926],{"class":171}," claude-personal",[161,1928,175],{"class":167},[161,1930,1931],{"class":178},"'CLAUDE_CONFIG_DIR=~\u002F.claude-personal claude'\n",[14,1933,1934],{},"这样公司账号、个人账号、不同 MCP、不同历史会话不会混在一起。对经常在多个客户\u002F公司环境之间切换的人，这个变量很值钱。",[14,1936,1937],{},"选择切换工具时看四点：",[217,1939,1940,1943,1946,1949],{},[220,1941,1942],{},"是否明文保存 token？",[220,1944,1945],{},"是否能按项目自动切换？",[220,1947,1948],{},"是否支持 CCR\u002FProxy 这类本地服务启动检查？",[220,1950,1951],{},"是否能显示当前 profile，避免你在公司项目里误用个人模型？",[14,1953,1954,1956,1957,1959],{},[34,1955,139],{}," ",[41,1958,43],{}," 类工具不是魔法，核心就是“把一组容易配错的环境变量打包成 profile”。团队可以做一个内部小 CLI，个人也可以先用 shell function。",[46,1961,1963],{"id":1962},"_9-三类人的推荐路径","9. 三类人的推荐路径",[764,1965,1966],{"id":1966},"个人开发者",[14,1968,1969],{},"如果你只是想在网络不稳定时继续用 CC：",[152,1971,1973],{"className":154,"code":1972,"language":156,"meta":157,"style":157},"export HTTPS_PROXY=\"http:\u002F\u002F127.0.0.1:7890\"\nclaude\n",[41,1974,1975,1987],{"__ignoreMap":157},[161,1976,1977,1979,1982,1984],{"class":163,"line":164},[161,1978,168],{"class":167},[161,1980,1981],{"class":171}," HTTPS_PROXY",[161,1983,175],{"class":167},[161,1985,1986],{"class":178},"\"http:\u002F\u002F127.0.0.1:7890\"\n",[161,1988,1989],{"class":163,"line":182},[161,1990,212],{"class":211},[14,1992,1993,1994,1996],{},"如果你想接 OpenAI-compatible 模型，优先试 Claude Code Router。不要直接把 ",[41,1995,105],{}," 指向 OpenAI-compatible endpoint。",[764,1998,1999],{"id":1999},"团队使用者",[14,2001,2002],{},"如果公司已经有模型网关：",[152,2004,2006],{"className":154,"code":2005,"language":156,"meta":157,"style":157},"export ANTHROPIC_BASE_URL=\"https:\u002F\u002Fllm-gateway.example.com\"\nexport ANTHROPIC_AUTH_TOKEN=\"$COMPANY_LLM_TOKEN\"\nexport ANTHROPIC_MODEL=\"claude-sonnet-4-6\"\n",[41,2007,2008,2018,2032],{"__ignoreMap":157},[161,2009,2010,2012,2014,2016],{"class":163,"line":164},[161,2011,168],{"class":167},[161,2013,172],{"class":171},[161,2015,175],{"class":167},[161,2017,179],{"class":178},[161,2019,2020,2022,2024,2026,2028,2030],{"class":163,"line":182},[161,2021,168],{"class":167},[161,2023,277],{"class":171},[161,2025,175],{"class":167},[161,2027,1818],{"class":178},[161,2029,1821],{"class":171},[161,2031,1824],{"class":178},[161,2033,2034,2036,2038,2040],{"class":163,"line":195},[161,2035,168],{"class":167},[161,2037,200],{"class":171},[161,2039,175],{"class":167},[161,2041,205],{"class":178},[14,2043,2044,2045,2048],{},"再做一个内部 ",[41,2046,2047],{},"cc-work"," 命令，把变量、健康检查、版本检查都封起来。不要让每个人复制一份散落在群聊里的 export。",[764,2050,2052],{"id":2051},"平台基础设施团队","平台\u002F基础设施团队",[14,2054,2055],{},"最稳的路线是：",[740,2057,2058,2061,2071,2080,2083,2086],{},[220,2059,2060],{},"提供 Anthropic Messages 兼容网关。",[220,2062,2063,2064,2067,2068,128],{},"支持 ",[41,2065,2066],{},"\u002Fv1\u002Fmessages"," 和 ",[41,2069,2070],{},"\u002Fv1\u002Fmessages\u002Fcount_tokens",[220,2072,2073,2074,89,2076,2079],{},"正确转发 ",[41,2075,586],{},[41,2077,2078],{},"anthropic-version"," 等头。",[220,2081,2082],{},"做统一鉴权、审计、限流、预算。",[220,2084,2085],{},"提供一键安装脚本或内部 CLI。",[220,2087,2088],{},"明确推荐模型档位：日常、强推理、后台、小模型。",[14,2090,2091],{},"平台团队不要只给一个“OpenAI-compatible 地址 + key”，然后让业务同学自己折腾。CC 是 agent，不是普通 chat UI；协议适配、工具调用、流式输出、缓存都需要认真处理。",[14,2093,2094,2096],{},[34,2095,139],{}," 个人追求跑起来，团队追求少踩坑，平台追求统一入口。不同角色的最优解不一样。",[46,2098,2100],{"id":2099},"_10-排错清单","10. 排错清单",[14,2102,2103],{},"遇到问题时按这个顺序查：",[54,2105,2106,2116],{},[57,2107,2108],{},[60,2109,2110,2113],{},[63,2111,2112],{},"现象",[63,2114,2115],{},"优先检查",[73,2117,2118,2131,2141,2149,2159,2173,2185,2198,2206],{},[60,2119,2120,2123],{},[78,2121,2122],{},"仍然要求登录 Claude 账号",[78,2124,2125,2126,637,2128,2130],{},"是否没设置 ",[41,2127,229],{},[41,2129,301],{},"，或新 shell 没加载变量",[60,2132,2133,2136],{},[78,2134,2135],{},"请求打到官方 Anthropic",[78,2137,2138,2140],{},[41,2139,105],{}," 是否为空，是否启动后才改变量",[60,2142,2143,2146],{},[78,2144,2145],{},"401 \u002F 403",[78,2147,2148],{},"key 类型是否用错：API key vs Bearer token",[60,2150,2151,2154],{},[78,2152,2153],{},"404 model not found",[78,2155,2156,2158],{},[41,2157,239],{}," 是否是网关支持的模型名",[60,2160,2161,2167],{},[78,2162,2163,2164,2166],{},"报 ",[41,2165,586],{}," 不支持",[78,2168,2169,2170],{},"尝试 ",[41,2171,2172],{},"CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1",[60,2174,2175,2180],{},[78,2176,2163,2177,2179],{},[41,2178,566],{}," 字段不支持",[78,2181,2169,2182],{},[41,2183,2184],{},"CLAUDE_CODE_DISABLE_THINKING=1",[60,2186,2187,2190],{},[78,2188,2189],{},"卡住或长时间无输出",[78,2191,2192,2193,89,2195,2197],{},"调整 ",[41,2194,611],{},[41,2196,624],{},"，检查网关流式响应",[60,2199,2200,2203],{},[78,2201,2202],{},"OpenAI-compatible endpoint 直接失败",[78,2204,2205],{},"需要 Router\u002FProxy，不是只改 base URL",[60,2207,2208,2213],{},[78,2209,2210,2212],{},[41,2211,247],{}," 看不到网关模型",[78,2214,2215,2216,2218,2219],{},"网关是否实现 ",[41,2217,534],{},"，是否设置 ",[41,2220,2221],{},"CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY=1",[14,2223,2224],{},"还可以在 CC 里跑：",[152,2226,2229],{"className":2227,"code":2228,"language":322,"meta":157},[320],"\u002Fstatus\n",[41,2230,2228],{"__ignoreMap":157},[14,2232,2233],{},"确认当前代理、网关、provider 配置是否生效。",[14,2235,2236,2238],{},[34,2237,139],{}," 大多数问题都能归类到三件事：请求没发到你以为的地方、鉴权头不对、模型名\u002F协议不匹配。不要一上来怀疑 CC 坏了。",[46,2240,2241],{"id":2241},"总结",[14,2243,2244],{},"Claude Code 接自定义模型，核心不是背变量，而是建立三层心智：",[740,2246,2247,2257,2265],{},[220,2248,2249,1901,2252,637,2254,2256],{},[34,2250,2251],{},"网络层",[41,2253,88],{},[41,2255,92],{}," 只负责出网。",[220,2258,2259,1901,2262,2264],{},[34,2260,2261],{},"协议入口层",[41,2263,105],{}," 和各云厂商 base URL 决定 CC 请求发到哪里。",[220,2266,2267,2270,2271,2273],{},[34,2268,2269],{},"模型路由层","：Router\u002FProxy\u002F",[41,2272,43],{}," 负责把多模型、多 provider、多 profile 管起来。",[14,2275,2276,2277,2280],{},"如果公司已经有 Anthropic-compatible 网关，直接用 ",[41,2278,2279],{},"ANTHROPIC_BASE_URL + TOKEN + MODEL","，最简单也最稳。",[14,2282,2283],{},"如果公司只提供 OpenAI-compatible API，上 Claude Code Router 或 Claude Code Proxy，不要硬怼 base URL。",[14,2285,2286,2287,2289],{},"如果你经常在个人、公司、本地模型之间切换，做一个 profile 化的 ",[41,2288,43],{}," 小工具。它不需要神秘，只要可靠地切环境变量、切配置、显示当前 profile，就已经能避免大量低级事故。",[14,2291,2292,2293],{},"最后那句最实用：",[34,2294,2295],{},"买 Claude Pro 不是完成 CC 初始化的唯一入口。真正需要买的，可能只是一次把配置体系理顺的耐心。",[14,2297,2298],{},[21,2299,2301],{"href":2300},"\u002Fblog\u002F","返回博客列表",[2303,2304,2305],"style",{},"html pre.shiki code .snl16, html code.shiki .snl16{--shiki-default:#F97583}html pre.shiki code .s95oV, html code.shiki .s95oV{--shiki-default:#E1E4E8}html pre.shiki code .sU2Wk, html code.shiki .sU2Wk{--shiki-default:#9ECBFF}html pre.shiki code .svObZ, html code.shiki .svObZ{--shiki-default:#B392F0}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .sAwPA, html code.shiki .sAwPA{--shiki-default:#6A737D}html pre.shiki code .sDLfK, html code.shiki .sDLfK{--shiki-default:#79B8FF}",{"title":157,"searchDepth":182,"depth":182,"links":2307},[2308,2309,2310,2311,2316,2317,2318,2319,2321,2326,2327],{"id":48,"depth":182,"text":49},{"id":146,"depth":182,"text":147},{"id":347,"depth":182,"text":348},{"id":758,"depth":182,"text":759,"children":2312},[2313,2314,2315],{"id":766,"depth":195,"text":767},{"id":853,"depth":195,"text":854},{"id":946,"depth":195,"text":947},{"id":1065,"depth":182,"text":1066},{"id":1175,"depth":182,"text":1176},{"id":1558,"depth":182,"text":1559},{"id":1734,"depth":182,"text":2320},"8. cc-switch 这类工具，本质是在切配置集",{"id":1962,"depth":182,"text":1963,"children":2322},[2323,2324,2325],{"id":1966,"depth":195,"text":1966},{"id":1999,"depth":195,"text":1999},{"id":2051,"depth":195,"text":2052},{"id":2099,"depth":182,"text":2100},{"id":2241,"depth":182,"text":2241},"AI\u002FLLM","2026-06-16","md",{},"\u002Fblog\u002Fclaude-code-custom-model-guide",{"title":5,"description":16},"Claude Code 实战","blog\u002Fclaude-code-custom-model-guide",[2337,97,1153,2338,2339],"Claude Code","AI编程","开发工具","0n_SbiIbULcAxSdXVyp-LKE2hoXUUMzzFv93y2EBCq0",1784193098908]