Skip to content

Python + openai SDK 接入 Ulnvault:只改两个参数 ​

结论先行:装官方 openai 包,把 base_url 指向 https://ai.ulnit.com/v1、api_key 换成 Ulnvault Key 即可。

安装与初始化 ​

python
# pip install -U openai
import os
from openai import OpenAI

client = OpenAI(
    api_key=os.environ["ULNVAULT_KEY"],
    base_url="https://ai.ulnit.com/v1",
    timeout=60.0,
    max_retries=3,
)

resp = client.chat.completions.create(
    model="openai/gpt-5.6-terra",
    messages=[{"role": "user", "content": "用三行说明什么是幂等性"}],
)
print(resp.choices[0].message.content, resp.usage.total_tokens)

model 填站内模型 ID(形如 厂商/模型名),同一把 Key 覆盖全部模型。

流式输出 ​

python
stream = client.chat.completions.create(
    model="anthropic/claude-sonnet-5",
    messages=[{"role": "user", "content": "写一段接口变更说明"}],
    stream=True,
    stream_options={"include_usage": True},
)
for c in stream:
    if c.choices[0].delta.content:
        print(c.choices[0].delta.content, end="", flush=True)

流式不改变计费口径:输入按完整 prompt 计,输出按生成 token 计。

超时、重试与并发 ​

  • 单请求 timeout=60 起步,长文生成放宽到 300 秒
  • max_retries=3 自带指数退避:429 与 5xx 重试,请求体错误不重试
  • 批量用线程池控并发,别一次丢几千个请求
python
from concurrent.futures import ThreadPoolExecutor

def ask(t):
    return client.chat.completions.create(
        model="deepseek/deepseek-v4.1-flash",
        messages=[{"role": "user", "content": t}], timeout=30,
    ).choices[0].message.content

with ThreadPoolExecutor(max_workers=8) as pool:
    out = list(pool.map(ask, ["改写:" + t for t in todos]))

并发从 4 起步,出现 429 就减半并加大退避;批任务写成幂等的。

成本估算(每百万 token,采集 2026-10-08) ​

model 参数输入输出上下文Python 场景定位
openai/gpt-5.6-terra$2.2$13.2105 万复杂推理、代码与结构设计
anthropic/claude-sonnet-5$2.2$11100 万长文生成、工具调用
deepseek/deepseek-v4.1-flash$0.33$1.32105 万批量改写、抽取、打标

100 万 token 输入走 deepseek-v4.1-flash 约 $0.33,同量走 gpt-5.6-terra 约 $2.2。成本 = 输入token × 输入单价 + 输出token × 输出单价,数据取自 resp.usage。批处理示例见 /use-cases/batch-translation.md。

常见问题 ​

需要装额外的 SDK 吗? ​

不需要,openai 包本身就是 OpenAI 兼容协议客户端。

报 401 或 404 先查什么? ​

401 是 Key 没读到(变量名错或有空格);404 是 base_url 少了 /v1。

流式输出为什么没有 usage? ​

需加 stream_options={"include_usage": True},再读最后一个 chunk 的 usage。

怎么把成本摁住? ​

每个调用点绑定固定档位:高频低价值批处理走低价档,质量敏感任务留高价档。

价格与采集时间? ​

本页单价按 2026-10-08 实时核验;站内价 = OpenRouter 挂牌 ×1.1。


👉 立即注册,0 元尝鲜套餐试用

相关阅读:gpt-5-6 | batch-translation | node-openai-sdk

Ulnvault — 40 个顶级 AI 模型,一个账号全打通