ادعُ أصدقاء واحصل على رموز مجانية!اعرف المزيد

وثائق واجهة برمجة تطبيقات إكمال الدردشة (Chat Completions)

تُستخدم واجهة برمجة التطبيقات هذه لإرجاع نتيجة إكمال واحدة أو أكثر متوقعة استنادًا إلى سلسلة من رسائل المحادثة المعطاة. وهي تدعم الإخراج المتدفق، واستدعاء الأدوات (Function Calling)، بالإضافة إلى ضبط مجموعة متنوعة من معلمات أخذ العينات.

1. معلومات الواجهة

  • اسم الواجهة: الاختبار الرسمي N
  • طريقة الطلب: POST
  • عنوان الطلب: https://api.codingplanx.ai/v1/chat/completions
  • نوع المحتوى: application/json
  • طريقة المصادقة: Bearer {{YOUR_API_KEY}}

2. رؤوس الطلب (Headers)

اسم المعلمةمطلوبالنوعالوصفالمثال
Content-Typeنعمstringمعرّف نوع الوسائطapplication/json
Acceptنعمstringتنسيق الاستجابة الذي يقبله العميلapplication/json
Authorizationلاstringرمز الوصول إلى APIBearer sk-xxxxxx

3. جسم الطلب (Request Body)

اسم المعلمةمطلوبالنوعالوصف
modelنعمstringمعرّف النموذج المراد استخدامه (مثل gpt-4o, gpt-3.5-turbo).
messagesنعمarrayقائمة رسائل المحادثة. يحتوي كل كائن على role (system / user / assistant) وcontent.
toolsنعمarrayقائمة بالأدوات التي يمكن للنموذج استدعاؤها. حاليًا يتم دعم الدوال فقط.
tool_choiceنعمobjectيتحكم في الدالة التي يجب على النموذج استدعاؤها. القيم الممكنة: none (بدون استدعاء)، auto (تلقائي)، أو تحديد دالة معيّنة.
temperatureلاnumberدرجة حرارة أخذ العينات (0-2). كلما ارتفعت زادت العشوائية، وكلما انخفضت زادت الحتمية. يُنصح عادةً بالاختيار بين هذا وtop_p.
top_pلاnumberأخذ العينات بالنواة (nucleus sampling). مثلًا، 0.1 تعني النظر فقط في الرموز التي تشكل أعلى 10% من الكتلة الاحتمالية.
nلاintegerالقيمة الافتراضية هي 1. عدد الردود التي سيتم توليدها لكل رسالة إدخال.
streamلاbooleanالقيمة الافتراضية هي false. إذا كانت true، فسيتم إرسال الرموز بشكل تدريجي مثل ChatGPT.
stopلاstringتسلسل الإيقاف. يتوقف التوليد عندما يصادف النموذج هذه الأحرف.
max_tokensلاintegerالحد الأقصى لعدد الرموز التي سيتم توليدها. القيمة الافتراضية هي inf.
presence_penaltyلاnumberبين -2.0 و2.0. يعاقب الموضوعات التي ظهرت مسبقًا لزيادة احتمال التحدث عن موضوعات جديدة.
frequency_penaltyلاnumberبين -2.0 و2.0. يعاقب الكلمات المتكررة.
logit_biasلاobjectيعدّل احتمال ظهور رموز معيّنة.
userلاstringمعرّف المستخدم النهائي، ويُستخدم لاكتشاف إساءة الاستخدام.
response_formatلاobjectيحدد تنسيق الإرجاع. على سبيل المثال، { "type": "json_object" } يمكنه تفعيل وضع JSON.
seenلاintegerميزة في المرحلة التجريبية. تحدد قيمة Seed لمحاولة تحقيق مخرجات حتمية.

4. معلمات الاستجابة (Response Body)

