الإعداد والتثبيت
ابدأ بإنشاء حساب للحصول على مفتاح واجهة برمجة التطبيقات (API key). سجّل الدخول باستخدام حساب Google أو مزيج من البريد الإلكتروني وكلمة المرور. يعرض النظام مفتاحك الفريد على الشاشة على الفور. لا يتطلب هذا الخطوة التحقق من رقم الهاتف. يمكنك إنشاء مفتاح جديد في أي وقت، لكن يوجد مفتاح نشط واحد فقط لكل حساب. يحل المفتاح الجديد محل المفتاح السابق فورًا. احفظ هذا المفتاح بأمان لأنه يمنحك الوصول إلى أرصدةك المدفوعة مسبقًا. استخدم هذه البيانات الاعتمادية مع أي مكتبة SDK متوافقة مع OpenAI لبدء التكامل.
الإعداد الأساسي
وجّه عميلك إلى عنوان URL الأساسي المخصص للطلبات غير الخاضعة للرقابة. استخدم القياسي BASE_URL معامل لتوجيه حركة المرور بشكل صحيح. يعكس هيكل نقطة النهاية اتفاقيات OpenAI لتبديل السهولة. يجب عليك تقديم مفتاح واجهة برمجة التطبيقات الخاص بك في Authorization الرأس. اضبط معرف النموذج على uncensored في كائن التكوين الخاص بك. يضمن ذلك استهداف الطلب لنموذج اللغة الكبير غير المقيد (uncensored) الصحيح. تحقق من اتصالك عن طريق سرد النماذج المتاحة عبر /v1/models endpoint. يؤكد هذا أن المصادقة الخاصة بك صالحة قبل إرسال حمولات البيانات الثقيلة.
إرسال الطلبات
أرسل طلب POST قياسي إلى نقطة نهاية إكمال المحادثة. يجب أن يتضمن حمولتك model field مضبوطًا إلى uncensored. مرر رسائلك في مصفوفة تحت messages المفتاح. يقبل النظام تعريفات الأدوار القياسية مثل user و assistant. تُ charged الرموز المدخلة بمعدل شفاف قدره $0.15 لكل مليون رمز. تكلف الرموز المخرجة $0.50 لكل مليون رمز. لا تستهلك الأخطاء رصيدك المدفوع مسبقاً. يضمن هذا نموذج الفوترة أن تدفع فقط مقابل النص المُولّد فعلياً. استخدم أمر cURL التالي لإرسال رسالتك الأولى.
استجابات البث
فعّل البث عن طريق تعيين stream إلى true في طلبك. يعيد الخادم تدفق أحداث الأحداث المرسلة عبر الخادم (SSE). يحتوي كل جزء على جزء من النص المولد. يتضمن الجزء الأخير إحصائيات استخدام الرموز الكاملة. هذا يتيح لك عرض النص للمستخدمين في الوقت الفعلي. يعمل التدفق بشكل متطابق عبر جميع SDKs المدعومة. تأكد من أن عميلك يعامل مخازن النص الجزئي بشكل صحيح. استخدم هذه الطريقة لتوليد المحتوى طويل المدى أو واجهات الدردشة التفاعلية. يوضح المثال التالي كيفية التعامل مع التدفق في Python.
استدعاء الوظائف
عرّف الأدوات في طلبك باستخدام tools معامل. يعيد النموذج استدعاءات أدوات مهيكلة عند الاقتضاء. يمكنك تحديد tool_choice لإجبار سلوك محدد. أعد رد الأداة إلى النموذج للمعالجة الإضافية. هذا يدعم عمليات العمل المعقدة التي تتطلب تفاعلات مع واجهات برمجة التطبيقات الخارجية. يتعامل النموذج مع تنسيق JSON تلقائيًا عند الحاجة. تأكد من مطابقة تعريفات الوظائف للمخطط المتوقع. تعمل هذه الميزة جنبًا إلى جنب مع إعدادات درجة الحرارة و top-p القياسية. استخدم Node.js لتنفيذ معالجة الأدوات بكفاءة.
وضع JSON والحدود
طلب إخراج JSON صارم عن طريق تعيين response_format إلى {"type": "json_object"}. يضمن النموذج هيكل JSON صحيح في الاستجابة. هذا مثالي لتحليل البيانات في منطق تطبيقك. كن على علم بحد نافذة السياق البالغة 100,000 رمز. يغطي هذا كل من الطلب والاستجابة معاً. الحد الأقصى للإخراج لكل طلب هو 16,000 رمز. إذا لم تحدد max_tokens, الحد الافتراضي هو 2,048. الطلبات مقيدة بـ 300 في الدقيقة لكل مفتاح. يتم تحديد الطلبات المتزامنة بثمانية في وقت واحد. يجب ألا يتجاوز جسم الطلب 8 ميجابايت. تعامل مع الأخطاء بسلاسة كما هو موضح في مثال التدفق التالي.
cURL
curl https://api.modelsuncensoredopenrouter.com/v1/chat/completions \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "uncensored",
"messages": [{"role": "user", "content": "list three json keys"}]
}'Python
from openai import OpenAI
client = OpenAI(base_url="https://api.modelsuncensoredopenrouter.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)Node.js
import OpenAI from "openai";
const client = new OpenAI({ baseURL: "https://api.modelsuncensoredopenrouter.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);التدفق
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)