Jev — نموذج لاتخاذ القرارات
Markdownيجيب نموذج القرارات Jev من TypeSafe عن أسئلة ذات أنواع محددة حول نص أو JSON: اختيار بديل، أو تقييم على مقياس، أو «نعم/لا» مع احتمالات. لا يقدم دردشة ولا يولّد نصوصاً.
الدليل الكامل
https://api.ailoot.ai/v1/systemonecurl https://api.ailoot.ai/v1/systemone \
-H "Authorization: Bearer $AILOOT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "jev-latest",
"state": "النجدة! تفشل عمليات الصرف لدي منذ 3 أيام.",
"questions": {
"is_urgent": {
"type": "noul",
"instructions": "هل يدل هذا على وجود حاجة ملحّة؟"
}
}
}' import json, os, urllib.request
body = {
"model": "jev-latest",
"state": "النجدة! تفشل عمليات الصرف لدي منذ 3 أيام.",
"questions": {
"is_urgent": {"type": "noul", "instructions": "هل يدل هذا على وجود حاجة ملحّة؟"},
},
}
req = urllib.request.Request(
"https://api.ailoot.ai/v1/systemone",
data=json.dumps(body).encode(),
headers={"Authorization": "Bearer " + os.environ["AILOOT_API_KEY"],
"Content-Type": "application/json"},
)
with urllib.request.urlopen(req, timeout=60) as resp:
result = json.load(resp)
print(result["answers"]["is_urgent"]["noul"]) # 0.95const resp = await fetch("https://api.ailoot.ai/v1/systemone", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.AILOOT_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
model: "jev-latest",
state: "النجدة! تفشل عمليات الصرف لدي منذ 3 أيام.",
questions: {
is_urgent: { type: "noul", instructions: "هل يدل هذا على وجود حاجة ملحّة؟" },
},
}),
});
const result = await resp.json();
if (!resp.ok) throw new Error(`${resp.status} ${JSON.stringify(result)}`);
console.log(result.answers.is_urgent.noul); // 0.95{
"model": "jev-1.13.0",
"answers": {
"is_urgent": {
"type": "noul",
"noul": 0.95
}
},
"usage": { "input_tokens": 296, "output_tokens": 20 }
}Jev نموذج لاتخاذ القرارات من فئة System One، من TypeSafe. لا يكتب نصوصاً ولا يجري محادثات: ترسل إليه الحالة (state) — كنص أو JSON — ومجموعة من الأسئلة، وتتلقى قيماً ذات أنواع محددة مع احتمالات. يستند الكود إليها مباشرةً للتفرّع والفرز والتوجيه، دون الحاجة إلى تحليل نص حر.
تُقيّم جميع أسئلة الطلب الواحد بالتوازي وباستقلال عن بعضها، بالاستناد إلى stateنفسه. بحسب TypeSafe، لا تؤثر إضافة الأسئلة تقريباً في زمن الرد، ولا تتداخل الأسئلة مع بعضها.
| العنصر | باختصار |
|---|---|
| النموذج | jev-latest — اسم بديل لأحدث إصدار مستقر من Jev؛ بطاقة النموذج في الكتالوج |
| الطريقة | POST /v1/systemone. ليست هذه دردشة: صيغ OpenAI وAnthropic وGemini لا تصلح لـJev. يصل الرد كاملاً في كائن JSON واحد |
| المدخلات المقبولة | النص فقط: سلسلة نصية أو كائن JSON أو مصفوفة نصوص. حوّل الصور والصوت والفيديو إلى نص أولاً |
| السياق | 64K توكن لكل طلب — state وجميع الأسئلة معاً؛ وstate مع أطول سؤال حتى 32K |
| اللغة | بحسب TypeSafe، يعمل النموذج بأعلى دقة باللغة الإنجليزية؛ ويقبل لغات أخرى بدقة أقل — اختبره على بياناتك |
| السعر | الإدخال $0.084 لكل مليون توكن، والمخرجات مجانية |
طلب
المصادقة
- Authorizationheaderمطلوب
مفتاح Ailoot بصيغة
Bearer sk-….
جسم الطلب
- modelstringمطلوب
jev-latest. - statestring | object | arrayمطلوب
المحتوى المراد تقييمه: سلسلة نصية أو JSON، مثل طلب العميل أو سجل من قاعدة بيانات أو مراسلات أو الحالة الحالية لتطبيقك. يكون الكائن ذو أسماء الحقول الواضحة عادةً أنسب من سلسلة واحدة.
- questionsobjectمطلوب
الأسئلة. تختار المفاتيح بنفسك وتأتي الإجابات تحت المفاتيح نفسها؛ ولا يؤثر المفتاح في الإجابة، فالسؤال نفسه يُحدَّد في
instructions. - questions.*.typestringمطلوب
noul,choiceأوscore— انظر أدناه. - questions.*.instructionsstring | object | arrayمطلوب
السؤال نفسه. يمكن إرسال السؤال الطويل مع بياناته ككائن: السؤال في حقل والبيانات في حقول أخرى؛ أشر إلى أسماء الحقول باستخدام علامات الاقتباس الخلفية.
- questions.*.criteriaobject | array
خيارات الإجابة تختلف بحسب النوع: وصفا «نعم» و«لا» في noul (اختياريان)، وقاموس خيارات في choice، وقائمة مرتبة من المستويات في score.
أنواع الأسئلة
| النوع | ما الذي يسأل عنه | ما الذي يعيده |
|---|---|---|
noul | هل العبارة صحيحة: نعم أم لا | noul — احتمال «نعم» من 0 إلى 1 |
choice | أي خيار من الخيارات المحددة مناسب | choice, probabilities, confidence |
score | موضع state على مقياس مستوياتك | score, legend, probabilities, confidence |
يمكن الجمع بين الأنواع في طلب واحد.
noul — نعم أم لا
الحقل criteria اختياري: يمكن فيه توضيح معنى «نعم» (true) و«لا» (false). قيمة الرد noul — عدد من 0 (لا) إلى 1 (نعم).
"is_urgent": {
"type": "noul",
"instructions": "هل يدل هذا على وجود حاجة ملحّة؟",
"criteria": {
"true": "الإلحاح الزمني مذكور صراحةً",
"false": "لم يُعبَّر عن استعجال"
}
}"is_urgent": {
"type": "noul",
"noul": 0.95
}choice — اختيار بديل
criteria — قاموس «الخيار ← الوصف»؛ إذا لم تكن بحاجة إلى وصف، استخدم null. حتى 255 خياراً. في الرد، choice — الخيار الأكثر احتمالاً، و probabilities — احتمال كل خيار (مجموعها 1)، و confidence — درجة الثقة من 0 إلى 1.
"department": {
"type": "choice",
"instructions": "أي فريق ينبغي أن يتولى هذا؟",
"criteria": {
"billing": "المدفوعات وإصدار الفواتير وردّ المبالغ",
"technical": "الأخطاء وانقطاعات الخدمة والتكاملات",
"sales": "الأسعار والترقيات والعملاء الجدد"
}
}"department": {
"type": "choice",
"choice": "billing",
"probabilities": { "billing": 0.88, "technical": 0.12, "sales": 0.0 },
"confidence": 0.81
}score — تقييم على مقياس
criteria — مستويات مرتبة من الأدنى إلى الأعلى، بحد أقصى 10 (توصي TypeSafe بمستويين على الأقل). في الرد، score — قيمة مرجّحة باحتمالات المستويات (قد تقع بين مستويين)، و legend — رقم المستوى ووصفه، و probabilities و confidence. بحسب TypeSafe، score مناسب للمقارنة مع عتبة، لكنه غير مناسب لتحديد رقم دقيق بين المستويات.
"frustration": {
"type": "score",
"instructions": "ما مدى استياء العميل؟",
"criteria": ["هادئ", "مستاء", "غاضب جدًا"]
}"frustration": {
"type": "score",
"score": 1.05,
"legend": { "0": "هادئ", "1": "مستاء", "2": "غاضب جدًا" },
"probabilities": { "0": 0.0, "1": 0.95, "2": 0.05 },
"confidence": 0.92
}الرد
- modelstring
إصدار النموذج الذي أجاب. ينتقل الاسم البديل jev-latest مع الوقت إلى إصدارات جديدة: إذا ضبطت عتبات
confidenceلإصدار محدد، فراقب هذا الحقل. - answersobject
إجابة واحدة لكل سؤال، تحت المفاتيح نفسها. تحتوي كل إجابة على
type، وفي choice وscore تحتوي أيضاً علىconfidence. - usageobject
input_tokensوoutput_tokens. تُحسب تكلفة توكنات الإدخال فقط.
عدة أسئلة في طلب واحد
اجمع كل الأسئلة المتعلقة بـstate واحد في طلب واحد: تُقيّم بالتوازي ويُرسل state مرة واحدة. بحسب TypeSafe، كان الطلب الموحّد في مثالهم ذي 13 سؤالاً أرخص بـ12,2 مرة وأسرع بـ10 مرات من إرسال 13 طلباً منفصلاً بالتتابع، مع الإجابات نفسها.
يُفضّل تقسيم الحكم المعقّد إلى أسئلة بسيطة وتجميع الإجابات في الكود: مثلاً بدلاً من «قيّم الطلب»، قيّم السوق وقابلية التنفيذ والاختلاف عن المنافسين كلّاً على حدة. عندئذ تتغير الأوزان في الكود بدلاً من نص السؤال.
{
"model": "jev-latest",
"state": "النجدة! تفشل عمليات الصرف لدي منذ 3 أيام.",
"questions": {
"department": {
"type": "choice",
"instructions": "أي فريق ينبغي أن يتولى هذا؟",
"criteria": {
"billing": "المدفوعات وإصدار الفواتير وردّ المبالغ",
"technical": "الأخطاء وانقطاعات الخدمة والتكاملات",
"sales": "الأسعار والترقيات والعملاء الجدد"
}
},
"frustration": {
"type": "score",
"instructions": "ما مدى استياء العميل؟",
"criteria": ["هادئ", "مستاء", "غاضب جدًا"]
},
"is_urgent": {
"type": "noul",
"instructions": "هل يدل هذا على وجود حاجة ملحّة؟"
}
}
}حالات الاستخدام المناسبة
- التوجيه. إرسال طلب العميل إلى القسم المناسب، وإرسال الطلب إلى المعالج المناسب: كود بسيط أو نموذج كبير أو شخص.
- الفرز وتحديد الأولويات. درجة الاستعجال والنبرة والمخاطر — على مقياس، مع عتبات في الكود.
- الإشراف والفحص. التحقق مما إذا كانت الرسالة تخالف القواعد، أو المصدر يؤيد الاقتباس، أو المستند يتضمن إجابة السؤال، قبل تمرير النص إلى المرحلة التالية.
- التقييم والترتيب. تقييم المستندات أو المرشحين أو المقاطع المسترجعة وفق معاييرك، ثم تحديد ما ينتقل إلى المرحلة التالية في الكود.
- بديل للتعليمة غير الموثوقة «أعد JSON». استدعاء يعيد قيماً ذات أنواع محددة بحكم تصميمه، بدلاً من نص يحتاج إلى تحليل.
حالات الاستخدام غير المناسبة
- الدردشة والردود للمستخدم وتوليد النصوص أو الكود. لا يكتب Jev نصوصاً؛ ولهذا تتوفر النماذج النصية.
- نموذج لـClaude Code وCursor وغيرهما من الوكلاء. لا يمكنك وضع jev-latest بدلاً من نموذج الوكيل: يحتاج الوكيل إلى نموذج يكتب نصوصاً ويستدعي أدوات. يمكن استدعاء Jev من الكود الذي يكتبه الوكيل لك.
- الحساب والعدّ ومقارنة التواريخ. بحسب TypeSafe، من الأوثق تنفيذ ذلك في الكود، وسؤال النموذج عن الجانب الدلالي فقط؛ مثلاً استخراج أجزاء التاريخ عبر choice.
- الصور والصوت والفيديو. يقبل النموذج النص فقط؛ حوّل هذه البيانات إلى نص مسبقاً.
السعر
تُحسب تكلفة توكنات الإدخال فقط — الحقل usage.input_tokens في الرد: $0.084 لكل مليون. توكنات المخرجات مجانية.
تكلفة الطلب في مثال هذه الصفحة (296 توكن إدخال) أقل من $0.0001.
يحجز Ailoot مبلغاً من الرصيد قبل الطلب، وبعد الرد يخصم مرة واحدة بحسب الاستخدام الفعلي — آلية العمل.
الحدود
| العنصر | الحد |
|---|---|
| الطلب بأكمله: state وجميع الأسئلة | 64K توكن |
| state مع أطول سؤال | 32K توكن |
| خيارات choice الواحد | حتى 255 |
| مستويات score الواحد | من 2 إلى 10 |
| الإدخال | نص فقط: سلسلة نصية أو كائن JSON أو مصفوفة نصوص |
حدود النموذج بحسب TypeSafe. تسري قيود مفتاحك ورصيدك كما في أي نموذج Ailoot: الأخطاء والحدود.
الأخطاء
تأتي الأخطاء بالصيغة العامة لـAiloot API: رمز ونص مفهوم وRequest ID. أكثر الأخطاء شيوعاً في هذه الطريقة:
| الرمز | متى يحدث | الإجراء المطلوب |
|---|---|---|
400 invalid_request | فشل التحقق من جسم الطلب: state أوmodel أوquestions مفقود، أوtype غير معروف، أو أكثر من 255 خياراً في choice، أو أكثر من 10 مستويات في score | صحح الطلب وفق نص الخطأ: سيفشل مرة أخرى دون تصحيح |
400 context_length_exceeded | يتجاوز state والأسئلة معاً حد النموذج | صفِّ state في الكود وأبقِ ما تحتاجه الأسئلة |
401 invalid_api_key | المفتاح مفقود أو غير صحيح | أرسل المفتاح في ترويسة Authorization |
402 insufficient_balance | الرصيد المتاح غير كافٍ للحجز | اشحن الرصيد |
404 model_not_found, unsupported_endpoint | معرّف ID غير صحيح أو استُدعي النموذج بطريقة غير مناسبة، مثل /v1/chat/completions | استدعِ jev-latest عبر POST /v1/systemone فقط |
429 rate_limit_exceeded | عدد الطلبات كبير جداً | انتظر عدد الثواني المحدد في ترويسة Retry-After ثم أعد المحاولة |
503 model_overloaded, model_unavailable | النموذج مثقل مؤقتاً أو غير متاح | إذا كانت X-Should-Retry: true، فأعد المحاولة بعد عدد الثواني في Retry-After؛ وإذا كانت false، فتحقق أولاً من Request ID في السجل |
504 model_timeout | لم يرد النموذج في الوقت المحدد | لا تُعد إرسال الطلب حتى تتحقق من Request ID في السجل |
القائمة الكاملة للرموز متاحة في صفحة الأخطاء والحدود.