用 Python OpenAI SDK 配置第三方 API,需要先确认服务支持 Chat Completions,再设置 base_url、api_key 和模型 ID。本文以 TokenDance 为例,演示普通对话与流式调用;其他服务的基础地址、密钥和模型 ID 请按各自文档填写。
下面写一个独立脚本:输入密钥和模型 ID,发送一条短消息,输出回答。最后再改成流式展示,适合做命令行助手的起点。
1. 创建虚拟环境并安装 SDK
准备 Python 3.10 或更新版本。在一个新的练习目录执行对应系统的命令。
macOS / Linux:
python3 -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade openaiWindows PowerShell:
py -m venv .venv
.\.venv\Scripts\python.exe -m pip install --upgrade openaiWindows 示例直接使用虚拟环境的 Python,不需要修改脚本执行策略。后面的 python chat.py 在 Windows 中替换为 .\.venv\Scripts\python.exe chat.py 即可。
2. 准备密钥和支持的模型
在 API 密钥页创建密钥,到模型列表选择支持 OpenAI Chat Completions 的模型并复制 ID。
本例使用 client.chat.completions.create()。不要只把它改成 client.responses.create() 就认为可以通用:Responses 是另一种协议,需要对应的模型支持与参数格式。
3. 配置 base_url 并运行 Python 示例
新建 chat.py,粘贴以下内容:
import os
from getpass import getpass
import openai
from openai import OpenAI
def main():
api_key = os.getenv("TOKENDANCE_API_KEY") or getpass("TokenDance API Key: ")
model = os.getenv("TOKENDANCE_MODEL") or input("模型 ID: ").strip()
if not api_key.strip() or not model.strip():
raise SystemExit("密钥和模型 ID 都不能为空。")
with OpenAI(
api_key=api_key.strip(),
base_url="https://tokendance.space/gateway/v1",
timeout=60.0,
max_retries=0,
) as client:
try:
response = client.chat.completions.create(
model=model.strip(),
messages=[
{
"role": "user",
"content": "请把以下内容整理为三项待办:整理需求、核对接口、准备演示。",
}
],
)
if not response.choices:
raise SystemExit("响应没有 choices,请检查平台调用记录。")
print(response.choices[0].message.content or "未返回文本内容。")
if response.usage:
print("Token 用量:", response.usage.model_dump())
except openai.APITimeoutError:
raise SystemExit("请求超时;先查调用日志,再决定是否重试。")
except openai.APIConnectionError:
raise SystemExit("连接失败;检查网络及基础地址。")
except openai.APIStatusError as exc:
raise SystemExit(
f"HTTP {exc.status_code}:请结合平台错误信息检查密钥、模型和额度。"
)
if __name__ == "__main__":
main()运行:
python chat.py按提示输入密钥和模型 ID。密钥不显示在终端里,也不需要硬编码到源文件。若已经设置了 TOKENDANCE_API_KEY 和 TOKENDANCE_MODEL 环境变量,脚本会直接读取。
base_url 到 /gateway/v1 为止,由 SDK 拼接后续接口路径。示例关闭了自动重试,方便初次调试时判断一次执行对应哪些请求;正式应用应结合业务的超时和重试策略单独设计。
4. 用 stream=True 读取流式输出
如果想让回答逐段出现,将上一段代码中从 response = ... 到打印用量的部分,替换成下面这一段,放在原来的 try 内,并保持相同缩进:
with client.chat.completions.create(
model=model.strip(),
messages=[{"role": "user", "content": "用三条清单说明如何准备项目演示。"}],
stream=True,
) as stream:
for chunk in stream:
if not chunk.choices:
continue
text = chunk.choices[0].delta.content
if text:
print(text, end="", flush=True)
print()流式响应读取的是 delta.content,不是一次性回答的 message.content。某些事件没有 choices 或没有文本,因此要先判断再访问。上面的代码只显示正文,没有额外申请流式用量字段,用量请到平台查看。
5. 核对调用,再接入真实业务
执行后,到 TokenDance 的调用日志核对时间、模型和状态。示例只测试文本生成,不代表工具调用、图片输入或 JSON 输出等能力也已验证。
常见问题可以按下面的顺序处理:
No module named openai:确认安装 SDK 和运行脚本使用同一个 Python;优先使用python -m pip。- 401:检查密钥是否有效、是否带空格。
- 404:核对基础地址与模型 ID;不要在
base_url里重复加/chat/completions。 - 429:读取平台返回的具体原因,再决定等待、降低并发或调整限额。
- 超时:先检查请求是否已到达服务端,避免马上重发造成重复调用。
如果需要把结果交给其他程序,下一步可以自行解析回答并保存到文件。把密钥留在运行环境中,代码仓库只保存不含凭据的程序。
参考资料
接口与 SDK 用法核对日期:2026-09-28。本文不宣称已完成生产接口付费调用。