OneProvider

Python SDK

只改 base_url,就能在 OneProvider 上使用 anthropic 或 openai 的 Python 包。涵盖同步和异步客户端、流式输出、工具调用和重试。

两条 Python 路径——原生 Claude 代码用 anthropic,迁移用 openai。两者都只需更改一处 base_url。

全部模型、功能与价格 面向 AI 智能体的文档索引: https://oneprovider.dev/docs/llms.txt 操作系统 开始之前:从个人中心获取密钥 打开您的个人中心:Telegram 机器人 @oneprovider_robot (“个人中心”)或 app.oneprovider.dev 。点击“签发密钥”,为它命名(例如此客户端的名称)并设置消费限额,然后复制密钥。充值也在同一个地方进行。详细了解个人中心与密钥 。

安装

bash
pip3 install anthropic
# or, for OpenAI-style code:
pip3 install openai
# In a venv (recommended):
# python3 -m venv .venv && source .venv/bin/activate
# pip install anthropic openai

Anthropic SDK

python
import os
from anthropic import Anthropic
client = Anthropic(
api_key=os.environ["ONEPROVIDER_KEY"],
base_url="https://api.oneprovider.dev",
)
resp = client.messages.create(
model="claude-sonnet-5-5",
max_tokens=1024,
messages=[{"role": "user", "content": "Say hi."}],
)
print(resp.content[0].text)

兼容 OpenAI

python
import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ["ONEPROVIDER_KEY"],
base_url="https://api.oneprovider.dev/v1",
)
resp = client.chat.completions.create(
model="claude-sonnet-5-5",
messages=[{"role": "user", "content": "Say hi."}],
)
print(resp.choices[0].message.content)

异步客户端

python
import asyncio
from anthropic import AsyncAnthropic
async def main():
client = AsyncAnthropic(base_url="https://api.oneprovider.dev")
resp = await client.messages.create(
model="claude-sonnet-5-5",
max_tokens=512,
messages=[{"role": "user", "content": "Hi async."}],
)
print(resp.content[0].text)
asyncio.run(main())

流式输出

python
with client.messages.stream(
model="claude-sonnet-5-5",
max_tokens=512,
messages=[{"role": "user", "content": "Tell me a haiku."}],
) as stream:
for chunk in stream.text_stream:
print(chunk, end="", flush=True)

工具调用

python
tools = [{
"name": "get_weather",
"description": "Get current weather for a city.",
"input_schema": {
"type": "object",
"properties": {"city": {"type": "string"}},
"required": ["city"],
},
}]
resp = client.messages.create(
model="claude-sonnet-5-5",
max_tokens=1024,
tools=tools,
messages=[{"role": "user", "content": "What's the weather in Frankfurt?"}],
)
# resp.stop_reason == "tool_use"
# Inspect resp.content for tool_use blocks.

重试与错误处理

python
from anthropic import APIStatusError
from tenacity import retry, stop_after_attempt, wait_exponential
@retry(
stop=stop_after_attempt(3),
wait=wait_exponential(multiplier=0.5, min=0.5, max=4),
retry_error_cls=APIStatusError,
)
def call():
return client.messages.create(
model="claude-sonnet-5-5",
max_tokens=512,
messages=[{"role": "user", "content": "Hi."}],
)
不要把密钥硬编码 请始终从环境变量或机密管理器读取密钥。硬编码的密钥迟早会泄露到版本控制中。

如何选择模型

在 model 中传入 ID。claude-sonnet-5-5 是多数代码的默认选择,claude-haiku-5-5 用于快速、大批量的调用,claude-opus-5-5 用于复杂的推理。兼容 OpenAI 的写法也接受 gpt-6.1-terra 这样的 GPT ID。Anthropic 写法使用 https://api.oneprovider.dev,OpenAI 写法使用 https://api.oneprovider.dev/v1。ID 见模型页面 。

常见错误与解决办法

404 NotFoundError

Anthropic SDK:base_url="https://api.oneprovider.dev",不带 /v1。OpenAI SDK:base_url="https://api.oneprovider.dev/v1",带 /v1。

401 AuthenticationError

环境变量为空,或者末尾带有换行符。请在调用前输出 len(os.environ["ONEPROVIDER_KEY"])。

429 RateLimitError

请查看消息内容:“Insufficient balance” 表示需要充值余额(不要重试),其他任何 429 都是限流,请退避等待并遵守 Retry-After。

APIConnectionError 或读取超时

请关闭 VPN 或代理变量(HTTPS_PROXY),较长的回答请使用流式输出:非流式请求必须在 6 分钟内开始返回响应。

关于 max_tokens 的 400

Anthropic SDK 要求每个请求都必须带 max_tokens。

常见问题

可以继续使用官方 SDK 吗?

可以。只需更改密钥和 base_url,见从 Anthropic 迁移 和从 OpenAI 迁移 。

支持流式输出吗?

支持,两种 SDK 都可以;见流式输出 。

密钥应该放在哪里?

放在环境变量中,绝不要放进代码仓库。

快速解答

该使用哪个 base URL?

Claude Code 和 Anthropic SDK 使用 https://api.oneprovider.dev。OpenAI SDK 和兼容 OpenAI 的客户端使用 https://api.oneprovider.dev/v1。同一个密钥可用于这两个地址;模型列表见模型页面 ,费率见价格页面 。

如何进行身份验证?

将完整的 sk-… 密钥放在 x-api-key 或 Authorization: Bearer 中,二选一,不要同时使用。请把密钥存放在环境变量中,不要写进会被提交的文件。了解更多身份验证说明 。

在哪里获取密钥?

在 Telegram 机器人 @oneprovider_robot 或 app.oneprovider.dev 打开您的个人中心,为余额充值,然后点击“签发密钥”。每个密钥都可以设置各自的消费限额。个人中心与 API 密钥 。

401、404 和 429 是什么意思?

401:密钥缺失、拼写有误或放错了请求头;请粘贴完整的密钥,不要带引号或空格。404:通常是 base URL 不对,例如缺少或重复了 /v1。429 且提示“Insufficient balance”:个人中心余额或密钥的消费限额已用完,请充值,不要反复重试;其他 429 属于速率限制,请等待 Retry-After 指定的时间。详情见:错误码 和故障排查 。

流式输出为什么会中断或被重置?

VPN 和 VLESS 代理常常会缓冲 SSE,或破坏 HTTP/2 协商。OneProvider 没有地区限制,也不会缓冲流式输出,请关闭代理后重试。

以上都没解决,该去哪里咨询?

请在 Telegram 联系 @Oneproviderhelpbot ,或在网页个人中心打开“客服”,并附上 HTTP 状态码和完整的错误信息。客服如何运作 。

最后更新: 2026-11-08 发现问题? @Oneproviderhelpbot