n2r-dev / README.md
cacodex's picture
Upload 17 files
c0139c7 verified
---
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