Prompt Engineering

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

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

تحدي النصوص غير المهيكلة

بشكل افتراضي، تعمل معظم نماذج اللغات الكبيرة بتباين عالٍ فيما يتعلق بالتنسيق. إذا طلبت من النموذج "استخراج اسم العميل وبريده الإلكتروني من هذا النص"، فقد يستجيب بـ: "بالتأكيد! العميل هو جون دو وبريده الإلكتروني john@example.com." بينما يمكن للبشر تحليل هذه الإجابة، لا تستطيع البرامج ذلك. محاولة تحليل هذه الاستجابة باستخدام المكتبات القياسية مثل `JSON.parse()` ستؤدي إلى أخطاء وقت التشغيل، مما يعطل خط أنابيب التطبيق الخاص بك.

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

استراتيجيات التنفيذ

هناك طريقتان رئيسيتان لفرض وضع JSON: من خلال هندسة الأوامر الصريحة أو عبر قيود مستوى واجهة برمجة التطبيقات (API). أصبح النهج الأخير يصبح المعيار الصناعي بشكل متزايد مع تقديم مزودي النماذج دعماً أصلياً للمخرجات المهيكلة.

1. التنفيذ على مستوى الأمر (Prompt)

على مستوى الأمر، يجب أن تكون صريحاً. مجرد إضافة "أخرج بتنسيق JSON" غالباً ما يكون غير كافٍ. تحتاج إلى تحديد الهيكل، وأنواع البيانات، والقيود. فكر في استراتيجية الأمر المحسنة هذه:

System: You are a data extraction assistant. Your goal is to extract entities from the user's input.
User: Extract the following fields from the text below: "name", "email", and "subscription_tier". 
Return ONLY a valid JSON object. Do not include markdown formatting like ```json. 

Text: "Hi, I'm Alice Smith, contact me at alice@test.com. I have a premium subscription."
Assistant:

لاحظ التعليمات المحددة لتجنب تنسيق Markdown. تغلف العديد من النماذج JSON داخل كتل برمجية بشكل افتراضي، مما يكسر المحللين الصارمين. يمنع هذا المنع الصريح تحسين المتانة.

2. قيود مستوى واجهة برمجة التطبيقات (وضع JSON الأصلي)

غالباً ما تقدم واجهات برمجة التطبيقات الحديثة (مثل تلك الخاصة بـ OpenAI وAnthropic وGoogle) معلمة `response_format`. من خلال تعيينها إلى `{ "type": "json_object" }`، يتم تقييد النموذج تقنياً أثناء فك التشفير لإنتاج رموز تشكل بنية JSON صالحة. يقلل هذا بشكل كبير من احتمالية حدوث أخطاء في الصيغة مقارنة بالنهج المعتمدة على الأوامر فقط.

import openai

client = openai.OpenAI()

response = client.chat.completions.create(
  model="gpt-4",
  messages=[{"role": "user", "content": "Extract data from: John, 30, Engineer"}],
  response_format={ "type": "json_object" }
)

أفضل الممارسات لوضع JSON المتين

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

الخاتمة

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

Share: