fa ▾
دریافت کلید API

api LLM بدون اشتراک: اشتباهات رایج ادغام

توسعه‌دهندگان اغلب ساعت‌ها را صرف عیب‌یابی خطاهای ادغام هنگام جابجایی به یک API LLM بدون مدل اشتراکی می‌کنند، زیرا فرض می‌کنند رفتارهای API استاندارد به طور جهانی اعمال می‌شوند. این راهنما ظرافت‌های فنی خاص endpointهای پرداخت به ازای توکن، محدودیت‌های استریم و صورت‌حساب کریپتو را برای کمک به ساخت قابل‌اعتماد توضیح می‌دهد.

آخرین به‌روزرسانی

خلاصه

  • پاسخ‌های استریم‌شده اگر قطعه نهایی SSE را به درستی تجزیه نکنید، زود قطع می‌شوند.
  • پنجره زمینه ۱۰۰k شامل توکن‌های متن ورودی و تکمیل است که استراتژی‌های قطع دقیق را نیازمند می‌سازد.
  • شارژهای کریپتو فوری هستند اما نیاز به تطابق دقیق شبکه (TRC20 در مقابل Base) دارند تا در موجودی شما منعکس شوند.
  • فراخوانی تابع در مدل‌های بدون سانسور ممکن است JSON غیراستاندارد برگرداند اگر دما خیلی بالا باشد.

درک مدل پرداخت به ازای توکن

پرداخت به ازای هر توکن به این معنی است که شما تنها بابت آنچه مصرف می‌کنید هزینه پرداخت می‌کنید، نه بابت دسترسی بیکار به سرور. برخلاف اشتراک‌های ماهانه سنتی، این مدل هزینه‌ها را مستقیماً با حجم مصرف همسو می‌کند. شما بر اساس توکن‌های ورودی و خروجی واقعی پردازش شده توسط نقطه پایانی هزینه دریافت می‌کنید.

اکثر ارائه‌دهندگان نرخ‌های متفاوتی برای ورودی در مقابل توکن‌های خروجی دریافت می‌کنند. برای مثال، برخی از خدمات LLM بدون سانسور، ورودی را $0.15 به ازای هر میلیون توکن و خروجی را $0.50 به ازای هر میلیون توکن قیمت‌گذاری می‌کنند. این نابرابری وجود دارد زیرا تولید متن نیاز به محاسبات بسیار بیشتری نسبت به خواندن آن دارد.

شمار توکن‌های خود را به دقت پایش کنید. یک پاسخ طولانی واحد می‌تواند اگر طول خروجی را تخمین نزده‌اید، از هزینه ورودی شما بیشتر شود. همیشه برای رد دقیق هزینه‌ها، متادیتای استفاده را که در هدرها یا بدنه پاسخ بازگردانده می‌شود، بررسی کنید.

چرا پاسخ استریمینگ شما زود قطع می‌شود

پاسخ‌های استریم‌شده زود قطع می‌شوند زیرا کلاینت‌ها اغلب پس از دریافت چند قطعه اول، گوش دادن را متوقف می‌کنند. سرور داده‌ها را به صورت بلادرنگ ارسال می‌کند، اما برنامه شما ممکن است اگر استریم را به درستی مدیریت نکند، زودتر از موعد قطع شود.

هر تکه شامل متن جزئی است. باید این تکه‌ها را به هم بچسبانید تا پاسخ کامل را تشکیل دهید. اگر تکه‌های میانی را نادیده بگیرید، داده‌ها از دست می‌روند. تکه نهایی معمولاً شامل آمار کامل مصرف است.

تنظیمات timeout خود را بررسی کنید. برخی از شبکه‌ها پس از چند ثانیه عدم فعالیت، اتصال را قطع می‌کنند. مطمئن شوید که کلاینت شما وقفه‌های موقت در جریان پاسخ را مدیریت می‌کند. این موضوع در مدل‌های زبان بزرگ که متن‌های طولانی تولید می‌کنند، رایج است.

stream = client.chat.completions.create(
    model="uncensored",
    messages=[{"role": "user", "content": "Tell the story in second person."}],
    stream=True,
)
for chunk in stream:
    if chunk.choices and chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="", flush=True)

مدیریت صحیح پنجره زمینه 100k

حد پنجره زمینه شامل هم پرامپت و هم تکمیل تولید شده توسط مدل است. نمی‌توانید ۱۰۰ هزار توکن در پرامپت ارسال کنید و انتظار داشته باشید ۱۰۰ هزار توکن دیگر در پاسخ دریافت کنید. طول ترکیبی کل باید در حد مجاز باقی بماند.

اگر یک پرامپت بزرگ ارسال کنید، فضای کمتری برای پاسخ باقی می‌ماند. برای مثال، یک پرامپت ۹۰ هزار توکنی فقط ۱۰ هزار توکن برای خروجی باقی می‌گذارد. این می‌تواند پاسخ‌های طولانی را به طور ناگهانی کوتاه کند.

