OpenAI 协议接入:chat/completions 完全用法
使用 OpenAI 兼容端点调用全部 175 个模型:流式输出、工具调用、多模态图片输入、JSON 结构化输出与 embeddings 的完整示例。
端点:https://api.zaimod.com/v1/chat/completions。任何 OpenAI SDK(Python / Node / Go / Rust / Java)或其他语言的社区 SDK,只要支持自定义 base_url 就能用。
基础对话
resp = client.chat.completions.create(
model="gpt-4.1",
messages=[
{"role": "system", "content": "你是一个严谨的技术翻译。"},
{"role": "user", "content": "把这段话翻译成英文:……"},
],
temperature=0.2,
max_tokens=2000,
)流式输出
stream = client.chat.completions.create(
model="gemini-3-pro-preview",
messages=[{"role": "user", "content": "写一首关于数据库的俳句"}],
stream=True,
)
for chunk in stream:
delta = chunk.choices[0].delta.content
if delta:
print(delta, end="", flush=True)Node.js 侧用 for await (const chunk of stream) 同理。
工具调用(Function Calling)
tools = [{
"type": "function",
"function": {
"name": "get_weather",
"description": "查询城市天气",
"parameters": {
"type": "object",
"properties": {"city": {"type": "string"}},
"required": ["city"],
},
},
}]
resp = client.chat.completions.create(
model="gpt-5.6-terra",
messages=[{"role": "user", "content": "上海今天天气怎么样?"}],
tools=tools,
)
call = resp.choices[0].message.tool_calls[0]
print(call.function.name, call.function.arguments)
# 把执行结果回传,继续对话即可工具调用在 GPT、Claude、Gemini、DeepSeek 系列上均可用,但各家对并行调用、strict 模式的支持程度不同,复杂工具链建议小流量验证。
多模态:图片输入
resp = client.chat.completions.create(
model="gpt-5.6-terra",
messages=[{
"role": "user",
"content": [
{"type": "text", "text": "这张图里有什么问题?"},
{"type": "image_url", "image_url": {"url": "https://example.com/shot.png"}},
],
}],
)支持图片 URL 与 base64 data URL。视频理解类模型(如 Gemini 优质分组)走原生端点体验更完整。
结构化 JSON 输出
resp = client.chat.completions.create(
model="gpt-4.1",
messages=[{"role": "user", "content": "从这段文本抽取公司名和金额,返回 JSON"}],
response_format={"type": "json_object"},
)配合提示词中的字段说明使用,可靠性更高。
Embeddings
resp = client.embeddings.create(
model="text-embedding-3-small",
input=["第一段文本", "第二段文本"],
)
print(len(resp.data[0].embedding)) # 1536错误处理建议
import time
from openai import APIStatusError, RateLimitError
for attempt in range(4):
try:
resp = client.chat.completions.create(...)
break
except RateLimitError:
time.sleep(2 ** attempt) # 429:指数退避
except APIStatusError as e:
if e.status_code >= 500:
time.sleep(2 ** attempt) # 5xx:换渠道重试
else:
raise完整的错误码表见 计费与错误码。