Skip to content

OpenAI SDK 接入 ​

以下示例使用 OpenAI SDK 调用本站的 Chat Completions 兼容接口。先创建 Key;不要把 Key 写进源码或提交到仓库。

选择 Python 或 Node.js 中的一种即可。当前官方 Python SDK 需要 Python 3.10 或更高版本(并包含 pip);当前官方 Node.js SDK 支持 Node.js 22、24 LTS(并包含 npm)。以下步骤在同一个终端窗口执行。

临时环境变量 ​

PowerShell 当前窗口:

powershell
$secureKey = Read-Host "粘贴完整 Key" -AsSecureString
$env:TALEAPI_API_KEY = [System.Net.NetworkCredential]::new("", $secureKey).Password
Remove-Variable secureKey
$env:TALEAPI_MODEL = "<从模型列表复制的完整模型 ID>"

bash/zsh 当前终端:

bash
printf '粘贴完整 Key: '
IFS= read -r -s TALEAPI_API_KEY
printf '\n'
export TALEAPI_API_KEY
export TALEAPI_MODEL="<从模型列表复制的完整模型 ID>"

以上方式不会把 Key 本身写进这条命令的历史记录。环境变量仍会提供给当前终端启动的子进程;使用完可关闭终端,或在 PowerShell 执行 Remove-Item Env:TALEAPI_API_KEY, Env:TALEAPI_MODEL,在 bash/zsh 执行 unset TALEAPI_API_KEY TALEAPI_MODEL。不要把真实 Key 直接粘贴进赋值命令,因为命令可能保留在 shell 历史中。

Python ​

  1. 创建工作目录并安装官方 SDK:
bash
mkdir taleapi-python
cd taleapi-python
python -m pip install openai
  1. 新建 chat.py:
python
import os
from openai import OpenAI

client = OpenAI(
    api_key=os.environ["TALEAPI_API_KEY"],
    base_url="https://api.taleapi.asia/v1",
    max_retries=0,
)

# models.list() 对应 GET /v1/models,不生成文本。
for model in client.models.list():
    print(model.id)

model_id = os.environ.get("TALEAPI_MODEL", "")
if not model_id or model_id.startswith("<"):
    raise SystemExit("请把 TALEAPI_MODEL 改为上方列表中的完整模型 ID")

response = client.chat.completions.create(
    model=model_id,
    messages=[{"role": "user", "content": "你好,请只回复:连接成功"}],
)
content = response.choices[0].message.content if response.choices else None
if not content:
    raise SystemExit("响应没有可显示文本;请先检查错误、请求 ID 和可用日志,不要直接重试")
print(content)
  1. 先运行一次查看模型列表,把其中一个完整 ID 填入 TALEAPI_MODEL,再运行确认收到回复。示例中的占位符不能直接使用:
bash
python chat.py

Node.js ​

  1. 创建目录并安装官方 SDK:
bash
mkdir taleapi-node
cd taleapi-node
npm init -y
npm install openai
  1. 新建 chat.mjs:
javascript
import OpenAI from 'openai'

const client = new OpenAI({
  apiKey: process.env.TALEAPI_API_KEY,
  baseURL: 'https://api.taleapi.asia/v1',
  maxRetries: 0,
})

// models.list() 对应 GET /v1/models,不生成文本。
for await (const model of client.models.list()) {
  console.log(model.id)
}

const modelId = process.env.TALEAPI_MODEL ?? ''
if (!modelId || modelId.startsWith('<')) {
  console.error('请把 TALEAPI_MODEL 改为上方列表中的完整模型 ID')
  process.exit(1)
}

const response = await client.chat.completions.create({
  model: modelId,
  messages: [{ role: 'user', content: '你好,请只回复:连接成功' }],
})
const content = response.choices[0]?.message?.content
if (typeof content !== 'string' || content.length === 0) {
  console.error('响应没有可显示文本;请先检查错误、请求 ID 和可用日志,不要直接重试')
  process.exit(1)
}
console.log(content)
  1. 先运行一次查看模型列表,把其中一个完整 ID 填入 TALEAPI_MODEL,再运行确认收到回复。示例中的占位符不能直接使用:
bash
node chat.mjs

保留模型占位符时,第一次运行会在列出模型后退出,不会进入聊天请求;填入完整文本模型 ID 后再次运行,chat.completions.create 会发起真实请求并产生正常用量。请选择当前 Key 列表中的文本模型,不要使用品牌简称、显示昵称或绘图模型。

官方 SDK 默认会对连接失败、408、409、429 和 5xx 错误自动重试两次。首次接入示例将重试设为 0,避免一次操作在错误尚未查清时自动重复请求;失败后先检查终端错误、请求 ID 和可用日志,再决定是否手动重试。

流式调用 ​

支持流式的文本模型可加 stream=True(JavaScript 为 true)。逐块读取前先判断 choices 是否为空;统计块或工具调用块不一定有正文。NovelAI 生图不使用这个示例。

SDK 的安装和参数名称以 OpenAI 官方 Python SDK 与 Node SDK 文档为准。SDK 暴露的方法不代表本站已实现全部 OpenAI 接口,也不代表每个模型支持所有协议。