امنیت کلید و بهترین روش‌ها

پیش از انتشار محصول، این موارد را بررسی کنید.

کلید را کجا نگذارید

  • کد فرانت‌اند مرورگر و فایل‌های 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 را محدود کنید.