استراتيجية Output Specifications | أكاديمية مترجم
OS
استراتيجيات صياغة الأوامر · محاضرة تمهيدية للوحدة المتقدمة

استراتيجية Output Specifications
تحديد مواصفات المخرجات

النموذج لا يقرأ نيتك عن الشكل الذي تريده؛ يقرأ ما كتبته فقط. تحديد المواصفات هو ما يحوّل الرد من فقرة تُقرأ إلى بيانات تُستخدم. نطبّقه على فرز طلبات التوظيف وعلى بناء بنك أسئلة.

  • المدة: 40 دقيقة
  • المستوى: متوسط – متقدم
  • المنصة: OpenAI Platform – Playground
  • المجالات: موارد بشرية · تعليم
01

أهداف المحاضرة

  • تحديد ستة محاور لأي مواصفة مخرجات: الصيغة، الطول، البنية، لغة الحقول، سلوك النقص، وما يُمنع.
  • كتابة مخطط JSON صارم يمنع النموذج من اختراع حقول أو قيم خارج القائمة المسموحة.
  • التعامل مع البيانات الناقصة بقاعدة صريحة بدل ترك النموذج يخمّن.
  • تفعيل Structured Outputs في OpenAI Platform وربطه بالمواصفة المكتوبة في الأمر.
02

الفكرة في سطور

لماذا تفشل الأوامر بلا مواصفة؟

حين تكتب «استخرج بيانات هذا المتقدم»، فأنت تركت للنموذج ستة قرارات: هل يكتب فقرة أم قائمة؟ عربية أم إنجليزية؟ ماذا يفعل حين لا يجد سنوات الخبرة؟ هل يضيف تعليقًا افتتاحيًا؟ كل تشغيل قد يجيب عن هذه الأسئلة إجابة مختلفة، وهنا ينهار أي نظام يعتمد على الناتج.

المواصفة عقد لا اقتراح

المواصفة الجيدة تصف الناتج بدقة تكفي لأن يكتبه شخصان مختلفان بنفس الشكل. وأهم بند فيها هو أقلّها كتابةً: ماذا تفعل حين تنقص المعلومة. من دون هذا البند، يملأ النموذج الفراغ بتخمين معقول الشكل — وهذا أخطر أنواع الخطأ لأنه لا يبدو خطأ.

معيار عملي: مواصفتك ناجحة إذا استطعت وصف الناتج المتوقع قبل تشغيل الأمر، وجاء الناتج مطابقًا في ثلاث تشغيلات متتالية.
03

محاور المواصفة الستة

