尧图精选

9Router 通用工具接入指南:用 OpenAI 兼容 API 连接任意自定义应用与框架

🕒 发布时间:2026/9/11 23:57:49 📁 来源:尧图网络
9Router 通用工具接入指南用 OpenAI 兼容 API 连接任意自定义应用与框架【免费下载链接】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.项目地址: https://gitcode.com/GitHub_Trending/9r/9router9Router 提供了完整的 OpenAI 兼容 API 端点任何支持 OpenAI API 格式的工具——无论是自研脚本、测试工具、CLI 工具、第三方应用还是开发框架——都可以通过统一的 Base URL、API Key 与模型命名规则接入。本文以 9Router 的 OpenAI 兼容端点为骨架结合仓库源码中真实的模型路由实现讲解从环境准备、基础调用到批处理、流式、多模型对比、错误处理与故障排查的完整接入方案帮助你快速把 9Router 的能力接入到自己的技术栈中。概述OpenAI 兼容端点的适用范围9Router 的核心设计目标之一是为各类工具提供一个统一的、与 OpenAI API 格式兼容的接入层。只要你的工具支持 OpenAI 格式就能连接 9Router包括自定义脚本与应用程序Python、Node.js 等API 客户端与测试工具Postman、Insomnia、cURL 等CLI 工具与命令行工具第三方集成开发框架LangChain、LlamaIndex 等这套通用接入模式与仓库中针对特定工具如 cursor.md、continue.md、claude-code.md的专属指南互补专属指南针对特定工具的配置细节而本指南覆盖所有未列出的工具与自定义应用。通用接入模式任何 OpenAI 兼容工具都可以通过以下三个设置连接到 9Router。本地部署的 9RouterBase URL: http://localhost:20128/v1 API Key: your-api-key-from-dashboard Model: any 9Router model (cc/*, cx/*, glm/*, etc.)云端 9RouterBase URL: https://9router.com/v1 API Key: your-api-key-from-dashboard Model: any 9Router model (cc/*, cx/*, glm/*, etc.)从仓库源码看/v1前缀下的路由是 9Router 对外暴露的 OpenAI 兼容 API 根路径参见 src/app/api/v1 目录结构其中 chat/completions/route.js 处理POST /v1/chat/completions聊天补全请求models/route.js 处理GET /v1/models模型列表请求route.js 则将根路径的GET/OPTIONS委托给 models 路由。所有路由都配置了Access-Control-Allow-Origin: *的 CORS 响应头方便浏览器端与跨域场景直接调用。模型命名规范alias/model-id9Router 的模型名遵循alias/model-id格式其中 alias 是提供商前缀。例如cc/前缀对应 Claude Code 提供商注册表见 open-sse/providers/registry/claude.jsalias: cccx/前缀对应 Codex 提供商open-sse/providers/registry/codex.jsalias: cxglm/前缀对应 GLM Coding 提供商open-sse/providers/registry/glm.jsalias: glm实际可用的模型列表由 9Router 根据你的账户连接动态生成在 models/route.js 的buildModelsList实现中会合并你已启用的提供商连接getProviderConnections、自定义模型getCustomModels、模型别名getModelAliases与 Combo 组合最终拼装成 OpenAI 格式的{ id, object, owned_by }模型对象列表。因此接入时请通过GET /v1/models查询你账户下真实可用的模型名见下文模型不存在404的排查方法。可用模型示例文档给出的典型模型名示例如下以接入时GET /v1/models实际返回为准Claude 模型Anthropiccc/前缀cc/claude-opus-4-5-20251101cc/claude-sonnet-4-20250514cc/claude-haiku-4-20250514DeepSeek 模型cx/前缀cx/deepseek-chatcx/deepseek-reasonerGLM 模型智谱 AIglm/前缀glm/glm-4-plusglm/glm-4-flash需要说明的是模型目录随仓库迭代持续更新上述名称应视为接入时的示例代码注册表中的模型清单可能与文档略有出入。例如 claude.js 当前登记的模型为claude-opus-5、claude-fable-5、claude-sonnet-5、claude-haiku-4-5-20251001glm.js 当前登记了glm-5.2、glm-5.1、glm-5、glm-4.7、glm-4.6v等。接入任何工具前都应先通过/v1/models确认实际可用模型。集成示例Python 与 Node.jsPython 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)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 与 HTTP 客户端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、Insomnia请求POST http://localhost:20128/v1/chat/completionsHeadersContent-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 }这些请求都会进入 chat/completions/route.js 的POST处理器随后委托给 src/sse/handlers/chat.js 的handleChat完成鉴权、模型解析与上游转发。从源码看handleChat会从Authorization请求头提取 API Key 进行校验chat.js因此鉴权头必须严格采用Bearer your-api-key格式。集成示例LangChain 与 LlamaIndexLangChain 集成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)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)LangChain 的ChatOpenAI与 LlamaIndex 的OpenAI底层都是 OpenAI 兼容客户端只需把openai_api_base/api_base指向 9Router 的/v1端点、model_name/model填 9Router 模型名即可无需额外适配层。自定义脚本示例批处理脚本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))流式响应处理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传入chat.completions.create即可获得 SSE 流式输出。9Router 的/v1/chat/completions路由对流式与非流式请求统一交给 handleChat 处理客户端无需关心上游模型是否原生支持流式。多模型对比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)同一 prompt 轮询多个模型可用于质量对比或作为 fallback 候选。9Router 的自动回退auto-fallback能力与配额跟踪quota-tracking可在此场景下进一步组合使用相关机制可参考 features/combos.md。通用集成模式环境变量将凭证放入.env避免在代码中硬编码# .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) )错误处理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})重试逻辑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故障排查连接问题现象无法连接到 9Router# 检查 9Router 是否运行 curl http://localhost:20128/health # 预期响应: {status: ok}注意当前仓库中健康检查端点 src/app/api/health/route.js 返回的是{ ok: true }而非文档示例中的{status: ok}。判断 9Router 是否存活以实际返回的 HTTP 200 为准。解决方案确认 9Router 进程已启动检查 20128 端口未被占用或防火墙拦截确保 Base URL 完整必须包含/v1后缀鉴权错误401 Unauthorized现象Error: Invalid API key解决方案从 dashboard 核实 API Key 是否正确检查 Authorization 头格式是否为Bearer your-api-key确保 API Key 前后没有多余空格或换行符模型不存在404现象Error: Model cc/claude-opus not found解决方案使用精确的模型名区分大小写查询可用模型curl http://localhost:20128/v1/models确认该模型在你的套餐/连接中已启用/v1/models返回的列表由buildModelsList实时聚合你的活跃连接、Combo 与自定义模型生成models/route.js并以 OpenAI 标准格式{ object: list, data: [...] }返回可直接被 OpenAI SDK 的模型枚举功能消费。超时问题现象Error: Request timed out after 30s解决方案增大客户端配置中的 timeout对时间敏感的任务改用更快的模型检查到 9Router 的网络连通性限流429 Too Many Requests现象Error: Rate limit exceeded解决方案实现指数退避重试降低请求频率在 dashboard 中查看限流额度必要时考虑升级套餐最佳实践安全将 API Key 存放在环境变量中切勿把 API Key 提交到版本控制云端部署使用 HTTPS定期轮换 API Key性能根据任务复杂度选择合适的模型对重复查询实现缓存长响应使用流式输出尽可能批量请求错误处理始终编写 try-catch 代码块添加带指数退避的重试逻辑记录错误日志便于调试提供 fallback 机制成本优化简单任务选择性价比更高的模型合适场景下缓存响应在 dashboard 中监控用量在代码中设置请求上限下一步配置 Cursor 进行 IDE 集成设置 Continue 用于 VSCode探索 CLI 用法了解模型选择查看 API Reference【免费下载链接】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.项目地址: https://gitcode.com/GitHub_Trending/9r/9router创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
上一篇/下一篇内容由系统自动关联 返回资讯列表 →