最佳实践
提升 API 使用效率的实用建议,涵盖错误处理、重试策略、成本优化和安全防护。
错误处理
正确处理 API 错误是构建稳定应用的基础。
检查 HTTP 状态码
始终检查响应状态码。2xx 表示成功,4xx 表示客户端错误,5xx 表示服务端错误。
import openai
client = openai.OpenAI(
base_url="https://api.silvamux.com/v1",
api_key="sk-your-api-key"
)
try:
response = client.chat.completions.create(
model="deepseek-v3.2",
messages=[{"role": "user", "content": "你好"}]
)
except openai.AuthenticationError:
print("API Key 无效,请检查控制台")
except openai.RateLimitError:
print("请求频率超限,请降低并发或稍后重试")
except openai.APIStatusError as e:
print(f"API 错误: {e.status_code} - {e.message}")解析业务错误码
千木(SilvaMux)在响应体中返回结构化错误信息,包含 error.code 字段用于精确定位问题。详见错误码参考。
{
"error": {
"type": "insufficient_balance",
"message": "余额不足,请先充值",
"code": 40201
}
}重试策略
网络请求可能因瞬时故障失败,合理的重试策略可以提高成功率。
指数退避重试
对于 429 (速率限制) 和 5xx (服务端错误),使用指数退避策略重试。避免对 4xx 错误重试。
import time
import random
def call_with_retry(func, max_retries=3, base_delay=1):
for attempt in range(max_retries):
try:
return func()
except openai.RateLimitError:
delay = base_delay * (2 ** attempt) + random.uniform(0, 1)
print(f"速率限制,{delay:.1f}s 后重试 (第 {attempt + 1} 次)")
time.sleep(delay)
except openai.APIStatusError as e:
if e.status_code >= 500:
delay = base_delay * (2 ** attempt)
print(f"服务端错误 {e.status_code},{delay:.1f}s 后重试")
time.sleep(delay)
else:
raise # 4xx 错误不应重试
raise Exception(f"重试 {max_retries} 次后仍然失败")
response = call_with_retry(lambda: client.chat.completions.create(
model="deepseek-v3.2",
messages=[{"role": "user", "content": "你好"}]
))使用 SDK 内置重试
OpenAI SDK 支持配置自动重试策略,无需手动实现。
client = openai.OpenAI(
base_url="https://api.silvamux.com/v1",
api_key="sk-your-api-key",
max_retries=3, # 最多重试 3 次
timeout=30.0,
)成本优化
合理控制 API 调用成本,避免不必要的资源浪费。
选择合适的模型
不同模型的价格差异显著。简单任务(如分类、提取)使用小模型,复杂任务(如推理、代码生成)使用大模型。
# 简单任务 — 使用轻量模型
response = client.chat.completions.create(
model="deepseek-v3.2", # 高性价比通用模型
messages=[{"role": "user", "content": "将以下文本分类..."}]
)
# 复杂任务 — 使用高级模型
response = client.chat.completions.create(
model="claude-sonnet-4-20250514", # 强推理能力
messages=[{"role": "user", "content": "分析以下代码的安全漏洞..."}]
)控制 max_tokens
设置合理的 max_tokens 上限,避免生成超出需要的文本。短回答场景建议设置较低的上限。
# 短回答场景
response = client.chat.completions.create(
model="deepseek-v3.2",
messages=[{"role": "user", "content": "这个句子是积极还是消极?只回答一个词。"}],
max_tokens=10, # 只需要几个 token
)利用 Prompt 缓存
对于重复的系统提示词和长上下文场景,千木(SilvaMux)支持语义缓存。相似的请求可以直接返回缓存结果,节省 Token 消耗。
流式调用
流式响应可以显著提升用户体验,让用户更快看到内容。
基本流式调用
设置 stream=true 启用 SSE 流式响应。适合交互式对话、实时展示等场景。
stream = client.chat.completions.create(
model="deepseek-v3.2",
messages=[{"role": "user", "content": "写一首关于春天的诗"}],
stream=True,
)
for chunk in stream:
content = chunk.choices[0].delta.content
if content:
print(content, end="", flush=True)服务端流式转发
在 Web 应用中,使用流式转发将 LLM 响应实时推送到前端,避免长时间等待。
from fastapi import FastAPI
from fastapi.responses import StreamingResponse
import openai
app = FastAPI()
client = openai.OpenAI(base_url="https://api.silvamux.com/v1")
@app.post("/chat")
async def chat(request: dict):
def generate():
stream = client.chat.completions.create(
model=request["model"],
messages=request["messages"],
stream=True,
)
for chunk in stream:
content = chunk.choices[0].delta.content
if content:
yield f"data: {content}\n\n"
yield "data: [DONE]\n\n"
return StreamingResponse(generate(), media_type="text/event-stream")安全建议
保护 API Key 和用户数据安全。
API Key 管理
API Key 通过环境变量或密钥管理服务存储,切勿硬编码在代码中或提交到版本控制。
# 推荐:使用环境变量
import os
client = openai.OpenAI(
base_url="https://api.silvamux.com/v1",
api_key=os.environ["SILVAMUX_API_KEY"]
)设置 Key 权限范围
在控制台创建 API Key 时,可以通过 model_scope 限制 Key 可访问的模型范围,降低密钥泄露的风险。
设置月度额度上限
为每个 API Key 设置 quota_limit(月度消费上限),防止异常使用导致意外费用。