用集成實(shí)戰(zhàn))
9Router OpenAI 兼容 API 接入指南任意工具與自定義應(yīng)用集成實(shí)戰(zhàn)【免費(fèi)下載鏈接】9routerUnlimited FREE AI coding. Connect Claude Code, Codex, Cursor, Cline, Copilot, Antigravity to FREE Claude/GPT/Gemini via 40 providers. Auto-fallback, RTK -40% tokens, never hit limits.項(xiàng)目地址: https://gitcode.com/GitHub_Trending/9r/9router9Router 對(duì)外提供一套 OpenAI 兼容的 API 端點(diǎn)任何支持 OpenAI API 格式的工具——從自研腳本、HTTP 客戶端到 LangChain、LlamaIndex 等開發(fā)框架——都可以通過統(tǒng)一配置接入直接使用其匯聚的多家模型Claude、DeepSeek、GLM 等。本文以官方集成文檔為主線結(jié)合倉庫源碼API 路由、provider 注冊(cè)表、模型解析邏輯展開講解讀完即可掌握通用接入模式、常用代碼示例、流式處理、錯(cuò)誤處理與排障方法。集成總覽一套 OpenAI 兼容端點(diǎn)連接全部模型9Router 的核心價(jià)值在于將不同廠商、不同協(xié)議的模型Anthropic 的 Claude、DeepSeek、智譜 GLM 等統(tǒng)一收斂到一個(gè) OpenAI 格式的端點(diǎn)后面。這意味著你不必為每個(gè)模型廠商單獨(dú)寫一套客戶端代碼只要你的工具支持 OpenAI 格式就能直接復(fù)用。從源碼結(jié)構(gòu)看這一能力由兩大部分支撐API 路由層src/app/api/v1/目錄下實(shí)現(xiàn)了完整的 OpenAI 兼容端點(diǎn)包括chat/completions對(duì)話補(bǔ)全、models模型列表、embeddings、images、audio、responses等全部掛在/v1前綴之下。其中 聊天補(bǔ)全端點(diǎn) 將請(qǐng)求直接交給open-sse/translator中的翻譯管線處理。Provider 注冊(cè)表層open-sse/providers/registry/下每個(gè) provider 一個(gè)文件聲明了各自的alias別名、transport上游地址與協(xié)議格式、models模型清單。例如claude.js的別名為cccodex.js的別名為cxglm.js的別名為glm——這正是文檔中模型名cc/*、cx/*、glm/*前綴的來源。因此接入方只需要關(guān)心三件事Base URL、API Key、模型名。通用接入配置任何 OpenAI 兼容工具接入 9Router 時(shí)都使用以下三要素配置項(xiàng)本地 9Router云端 9RouterBase URLhttp://localhost:20128/v1https://9router.com/v1API Key儀表盤中獲取的 API Key儀表盤中獲取的 API KeyModel任意 9Router 模型cc/*、cx/*、glm/*等任意 9Router 模型cc/*、cx/*、glm/*等幾點(diǎn)說明端口20128是 9Router 的 API 服務(wù)端口dashboard 端口為3000在 本地部署文檔 中有明確說明如端口被占用可參考該文檔排查例如lsof -i :20128檢查占用進(jìn)程。Base URL 必須帶上/v1后綴這是 OpenAI 兼容協(xié)議的慣例路徑9Router 的所有兼容端點(diǎn)chat、models、embeddings 等都掛在該前綴下。本地部署與云端部署除了 Base URL 不同其余接入方式完全一致。可用模型一覽文檔給出了三類常用模型的完整 ID均可在接入時(shí)直接使用Claude 系列Anthropic前綴cc/模型 ID說明cc/claude-opus-4-5-20251101Claude Opus 4.5cc/claude-sonnet-4-20250514Claude Sonnet 4文檔示例中大量使用cc/claude-haiku-4-20250514Claude Haiku 4DeepSeek 系列前綴cx/模型 ID說明cx/deepseek-chatDeepSeek 對(duì)話模型倉庫中對(duì)應(yīng) DeepSeek V3.2 Chat見 deepseek.jscx/deepseek-reasonerDeepSeek 推理模型GLM 系列智譜 Zhipu AI前綴glm/模型 ID說明glm/glm-4-plusGLM-4 Plusglm/glm-4-flashGLM-4 Flash從 provider 注冊(cè)表源碼可以印證前綴機(jī)制的實(shí)現(xiàn)cc、cx、glm分別是 claude.js、codex.js、glm.js 中聲明的alias。模型列表端點(diǎn)會(huì)據(jù)此把每個(gè)模型輸出為${alias}/${modelId}的形式見 模型列表構(gòu)建邏輯。模型名區(qū)分大小寫必須使用完整精確的 ID。提示實(shí)際可用的模型取決于你在儀表盤中啟用的 provider 與配額完整的模型清單可通過GET /v1/models實(shí)時(shí)查詢見下文排障章節(jié)。各語言/工具集成示例Python OpenAI SDKfrom openai import OpenAI client OpenAI( api_keyyour-api-key-from-dashboard, base_urlhttp://localhost:20128/v1 ) response client.chat.completions.create( modelcc/claude-sonnet-4-20250514, messages[ {role: user, content: Hello, how are you?} ] ) print(response.choices[0].message.content)要點(diǎn)base_url指向本地 9Router 的/v1端點(diǎn)model直接使用cc/*這類帶前綴的 9Router 模型名即可客戶端無需感知上游到底是 Anthropic 還是其他廠商。Node.js OpenAI SDKimport OpenAI from openai; const client new OpenAI({ apiKey: your-api-key-from-dashboard, baseURL: http://localhost:20128/v1 }); const response await client.chat.completions.create({ model: cc/claude-sonnet-4-20250514, messages: [ { role: user, content: Hello, how are you? } ] }); console.log(response.choices[0].message.content);cURL 命令curl http://localhost:20128/v1/chat/completions \ -H Content-Type: application/json \ -H Authorization: Bearer your-api-key-from-dashboard \ -d { model: cc/claude-sonnet-4-20250514, messages: [ {role: user, content: Hello, how are you?} ] }HTTP 客戶端Postman、InsomniaRequest:POST http://localhost:20128/v1/chat/completionsHeaders:Content-Type: application/json Authorization: Bearer your-api-key-from-dashboardBody:{ model: cc/claude-sonnet-4-20250514, messages: [ {role: user, content: Hello, how are you?} ], temperature: 0.7, max_tokens: 1000 }從服務(wù)端實(shí)現(xiàn)看聊天補(bǔ)全路由 直接復(fù)用open-sse翻譯管線handleChat位于 src/sse/handlers/chat.js完成協(xié)議轉(zhuǎn)換、請(qǐng)求轉(zhuǎn)發(fā)與響應(yīng)回傳并已在OPTIONS預(yù)檢中放開跨域Access-Control-Allow-Origin: *因此瀏覽器端與本地工具都能無障礙調(diào)用。LangChain 集成from langchain.chat_models import ChatOpenAI from langchain.schema import HumanMessage llm ChatOpenAI( model_namecc/claude-sonnet-4-20250514, openai_api_keyyour-api-key-from-dashboard, openai_api_basehttp://localhost:20128/v1, temperature0.7 ) messages [HumanMessage(contentExplain quantum computing)] response llm(messages) print(response.content)LangChain 的ChatOpenAI天然支持自定義openai_api_base把 9Router 當(dāng)作普通的 OpenAI 兼容服務(wù)即可無縫接入 RAG、Agent、Chain 等上層能力。LlamaIndex 集成from llama_index.llms import OpenAI llm OpenAI( modelcc/claude-sonnet-4-20250514, api_keyyour-api-key-from-dashboard, api_basehttp://localhost:20128/v1 ) response llm.complete(What is machine learning?) print(response.text)自定義腳本實(shí)戰(zhàn)批量處理、流式與多模型對(duì)比批量處理腳本import openai import json openai.api_key your-api-key-from-dashboard openai.api_base http://localhost:20128/v1 def process_batch(prompts, modelcx/deepseek-chat): results [] for prompt in prompts: response openai.ChatCompletion.create( modelmodel, messages[{role: user, content: prompt}] ) results.append({ prompt: prompt, response: response.choices[0].message.content }) return results prompts [ Explain AI in one sentence, What is machine learning?, Define neural networks ] results process_batch(prompts) print(json.dumps(results, indent2))批量場景建議優(yōu)先選擇成本更低的模型如cx/deepseek-chat把耗時(shí)任務(wù)離線跑完。流式響應(yīng)處理import OpenAI from openai; const client new OpenAI({ apiKey: your-api-key-from-dashboard, baseURL: http://localhost:20128/v1 }); async function streamResponse(prompt) { const stream await client.chat.completions.create({ model: cc/claude-sonnet-4-20250514, messages: [{ role: user, content: prompt }], stream: true }); for await (const chunk of stream) { const content chunk.choices[0]?.delta?.content || ; process.stdout.write(content); } } streamResponse(Write a short story about AI);流式stream: true適合長文本生成場景可以邊生成邊展示顯著降低首字延遲感知。9Router 的翻譯管線對(duì) OpenAI 流式協(xié)議做了完整兼容delta.content增量逐塊返回與原生 OpenAI 行為一致。多模型對(duì)比腳本from openai import OpenAI client OpenAI( api_keyyour-api-key-from-dashboard, base_urlhttp://localhost:20128/v1 ) models [ cc/claude-sonnet-4-20250514, cx/deepseek-chat, glm/glm-4-plus ] prompt Explain quantum computing in simple terms for model in models: response client.chat.completions.create( modelmodel, messages[{role: user, content: prompt}] ) print(f\n {model} ) print(response.choices[0].message.content)由于所有模型都走同一個(gè)端點(diǎn)和同一套請(qǐng)求格式橫向?qū)Ρ炔煌瑥S商模型的輸出質(zhì)量、風(fēng)格與速度變得非常輕量——這正是一致 API 抽象帶來的直接收益。通用集成模式環(huán)境變量、錯(cuò)誤處理與重試環(huán)境變量管理憑據(jù)# .env file ROUTER_API_KEYyour-api-key-from-dashboard ROUTER_BASE_URLhttp://localhost:20128/v1 ROUTER_MODELcc/claude-sonnet-4-20250514import os from openai import OpenAI client OpenAI( api_keyos.getenv(ROUTER_API_KEY), base_urlos.getenv(ROUTER_BASE_URL) )把 API Key、Base URL、默認(rèn)模型放入環(huán)境變量可以在不改代碼的情況下切換本地/云端環(huán)境同時(shí)避免把密鑰硬編碼進(jìn)倉庫。錯(cuò)誤處理from openai import OpenAI, OpenAIError client OpenAI( api_keyyour-api-key, base_urlhttp://localhost:20128/v1 ) try: response client.chat.completions.create( modelcc/claude-sonnet-4-20250514, messages[{role: user, content: Hello}] ) print(response.choices[0].message.content) except OpenAIError as e: print(fError: {e})指數(shù)退避重試import time from openai import OpenAI, RateLimitError client OpenAI( api_keyyour-api-key, base_urlhttp://localhost:20128/v1 ) def chat_with_retry(prompt, max_retries3): for attempt in range(max_retries): try: response client.chat.completions.create( modelcc/claude-sonnet-4-20250514, messages[{role: user, content: prompt}] ) return response.choices[0].message.content except RateLimitError: if attempt max_retries - 1: time.sleep(2 ** attempt) # Exponential backoff else: raise故障排查指南連接問題現(xiàn)象無法連接 9Router# 檢查 9Router 是否在運(yùn)行 curl http://localhost:20128/health # 期望響應(yīng) {ok: true}說明倉庫中 健康檢查端點(diǎn) 實(shí)際返回的是{ok: true}而非文檔示例中的{status: ok}以實(shí)際部署版本為準(zhǔn)。健康檢查返回 JSON 即代表 API 服務(wù)存活。解決方案確認(rèn) 9Router 已啟動(dòng)運(yùn)行檢查20128端口是否被防火墻/占用參考 本地部署文檔 中的端口排查方法確認(rèn) Base URL 寫全包含/v1后綴。認(rèn)證錯(cuò)誤現(xiàn)象401 UnauthorizedError: Invalid API key解決方案在儀表盤重新核對(duì) API Key檢查 Authorization 頭格式是否為Bearer your-api-key確認(rèn) API Key 前后沒有多余空格或換行符。模型不存在現(xiàn)象404 Model not foundError: Model cc/claude-opus not found解決方案使用精確且完整的模型名區(qū)分大小寫例如cc/claude-opus-4-5-20251101通過curl http://localhost:20128/v1/models查看當(dāng)前實(shí)際可用的模型列表確認(rèn)模型在你當(dāng)前的套餐/配額中已啟用。模型列表接口返回的正是object: listdata[]的標(biāo)準(zhǔn) OpenAI 格式見 GET /v1/models 實(shí)現(xiàn)每個(gè)條目的id字段即形如cc/...、cx/...、glm/...的完整可用模型名此外該端點(diǎn)還支持按能力類型image、tts、stt、embedding、web 等過濾的子路由/v1/models/{kind}。超時(shí)問題現(xiàn)象請(qǐng)求超時(shí)Error: Request timed out after 30s解決方案在客戶端配置中調(diào)大超時(shí)時(shí)間對(duì)時(shí)間敏感的任務(wù)改用更快的模型檢查到 9Router 的網(wǎng)絡(luò)連接質(zhì)量。限流問題現(xiàn)象429 Too Many RequestsError: Rate limit exceeded解決方案實(shí)現(xiàn)指數(shù)退避重試見上文示例降低請(qǐng)求頻率在儀表盤查看限流配額必要時(shí)升級(jí)套餐。最佳實(shí)踐安全API Key 一律存放在環(huán)境變量中嚴(yán)禁硬編碼絕不把 API Key 提交到版本控制系統(tǒng).gitignore 應(yīng)包含.env云端部署務(wù)必使用 HTTPS定期輪換 API Key。性能按任務(wù)復(fù)雜度選擇合適的模型簡單任務(wù)用便宜快速的模型如glm/glm-4-flash、cx/deepseek-chat對(duì)重復(fù)查詢實(shí)現(xiàn)緩存長響應(yīng)使用流式輸出盡量批量合并請(qǐng)求。錯(cuò)誤處理始終編寫 try-catch 塊加入帶指數(shù)退避的重試邏輯記錄錯(cuò)誤日志便于排查提供降級(jí)/備用機(jī)制如主模型失敗后切換到備用模型。成本優(yōu)化簡單任務(wù)選擇成本更低的模型適當(dāng)時(shí)機(jī)緩存響應(yīng)在儀表盤持續(xù)監(jiān)控用量在代碼層設(shè)置請(qǐng)求上限。延伸閱讀配置 Cursor IDE 集成在 VSCode 中配置 Continue配置 Cline 集成配置 Claude Code 集成CLI 基礎(chǔ)用法本地部署指南模型選擇概覽【免費(fèi)下載鏈接】9routerUnlimited FREE AI coding. Connect Claude Code, Codex, Cursor, Cline, Copilot, Antigravity to FREE Claude/GPT/Gemini via 40 providers. Auto-fallback, RTK -40% tokens, never hit limits.項(xiàng)目地址: https://gitcode.com/GitHub_Trending/9r/9router創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考