المحورالسؤال الذي يجيب عنهمثال صياغة
الصيغةنص، قائمة، جدول، JSON، CSV؟«أخرج JSON صالحًا فقط، بلا أي نص خارجه».
البنيةما الحقول؟ وما ترتيبها؟ وما نوع كل حقل؟«الحقول: full_name نص، years_experience عدد صحيح».
الطولكم عنصرًا؟ كم كلمة في كل حقل؟«ثلاث نقاط، كل نقطة لا تتجاوز 15 كلمة».
القيم المسموحةهل الحقل مفتوح أم من قائمة مغلقة؟«level من: junior أو mid أو senior فقط».
سلوك النقصماذا يفعل حين تغيب المعلومة؟«اكتب null ولا تخمّن ولا تستنتج».
الممنوعاتما الذي يجب ألا يظهر إطلاقًا؟«بلا مقدمة، بلا اعتذار، بلا شرح، بلا علامات ```».
04

التطبيق الأول: فرز طلبات التوظيف

المجال: الموارد البشرية. المطلوب تحويل سيرة ذاتية نصية إلى صف بيانات يدخل جدول المتقدمين مباشرة. الفرق هنا ليس في جمال الرد، بل في كونه صالحًا للتحليل البرمجي أم لا.

أمر بدون الاستراتيجية
استخرج أهم البيانات من السيرة الذاتية التالية:
محمد عبد الرحمن — مهندس برمجيات. عملت 4 سنوات في تطوير الواجهات باستخدام React وTypeScript، وسنتين قبلها في الدعم الفني. حاصل على بكالوريوس حاسبات 2018. متاح للعمل عن بُعد. للتواصل: 0100xxxxxxx
مخرجات النموذج
بالتأكيد! إليك أهم البيانات المستخرجة من السيرة الذاتية: الاسم: محمد عبد الرحمن المسمى الوظيفي: مهندس برمجيات (Senior) الخبرة: 6 سنوات تقريبًا المهارات: React، TypeScript، الدعم الفني، وربما JavaScript وHTML/CSS المؤهل: بكالوريوس حاسبات ومعلومات — 2018 البريد الإلكتروني: غير مذكور، لكن يمكن التواصل عبر الهاتف أتمنى أن يكون هذا مفيدًا! هل تريد مني تحليل أي سيرة أخرى؟
  • أضاف «Senior» من عنده، ولم يرد في النص إطلاقًا.
  • خمّن مهارات (JavaScript، HTML/CSS) بصيغة «ربما» — بيانات ملوّثة.
  • «6 سنوات تقريبًا» نص لا رقم، لا يصلح للفرز أو الترتيب.
  • مقدمة وخاتمة وسؤال ختامي تكسر أي محاولة لتحليل الناتج برمجيًا.
الأمر نفسه بعد تطبيق الاستراتيجية
استخرج بيانات المتقدم من النص داخل <السيرة> وأخرجها بهذه المواصفة:

الصيغة: JSON صالح فقط. لا نص قبله ولا بعده، ولا علامات تنسيق.
الحقول بالترتيب: full_name (نص) · title (نص) · total_years (عدد صحيح) · skills (مصفوفة نصوص، 5 عناصر كحد أقصى) · degree_year (عدد صحيح) · remote_ok (منطقي) · seniority (من: junior / mid / senior فقط) · contact_email (نص) · contact_phone (نص)

قواعد:
— أي حقل غير مذكور صراحةً في النص = null. لا تستنتج ولا تخمّن ولا تُكمل من معرفتك العامة.
— skills تُدرج كما وردت حرفيًا في النص فقط.
— total_years = مجموع سنوات الخبرة المذكورة عدديًا فقط.
— seniority: أقل من 3 = junior، من 3 إلى 7 = mid، أكثر من 7 = senior.

<السيرة>
محمد عبد الرحمن — مهندس برمجيات. عملت 4 سنوات في تطوير الواجهات باستخدام React وTypeScript، وسنتين قبلها في الدعم الفني. حاصل على بكالوريوس حاسبات 2018. متاح للعمل عن بُعد. للتواصل: 0100xxxxxxx
</السيرة>
مخرجات النموذج
{ "full_name": "محمد عبد الرحمن", "title": "مهندس برمجيات", "total_years": 6, "skills": ["React", "TypeScript", "تطوير الواجهات", "الدعم الفني"], "degree_year": 2018, "remote_ok": true, "seniority": "mid", "contact_email": null, "contact_phone": "0100xxxxxxx" }
  • JSON صالح يدخل قاعدة البيانات دون معالجة وسيطة.
  • null صريحة للبريد بدل تخمين أو جملة اعتذار.
  • seniority محسوبة بقاعدة مكتوبة، لا بانطباع النموذج.
  • أنواع البيانات منضبطة: العدد عدد، والمنطقي منطقي.
قابلية التحليل البرمجي
لا ← نعم
بيانات مخترعة
3 ← 0
الحقول الناقصة
جملة نصية ← null
ثبات الشكل
متغيّر ← ثابت
05

التطبيق الثاني: بنك أسئلة

المجال: التعليم. المطلوب بنك أسئلة اختيار من متعدد يُستورد إلى منصة تعليمية. هنا لا يكفي ضبط الصيغة؛ يجب ضبط خصائص المحتوى نفسه: عدد البدائل، وتوزيع الإجابة الصحيحة، ومنع الأنماط التي تفضح الحل.

أمر بدون الاستراتيجية
اكتب 3 أسئلة اختيار من متعدد عن دورة المياه في الطبيعة.
مخرجات النموذج
السؤال الأول: ما هي عملية تحول الماء من سائل إلى بخار؟ أ) التبخر ب) التكاثف ج) الهطول الإجابة: أ) التبخر السؤال الثاني: أي مما يلي يُعد من أشكال الهطول؟ أ) المطر ب) الشمس ج) الرياح الإجابة: أ) المطر السؤال الثالث: ماذا يحدث لبخار الماء عند ارتفاعه وبرودته؟ أ) يتكاثف مكوّنًا السحب ب) يختفي ج) يتجمد فورًا الإجابة: أ) يتكاثف مكوّنًا السحب
  • الإجابة الصحيحة هي «أ» في الأسئلة الثلاثة — نمط يفضح الحل.
  • بدائل غير معقولة (الشمس، الرياح كأشكال هطول) تجعل السؤال بلا قيمة تمييزية.
  • ثلاثة بدائل فقط بدل أربعة، بلا التزام بمواصفة.
  • كل الأسئلة من مستوى التذكر، ولا يوجد تصنيف يمكن الفرز به.
الأمر نفسه بعد تطبيق الاستراتيجية
أنشئ ثلاثة أسئلة اختيار من متعدد عن دورة المياه، بهذه المواصفة:

الصيغة: مصفوفة JSON فقط، بلا نص خارجها.
حقول كل عنصر: id (عدد) · stem (نص، لا يتجاوز 20 كلمة) · options (أربعة نصوص) · answer_index (0–3) · rationale (نص، جملة واحدة) · bloom_level (من: تذكر / فهم / تطبيق فقط)

قواعد المحتوى:
— البدائل الثلاثة الخاطئة يجب أن تكون معقولة وتنتمي لنفس المجال، لا كلمات عشوائية.
— يجب أن تتوزع answer_index على ثلاث قيم مختلفة بين الأسئلة الثلاثة.
— يُمنع أن يكون الخيار الصحيح أطول من غيره بأكثر من ثلاث كلمات.
— يُمنع استخدام «كل ما سبق» أو «لا شيء مما سبق».
— سؤال واحد على الأقل من مستوى «تطبيق».
مخرجات النموذج
[ { "id": 1, "stem": "أي العمليات ينتقل بها الماء من سطح البحر إلى الغلاف الجوي؟", "options": ["التكاثف", "التبخر", "الجريان السطحي", "التسرب"], "answer_index": 1, "rationale": "التبخر هو تحول الماء السائل إلى بخار بفعل حرارة الشمس.", "bloom_level": "تذكر" }, { "id": 2, "stem": "قرية جبلية لاحظت ضباباً كثيفاً فجراً يختفي ظهراً. ما تفسير ذلك؟", "options": ["تبخر مباشر للتربة", "هطول خفيف متكرر", "تكاثف ليلي يتبخر بالحرارة", "تسرب جوفي صاعد"], "answer_index": 2, "rationale": "انخفاض الحرارة ليلاً يكثّف البخار، وارتفاعها نهاراً يعيده بخاراً.", "bloom_level": "تطبيق" }, { "id": 3, "stem": "أي مما يلي يقلل من الجريان السطحي في منطقة زراعية؟", "options": ["زيادة الغطاء النباتي", "رصف المساحات", "تقليل نفاذية التربة", "إزالة الأشجار"], "answer_index": 0, "rationale": "الغطاء النباتي يبطئ الماء ويزيد فرصة تسربه إلى التربة.", "bloom_level": "فهم" } ]
  • توزيع الإجابة الصحيحة على 1 و2 و0 يمنع التخمين بالنمط.
  • البدائل الخاطئة كلها مصطلحات حقيقية من نفس المجال.
  • تصنيف Bloom يتيح بناء اختبار متوازن آليًا.
  • JSON جاهز للاستيراد إلى المنصة التعليمية دون تفريغ يدوي.
نمط الإجابة
أ أ أ ← 1 2 0
عدد البدائل
3 ← 4
مستويات معرفية
1 ← 3
الاستيراد الآلي
يدوي ← مباشر
06

التطبيق في OpenAI Platform

في الـ Playground، المواصفة تُكتب في مكانين لا مكان واحد: نصًّا داخل رسالة النظام حتى يفهم النموذج المنطق، ومخططًا في Response format حتى يُفرض عليه الشكل. النص وحده يُخالَف أحيانًا، والمخطط وحده يعطيك شكلًا صحيحًا بمحتوى ضعيف.

OpenAI Platform › Playground › Chat
SYSTEM
أنت مستخرج بيانات توظيف. أخرج JSON مطابقًا للمخطط المحدد. لا تستنتج أي قيمة غير مذكورة صراحةً في النص؛ استخدم null. seniority تُحسب من total_years: أقل من 3 = junior، 3 إلى 7 = mid، أكثر من 7 = senior.
USER
<السيرة> {{ نص السيرة الذاتية }} </السيرة>
Response format: json_schemastrict: truetemperature: 0seed: ثابت للاختبار
{
  "name": "applicant",
  "strict": true,
  "schema": {
    "type": "object",
    "properties": {
      "full_name":     { "type": ["string", "null"] },
      "total_years":   { "type": ["integer", "null"] },
      "skills":        { "type": "array", "items": { "type": "string" }, "maxItems": 5 },
      "remote_ok":     { "type": ["boolean", "null"] },
      "seniority":     { "type": "string", "enum": ["junior", "mid", "senior"] },
      "contact_email": { "type": ["string", "null"] }
    },
    "required": ["full_name", "total_years", "skills", "remote_ok", "seniority", "contact_email"],
    "additionalProperties": false
  }
}
  1. فعّل Response format ثم اختر json_schemaستجده في العمود الجانبي للـ Playground. الوضع الافتراضي نص حر، ووضع json_object يضمن JSON صالحًا فقط دون ضمان الحقول، أما json_schema فهو الذي يفرض بنيتك أنت حرفًا بحرف.
  2. اضبط strict على trueهذا هو البند الذي يحوّل المخطط من رجاء إلى إلزام. بدونه قد يخرج النموذج حقلًا إضافيًا أو يبدّل نوع قيمة، وستكتشف ذلك بعد أن يسقط نظامك على سيرة رقم 400.
  3. أغلق الباب أمام الحقول المخترعةadditionalProperties: false تمنع أي حقل خارج قائمتك، و enum تحصر القيم في مجموعة مغلقة. هذان السطران يوفّران عليك نصف شفرات التحقق التي كنت ستكتبها لاحقًا.
  4. اجعل الحقول الناقصة null صراحةًاستخدم النوع المزدوج ["string", "null"] وضع الحقل في required. بهذا يظهر الحقل دائمًا بقيمة null بدل أن يختفي — والفرق كبير: الحقل المفقود يكسر الكود، والقيمة الفارغة يتعامل معها الكود بسهولة.
  5. صفّر درجة الحرارةمهام الاستخراج والتنسيق لا تحتاج تنوعًا. الصفر مع مخطط صارم يعطيك أقرب ما يكون إلى ناتج قابل للتكرار، وهو ما يسمح لك بمقارنة نسختين من الأمر مقارنة عادلة.
  6. اختبر على الحالة الفارغةشغّل الأمر على نص ناقص عمدًا (سيرة بلا سنوات خبرة ولا بريد). النموذج الذي يخترع رقمًا هنا سيخترعه في الإنتاج. هذا الاختبار الواحد يكشف أضعف بند في مواصفتك: بند سلوك النقص.
07

أخطاء شائعة

الخطألماذا يضرالتصحيح
«أخرج النتيجة بشكل منظم»«منظم» صفة انطباعية يفسّرها النموذج كل مرة تفسيرًا مختلفًا.سمِّ الصيغة والحقول والأنواع.
إغفال سلوك النقصيملأ النموذج الفراغ بتخمين معقول الشكل، وهو خطأ لا يُكتشف بالنظر.«غير المذكور صراحةً = null».
الاعتماد على وصف نصي للـ JSON فقطيظل احتمال المخالفة قائمًا، خصوصًا مع المدخلات الغريبة.اجمع الوصف النصي مع json_schema وstrict.
ترك القيم مفتوحة«senior» و«Senior» و«كبير» ثلاث قيم مختلفة في قاعدة بياناتك.enum بقائمة مغلقة.
نسيان منع المقدمات«بالتأكيد! إليك...» تكسر أول محاولة لتحليل الناتج.«لا نص قبل الناتج ولا بعده».
08

التكليف العملي

TASK

حوّل مخرَجًا نصيًا إلى بيانات

  1. اختر مهمة من عملك تُخرج نصًا حرًا اليوم (تقييم، فرز، تلخيص، تصنيف).
  2. اكتب مواصفة تغطي المحاور الستة، ولا تترك محور «سلوك النقص» فارغًا.
  3. حوّل المواصفة إلى مخطط json_schema وفعّله في الـ Playground مع strict: true.
  4. شغّل الأمر على ثلاثة مدخلات: مدخل كامل، ومدخل ناقص، ومدخل مشوّش أو خارج المجال.
  5. سجّل: هل تغيّر شكل الناتج؟ هل اخترع النموذج قيمة؟ ماذا فعل مع المدخل خارج المجال؟
  6. سلّم: المواصفة، والمخطط، والنواتج الثلاثة، وسطرين عن البند الذي اضطررت لإضافته بعد الاختبار.
09

خلاصة المحاضرة

  • المخرَج غير المحدد المواصفات ليس خطأ النموذج، بل فراغ تركته أنت فملأه هو.
  • ستة محاور تضبط أي مخرَج: الصيغة، البنية، الطول، القيم المسموحة، سلوك النقص، الممنوعات.
  • أخطر بند هو سلوك النقص، لأن التخمين المعقول لا يبدو خطأً حتى يتراكم.
  • اكتب المواصفة نصًّا وافرضها مخططًا: النص يشرح المنطق، والمخطط يضمن الشكل.
  • هذه الاستراتيجية هي الجسر بين «أستخدم النموذج» و«بنيت به نظامًا».
أكاديمية مترجم — دبلوم هندسة أوامر الذكاء الاصطناعي
الوحدة التالية: استراتيجيات هندسة الذكاء الاصطناعي المتقدمة  ·  أكاديمية مترجم
أكاديمية مُترجم الترجمة في عصر الذكاء الاصطناعي

© 2026 جميع الحقوق محفوظة

Scroll to Top