توثيق API لـ OpenRouter
قم بتوصيل تطبيقك بـ LLM غير المقيد الخاص بنا باستخدام الواجهة القياسية المتوافقة مع OpenAI. يغطي هذا الدليل المصادقة، وتنسيقات الطلبات، والتدفق للتكامل السريع.
البدء السريع: التوصيل مع Python
ابدأ بتثبيت الحزمة الرسمية وتوجيهها إلى عنوان URL الأساسي الخاص بنا.
تتصرف واجهة البرمجة لدينا مثل واجهة OpenAI القياسية ولكنها توجه الطلبات إلى نموذج واحد غير خاضع للرقابة. يلغي هذا النهج تعقيدات الوكيل مع الحفاظ على قابلية نقل الكود الخاص بك.
- ثبّت المكتبة عبر pip.
- قم بتعيين مفتاح API الخاص بك في البيئة.
- عرّف عنوان URL الأساسي لنقطة النهاية الخاصة بنا.
from openai import OpenAI
client = OpenAI(base_url="https://api.apiopenrouter.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)استبدل مفتاح العنصر النائبي ببيانات الاعتماد الخاصة بك. يمكنك إرسال مطالبات بسيطة أو بيانات هيكلية معقدة.
المصادقة والمفاتيح
أنشئ مفتاحاً من لوحة التحكم ومرره في رأس Authorization.
يدعم كل حساب مفتاحًا نشطًا واحدًا في كل مرة. عند إنشاء مفتاح جديد، يتوقف المفتاح القديم عن العمل على الفور. يبسط هذا إدارة الأمان دون الحاجة إلى منطق دوران معقد.
curl https://api.apiopenrouter.com/v1/chat/completions \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "uncensored",
"messages": [{"role": "user", "content": "List the top 5 dependencies for a Go web server"}]
}'يستخدم الطلب أعلاه مخطط Bearer. تأكد من أن مفتاحك يبدأ بـ sk- ولا يحتوي على مسافات بيضاء إضافية.
نقطة نهاية إكمال الدردشة
أرسل الرسائل إلى /v1/chat/completions نقطة النهاية باستخدام التنسيق القياسي لـ JSON.
النموذج يقبل user و assistant الأدوار. يمكنك ضبط درجة الحرارة و top-p وتسلسلات التوقف للتحكم في أسلوب المخرجات. تعود الاستجابات باستخدام الرموز في الجزء الأخير إذا كان البث ممكّنًا.
import OpenAI from "openai";
const client = new OpenAI({ baseURL: "https://api.apiopenrouter.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);تعيين max_tokens للتحكم في طول المخرجات. إذا تم حذفها، تكون القيمة الافتراضية هي 2,048 رمزاً. يدعم النموذج ما يصل إلى 16,000 رمز لكل طلب.
استجابات البث
فعّل البث عن طريق تعيين stream: true في جسم الطلب الخاص بك.
تظهر تفاصيل استهلاك الرموز فقط في الشريحة الأخيرة من التدفق. هذا يسمح بتحديثات واجهة المستخدم في الوقت الفعلي مع الحفاظ على بيانات الفوترة الدقيقة. لا تزال الأخطاء أثناء التدفق تبلغ عن الاستخدام للرموز المشحونة.
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)تعامل مع الاستجابات الجزئية بسلاسة. ينتهي البث بشكل طبيعي عندما ينتهي النموذج من التوليد أو يصل إلى حد السياق.
استدعاء الوظائف ووضع JSON
استخدام response_format: {type: "json_object"} لإخراج JSON صارم.
عرّف الأدوات في tools مصفوفة و tool_choice لإجبار استدعاء الوظائف. يعيد النموذج بيانات مهيكلة مناسبة للمعالجة البرمجية. يعمل هذا بشكل موثوق مع أوزاننا غير الخاضعة للرقابة.
curl https://api.apiopenrouter.com/v1/chat/completions \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "uncensored",
"messages": [{"role": "user", "content": "List the top 5 dependencies for a Go web server"}]
}'ادمج استدعاء الوظائف مع التدفق لتجارب تفاعلية. تحقق من صحة الإخراج JSON قبل تمريره إلى منطق تطبيقك.
الحدود والحصص
راقب استخدامك مقابل حدود كل مفتاح لتجنب الانقطاعات.
يتيح كل مفتاح 300 طلب في الدقيقة و8 طلبات متزامنة. حد حجم جسم الطلب هو 8 ميجابايت. إذا تجاوزت هذه الحدود، تُرجع واجهة برمجة التطبيقات رمز الحالة 429. تُرجع أخطاء المصادقة 401، ونقص الرصيد يُرجع 402.
curl https://api.apiopenrouter.com/v1/chat/completions \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "uncensored",
"messages": [{"role": "user", "content": "List the top 5 dependencies for a Go web server"}]
}'نافذة السياق هي 100,000 رمز إجمالاً. الأخطاء لا تستهلك الرصيد. الرفض بسبب انتهاكات محتوى طفيلة يظل أيضاً مجانياً.
الأسئلة الشائعة
كيف تختلف واجهة برمجة التطبيقات openrouter عن OpenAI القياسي؟
يعتمد نظام الـ API الخاص بنا على نموذج واحد غير خاضع للرقابة مُحسّن للمحتوى القانوني للبالغين والمحتوى الإبداعي بدون رفض. يحافظ على نفس هيكل الطلب والاستجابة الخاص بـ OpenAI، مما يتيح لك استبدال نقاط النهاية دون تغيير الكود الخاص بك.
ماذا يحدث إذا نفدت الرصيد الائتماني؟
تفشل الطلبات بخطأ 402 عندما يكون رصيدك المدفوع مسبقًا صفرًا. لا تنتهي صلاحية الرصيد أبدًا، لذا يمكنك إعادة الشحن عبر العملات المشفرة في أي وقت. لا تستهلك الأخطاء والرفض رصيدك.
هل يمكنني استخدام مفاتيح متعددة لمشاريع مختلفة؟
يدعم كل حساب مفتاحًا نشطًا واحدًا. يؤدي إنشاء مفتاح جديد إلى إبطال المفتاح السابق تلقائيًا. يمكنك إنشاء مفتاح جديد على الفور من لوحة التحكم دون فقدان سجل الفواتير الخاص بك.
استرجاع مفتاح الواجهة البرمجية الخاص بك
سجّل، انسخ الرمز المميز (token)، حدّث عنوان URL الأساسي الخاص بك. هذا هو التكوين بأكمله.