[{"data":1,"prerenderedAt":725},["ShallowReactive",2],{"header-counts":3,"footer-counts":6,"review-llm-gateway-comparison":9},{"tools":4,"reviews":5},65,7,{"tools":4,"reviews":5,"playbooks":7,"news":8},10,8,{"id":10,"title":11,"body":12,"cover":707,"description":708,"extension":709,"meta":710,"navigation":711,"path":712,"published":713,"relatedTools":714,"seo":718,"stem":719,"tags":720,"updated":713,"verdict":723,"__hash__":724},"review\u002Freview\u002Fllm-gateway-comparison.md","LLM API 网关实测：OpenRouter vs Portkey vs 自建 LiteLLM",{"type":13,"value":14,"toc":694},"minimark",[15,20,143,146,175,178,183,258,265,285,291,295,348,352,372,377,381,436,473,477,497,502,505,579,582,585,588,646,649,652,660,663,690],[16,17,19],"h2",{"id":18},"tldr","TL;DR",[21,22,23,42],"table",{},[24,25,26],"thead",{},[27,28,29,33,36,39],"tr",{},[30,31,32],"th",{},"维度",[30,34,35],{},"OpenRouter",[30,37,38],{},"Portkey",[30,40,41],{},"LiteLLM (自建)",[43,44,45,60,74,88,102,116,129],"tbody",{},[27,46,47,51,54,57],{},[48,49,50],"td",{},"模式",[48,52,53],{},"托管聚合",[48,55,56],{},"Gateway + 托管",[48,58,59],{},"开源自托管",[27,61,62,65,68,71],{},[48,63,64],{},"接入成本",[48,66,67],{},"极低（一个 key）",[48,69,70],{},"低（改 base URL）",[48,72,73],{},"中（部署 + 配置）",[27,75,76,79,82,85],{},[48,77,78],{},"模型数",[48,80,81],{},"300+",[48,83,84],{},"1600+",[48,86,87],{},"取决于你接几家",[27,89,90,93,96,99],{},[48,91,92],{},"Fallback",[48,94,95],{},"✅ 基础",[48,97,98],{},"✅ 高级",[48,100,101],{},"✅ 可配",[27,103,104,107,110,113],{},[48,105,106],{},"成本透明",[48,108,109],{},"透传 + 5%",[48,111,112],{},"透传 + 按量",[48,114,115],{},"纯透传",[27,117,118,121,124,126],{},[48,119,120],{},"数据隐私",[48,122,123],{},"过第三方",[48,125,123],{},[48,127,128],{},"完全自有",[27,130,131,134,137,140],{},[48,132,133],{},"适合",[48,135,136],{},"个人 \u002F 试水",[48,138,139],{},"生产团队",[48,141,142],{},"企业 \u002F 合规",[16,144,145],{"id":145},"测试环境",[147,148,149,157,163,169],"ul",{},[150,151,152,156],"li",{},[153,154,155],"strong",{},"应用","：多模型 Agent，同时调 Claude \u002F GPT \u002F Gemini",[150,158,159,162],{},[153,160,161],{},"调用量","：日均 10K 次请求",[150,164,165,168],{},[153,166,167],{},"时长","：2 周，每种方案各跑 4-5 天",[150,170,171,174],{},[153,172,173],{},"关注指标","：延迟、成本、可靠性、运维负担",[16,176,177],{"id":177},"各方案实测",[179,180,182],"h3",{"id":181},"openrouter最省心","OpenRouter：最省心",[184,185,190],"pre",{"className":186,"code":187,"language":188,"meta":189,"style":189},"language-python shiki shiki-themes github-light github-dark","import openai\nclient = openai.OpenAI(\n    base_url=\"https:\u002F\u002Fopenrouter.ai\u002Fapi\u002Fv1\",\n    api_key=\"or-xxx\"\n)\n# 一个 key 调 300+ 模型\n","python","",[191,192,193,206,218,234,245,251],"code",{"__ignoreMap":189},[194,195,198,202],"span",{"class":196,"line":197},"line",1,[194,199,201],{"class":200},"szBVR","import",[194,203,205],{"class":204},"sVt8B"," openai\n",[194,207,209,212,215],{"class":196,"line":208},2,[194,210,211],{"class":204},"client ",[194,213,214],{"class":200},"=",[194,216,217],{"class":204}," openai.OpenAI(\n",[194,219,221,225,227,231],{"class":196,"line":220},3,[194,222,224],{"class":223},"s4XuR","    base_url",[194,226,214],{"class":200},[194,228,230],{"class":229},"sZZnC","\"https:\u002F\u002Fopenrouter.ai\u002Fapi\u002Fv1\"",[194,232,233],{"class":204},",\n",[194,235,237,240,242],{"class":196,"line":236},4,[194,238,239],{"class":223},"    api_key",[194,241,214],{"class":200},[194,243,244],{"class":229},"\"or-xxx\"\n",[194,246,248],{"class":196,"line":247},5,[194,249,250],{"class":204},")\n",[194,252,254],{"class":196,"line":253},6,[194,255,257],{"class":256},"sJ8bj","# 一个 key 调 300+ 模型\n",[259,260,261,264],"p",{},[153,262,263],{},"体验","：",[147,266,267,270,273,276,279,282],{},[150,268,269],{},"✅ 接入 5 分钟，一个 key 通吃",[150,271,272],{},"✅ 自带模型路由和基础 fallback",[150,274,275],{},"✅ Dashboard 看消耗明细",[150,277,278],{},"⚠️ 多收 5% 路由费",[150,280,281],{},"⚠️ 偶尔有限流（高峰期 Claude 请求排队）",[150,283,284],{},"❌ 所有请求过 OpenRouter 服务器，数据隐私无保障",[259,286,287,290],{},[153,288,289],{},"成本","：日均 $50（模型费 $47.6 + OpenRouter 路由费 $2.4）",[179,292,294],{"id":293},"portkey生产级控制","Portkey：生产级控制",[184,296,300],{"className":297,"code":298,"language":299,"meta":189,"style":189},"language-javascript shiki shiki-themes github-light github-dark","const portkey = new Portkey({\n  config: {\n    strategy: { mode: \"fallback\" },\n    targets: [\n      { provider: \"anthropic\", override_params: { model: \"claude-sonnet-4\" } },\n      { provider: \"openai\", override_params: { model: \"gpt-5\" } },\n    ]\n  }\n})\n","javascript",[191,301,302,307,312,317,322,327,332,337,342],{"__ignoreMap":189},[194,303,304],{"class":196,"line":197},[194,305,306],{},"const portkey = new Portkey({\n",[194,308,309],{"class":196,"line":208},[194,310,311],{},"  config: {\n",[194,313,314],{"class":196,"line":220},[194,315,316],{},"    strategy: { mode: \"fallback\" },\n",[194,318,319],{"class":196,"line":236},[194,320,321],{},"    targets: [\n",[194,323,324],{"class":196,"line":247},[194,325,326],{},"      { provider: \"anthropic\", override_params: { model: \"claude-sonnet-4\" } },\n",[194,328,329],{"class":196,"line":253},[194,330,331],{},"      { provider: \"openai\", override_params: { model: \"gpt-5\" } },\n",[194,333,334],{"class":196,"line":5},[194,335,336],{},"    ]\n",[194,338,339],{"class":196,"line":8},[194,340,341],{},"  }\n",[194,343,345],{"class":196,"line":344},9,[194,346,347],{},"})\n",[259,349,350,264],{},[153,351,263],{},[147,353,354,357,360,363,366,369],{},[150,355,356],{},"✅ Fallback 逻辑强大——主模型挂了 0 延迟切备用",[150,358,359],{},"✅ 负载均衡——多个 API key 轮询，突破单 key 限流",[150,361,362],{},"✅ 语义缓存——相似请求命中缓存，省钱",[150,364,365],{},"⚠️ 配置比 OpenRouter 复杂",[150,367,368],{},"⚠️ 托管版数据也过第三方",[150,370,371],{},"❌ 无中国区节点",[259,373,374,376],{},[153,375,289],{},"：日均 $48（模型费 $47.6 + Portkey $0.4 缓存省了点）",[179,378,380],{"id":379},"自建-litellm完全可控","自建 LiteLLM：完全可控",[184,382,386],{"className":383,"code":384,"language":385,"meta":189,"style":189},"language-bash shiki shiki-themes github-light github-dark","# 部署\ndocker run -p 4000:4000 \\\n  -e ANTHROPIC_API_KEY=xxx \\\n  -e OPENAI_API_KEY=xxx \\\n  ghcr.io\u002Fberriai\u002Flitellm:main\n","bash",[191,387,388,393,412,422,431],{"__ignoreMap":189},[194,389,390],{"class":196,"line":197},[194,391,392],{"class":256},"# 部署\n",[194,394,395,399,402,406,409],{"class":196,"line":208},[194,396,398],{"class":397},"sScJk","docker",[194,400,401],{"class":229}," run",[194,403,405],{"class":404},"sj4cs"," -p",[194,407,408],{"class":229}," 4000:4000",[194,410,411],{"class":404}," \\\n",[194,413,414,417,420],{"class":196,"line":220},[194,415,416],{"class":404},"  -e",[194,418,419],{"class":229}," ANTHROPIC_API_KEY=xxx",[194,421,411],{"class":404},[194,423,424,426,429],{"class":196,"line":236},[194,425,416],{"class":404},[194,427,428],{"class":229}," OPENAI_API_KEY=xxx",[194,430,411],{"class":404},[194,432,433],{"class":196,"line":247},[194,434,435],{"class":229},"  ghcr.io\u002Fberriai\u002Flitellm:main\n",[184,437,439],{"className":186,"code":438,"language":188,"meta":189,"style":189},"client = openai.OpenAI(\n    base_url=\"http:\u002F\u002Flocalhost:4000\u002Fv1\",\n    api_key=\"anything\"\n)\n",[191,440,441,449,460,469],{"__ignoreMap":189},[194,442,443,445,447],{"class":196,"line":197},[194,444,211],{"class":204},[194,446,214],{"class":200},[194,448,217],{"class":204},[194,450,451,453,455,458],{"class":196,"line":208},[194,452,224],{"class":223},[194,454,214],{"class":200},[194,456,457],{"class":229},"\"http:\u002F\u002Flocalhost:4000\u002Fv1\"",[194,459,233],{"class":204},[194,461,462,464,466],{"class":196,"line":220},[194,463,239],{"class":223},[194,465,214],{"class":200},[194,467,468],{"class":229},"\"anything\"\n",[194,470,471],{"class":196,"line":236},[194,472,250],{"class":204},[259,474,475,264],{},[153,476,263],{},[147,478,479,482,485,488,491,494],{},[150,480,481],{},"✅ 完全自托管，数据不出公司",[150,483,484],{},"✅ 纯透传，0 额外费用",[150,486,487],{},"✅ 统一 100+ 提供商到 OpenAI 格式",[150,489,490],{},"⚠️ 需要自己运维（监控、备份、升级）",[150,492,493],{},"⚠️ Fallback 配置是 YAML，不如 Portkey 灵活",[150,495,496],{},"❌ 没有托管 Dashboard（要自己接 Grafana）",[259,498,499,501],{},[153,500,289],{},"：日均 $47.6（纯模型费）+ 服务器费 $2\u002F天 ≈ $49.6",[16,503,504],{"id":504},"延迟对比",[21,506,507,523],{},[24,508,509],{},[27,510,511,514,517,520],{},[30,512,513],{},"方案",[30,515,516],{},"P50 延迟",[30,518,519],{},"P95 延迟",[30,521,522],{},"说明",[43,524,525,539,552,565],{},[27,526,527,530,533,536],{},[48,528,529],{},"直连 OpenAI",[48,531,532],{},"320ms",[48,534,535],{},"850ms",[48,537,538],{},"基准",[27,540,541,543,546,549],{},[48,542,35],{},[48,544,545],{},"380ms",[48,547,548],{},"1100ms",[48,550,551],{},"+60ms 路由开销",[27,553,554,556,559,562],{},[48,555,38],{},[48,557,558],{},"350ms",[48,560,561],{},"900ms",[48,563,564],{},"+30ms，缓存命中更快",[27,566,567,570,573,576],{},[48,568,569],{},"LiteLLM",[48,571,572],{},"340ms",[48,574,575],{},"880ms",[48,577,578],{},"+20ms，自建网络近",[259,580,581],{},"LiteLLM 延迟最低（自建内网），OpenRouter 最慢（多一跳）。",[16,583,584],{"id":584},"可靠性对比",[259,586,587],{},"2 周内记录的故障：",[21,589,590,605],{},[24,591,592],{},[27,593,594,596,599,602],{},[30,595,513],{},[30,597,598],{},"故障次数",[30,600,601],{},"平均恢复",[30,603,604],{},"影响",[43,606,607,620,633],{},[27,608,609,611,614,617],{},[48,610,35],{},[48,612,613],{},"2 次（限流）",[48,615,616],{},"15 分钟",[48,618,619],{},"请求排队",[27,621,622,624,627,630],{},[48,623,38],{},[48,625,626],{},"0 次",[48,628,629],{},"—",[48,631,632],{},"Fallback 生效",[27,634,635,637,640,643],{},[48,636,569],{},[48,638,639],{},"1 次（OOM）",[48,641,642],{},"5 分钟",[48,644,645],{},"重启恢复",[259,647,648],{},"Portkey 最稳——fallback 机制让上游故障对用户不可见。",[16,650,651],{"id":651},"最终推荐",[184,653,658],{"className":654,"code":656,"language":657},[655],"language-text","个人 \u002F 试水 → OpenRouter（5 分钟接入）\n生产团队 → Portkey（fallback + 缓存 + 可观测）\n企业 \u002F 合规 → 自建 LiteLLM（数据自有 + 0 路由费）\n\n成本敏感 + 有运维 → LiteLLM（省 5% 路由费）\n快速上线 → OpenRouter（最快）\n高可用 → Portkey（fallback 最强）\n","text",[191,659,656],{"__ignoreMap":189},[16,661,662],{"id":662},"踩坑记录",[664,665,666,672,678,684],"ol",{},[150,667,668,671],{},[153,669,670],{},"OpenRouter 限流不分模型","——所有模型共享一个 rate limit，高峰期排队。",[150,673,674,677],{},[153,675,676],{},"Portkey 缓存要配 TTL","——默认永久缓存，prompt 微调就命中不了。",[150,679,680,683],{},[153,681,682],{},"LiteLLM 内存","——高并发时 OOM，调大容器内存或加 Redis 做队列。",[150,685,686,689],{},[153,687,688],{},"三家都不支持流式 fallback","——fallback 只在非流式请求生效，流式请求主模型挂了就直接报错。",[691,692,693],"style",{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}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 .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}",{"title":189,"searchDepth":220,"depth":220,"links":695},[696,697,698,703,704,705,706],{"id":18,"depth":208,"text":19},{"id":145,"depth":208,"text":145},{"id":177,"depth":208,"text":177,"children":699},[700,701,702],{"id":181,"depth":220,"text":182},{"id":293,"depth":220,"text":294},{"id":379,"depth":220,"text":380},{"id":504,"depth":208,"text":504},{"id":584,"depth":208,"text":584},{"id":651,"depth":208,"text":651},{"id":662,"depth":208,"text":662},"\u002Fog\u002Freview\u002Fllm-gateway-comparison.png","三种 LLM API 统一方案对比——OpenRouter（托管聚合）、Portkey（Gateway + fallback）、自建 LiteLLM（开源自托管）。在同一个多模型应用里跑了 2 周，记录了延迟、成本、可靠性。","md",{},true,"\u002Freview\u002Fllm-gateway-comparison","2026-06-21",[715,716,717],"coding\u002Fapi\u002Fopenrouter","coding\u002Fapi\u002Fportkey","coding\u002Fapi\u002Flitellm",{"title":11,"description":708},"review\u002Fllm-gateway-comparison",[721,722,35,38,569],"API 网关","对比","省事用 OpenRouter，生产级控制用 Portkey，完全自托管用 LiteLLM。成本敏感 + 有运维能力 → LiteLLM。","8md3Mw0ZXoBA5A5oxP45VovigdwkT8vpBMLy0BlrUmI",1782316490334]