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 。点击“签发密钥”,为它命名(例如此客户端的名称)并设置消费限额,然后复制密钥。充值也在同一个地方进行。详细了解个人中心与密钥 。 安装
bashpip3 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
pythonimport 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
pythonimport 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) 异步客户端
pythonimport 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()) 流式输出
pythonwith 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) 工具调用
pythontools = [{
"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. 重试与错误处理
pythonfrom 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