اسم المعلمةالنوعالوصف
idstringالمعرّف الفريد لهذا الطلب.
objectstringنوع الكائن، وعادةً ما يكون chat.completion.
createdintegerالطابع الزمني لإنشاء الطلب (بالثواني).
choicesarrayقائمة خيارات الرد.
├─ indexintegerفهرس هذا الخيار في القائمة.
├─ messageobjectالرسالة المحددة التي أنشأها النموذج.
│ ├─ rolestringالدور، ويكون عادةً assistant.
│ └─ contentstringالمحتوى النصي للرسالة.
└─ finish_reasonstringسبب توقف التوليد (مثل stop, length, tool_calls).
usageobjectمعلومات استخدام الرموز.
├─ prompt_tokensintegerعدد الـ Token المستهلكة في الإدخال.
├─ completion_tokensintegerعدد الـ Token المستهلكة في الإخراج.
└─ total_tokensintegerإجمالي عدد الـ Token المستهلكة.

5. أمثلة (Example)

مثال على الطلب

{
    "model": "gpt-4o",
    "messages": [
        {
            "role": "user",
            "content": "من أنت؟"
        }
    ],
    "n": 1,
    "max_tokens": 100,
    "temperature": 0.8,
    "stream": false
}

مثال على الاستجابة

{
    "id": "chatcmpl-123",
    "object": "chat.completion",
    "created": 1677652288,
    "choices": [
        {
            "index": 0,
            "message": {
                "role": "assistant",
                "content": "\r
\r
مرحبًا، كيف يمكنني مساعدتك اليوم؟"
            },
            "finish_reason": "stop"
        }
    ],
    "usage": {
        "prompt_tokens": 9,
        "completion_tokens": 12,
        "total_tokens": 21
    }
}

6. الأسئلة الشائعة (FAQs)

س: لماذا يظهر خطأ عند تعيين response_format: { "type": "json_object" }؟
ج: عند استخدام وضع JSON، يجب عليك توضيح ذلك صراحةً داخل messages من خلال رسالة نظام أو رسالة مستخدم تطلب من النموذج الإرجاع بصيغة JSON (مثل: "الرجاء الرد بصيغة JSON"). وإلا فقد يتعذر على النموذج إنشاء JSON صالح، مما قد يؤدي إلى التوقف أو ظهور خطأ.

س: هل يمكن ضبط temperature وtop_p في الوقت نفسه؟
ج: من الناحية التقنية نعم، لكن التوصية الرسمية عادةً هي اختيار أحدهما فقط. غالبًا ما يكون تعديل أحدهما كافيًا لتغيير عشوائية المخرجات، بينما قد يؤدي تعديل الاثنين معًا إلى جعل النتائج أكثر صعوبة في التنبؤ.

س: كيف أستقبل البيانات عند تعيين stream: true؟
ج: عند تفعيل البث، سيرسل الخادم سلسلة من أحداث Server-Sent Events (SSE). يحتوي جزء البيانات في كل حدث على كائن JSON، وفي النهاية سيتم إرسال data: [DONE]. ستحتاج إلى استخدام مكتبة لمعالجة البث (مثل response.iter_lines() في Python) للتعامل مع البيانات سطرًا بسطر.

س: كيف يتم حساب استهلاك الـ Token؟
ج: بالنسبة للإنجليزية، يعادل 1 Token تقريبًا 4 أحرف أو 0.75 كلمة؛ أما بالنسبة للصينية، فقد يقابل الحرف الواحد من 1 إلى 2 Token. ويظل الاستهلاك النهائي معتمدًا على الحقل usage في جسم الاستجابة.

س: ماذا يعني finish_reason: "length"؟
ج: هذا يعني أن المحتوى الذي تم توليده تجاوز الحد الذي حددته في max_tokens، أو أنه وصل إلى الحد الأقصى لطول السياق الخاص بالنموذج، مما أدى إلى قطع المحتوى.

س: هل تدعم الواجهة استدعاء الدوال (Function Calling)؟
ج: نعم، مدعوم. يمكنك تعريف نماذج الدوال من خلال المعلمة tools، وسيُرجع النموذج tool_calls داخل choices[0].message بدلًا من content العادي.