Python SDK
本页演示在 Python 里调用 Sakrylle API。两条路:
- OpenAI 兼容路径:用官方
openai包,把base_url改成 Sakrylle,调/v1/chat/completions - Anthropic 原生路径:用官方
anthropic包,把base_url改成 Sakrylle,调/v1/messages
文档基于 Context7 拉取的官方 README。具体参数与最新行为以官方仓库为准: openai/openai-python、anthropics/anthropic-sdk-python。
准备
把 API Key 放进环境变量,避免硬编码:
bash
export SAKRYLLE_API_KEY="sk-xxxxxxxxxxxxxxxx"OpenAI 兼容
安装
bash
pip install openai最小可用调用
OpenAI 客户端有显式的 base_url 与 api_key 参数;指向 https://api.sakrylle.com/v1,一切都走 Sakrylle 网关,不再发到 api.openai.com。
python
import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ["SAKRYLLE_API_KEY"],
base_url="https://api.sakrylle.com/v1",
)
completion = client.chat.completions.create(
model="gpt-5.6-sol",
messages=[
{"role": "system", "content": "你是一名简洁的助手。"},
{"role": "user", "content": "用一句话解释什么是向量数据库。"},
],
)
print(completion.choices[0].message.content)也可以用环境变量代替显式参数:
bash
export OPENAI_API_KEY="$SAKRYLLE_API_KEY"
export OPENAI_BASE_URL="https://api.sakrylle.com/v1"python
from openai import OpenAI
client = OpenAI() # 自动读取上面两个环境变量流式响应
stream=True 直接迭代 chunk:
python
import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ["SAKRYLLE_API_KEY"],
base_url="https://api.sakrylle.com/v1",
)
stream = client.chat.completions.create(
model="gpt-5.6-sol",
messages=[{"role": "user", "content": "数到 5。"}],
stream=True,
)
for chunk in stream:
delta = chunk.choices[0].delta.content or ""
print(delta, end="", flush=True)工具调用
tools 字段照官方 OpenAI 用法即可:
python
import json, os
from openai import OpenAI
client = OpenAI(
api_key=os.environ["SAKRYLLE_API_KEY"],
base_url="https://api.sakrylle.com/v1",
)
tools = [
{
"type": "function",
"function": {
"name": "get_weather",
"description": "查询给定城市的当前天气",
"parameters": {
"type": "object",
"properties": {
"city": {"type": "string", "description": "城市名"},
},
"required": ["city"],
},
},
}
]
resp = client.chat.completions.create(
model="gpt-5.6-sol",
messages=[{"role": "user", "content": "上海今天天气怎么样?"}],
tools=tools,
)
choice = resp.choices[0]
if choice.message.tool_calls:
for call in choice.message.tool_calls:
print("调用:", call.function.name, json.loads(call.function.arguments))
else:
print(choice.message.content)Sakrylle 不改变 OpenAI 的 tool calling 协议,模型返回什么就是什么。
Anthropic 原生
安装
bash
pip install anthropic最小可用调用
Anthropic 构造函数同样接受 base_url:
python
import os
from anthropic import Anthropic
client = Anthropic(
api_key=os.environ["SAKRYLLE_API_KEY"],
base_url="https://api.sakrylle.com",
)
message = client.messages.create(
model="claude-haiku-4-5-20251001",
max_tokens=1024,
messages=[
{"role": "user", "content": "用一句话介绍 Claude。"},
],
)
print(message.content[0].text)SDK 内部会自动拼上
/v1/messages。base_url这里写https://api.sakrylle.com即可,不要再加/v1。 具体拼接规则以 anthropic-sdk-python README 为准。 也可以用环境变量ANTHROPIC_API_KEY与ANTHROPIC_BASE_URL替代显式参数。
流式响应
messages.stream() 是上下文管理器,能直接迭代纯文本片段:
python
import os
from anthropic import Anthropic
client = Anthropic(
api_key=os.environ["SAKRYLLE_API_KEY"],
base_url="https://api.sakrylle.com",
)
with client.messages.stream(
model="claude-haiku-4-5-20251001",
max_tokens=1024,
messages=[{"role": "user", "content": "写一首四行小诗。"}],
) as stream:
for text in stream.text_stream:
print(text, end="", flush=True)
print()错误处理
两个 SDK 都用类似的异常体系(AuthenticationError、RateLimitError、APIStatusError 等)。错误码与上游对齐:
python
from openai import OpenAI, AuthenticationError, RateLimitError, APIStatusError
client = OpenAI(api_key="bad-key", base_url="https://api.sakrylle.com/v1")
try:
client.chat.completions.create(
model="gpt-5.6-sol",
messages=[{"role": "user", "content": "hi"}],
)
except AuthenticationError:
print("Key 无效或被禁用")
except RateLimitError:
print("限速,稍后重试")
except APIStatusError as e:
print("上游错误:", e.status_code, e.response.text)更完整的错误码与排查表见 错误码。