شمارش توکن‌ها را در سمت خود پیاده‌سازی کنید. از یک توکنایزر استفاده کنید که با کدگذاری مدل مطابقت داشته باشد. این کار تضمین می‌کند که در حین درخواست، از حد مجاز تجاوز نکنید. اگر این اتفاق بیفتد، سرور خطا برمی‌گرداند.

پیام‌های قدیمی‌تر را در تاریخچه‌های چت در نظر بگیرید. این کار زمینه اخیرترین پیام‌ها را حفظ می‌کند و در عین حال در چارچوب‌ها باقی می‌ماند. این برای حفظ انسجام مکالمه در طول جلسات طولانی حیاتی است.

شارژهای کریپتو: چرا موجودی شما به‌روزرسانی نشد

شارژهای کریپتو هنگام ارسال توکن‌ها به شبکه اشتباه به‌روزرسانی نمی‌شوند. API ما USDT روی TRC20 و USDC روی Base را می‌پذیرد. ارسال USDT روی اتریوم به آدرس TRC20 منجر از دست رفتن وجوه می‌شود.

همیشه پیشوند شبکه را قبل از ارسال بررسی کنید. صفحه واریز، آدرس و شبکه خاص برای هر ارز را نشان می‌دهد. فرض نکنید که همه آدرس‌های USDT قابل تعویض هستند.

منتظر تعداد مورد تأییدهای مورد نیاز بمانید. تراکنش‌ها فوری نیستند. سیستم حساب شما را تنها پس از تأیید انتقال توسط بلاک‌چین اعتبار می‌دهد. این از مشکلات خرج‌دوبار جلوگیری می‌کند.

امضای تراکنش را در یک کاوشگر بلاک‌چین بررسی کنید. اگر موجودی به‌روزرسانی نشد، امضا را به پشتیبانی ارائه دهید. آن‌ها می‌توانند انتقال را به صورت دستی تأیید کنند. این سریع‌ترین راه برای رفع اختلافات است.

رفع خطاهای فراخوانی تابع در مدل‌های uncensored

خطاهای فراخوانی تابع اغلب ناشی از قالب‌بندی JSON غیراستاندارد در مدل‌های بدون سانسور است. این مدل‌ها خلاقیت را بر ساختار دقیق ترجیح می‌دهند که می‌تواند پارسرهای سخت‌گیر را مختل کند.

قالب پاسخ را روی json_object برای اجبار به خروجی سخت‌گیرانه‌تر. این شانس JSON نامعتبر را کاهش می‌دهد. با این حال، ممکن است خلاقیت را کمی کاهش دهد.

پاسخ را قبل از تجزیه اعتبارسنجی کنید. از یک بلوک try-catch برای مدیریت خطاهای تجزیه JSON استفاده کنید. اگر تجزیه شکست خورد، با دمای پایین‌تر دوباره تلاش کنید. این خروجی قطعی‌تری را تشویق می‌کند.

from openai import OpenAI

client = OpenAI(base_url="https://api.aiapisubscription.com/v1", api_key="YOUR_KEY")

resp = client.chat.completions.create(
    model="uncensored",
    messages=[{"role": "user", "content": "Summarise this thread without softening it."}],
)
print(resp.choices[0].message.content)

محدودیت نرخ‌ها: مدیریت نوسانات ۳۰۰ RPM

حد نرخ‌ها محدود می‌کند که چند درخواست می‌توانید در دقیقه ارسال کنید. API ما اجازه ۳۰۰ درخواست در دقیقه به ازای هر کلید را می‌دهد. تجاوز از این محدودیت کد وضعیت 429 را برمی‌گرداند.

هنگام رسیدن به محدودیت، از بازگشت نمایی استفاده کنید. درخواست را پس از یک تأخیر کوتاه مجدداً ارسال کنید. این کار از تحت فشار قرار دادن سرور در زمان‌های اوج مصرف جلوگیری می‌کند.

فرکانس درخواست‌های خود را پایش کنید. اگر درخواست‌ها را خیلی سریع ارسال کنید، ممکن است محدودیت را فعال کنید. درخواست‌های خود را به طور یکنواخت فاصله دهید. این عملکرد ثابت را تضمین می‌کند.

اگر به ظرفیت بالاتری نیاز دارید، از کلیدهای متعدد استفاده کنید. هر کلید محدودیت خاص خود را دارد. این به شما امکان می‌دهد بدون برخورد به یک گلوگاه واحد، برنامه خود را مقیاس‌بندی کنید.

شکست‌های حالت JSON و قالب‌بندی پاسخ

شکست‌های حالت JSON زمانی رخ می‌دهند که مدل سینتکس نامعتبری برمی‌گرداند. این موضوع در مدل‌های بدون سانسور که زبان طبیعی را بر داده‌های ساختاریافته ترجیح می‌دهند، رایج است.

