接入教程 · 6 分钟阅读

Python OpenAI SDK 配置第三方 API:Base URL 设置与流式调用

用 Python OpenAI SDK 调用第三方 Chat Completions 接口,讲清 base_url、API Key、模型 ID、流式输出与 401、404、超时排查。以 TokenDance 为例。

用 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 openai

Windows PowerShell:

py -m venv .venv
.\.venv\Scripts\python.exe -m pip install --upgrade openai

Windows 示例直接使用虚拟环境的 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。本文不宣称已完成生产接口付费调用。

TRY IT YOURSELF

动手试一次。

如果你使用 TokenDance,可以先查看模型与接口支持,再按教程完成配置。

查看 TokenDance 模型 ↗