外观
Python(OpenAI SDK)
OpenAI 官方 Python SDK 只需修改 base_url 和 api_key 就能调用本站的全部 OpenAI 兼容接口,包括 Claude、Gemini 等非 OpenAI 模型。
安装与初始化
bash
pip install -U openaipython
from openai import OpenAI
client = OpenAI(
base_url="https://vip.zen-ai.top/v1",
api_key="sk-xxxxxxxx",
)也可以通过环境变量配置,代码中直接 OpenAI() 即可:
bash
export OPENAI_BASE_URL="https://vip.zen-ai.top/v1"
export OPENAI_API_KEY="sk-xxxxxxxx"基础对话
python
resp = client.chat.completions.create(
model="gpt-4.1-mini",
messages=[
{"role": "system", "content": "你是一个简洁的助手。"},
{"role": "user", "content": "HTTP 和 HTTPS 有什么区别?"},
],
)
print(resp.choices[0].message.content)
print(resp.usage) # token 用量流式输出
python
stream = client.chat.completions.create(
model="gpt-4.1-mini",
messages=[{"role": "user", "content": "讲一个 100 字的小故事"}],
stream=True,
)
for chunk in stream:
if chunk.choices and chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="", flush=True)多轮对话
把历史消息保存在列表中,每轮追加用户消息和模型回复:
python
messages = [{"role": "system", "content": "你是一个耐心的编程老师。"}]
while True:
user_input = input("你:")
if user_input in ("exit", "quit"):
break
messages.append({"role": "user", "content": user_input})
resp = client.chat.completions.create(model="gpt-4.1-mini", messages=messages)
answer = resp.choices[0].message.content
messages.append({"role": "assistant", "content": answer})
print("AI:", answer)图片理解
python
resp = client.chat.completions.create(
model="gpt-4.1-mini",
messages=[{
"role": "user",
"content": [
{"type": "text", "text": "图片里有什么?"},
{"type": "image_url", "image_url": {"url": "https://example.com/photo.jpg"}},
],
}],
)
print(resp.choices[0].message.content)python
import base64
with open("photo.jpg", "rb") as f:
b64 = base64.b64encode(f.read()).decode()
resp = client.chat.completions.create(
model="gpt-4.1-mini",
messages=[{
"role": "user",
"content": [
{"type": "text", "text": "图片里有什么?"},
{"type": "image_url", "image_url": {"url": f"data:image/jpeg;base64,{b64}"}},
],
}],
)
print(resp.choices[0].message.content)Claude、Gemini 等支持视觉的模型也可以用同样的格式传图。
结构化输出(JSON Schema)
python
import json
resp = client.chat.completions.create(
model="gpt-4.1-mini",
messages=[{"role": "user", "content": "提取信息:李雷,32 岁,住在成都,职业是设计师。"}],
response_format={
"type": "json_schema",
"json_schema": {
"name": "person",
"strict": True,
"schema": {
"type": "object",
"properties": {
"name": {"type": "string"},
"age": {"type": "integer"},
"city": {"type": "string"},
"job": {"type": "string"},
},
"required": ["name", "age", "city", "job"],
"additionalProperties": False,
},
},
},
)
data = json.loads(resp.choices[0].message.content)
print(data["name"], data["age"])函数调用的完整两轮示例见 创建聊天补全 → 函数调用。
Responses API
python
resp = client.responses.create(
model="gpt-5.5",
reasoning={"effort": "low"},
input="用一句话解释量子纠缠",
)
print(resp.output_text)参数说明见 创建模型响应。
向量(Embeddings)
python
resp = client.embeddings.create(
model="text-embedding-3-small",
input=["今天天气真好", "The weather is nice today"],
)
vectors = [d.embedding for d in resp.data]
print(len(vectors), len(vectors[0])) # 2 1536图像生成
python
import base64
resp = client.images.generate(
model="gpt-image-1.5",
prompt="一只戴着宇航员头盔的柴犬,赛博朋克风格",
size="1024x1024",
)
img = resp.data[0]
if img.b64_json:
with open("dog.png", "wb") as f:
f.write(base64.b64decode(img.b64_json))
else:
print(img.url)语音合成与识别
python
with client.audio.speech.with_streaming_response.create(
model="gpt-4o-mini-tts",
voice="alloy",
input="你好,欢迎使用语音合成服务。",
) as response:
response.stream_to_file("speech.mp3")python
with open("speech.mp3", "rb") as f:
result = client.audio.transcriptions.create(
model="gpt-4o-mini-transcribe",
file=f,
)
print(result.text)异步客户端
python
import asyncio
from openai import AsyncOpenAI
client = AsyncOpenAI(base_url="https://vip.zen-ai.top/v1", api_key="sk-xxxxxxxx")
async def main():
tasks = [
client.chat.completions.create(model="gpt-4.1-mini", messages=[{"role": "user", "content": q}])
for q in ["1+1=?", "天空为什么是蓝色的?"]
]
for r in await asyncio.gather(*tasks):
print(r.choices[0].message.content)
asyncio.run(main())超时与重试
python
client = OpenAI(
base_url="https://vip.zen-ai.top/v1",
api_key="sk-xxxxxxxx",
timeout=300, # 秒,推理模型或长输出建议调大,或改用流式
max_retries=2, # 对 429 / 5xx / 网络错误自动重试
)不使用 SDK(requests)
python
import json
import requests
resp = requests.post(
"https://vip.zen-ai.top/v1/chat/completions",
headers={"Authorization": "Bearer sk-xxxxxxxx"},
json={
"model": "gpt-4.1-mini",
"stream": True,
"messages": [{"role": "user", "content": "你好"}],
},
stream=True,
timeout=300,
)
for line in resp.iter_lines(decode_unicode=True):
if not line or not line.startswith("data: "):
continue
data = line[len("data: "):]
if data == "[DONE]":
break
chunk = json.loads(data)
if chunk.get("choices"):
print(chunk["choices"][0]["delta"].get("content") or "", end="", flush=True)