از response_format پارامتری برای اجبار خروجی JSON. این به مدل می‌گوید پاسخ خود را به صورت JSON معتبر ساختاردهی کند. با این حال، صحت آن را تضمین نمی‌کند.

خروجی را با یک طرحواره JSON اعتبارسنجی کنید. این تضمین می‌کند که داده‌ها با ساختار مورد انتظار شما مطابقت دارند. اگر اعتبارسنجی شکست خورد، درخواست تکرار یا تنظیم پرامپت را درخواست کنید.

import OpenAI from "openai";

const client = new OpenAI({ baseURL: "https://api.aiapisubscription.com/v1", apiKey: process.env.API_KEY });

const resp = await client.chat.completions.create({
  model: "uncensored",
  messages: [{ role: "user", content: "Draft a villain monologue for my game." }],
});
console.log(resp.choices[0].message.content);

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

اختلافات در شمارش توکن‌ها زمانی رخ می‌دهد که کلاینت شما از توکن‌زن (Tokenizer) متفاوتی نسبت به مدل استفاده می‌کند. این منجر به تخمین‌های نادرست هزینه می‌شود.

از توکنایزر رسمی ارائه‌شده توسط سازنده مدل استفاده کنید. این تضمین می‌کند که شمارش‌های شما با مصرف واقعی مطابقت دارد. توکنایزرهای شخص ثالث ممکن است کاراکترهای خاص را به‌طور متفاوتی مدیریت کنند.

متادیتای استفاده را در پاسخ بررسی کنید. این تعداد دقیق توکن را فراهم می‌کند. این را با شمار محلی خود مقایسه کنید تا اختلافات را شناسایی کنید.

توکن‌های خاص را در نظر بگیرید. این‌ها شامل دستورات سیستم و تعریف توابع هستند. آن‌ها توکن مصرف می‌کنند اما ممکن است در متن خام دیده نشوند.

هنگام تغییر از محلی به API

به یک API تغییر دهید وقتی سخت‌افزار محلی نمی‌تواند نیازهای تأخیر یا مقیاس شما را برآورده کند. اجرای یک مدل بزرگ به صورت محلی نیاز به GPUهای گران‌قیمت و توان قابل توجه دارد.

APIها مقیاس‌پذیری بدون نگهداری سخت‌افزار را ارائه می‌دهند. می‌توانید به راحتی با افزایش‌های ناگهانی ترافیک مقابله کنید. این برای محیط‌های تولید ایده‌آل است.

در نظر بگیرید هزینه. اگر یک مدل محلی را به صورت 24/7 اجرا می‌کنید، هزینه‌های برق و سخت‌افزار ممکن است از استفاده API بیشتر باشد. صورتحساب به ازای توکن فقط در صورتی از نظر هزینه مقرون‌به‌صرفه است که استفاده متغیر باشد.

curl https://api.aiapisubscription.com/v1/chat/completions \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "uncensored",
    "messages": [{"role": "user", "content": "Summarize the technical specs of the new GPU."}]
  }'

سوالات متداول

آیا پنجره زمینه ۱۰۰k شامل توکن‌های پاسخ می‌شود؟

بله، پنجره زمینه 100k شامل هم پرامپت ورودی و هم تکمیل خروجی است. باید هر دو را هنگام طراحی برنامه خود در نظر بگیرید. اگر پرامپت شما 90k توکن باشد، فقط 10k توکن برای پاسخ باقی می‌ماند.

آیا می‌توانم از یک SDK استاندارد OpenAI با این LLM بدون سانسور استفاده کنم؟

بله، API با OpenAI سازگار است. می‌توانید از SDK رسمی OpenAI با تغییر URL پایه و کلید API استفاده کنید. این به شما اجازه می‌دهد آن را با حداقل تغییرات کد در پروژه‌های موجود ادغام کنید.

چرا شارژ ارز دیجیتال من به عنوان در انتظار نشان داده می‌شود؟

تراکنش‌های کریپتو نیاز به تأییدیه‌های بلاک‌چین قبل از اعتباردهی دارند. سیستم منتظر می‌ماند تا شبکه انتقال را اعتبارسنجی کند. این فرآیند بسته به شلوکی شبکه ممکن است چند دقیقه طول بکشد.

اگر از محدودیت 300 RPM عبور کنم چه اتفاقی می‌افتد؟

خطای ۴۲۹ Too Many Requests را دریافت خواهید کرد. درخواست شما تا زمانی که پنجره محدود نرخ بازنشانی شود رد می‌شود. بازگشت نمایی را پیاده‌سازی کنید تا این وضعیت را به صورت روان مدیریت کنید و پس از یک تأخیر کوتاه مجدداً تلاش کنید.

کلید API خود را دریافت کنید

ثبت‌نام کنید، کلید را بردارید و آدرس پایه (base URL) را به‌روز کنید. تمام.

دریافت کلید APIhttps://api.aiapisubscription.com/v1