REST API 概述
NIM 提供完全兼容 OpenAI API 规范的 REST API,让您无需修改代码即可将现有 OpenAI 应用迁移至 NIM。
API 设计原则
- OpenAI 兼容:完全兼容 OpenAI Chat Completions、Completions 和 Embeddings API
- 无状态:每个请求独立处理,服务端不维护会话状态
- JSON 格式:请求体和响应体均使用 JSON 格式
- 流式支持:通过 Server-Sent Events (SSE) 支持流式输出
基础 URL
http://<host>:<port>/v1
默认端口为 8000。在生产环境中,建议在 NIM 前部署反向代理(Nginx/Envoy)并启用 HTTPS。
支持的端点
| 端点 | 方法 | 说明 |
|---|---|---|
/v1/chat/completions | POST | 对话式文本生成(主要推理端点) |
/v1/completions | POST | 文本补全(传统风格) |
/v1/embeddings | POST | 文本嵌入向量生成 |
/v1/messages | POST | Anthropic Messages API 兼容端点 |
/v1/models | GET | 列出可用模型 |
/v1/models/{model} | GET | 获取指定模型信息 |
/v1/health/live | GET | 存活检查 |
/v1/health/ready | GET | 就绪检查 |
/metrics | GET | Prometheus 指标(如启用) |
请求格式
所有 POST 请求需要设置 Content-Type: application/json 请求头。
示例请求
OpenAI 兼容接口(/v1/chat/completions):
curl -X POST http://localhost:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $NGC_API_KEY" \
-d '{
"model": "meta/llama-3.1-8b-instruct",
"messages": [
{"role": "user", "content": "Hello"}
],
"max_tokens": 100,
"temperature": 0.7,
"top_p": 0.9,
"stream": false
}'
Anthropic 兼容接口(/v1/messages):
curl -X POST http://localhost:8000/v1/messages \
-H "Content-Type: application/json" \
-H "x-api-key: $NGC_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-d '{
"model": "meta/llama-3.1-8b-instruct",
"max_tokens": 100,
"messages": [
{"role": "user", "content": "Hello"}
]
}'
响应格式遵循 Anthropic Messages API 规范:
{
"id": "msg-abc123",
"type": "message",
"role": "assistant",
"model": "meta/llama-3.1-8b-instruct",
"content": [
{
"type": "text",
"text": "模型生成的内容..."
}
],
"stop_reason": "end_turn",
"stop_sequence": null,
"usage": {
"input_tokens": 10,
"output_tokens": 42
}
}
通用请求参数
下表列出所有推理端点共用的参数:
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
model | string | 必填 | 模型 ID(如 meta/llama-3.1-8b-instruct) |
max_tokens | integer | 模型最大值 | 生成 Token 的最大数量 |
temperature | float | 1.0 | 采样温度,范围 [0, 2]。值越低输出越确定性 |
top_p | float | 1.0 | 核采样概率,范围 (0, 1] |
top_k | integer | - | Top-K 采样,仅部分模型支持 |
n | integer | 1 | 为每个输入生成的回复数量 |
stream | boolean | false | 是否启用流式输出 |
stop | string/array | - | 停止序列,遇到时停止生成 |
presence_penalty | float | 0.0 | 存在惩罚,范围 [-2, 2] |
frequency_penalty | float | 0.0 | 频率惩罚,范围 [-2, 2] |
seed | integer | - | 随机数种子,用于可复现生成 |
user | string | - | 用户标识,用于审计日志 |
通用响应格式
{
"id": "chat-abc123def456",
"object": "chat.completion",
"created": 1735000000,
"model": "meta/llama-3.1-8b-instruct",
"system_fingerprint": "fp_abc123",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "模型生成的内容..."
},
"logprobs": null,
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 25,
"completion_tokens": 42,
"total_tokens": 67
}
}
finish_reason 取值说明
| 值 | 说明 |
|---|---|
stop | 模型自然结束生成,或遇到停止序列 |
length | 达到 max_tokens 限制 |
content_filter | 内容被安全过滤器拦截 |
null | 流式输出进行中 |
速率限制与配额
NIM 本地部署无内置速率限制,但受限于以下资源:
- GPU 显存:决定最大 KV Cache 容量,影响并发请求数
- 计算能力:GPU TFLOPS 决定理论吞吐量上限
如需实现速率限制,建议在 NIM 前部署 API 网关(如 Kong、Nginx)。
SDK 支持
由于 NIM 完全兼容 OpenAI API,可直接使用以下 SDK:
- Python
- Node.js
- Go
pip install openai
from openai import OpenAI
client = OpenAI(
base_url="http://localhost:8000/v1",
api_key="not-required" # 本地部署
)
npm install openai
import OpenAI from 'openai';
const client = new OpenAI({
baseURL: 'http://localhost:8000/v1',
apiKey: 'not-required',
});
go get github.com/sashabaranov/go-openai
import openai "github.com/sashabaranov/go-openai"
config := openai.DefaultConfig("not-required")
config.BaseURL = "http://localhost:8000/v1"
client := openai.NewClientWithConfig(config)
版本兼容性
| NIM 版本 | OpenAI API 版本 | 说明 |
|---|---|---|
| 1.0.x | v1 | Chat Completions、Completions、Embeddings |
| 1.1.x | v1 + 扩展 | 增加 Function Calling、JSON Mode |
| 1.2.x | v1 + 扩展 | 增加 Vision、Structured Outputs |