چرا پاسخ JSON شما اعتبارسنجی را رد میکند
تجزیه JSON زمانی شکست میخورد که مدل متن مکالمهای را به خارج از بلوک کد میچسباند. مدلهای بدون سانسور بر جریان زبان طبیعی اولویت میدهند، بنابراین اغلب "اینجا JSON است" را قبل یا بعد از دادههای خام اضافه میکنند. این کار پارسرهای دقیقی که تنها شیء را انتظار دارند، مختل میکند.
از response_format پارامتر روی {"type": "json_object"}. این موضوع مدل را مجبور میکند تا فقط JSON معتد خروجی دهد. نیاز به اسکریپتهای پاکسازی regex در کد شما را از بین میبرد. با این حال، توجه داشته باشید که این کار توکنهای بیشتری را در هر درخواست مصرف میکند زیرا مدل محدود شده است.
- تنظیم
response_formatبهjson_objectدر پیکربندی درخواست. - اطمینان حاصل کنید که دستورالعمل سیستم (system prompt) شما صراحتاً خروجی JSON را درخواست میکند.
- مدیریت خطاهای جزئی مانند کاماهای پایانی یا خطاهای سینتکس بهصورت ایمن در صورت بروز خطا توسط مدل.
from openai import OpenAI
client = OpenAI(base_url="https://api.abliteratedllmonline.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)
مدیریت صحیح محدودیتهای پنجره زمینه
پنجره زمینه شما ۱۰۰,۰۰۰ توکن در مجموع ظرفیت دارد که شامل ورودی و خروجی میشود. اگر تاریخچهای طولانی ارسال کنید، باید حداکثر طول خروجی را کاهش دهید. حداکثر خروجی پیشفرض ۲,۰۴۸ توکن است مگر اینکه خلاف آن را مشخص کنید.
توکنهای باقیمانده را با تفریق اندازه ورودی از 100,000 محاسبه کنید. اگر در حال نقشآفرینی هستید، دستورالعمل سیستم را مختصر نگه دارید. فقط آخرین چرخههای مکالمه را در درخواست API ذخیره کنید. زمینههای قدیمیتر را میتوان خلاصه یا کوتاه کرد. این کار از رسیدن به محدودیت سخت در حین تولید جلوگیری میکند.
import OpenAI from "openai";
const client = new OpenAI({ baseURL: "https://api.abliteratedllmonline.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);
خطاهای فراخوانی تابع با مدلهای بدون سانسور
فراخوانی تابع زمانی شکست میخورد که مدل تعاریف ابزار را نادیده بگیرد یا استدلالهای نامعتبر برگرداند. مدلهای بدون سانسور ممکن است پاسخهای خلاقانه را بر استفاده دقیق از ابزار ترجیح دهند. آنها ممکن است پارامترهایی را توهمزده کنند که در طرحواره شما وجود ندارند.
ابزارهای خود را به وضوح در tools آرایه. از tool_choice برای اجبار به رفتار خاص. اگر مدل از فراخوانی یک ابزار خودداری کرد، دستورالعملهای متناقض در prompt سیستم خود را بررسی کنید. اطمینان حاصل کنید که نامها و توضیحات ابزار مبهم نیستند. ابتدا با پرسشهای ساده تست کنید تا یکپارچهسازی را تأیید نمایید.
- نام ابزارها و توضیحات آنها را به وضوح ارائه دهید.
- استفاده
tool_choiceبرای کنترل فراخوانی. - آرگومانها را قبل از اجرا با schema خود مقایسه کنید.
curl https://api.abliteratedllmonline.com/v1/chat/completions \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "uncensored",
"messages": [{"role": "user", "content": "List the python dependencies for this flask app"}]
}'
وقفههای استریم و مدیریت SSE
استریم از طریق رویدادهای ارسالشده سرور (SSE) ممکن است توکنها را از دست بدهد اگر مشتری قطع شود یا خطای شبکه رخ دهد. قطعه نهایی شامل آمار مصرف توکن است. باید این قطعه را تجزیه کنید تا تعداد ورودی و خروجی را دریافت کنید.
یک مشتری SSE قوی پیادهسازی کنید که منطق اتصال مجدد را مدیریت کند. فرض نکنید که هر بخش حاوی داده است. برخی بخشها ممکن است خالی باشند یا فقط حاوی فاصله باشند. بخش نهایی را پردازش کنید تا موجودی اعتبار یا شمارندههای توکن خود را بهروز کنید. این از صورتحساب دقیق و ردیابی استفاده اطمینان حاصل میکند.
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)
تنظیمات دما که بر خروجی NSFW تأثیر میگذارند
دمای (Temperature) تصادفی بودن خروجی مدل را کنترل میکند. مقادیر بالاتر مانند ۰.۸ یا ۰.۹ خلاقیت و غیرقابل پیشبینی بودن را افزایش میدهند. مقادیر پایینتر مانند ۰.۲ خروجی را قطعیتر و متمرکزتر میکنند. برای نقشآفرینی NSFW، دماهای بالاتر پاسخهای متنوعتر و شدیدتری تولید میکنند.
با مقادیر مختلف آزمایش کنید تا تعادل مناسب را بیابید. دمای خیلی بالا ممکن است منجر به متن ناهماهنگ یا تکراری شود. دمای خیلی پایین ممکن است منجر به گفتار رباتیک یا بیروح شود. بر اساس لحن و ثاستی مورد نظر خود تنظیم کنید. مدل بدون سانسور به تنظیمات خلاقیت بالاتر خوب پاسخ میدهد.
- برای نقشآفری خلاقانه از 0.7-0.9 استفاده کنید.
- برای وظایف واقعی یا کدنویسی از 0.2-0.5 استفاده کنید.
- کیفیت خروجی را هنگام تنظیمات پایش کنید.
Top P و تنوع در تولید نقشآفری
Top P (نمونهگیری هستهای) مدل را محدود میکند تا فقط درصد بالایی از توده احتمال را در نظر بگیرد. این با دما برای کنترل تنوع کار میکند. یک مقدار Top P پایین خروجی را قابلپیشبینیتر میکند. یک مقدار بالا اجازه انتخاب کلمات متنوعتری میدهد.
Top P را با دما ترکیب کنید تا کنترل دقیقی داشته باشید. برای مثال، دمای بالا همراه با Top P پایین میتواند متنی خلاقانه اما متمرکز تولید کند. این موضوع برای حفظ صدای شخصیت در حالی که اجازه عملیات خودجوش میدهد مفید است. ترکیبات مختلف را برای تناسب با سبک روایی خود آزمایش کنید.
from openai import OpenAI
client = OpenAI(base_url="https://api.abliteratedllmonline.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)
درک محدودیتها و هزینههای توکن
مصرف توکن مستقیماً بر اعتبار پیشپرداخت شما تأثیر میگذارد. API توکنهای ورودی را با نرخ $0.15 به ازای هر میلیون و توکنهای خروجی را با نرخ $0.50 به ازای هر میلیون هزینه میکند. توکنهای خروجی گرانتر هستند زیرا نشاندهنده کار مدل هستند. پخش زنده هزینه را تغییر نمیدهد؛ شما برای تمام توکنهای تولید شده پرداخت میکنید.
مصرف توکنهای خود را پایش کنید تا از هزینههای غیرمنتظره در امان بمانید. آخرین قطعه SSE تعداد دقیق توکنها را ارائه میدهد. از این اطلاعات برای بهروزرسانی موجودی محلی یا داشبورد صورتحساب خود استفاده کنید. خطاها و رد شدن درخواستها رایگان هستند، بنابراین تنها برای تکمیلهای موفق پرداخت میکنید. این مدل پرداخت بهکارکرد تضمین میکند که هرگز بیش از حد پرداخت نمیکنید.
- توکنهای ورودی هر میلیون ۰.۱۵ دلار هزینه دارند.
- توکنهای خروجی $۰.۵۰ به ازای هر میلیون هزینه دارند.
- رد کردنها و خطاها رایگان هستند.
جایگزینی کلید API و محدودیتهای نرخ
هر حساب در هر زمان تنها یک کلید API فعال دارد. اگر کلید خود را بازتولید کنید، کلید قدیمی بلافاصله نامعتبر میشود. این موضوع امنیت را تضمین میکند اما نیاز دارد که کلاینتهای خود را بهسرعت بهروزرسانی کنید. محدودیتهای نرخ روی ۳۰۰ درخواست در دقیقه و ۸ درخواست همزمان به ازای هر کلید تنظیم شده است.
عبور از این محدودیتها منجر به خطاهای HTTP 429 میشود. بازگشت نمایی را در منطق تلاش مجدد خود پیادهسازی کنید. حجم درخواستهای خود را پایش کنید تا در محدودیتها بمانید. اگر به نرخ انتقال بالاتری نیاز دارید، در نظر بگیرید که بار کاری خود را بین چندین حساب تقسیم کنید یا اندازه درخواستهای خود را بهینهسازی کنید. کلید بلافاصله پس از ثبتنام نشان داده میشود، بنابراین آن را امن نگه دارید.
import OpenAI from "openai";
const client = new OpenAI({ baseURL: "https://api.abliteratedllmonline.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);
عیبیابی خطاهای رایج HTTP
خطاهای HTTP نشاندهنده مشکلاتی در درخواست شما یا پاسخ سرور هستند. خطاهای رایج شامل 400 Bad Request، 401 Unauthorized و 429 Too Many Requests میشوند. خطای 400 اغلب به معنای JSON نادرست یا پارامترهای نامعتبر است. خطای 401 نشاندهنده کلید API نادرست یا منقضی شده است.
سربرگها و بار درخواست خود را برای خطاهای سینتکس بررسی کنید. مطمئن شوید که کلید API شما صحیح و فعال است. اگر خطای 429 دریافت کردید، صبر کنید و با بازگشت نمایی مجدداً تلاش کنید. از SDKهای رسمی OpenAI برای مدیریت خودکار این خطاها استفاده کنید. آنها پیامهای خطای واضح و منطق تلاش مجدد ارائه میدهند. این زمان توسعه را کاهش میدهد و قابلیت اطمینان را بهبود میبخشد.
- 400: بررسی سینتکس JSON و پارامترها.
- 401: اعتبار کلید API را بررسی کنید.
- 429: منطق تلاش مجدد با بازگشت را پیادهسازی کنید.
curl https://api.abliteratedllmonline.com/v1/chat/completions \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "uncensored",
"messages": [{"role": "user", "content": "List the python dependencies for this flask app"}]
}'