استخدم واجهة برمجة تطبيقات القرارات (Decisions API) عندما تكون المهمة هي تصنيف أو توجيه أو تسجيل أو حصر شيء ما وترغب في الحصول على احتمالات: فهي تعمل على GPT-6 Luna، وتُرجع إجابات مُحددة النوع بدلاً من النص، وتُحاسب على المدخلات فقط بسعر 0.10 دولار لكل مليون توكن بدون رسوم على المخرجات أو قراءة ذاكرة التخزين المؤقت أو كتابتها، وتقول OpenAI إنها أسرع بحوالي 10 مرات من واجهة برمجة تطبيقات الاستجابات (Responses API). استخدم واجهة برمجة تطبيقات الاستجابات عندما تحتاج إلى نص مُنشأ، أو JSON في المخطط الخاص بك، أو استدعاءات الأدوات، أو التدفق، أو حالة المحادثة. دخلت Decisions مرحلة التجريب العام في 2026-10-06.
تستعرض هذه المشاركة مهمة واحدة (توجيه تذكرة دعم) عبر كلتا نقطتي النهاية، وتقارن ما تُرجعه كل منهما، وتحسب التكلفة لمرة واحدة، وتختتم بملاحظة ترحيل وطريقة لاختبار كليهما في مشروع Apidog واحد. لتشريح نقطة النهاية، ابدأ بـ الركيزة الأساسية لواجهة برمجة تطبيقات القرارات؛ وللأساس، راجع دليل واجهة برمجة تطبيقات الاستجابات الخاص بنا.
مصفوفة الميزات
| Decisions API | Responses API (GPT-6 Luna) | |
|---|---|---|
| نقطة النهاية | POST /v1/decisions |
POST /v1/responses |
| المخرجات | إجابات predicate، choice، score (بالإضافة إلى refusal) مع احتمالات وثقة من نقطة النهاية |
نص مُنشأ، أو JSON يتبع المخطط الخاص بك عبر text.format |
| مخطط JSON الخاص بك | لا | نعم، json_schema مع strict: true |
| الأدوات / استدعاء الدوال | لا | نعم |
| التدفق | لا | نعم |
| حالة المحادثة | لا | نعم |
| التخزين المؤقت للموجهات | لا توجد رسوم على التخزين المؤقت؛ ووفقًا لـ منتدى OpenAI، لا يوجد تخزين مؤقت بعد | نعم، المدخلات المخزنة مؤقتًا 0.01 دولار لكل مليون |
| الدفعة | غير موثق | نعم، 50% من السعر القياسي |
| الصور | نعم، عناوين URL لبيانات base64؛ يذكر المرجع أيضًا عناوين URL عامة لـ HTTP(S)، بحد أقصى 128 لكل طلب | نعم، Luna تقبل النصوص والصور |
| القرارات المتسلسلة (التابعة) | طلبات منفصلة | استجابة واحدة مُنشأة يمكن أن تحمل حقولًا تابعة |
| السعر لكل مليون، سياق قصير | 0.10 دولار للمدخلات؛ لا توجد رسوم على المخرجات | 0.10 دولار للمدخلات، 0.50 دولار للمخرجات بما في ذلك توكنات الاستدلال |
| ZDR / HIPAA | مدعوم للعملاء المؤهلين؛ معالجة إقليمية في الولايات المتحدة والاتحاد الأوروبي | غير مشمول في هذه المقارنة؛ راجع صفحة ضوابط البيانات الخاصة بـ OpenAI |
يأتي كل صف من دليل القرارات الخاص بـ OpenAI، ومرجع API، وصفحة التسعير.
نفس المهمة بطريقتين: توجيه تذكرة دعم
نص التذكرة هو "تم تحميلي مرتين مقابل طلبي". الأقسام هي الفواتير، والدعم الفني، والشحن، وغير ذلك. إليك طلب الاستجابات مع المخرجات المهيكلة، وهي الطريقة التي تستخدمها معظم الفرق اليوم:
curl https://api.openai.com/v1/responses \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-6-luna",
"input": "Route this support ticket to one department.\n\nTicket: I was charged twice for my order.",
"text": {
"format": {
"type": "json_schema",
"name": "ticket_route",
"strict": true,
"schema": {
"type": "object",
"properties": {
"department": {
"type": "string",
"enum": ["billing", "technical", "shipping", "other"]
}
},
"required": ["department"],
"additionalProperties": false
}
}
}
}'
وطلب القرارات لنفس التذكرة:
curl https://api.openai.com/v1/decisions \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-6-luna",
"input": "I was charged twice for my order.",
"questions": [
{
"type": "choice",
"name": "department",
"instructions": "Which department should handle this ticket?",
"choices": [
{"value": "billing", "description": "Charges, refunds, invoices"},
{"value": "technical", "description": "Bugs, errors, login problems"},
{"value": "shipping", "description": "Delivery, tracking, returns in transit"},
{"value": "other", "description": "Anything else"}
]
}
]
}'
يحمل نص طلب الاستجابات السؤال داخل الموجه والإجابات المسموح بها داخل مخطط. يحمل نص طلب القرارات التذكرة الخام كـ input والسؤال كـ choice بقيم فريدة تتراوح من 2 إلى 255؛ لا يحتوي على حقول temperature أو reasoning أو stream أو text، نظرًا لعدم وجود أي منها في نقطة النهاية هذه.
ما تُرجعه كل منهما
تُرجع الاستجابات نصًا مُنشأ. مع مخطط صارم، يكون هذا النص JSON صالحًا، لذلك بعد التحليل تحصل على تسمية:
{"department": "billing"}
إذا كنت تريد رقم ثقة، يمكنك إضافة حقل إلى المخطط وتطلب من النموذج كتابته؛ وما يرجع هو نص مُنشأ يبدو كاحتمالية، وليس احتمالية مقاسة.
تُرجع القرارات التسمية بالإضافة إلى التوزيع الكامن وراءها. الأرقام أدناه هي مثال دليل OpenAI لهذا المدخل المحدد:
{
"model": "gpt-6-luna",
"answers": [
{
"type": "choice",
"name": "department",
"choice": "billing",
"probabilities": [
{"value": "billing", "probability": 0.95},
{"value": "technical", "probability": 0.02},
{"value": "shipping", "probability": 0.01},
{"value": "other", "probability": 0.02}
],
"confidence": 0.93
}
]
}
يتبع الكائن usage الكائن answers (كما هو موضح في قسم التكلفة). لا يوجد محلل، لا يوجد تعبيرات عادية. حقل confidence هو ما تحدده كحد أدنى، وتوجيهات OpenAI هي تعيين هذا الحد الأدنى من أمثلتك المصنفة الخاصة، لأنه لا يتم نشر أرقام دقة أو معايرة. يصل الرفض على هيئة {"type": "refusal", "name": "department"}؛ الأسئلة الأخرى في نفس الطلب لا تزال تحصل على إجابات.
التكلفة: الحساب لمرة واحدة
تحاسب كلتا نقطتي النهاية على مدخلات Luna بسعر 0.10 دولار لكل مليون توكن في السياق القصير (حتى 272 ألف توكن مدخل). الفرق يكمن في المخرجات. لنفترض تذكرة بحجم 500 توكن لمليون طلب:
- Decisions: 500 / 1,000,000 x 0.10 دولار = 0.00005 دولار لكل طلب، أي 50 دولارًا للمليون، بدون إضافة أي رسوم على المخرجات أو ذاكرة التخزين المؤقت.
- Responses: نفس 50 دولارًا للمدخلات، بالإضافة إلى المخرجات بسعر 0.50 دولار لكل مليون. تسمية JSON بحجم 40 توكن تكلف 40 / 1,000,000 x 0.50 دولار = 0.00002 دولار لكل طلب، أو 20 دولارًا للمليون. ثم أضف توكنات الاستدلال، التي تحاسب عليها Luna كمخرجات بنفس سعر 0.50 دولار.
لذا، فإن الفارق الواضح في التسمية وحدها هو 50 دولارًا مقابل 70 دولارًا. الفارق الأكبر هو سطر الاستدلال، والطريقة الصادقة لقول ذلك هي أن Decisions لا تحاسب على أي توكنات مخرجة على الإطلاق؛ كلا العدادين يقرآن 0 في المثال المرجعي لـ OpenAI:
"usage": {
"input_tokens": 42,
"input_tokens_details": {"cached_tokens": 0, "cache_write_tokens": 0},
"output_tokens": 0,
"output_tokens_details": {"reasoning_tokens": 0},
"total_tokens": 42
}
تحذيران. لدى Responses عوامل تحكم لا تتوفر في Decisions: يمكن أن ينخفض reasoning.effort إلى none على Luna، والتخزين المؤقت للموجهات يخفض المدخلات المتكررة إلى 0.01 دولار لكل مليون، وBatch API يخفض الأسعار القياسية إلى النصف. لا يوجد أي من هذه موثق لـ Decisions. وتضاعف المدخلات ذات السياق الطويل (أكثر من 272 ألف توكن) معدل الإدخال على كليهما، لذا فإن طلب Decisions الطويل يكلف 0.20 دولار لكل مليون مدخل (مستمد من مضاعف صفحة التسعير)؛ وتضيف المعالجة الإقليمية 10%.
السرعة
تقول OpenAI إن واجهة برمجة تطبيقات القرارات أسرع بحوالي 10 مرات من واجهة برمجة تطبيقات الاستجابات. لا يوجد رقم مطلق لزمن الاستجابة منشور، لذا تعامل مع هذا الادعاء كتوجيه بدلاً من ميزانية وقم بقياس p50 و p95 الخاصين بك قبل نقل مسار حرج. أفاد أحد المطورين في منتدى OpenAI بأن قرارات إدخال الصور تعود في حوالي 0.8 ثانية على اتصال بطيء؛ هذه حكاية، وليست معيارًا. الاتجاه معقول: Responses تُنشئ توكنات، بما في ذلك الاستدلال، وتنتظر حتى آخر توكن.
قاعدة القرار
اختر Decisions عندما تكون المخرجات واحدة مما يلي:
- إجابة نعم/لا مع احتمالية (
predicate): "هل هذه الرسالة بريد عشوائي؟" - إحدى الفئات غير المرتبة من N (
choice): القسم، النية، أي نموذج أو أداة لاستدعائها لاحقًا. قم بتضمين خيار احتياطي مثل "أخرى". - مستوى مرتب (
score): الخطورة، الأولوية، الإلحاح. النتيجة هي متوسط مرجح للاحتمالية لمؤشرات المستوى المبنية على الصفر، لذا 1.1 تعني بين المستوى 1 والمستوى 2، قريبًا من 1. - بوابة: قارن
confidenceأوprobabilityبحد أدنى وأرسل العناصر ذات الثقة المنخفضة إلى قائمة انتظار بشرية.
اختر Responses عندما يكون أي مما يلي صحيحًا:
- تحتاج إلى نص يقرأه شخص: ملخص، رد، شرح.
- تحتاج إلى كائن بالشكل الخاص بك: حقول مستخرجة، هياكل متداخلة، مصفوفات ذات طول غير معروف. هذا هو مجال المخرجات المهيكلة، ودليل OpenAI يقول ذلك.
- يجب أن يطلب النموذج استدعاء أداة مع وسائط: استدعاء الدالة.
- تحتاج إلى تدفق، أو حالة محادثة، أو نموذج آخر غير Luna.
- يعتمد قرار واحد على آخر وتريد كليهما في رحلة ذهاب وعودة واحدة. Decisions تحمل عدة أسئلة مستقلة على مدخل واحد، لكن القرارات التابعة تحتاج إلى طلبات منفصلة.
العديد من خطوط الأنابيب تحتاج إلى كليهما: Decisions للتصنيف والحصر، و Responses لكتابة الرد.
ترحيل مصنف من Responses إلى Decisions
إذا كنت تقوم بالفعل بتوجيه التذاكر باستخدام مخطط enum صارم، فإن الانتقال صغير:
- احتفظ بنفس
input، بعد تجريده ليصبح التذكرة الخام؛ ينتقل السؤال خارج الموجه. - ضع السؤال في
questionsكـchoice، مع قيم enum الخاصة بك كـchoices[].valueووصف من سطر واحد لكل منها. يمكن أن تكون القيم سلاسل نصية أو منطقية، وtrueو"true"متميزتان. - احذف المحلل. اقرأ
answers[0].choiceوanswers[0].confidence؛ تصل الإجابات بالترتيب الذي طلبته وتعكسnameالذي قمت بتعيينه. ثم قم بتعيين حد أدنى من عينة مصنفة. - تحقق من مسار الإدخال. تقبل Decisions رسائل المستخدم فقط: لا توجد أدوار للنظام أو المساعد، ولا استدعاءات دالة، ولا ملفات، ولا
file_id. ادمج قواعد موجه النظام فيinstructionsأو أوصاف الاختيار. يتم إدخال الصور كعناوين URL لبيانات base64؛ يذكر المرجع أيضًا عناوين URL عامة لـ HTTP(S)، لذا اختبر الصور المستضافة أولاً. - قسّم السلاسل. "صنف، ثم إذا كانت فاتورة قرر أهلية الاسترداد" تصبح طلبين.
اختبر كليهما في مشروع Apidog واحد
أنظف طريقة للقرار هي تشغيل كلا الطلبين مقابل نفس التذاكر المصنفة والمقارنة. في Apidog، قم بتخزين المفتاح مرة واحدة كـ متغير بيئة وارجع إلى {{OPENAI_API_KEY}} في رأس Authorization: Bearer لكلا الطلبين المحفوظين، بحيث لا يظهر أي مفتاح حرفي في جسم محفوظ.
امنح كلا الطلبين نفس التأكيد: أن القسم يساوي billing. في طلب القرارات، يكون هذا تأكيد JSONPath على $.answers[0].choice، مع أن $.answers[0].confidence أكبر من 0.8 و$.usage.output_tokens يساوي 0 بجانبه. في طلب الاستجابات، تقع التسمية داخل النص المُنشأ، لذا يقوم نص برمجي قصير بعد الطلب بتحليله إلى متغير يتحقق منه التأكيد. ثم قارن usage في الاستجابتين: Decisions تُبلغ عن صفر توكنات مخرجة واستدلال، بينما Responses لا تفعل ذلك.
حوّل الزوج إلى سيناريو اختبار يعتمد على البيانات عبر ملف CSV لنص التذكرة والقسم المتوقع، وستظهر النتيجة عدد التذاكر التي يوجهها كل نقطة نهاية بشكل صحيح فوق خط الثقة الخاص بك. قم بمحاكاة مصفوفة answers حتى يمكن بناء الموجه أولاً، كما هو الحال في الاستجابات الوهمية الشرطية، وقم بتشغيل السيناريو في CI باستخدام Apidog CLI بحيث يؤدي تغيير في الصياغة أو اسم مستعار للنموذج إلى فشل الاختبار بدلاً من توجيه التذاكر بشكل خاطئ. انظر اختبار تطبيقات LLM لمزيد من أنماط التأكيد.
الأسئلة الشائعة
هل يمكن لواجهة برمجة تطبيقات الاستجابات إرجاع احتمالات مثل Decisions؟ ليس كقيم مقاسة. حقل confidence في مخطط JSON يمنحك رقمًا كتبه النموذج، وهو نص مُنشأ. تُرجع Decisions احتمالات على الخيارات التي قدمتها من نقطة النهاية نفسها.
هل يمكنني استخدام نموذج آخر غير GPT-6 Luna على Decisions؟ لا. يذكر الدليل أن gpt-6-luna هو النموذج الوحيد المتاح حاليًا. راجع نظرة عامة على GPT-6 Luna.
بماذا تختلف Decisions عن Jev من TypeSafe؟ كلاهما يُرجع إجابات مُحددة النوع باحتمالات ويحاسب على المدخلات فقط؛ يختلفان في السعر والمدخلات وأشكال الاستجابة. راجع Decisions API مقابل Jev.
هل واجهة برمجة تطبيقات Decisions مجانية؟ لا. تحاسب 0.10 دولار لكل مليون توكن مدخل، مع عدم وجود طبقة مجانية موثقة لـ Decisions. للطرق المجانية إلى Luna نفسها، انظر كيفية استخدام GPT-6 Luna مجانًا.
الخطوة التالية
خذ مصنفًا واحدًا تستخدمه حاليًا عبر Responses، وأعد بناءه كسؤال choice، ثم قم بتشغيل كليهما على 50 تذكرة مصنفة في Apidog بنفس التأكيد. إذا صمد حد الثقة وأظهر الاستخدام صفر توكنات مخرجة، فلديك إجابتك. قم بتنزيل Apidog، ثم اتبع كيفية استخدام Decisions API للمكالمة الأولى والتجول الكامل في الاختبار.
