⚠️ 待更新·2026-08-29核验 · 更新时间待核验 · 本文信息可能已过期,请以官方文档为准 更新时间:2026-08-29 · 核验状态:待更新 · 官方溯源待补
简介
NIM 端点完全兼容 OpenAI Chat Completions 协议,这意味着你已经熟悉的 openai Python SDK 可以直接复用,只需改 base_url 和 api_key。本篇给出四种最常用调用形态:单轮、流式、多轮、JSON 结构化输出。
架构图
flowchart TD
A[OpenAI SDK] --> B[NIM endpoint]
B --> C[Chat completion]
B --> D[Streaming]
B --> E[Multi-turn]
B --> F[JSON mode]
C --> G[Response]
D --> G
E --> G
F --> G
准备
pip install openai
设置环境变量(本地或云端任选其一):
# 本地 NIM 容器
export NIM_BASE_URL="http://localhost:8000/v1"
export NIM_API_KEY="local-no-key-needed"
# 云端 build.nvidia.com
export NIM_BASE_URL="https://integrate.api.nvidia.com/v1"
export NIM_API_KEY="nvapi-..."
示例 1:单轮对话
import os
from openai import OpenAI
client = OpenAI(
base_url=os.environ["NIM_BASE_URL"],
api_key=os.environ["NIM_API_KEY"],
)
resp = client.chat.completions.create(
model="meta/llama-3.1-8b-instruct",
messages=[
{"role": "system", "content": "你是简洁的中文助手"},
{"role": "user", "content": "用一句话介绍量子纠缠"},
],
temperature=0.5,
max_tokens=128,
)
print(resp.choices[0].message.content)
print("tokens:", resp.usage.total_tokens)
示例 2:流式输出
长回答场景下流式可显著改善首字延迟:
stream = client.chat.completions.create(
model="meta/llama-3.1-8b-instruct",
messages=[{"role": "user", "content": "写一首关于秋天的五言绝句"}],
stream=True,
)
for chunk in stream:
delta = chunk.choices[0].delta.content
if delta:
print(delta, end="", flush=True)
print()
示例 3:多轮对话
history = [
{"role": "system", "content": "你是耐心的编程老师"}
]
def chat(user_text):
history.append({"role": "user", "content": user_text})
r = client.chat.completions.create(
model="meta/llama-3.1-8b-instruct",
messages=history,
)
msg = r.choices[0].message
history.append(msg)
return msg.content
print(chat("Python 里 list 和 tuple 有什么区别?"))
print(chat("那什么时候该用 tuple?"))
示例 4:结构化 JSON 输出
需要让模型返回可解析的 JSON 时,显式声明 response_format:
import json
resp = client.chat.completions.create(
model="meta/llama-3.1-8b-instruct",
messages=[
{"role": "system", "content": "你是数据抽取助手,只输出 JSON。"},
{"role": "user", "content": "从这句话抽取人名和职位:张三是阿里巴巴的高级工程师。"},
],
response_format={"type": "json_object"},
max_tokens=128,
)
data = json.loads(resp.choices[0].message.content)
print(data)
# {'name': '张三', 'title': '高级工程师', 'company': '阿里巴巴'}
性能调优
- 开启 streaming:
stream=True让首字延迟降到 100ms 内。 - 复用 client:把
OpenAI()实例做成单例,避免每次请求重建连接池。 - 设置超时:
client = OpenAI(..., timeout=30, max_retries=2)防止长尾请求卡死。 - 批量请求:NIM 支持
/v1/batch端点(部分模型),适合离线处理。
进阶用法:工具调用与批处理
NIM 也支持 OpenAI 风格的 function calling,适合做 Agent 编排:
tools = [{
"type": "function",
"function": {
"name": "get_stock",
"description": "查询股票价格",
"parameters": {
"type": "object",
"properties": {"symbol": {"type": "string"}},
"required": ["symbol"],
},
},
}]
resp = client.chat.completions.create(
model="meta/llama-3.1-8b-instruct",
messages=[{"role":"user","content":"查 AAPL"}],
tools=tools,
)
print(resp.choices[0].message.tool_calls[0].function)
对于离线批量任务,部分 NIM 镜像还提供 /v1/batch 端点,可一次性提交上千条 prompt,按完成度计费,成本比逐条调用低 50%。
常见问题
model not found:本地 NIM 容器的模型名是镜像内置的,通过GET /v1/models查询实际名称。- 云端响应慢:首次冷启动可能 1-2 秒,后续同会话稳定在百毫秒级。
- JSON 解析失败:在 system prompt 里强约束格式,如 "只输出 JSON,字段为 name/title/company"。
掌握这四种调用,绝大多数业务场景已覆盖。
最佳实践
- 流式优先:NIM 流式 token 生成速度比非流式整体快 30%,用户体感更好。
- JSON mode 用于结构化输出:调用
response_format={"type":"json_object"}强制 JSON,避免解析失败。 - 温度参数控制随机性:默认 0.7 适合对话,写代码改 0.3,做摘要改 0.5。
- max_tokens 留 1024 余量:模型常用 max_tokens 截断长回答,留余量避免被截。
🚀 立即开始:免费 API 一键调用
想要无需逐一注册、统一鉴权调用以上全部免费模型?Apishare.cc 提供统一 API Key,一个 Key 调用 100+ 模型,免费模型零成本直连。
👉 立即注册 Apishare.cc → 获取你的统一 API Key
📊 想看更多免费模型排行?查看 2026年9月 免费 LLM API 综合实力榜单 →
立即上手:APIShare 免费 API 目录
- 🆓 注册领取免费额度:立即注册 APIShare · 登录控制台
- 🔍 浏览全部免费 API 与实时榜单:APIShare 免费 API 目录
- 📊 查看免费 LLM API 排行:Free LLM API Rankings
免费 API 聚合平台说明
本文涉及的模型均由 APIShare 免费 API 聚合平台 统一接入,一份 Key 调用全站模型。
- 完整模型目录:APIShare 免费 API 目录
- 注册即送免费额度:注册领取 API Key