| ---
|
| title: NVIDIA NIM 响应网关
|
| sdk: docker
|
| app_port: 7860
|
| pinned: false
|
| ---
|
|
|
| # NVIDIA NIM 响应网关
|
|
|
| 这是一个面向公开使用的 NVIDIA NIM 兼容网关,同时支持 OpenAI `/v1/responses` 和 Anthropic `/v1/messages` 风格请求。 |
|
|
| 它不在本地保存任何用户的 NIM API Key。用户调用本项目时,需要自己通过请求头携带 NIM Key,网关只负责协议转换、性能优化、聚合统计和官方模型目录展示。
|
|
|
| ## 主要能力
|
|
|
| - 将 NVIDIA 官方 `POST /v1/chat/completions` 转换为 OpenAI 风格的 `POST /v1/responses` |
| - 将 NVIDIA 官方 `POST /v1/chat/completions` 转换为 Anthropic 风格的 `POST /v1/messages` |
| - 支持 tool calling / function calling |
| - 支持 Anthropic `tools` / `tool_choice` / `tool_result` 以及 Claude Code 常见的客户端工具调用形态 |
| - 支持 `function_call_output` 回灌 |
| - 支持 `previous_response_id` 对话续写 |
| - 对 `/v1/responses` 和 `/v1/responses/{response_id}` 使用用户自带的 NIM Key 做鉴权与上游转发 |
| - 对 `/v1/messages` 使用用户自带的 NIM Key 做鉴权与上游转发,并支持 Anthropic SSE 风格流式事件 |
| - `/v1/models` 直接返回来自 NVIDIA 官方 `/v1/models` 的同步结果,保持 OpenAI 风格结构 |
| - `/` 为白色主题的模型健康度页面,按 10 分钟成功率矩阵展示 MODEL_LIST 中的模型 |
| - `/model_list` 为独立的白色主题官方模型列表页面,支持按提供商筛选模型 |
| - 模型提供商卡片为固定高度,避免模型较多时卡片过长 |
| - 使用共享 HTTP 连接池、SQLite WAL 和异步线程化落库来增强高并发场景下的转发性能 |
|
|
| ## 用户如何调用
|
|
|
| 对于 `POST /v1/responses` 和 `POST /v1/messages`,请通过下面任意一种方式传入你自己的 NVIDIA NIM Key: |
|
|
| - `Authorization: Bearer <你的 NIM Key>`
|
| - `X-API-Key: <你的 NIM Key>`
|
|
|
| 网关不会把原始 Key 持久化到数据库中,只会在内存中用于当前请求,并对响应链路使用 Key 哈希做隔离。
|
|
|
| ## 官方模型目录同步
|
|
|
| 项目会定时从官方接口拉取模型列表:
|
|
|
|
|
|
|
|
|
| `https://integrate.api.nvidia.com/v1/models`
|
|
|
| 同步后的模型目录同时用于:
|
|
|
|
|
| - `GET /v1/models` |
| - `GET /models` |
| - `GET /api/catalog` |
|
|
| ## 页面与接口
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 页面: |
|
|
| - `GET /`:模型健康度页面 |
| - `GET /model_list`:官方模型列表页面 |
|
|
| 前端数据接口: |
|
|
| - `GET /api/dashboard`
|
| - `GET /api/catalog`
|
|
|
| 兼容接口: |
|
|
| - `POST /v1/responses` |
| - `POST /v1/messages` |
| - `GET /v1/responses/{response_id}` |
| - `GET /v1/models` |
| - `GET /models` |
|
|
| ## 环境变量
|
|
|
| - `NVIDIA_API_BASE`:默认 `https://integrate.api.nvidia.com/v1`
|
| - `MODEL_LIST`:健康度页面监控模型列表,逗号分隔
|
| - `MODEL_SYNC_INTERVAL_MINUTES`:官方模型目录同步周期,默认 `30`
|
| - `PUBLIC_HISTORY_BUCKETS`:健康页展示最近多少个 10 分钟时间片,默认 `6`
|
| - `REQUEST_TIMEOUT_SECONDS`:上游请求超时,默认 `90`
|
| - `MAX_UPSTREAM_CONNECTIONS`:共享连接池最大连接数,默认 `512`
|
| - `MAX_KEEPALIVE_CONNECTIONS`:共享连接池最大 keep-alive 连接数,默认 `128`
|
| - `DATABASE_PATH`:默认 `./data.sqlite3`
|
|
|
| ## 本地验证
|
|
|
| 我已经完成两层本地联调:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1. Mock 联调:
|
| - 通过 `scripts/local_smoke_test.py` 验证了协议转换、官方模型同步、用户 Key 鉴权、`previous_response_id`、tool call、健康页数据接口、模型页数据接口和两个独立页面路由。
|
|
|
| 2. 真实上游联调:
|
| - 通过 `scripts/live_e2e_validation.py` 使用提供的测试 NIM Key,真实调用了 NVIDIA 官方模型目录和实际模型响应。
|
| - 实测结果:`live_gateway_ok`,并成功通过 `z-ai/glm5` 得到 `OK`。
|
|
|
| ## 部署到 Hugging Face Space
|
|
|
|
|
| 1. 新建 Hugging Face Space,SDK 选择 `Docker`
|
| 2. 将 `hf_space` 目录内的内容作为 Space 根目录上传
|
| 3. 按需配置 `MODEL_LIST` 等环境变量
|
| 4. 启动后即可直接公开使用
|
|
|
| ## 参考资料
|
|
|
| - OpenAI Responses API: https://platform.openai.com/docs/guides/responses-vs-chat-completions |
| - OpenAI Function Calling: https://platform.openai.com/docs/guides/function-calling |
| - Anthropic Messages API: https://docs.anthropic.com/en/api/messages |
| - Anthropic Tool Use: https://docs.anthropic.com/en/docs/agents-and-tools/tool-use/overview |
| - NVIDIA Build: https://build.nvidia.com/ |
| - NVIDIA NIM API 文档: https://docs.api.nvidia.com/ |
| - NVIDIA NIM + Claude Code 集成: https://docs.nvidia.com/nim/large-language-models/latest/ai-assistant-integrations/claude-code.html |
|
|