امنیت کلید و بهترین روشها
پیش از انتشار محصول، این موارد را بررسی کنید.
کلید را کجا نگذارید
- کد فرانتاند مرورگر و فایلهای JavaScript عمومی
- اپلیکیشن موبایل بدون بکاند واسط
- مخازن گیت و فایلهای env عمومی
درخواستها را همیشه از سرور خودتان بفرستید و کلید را در متغیر محیطی نگه دارید:
HOOSHGAR_API_KEY=...import os
api_key = os.environ["HOOSHGAR_API_KEY"]const apiKey = process.env.HOOSHGAR_API_KEY;محدود کردن و چرخش کلید
در صفحهٔ کلیدهای API برای هر کلید میتوانید تاریخ انقضا و فهرست IPهای مجاز تعیین کنید. برای هر محیط (توسعه، تست، production) کلید جداگانه بسازید. اگر کلیدی لو رفت، فوراً آن را غیرفعال و کلید جدید جایگزین کنید.
تلاش مجدد با backoff
خطاهای 429 و 5xx را با تأخیر نمایی و کمی تصادفیسازی دوباره امتحان کنید. خطاهای 400، 401 و 402 را تکرار نکنید.
import random, time
from openai import OpenAI, RateLimitError, APIStatusError
def with_retry(fn, attempts=5):
for i in range(attempts):
try:
return fn()
except (RateLimitError, APIStatusError) as e:
status = getattr(e, "status_code", 429)
if status < 500 and status != 429 or i == attempts - 1:
raise
time.sleep(min(30, 2 ** i) + random.random())کتابخانههای رسمی OpenAI خودشان چند بار تلاش مجدد میکنند؛ با
max_retries قابل تنظیم است.Timeout
برای پاسخهای طولانی از استریم استفاده کنید و timeout سمت کلاینت را متناسب با مدل تنظیم کنید:
client = OpenAI(api_key=..., base_url=..., timeout=60, max_retries=3)چکلیست production
- موجودی کیف پول و هشدار مصرف را در داشبورد مصرف پایش کنید.
- شناسهٔ مدل را قابل تنظیم نگه دارید تا در صورت تغییر کاتالوگ، بدون انتشار مجدد عوض شود.
- خطای موجودی ناکافی را به پیام مناسب برای کاربر نهایی تبدیل کنید.
- برای کاهش هزینه،
max_tokensرا محدود کنید.
