Prompt Engineering

إتقان وضع JSON: ضمان مخرجات منظمة من نماذج اللغة الكبيرة

في المشهد المتطور بسرعة للذكاء الاصطناعي، لم تعد القدرة على استخراج بيانات حتمية وقابلة للقراءة الآلية من نماذج اللغة الكبيرة (LLMs) رفاهية، بل أصبحت ضرورة. بينما تتفوق نماذج اللغة الكبيرة في الكتابة الإبداعية والمحادثات مفتوحة النهاية، فإن دمجها في خطوط إنتاج البرمجيات يتطلب تحكماً دقيقاً في تنسيقات المخرجات. هنا يصبح وضع JSON أداة لا غنى عنها في ترسانة مهندس البرمجات.

ما هو وضع JSON؟

وضع JSON هو تكوين متخصص أو تقنية برمجة (Prompting) توجه نموذج اللغة الكبيرة (LLM) لتقييد مخرجاته حصرياً على تنسيق JSON صالح (JavaScript Object Notation). على عكس التوليد القياسي، حيث قد يضيف النموذج عبارات حوارية مثل "إليك البيانات التي طلبتها:" أو كتل تنسيق Markdown ما لم يُطلب منه خلاف ذلك، يفرض وضع JSON امتثالاً صارماً للهيكل.

بالنسبة للمطورين، هذا التمييز حاسم. فهو يلغي الحاجة إلى منطق معقد لتحليل التعبيرات النمطية (Regex) لإزالة الضوضاء الحوارية. عندما يكون النموذج مقيداً بـ JSON، يمكنك الاعتماد على المحللين القياسيين (مثل وحدة json في بايثون أو JSON.parse في جافاسكريبت) لتحويل الاستجابة مباشرة إلى هياكل بيانات أصلية.

لماذا يهم المخرجات المنظمة؟

تكمن القيمة الأساسية لوضع JSON في الموثوقية. تخيل سيناريو تقوم فيه ببناء روبوت دعم عملاء مدعوم بالذكاء الاصطناعي يحتاج إلى استخراج معلومات التذكرة ثم توجيهها إلى قاعدة بيانات. إذا كان نموذج اللغة الكبيرة ينتج فقرة بلغة طبيعية، يجب أن يقوم كود الخلفية (Backend) بجهد كبير لتفسير النية والكيانات. من خلال فرض تنسيق JSON، تنقل التعقيد من قاعدة الكود إلى البرمجة (Prompt)، مما يؤدي إلى تطبيقات أنظف وأكثر قابلية للصيانة.

علاوة على ذلك، يساعد وضع JSON في تقليل الهلوسة المتعلقة بالتنسيق. بينما لا يضمن الدقة الواقعية، فإنه يضمن الدقة النحوية. هذا التنبؤ ضروري للعمليات اللاحقة، مثل التحقق من صحة البيانات مقابل مخطط JSON قبل حفظها في قاعدة البيانات.

تنفيذ وضع JSON في البرمجات

اعتماداً على مزود نموذج اللغة الكبيرة الذي تستخدمه (مثل OpenAI أو Anthropic أو Google)، يمكن تنفيذ وضع JSON بطريقتين: إما عبر أعلام مستوى واجهة برمجة التطبيقات (API) أو من خلال هندسة البرمجة الصريحة.

1. الفرض على مستوى واجهة برمجة التطبيقات (موصى به)
تقدم معظم واجهات برمجة التطبيقات الحديثة لنماذج اللغة الكبيرة معاملاً محدداً لتمكين المخرجات الصارمة بتنسيق JSON. على سبيل المثال، في واجهة برمجة تطبيقات OpenAI، يمكنك تعيين response_format إلى { "type": "json_object" }. هذا يوجه النموذج لعينات الرموز (tokens) التي تتوافق مع كائن JSON صالح.


import openai

client = openai.OpenAI()

response = client.chat.completions.create(
  model="gpt-4o-mini",
  messages=[
    {"role": "system", "content": "You are a helpful assistant that outputs only JSON."},
    {"role": "user", "content": "Extract the author and title from the following text: 'The Great Gatsby was written by F. Scott Fitzgerald.'"}
  ],
  response_format={ "type": "json_object" }
)

print(response.choices[0].message.content)

2. نهج هندسة البرمجة
إذا كنت تعمل مع نماذج لا تدعم أعلام JSON الأصلية، فيجب عليك الاعتماد على تعليمات النظام. يجب أن تكون صريحاً ومتكرراً.


User: "Extract entities from the text. Output ONLY valid JSON. Do not include markdown backticks or explanations."

System: "Your output must be strictly formatted as a JSON object. No text before or after the JSON block."

أفضل الممارسات لتوليد JSON قوي

  • تعريف مخطط (Schema): قدم دائماً هيكل JSON المتوقع في برمجتك. حدد المفاتيح، وأنواع البيانات، والحقول المطلوبة.
  • معالجة الأخطاء بلطف: حتى مع وضع JSON، قد تحدث أخطاء نحوية أحياناً. قم دائماً بتغليف منطق التحليل الخاص بك في كتل try-catch.
  • استخدام التحقق من صحة مخطط JSON: إذا كانت واجهة برمجة التطبيقات تدعم ذلك، مرر تعريف مخطط JSON جنباً إلى جنب مع البرمجة. هذا يسمح للنموذج بتصحيح نفسه وضمان مطابقة المخرجات لمتطلبات نموذج البيانات الخاص بك.

الخاتمة

يمثل وضع JSON خطوة كبيرة إلى الأمام في جعل نماذج اللغة الكبيرة مكونات موثوقة في خطوط هندسة البرمجيات. من خلال فرض المخرجات المنظمة، يمكن للمطورين سد الفجوة بين فهم اللغة الطبيعية غير المنظمة ومعالجة البيانات المنظمة. مع نضج النظام البيئي، سنرى تكاملات أكثر صمتاً بين هندسة البرمجة والتحقق من صحة المخططات، مما يجعل استخراج البيانات الدقيقة من نماذج الذكاء الاصطناعي أكثر سلاسة من أي وقت مضى.

Share: