Python 调用 GPT88 API 完整示例
用 OpenAI 官方 Python SDK 调用 GPT88 API,包含同步、流式和错误排查示例。
安装与配置
直接使用 OpenAI 官方 SDK 即可,不需要任何 gpt88 私有依赖。 建议 1.40 及以上版本,能完整支持流式 / tools / response_format。
请将下方脚本中的 sk-xxx 替换为你在 Agent API Keys 控制台「API Keys」页面创建的 Key。
bash
pip install openai>=1.40.0
# 注入 API Key(推荐使用环境变量而不是硬编码)
export GPT88_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxx基础调用
basic.pypython
from openai import OpenAI
# 唯一的差异:base_url 指向 gpt88.cc
client = OpenAI(
base_url="https://api.gpt88.cc",
api_key="YOUR_GPT88_API_KEY", # 或读 os.environ["GPT88_API_KEY"]
)
resp = client.chat.completions.create(
model="claude-opus-4-7",
messages=[
{"role": "system", "content": "You are a concise assistant."},
{"role": "user", "content": "用 30 字介绍 gpt88.cc"},
],
temperature=0.7,
max_tokens=1024,
)
print(resp.choices[0].message.content)
print("usage:", resp.usage.total_tokens, "tokens")流式响应
stream.pypython
stream = client.chat.completions.create(
model="claude-opus-4-7",
stream=True,
messages=[{"role": "user", "content": "讲一个关于 API 网关的冷笑话"}],
)
for chunk in stream:
delta = chunk.choices[0].delta.content or ""
print(delta, end="", flush=True)
print() # 换行function calling
tools.pypython
tools = [{
"type": "function",
"function": {
"name": "get_weather",
"description": "查询某个城市的当前天气",
"parameters": {
"type": "object",
"properties": {"city": {"type": "string"}},
"required": ["city"],
},
},
}]
resp = client.chat.completions.create(
model="claude-opus-4-7",
messages=[{"role": "user", "content": "上海现在几度?"}],
tools=tools,
tool_choice="auto",
)
tc = resp.choices[0].message.tool_calls
if tc:
print("model wants to call:", tc[0].function.name, tc[0].function.arguments)当模型返回 tool_calls 时,由你的应用执行工具, 再把结果以 role: "tool" 消息回传给模型,发起下一轮请求。
错误处理与重试
retry.pypython
import time
from openai import OpenAI, RateLimitError, APIStatusError
client = OpenAI(base_url="https://api.gpt88.cc")
def call_with_retry(messages, model="claude-opus-4-7", max_retries=3):
"""简易退避重试包装:仅对可重试错误退避。"""
for attempt in range(max_retries):
try:
return client.chat.completions.create(
model=model,
messages=messages,
)
except RateLimitError:
# 429:尊重 Retry-After,简单退避即可
time.sleep(2 ** attempt)
except APIStatusError as e:
# 5xx 才退避,4xx 直接抛出
if 500 <= e.status_code < 600:
time.sleep(2 ** attempt)
else:
raise
raise RuntimeError("max retries exceeded")完整错误码语义见 错误码 页。
异步用法
高并发或在 FastAPI / asyncio 应用中,建议直接使用 AsyncOpenAI:
async.pypython
import asyncio
from openai import AsyncOpenAI
client = AsyncOpenAI(base_url="https://api.gpt88.cc")
async def main():
resp = await client.chat.completions.create(
model="claude-opus-4-7",
messages=[{"role": "user", "content": "hi"}],
)
print(resp.choices[0].message.content)
asyncio.run(main())问题是什么
Python 接入最容易出错的是 base_url、环境变量、模型名和流式响应读取方式。下面的配置使用 OpenAI 官方 SDK。
最短可用配置
.envbash
python -m pip install --upgrade openai
export OPENAI_API_KEY=sk-替换为你创建的Key
export OPENAI_BASE_URL=https://api.gpt88.cc/v1
export OPENAI_MODEL=gpt-5.6-solAPI Key 只放在服务端环境变量或密钥管理器中,不要提交到 Git、截图、浏览器前端或公开 issue。
完整示例(curl / Python / Node.js)
request.shbash
curl https://api.gpt88.cc/v1/chat/completions \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"gpt-5.6-sol","messages":[{"role":"user","content":"返回 OK"}],"max_tokens":32}'request.pypython
import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ["OPENAI_API_KEY"],
base_url=os.getenv("OPENAI_BASE_URL", "https://api.gpt88.cc/v1"),
)
response = client.chat.completions.create(
model=os.getenv("OPENAI_MODEL", "gpt-5.6-sol"),
messages=[{"role": "user", "content": "返回 OK"}],
max_tokens=32,
)
print(response.choices[0].message.content)request.mjsjavascript
import OpenAI from "openai";
const client = new OpenAI({
apiKey: process.env.OPENAI_API_KEY,
baseURL: process.env.OPENAI_BASE_URL ?? "https://api.gpt88.cc/v1",
});
const response = await client.chat.completions.create({
model: process.env.OPENAI_MODEL ?? "gpt-5.6-sol",
messages: [{ role: "user", content: "返回 OK" }],
max_tokens: 32,
});
console.log(response.choices[0].message.content);常见错误
- ModuleNotFoundError:确认当前虚拟环境已安装 openai。
- 401:检查 Key 是否为空、带空格或被错误环境变量覆盖。
- 404:base_url 使用 /v1,不要把 /chat/completions 重复写入。
- 流式没有文字:读取 chunk.choices[0].delta.content。
价格和计费说明
请求按人民币余额结算,不同模型和分组可能有不同倍率;输入、输出、图片和视频请求以控制台实时计费规则为准。