حلقات الإصلاح والتحقق
إصلاح المخرجات غير الصحيحة البنية.
حلقات الإصلاح والتحقق درس مجاني في AI Prompt Engineering على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في AI Prompt Engineering، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة AI Prompt Engineering 4 دروس في المجموع.
سبب وجود حلقات الإصلاح
حتى مع استخدام المخططات، قد تفشل المخرجات: قد يكون JSON مبتورًا بسبب حد الرموز، أو قد تتضمن حقولًا إضافية مختلقة، أو قد تكون قيمة نصية حيث كان يجب أن تكون القيمة رقمية، أو قد تخالف قاعدةً من قواعد العمل. تكتشف حلقة الإصلاح الفشل وتعيده إلى النموذج لتصحيحه.
إنها شبكة الأمان التي ترفع معدل النجاح من 98% إلى 99.9%.
دورة التحقق والإصلاح
الحلقة القياسية هي: التوليد، ثم التحقق، ثم إعادة الطلب برسالة تتضمن الخطأ المحدد إذا كانت النتيجة غير صالحة، وذلك لعدد محدود من المحاولات.
def generate_valid(prompt, schema, max_tries=3):
msgs = [{'role': 'user', 'content': prompt}]
for _ in range(max_tries):
out = call_model(msgs)
ok, err = validate(out, schema)
if ok:
return out
msgs.append({'role': 'assistant', 'content': out})
msgs.append({'role': 'user',
'content': 'Invalid. Fix this error and resend JSON only: ' + err})
raise ValueError('repair budget exhausted')الأخطاء المحددة أفضل من العامة
تعتمد جودة الإصلاح على دقة الملاحظات. تساعد عبارة «JSON غير صالح» بدرجة محدودة، أما عبارة «يجب أن يكون الحقل rating عددًا صحيحًا بين 1 و5، لكن القيمة التي أُرسلت هي 7» فغالبًا ما تصلح الخطأ من المحاولة الأولى.
مرّروا رسالة الخطأ الدقيقة من أداة التحقق، بما في ذلك المسار والسبب، إلى النموذج.
def validate(obj, schema):
v = jsonschema.Draft202012Validator(schema)
errs = sorted(v.iter_errors(obj), key=lambda e: e.path)
if not errs:
return True, None
msg = '; '.join(f"{list(e.path)}: {e.message}" for e in errs)
return False, msgالتحقق متعدد الطبقات
للتحقق مستويات متعددة؛ افحصوا الأرخص أولًا:
- التركيبي — هل يمكن تحليله بوصفه JSON؟
- البنيوي — هل يطابق المخطط؟
- الدلالي — هل تستوفي القيم قواعد العمل والثوابت بين الحقول؟
لا يمكن أن يتجاوز الخصم الإجمالي الفرعي حتى لو كان كلاهما رقمًا صالحًا؛ فهذا فحص دلالي.
def semantic_ok(o):
return o['discount'] <= o['subtotal'] and o['total'] == o['subtotal'] - o['discount']الإصلاح الحتمي المسبق
قبل استهلاك استدعاء للنموذج، جرّبوا إصلاحات حتمية رخيصة للعيوب الشائعة:
- أزيلوا أسوار تعليمات Markdown البرمجية.
- استخرجوا كائن JSON الخارجي من النثر المحيط به.
- أزيلوا الفواصل الزائدة في النهاية.
لا تصعّدوا الأمر إلى إصلاح بواسطة النموذج إلا إذا فشل التنظيف الحتمي.
def extract_json(text):
text = text.strip().removeprefix('json').strip()
start, end = text.find('{'), text.rfind('}')
if start != -1 and end != -1:
return text[start:end + 1]
return textالتعامل مع الاقتطاع
إذا كانت finish_reason == 'length'، فهذا يعني أن JSON قد اقتُطع؛ لذا فإن إصلاح الجزء المبتور لن يجدي. بدلًا من ذلك، ارفعوا max_tokens، أو قلّلوا الحمولة المطلوبة، أو استخدموا البث واطلبوا متابعة. ميّزوا بين الاقتطاع والمخرجات المشوهة، لأن كلًا منهما يتطلب استجابة معاكسة للآخر.
if resp.choices[0].finish_reason == 'length':
# do NOT feed truncated JSON back; regenerate with more room
return retry_with(max_tokens=resp_max * 2)ضعوا حدًا للحلقة
الإصلاح غير المحدود خطر من ناحية التكلفة وزمن الاستجابة، وقد يدخل النموذج المتعثر في حلقة لا نهائية. حدّدوا دائمًا سقفًا للمحاولات، وأضيفوا ميزانية لكل طلب، وعرّفوا إجراءً احتياطيًا، مثل التدهور بسلاسة، أو وضع الطلب في قائمة انتظار للمراجعة البشرية، أو إرجاع قيمة افتراضية آمنة.
try:
data = generate_valid(prompt, schema, max_tries=3)
except ValueError:
log_for_review(prompt)
data = SAFE_DEFAULTالإصلاح داخل استدعاءات الأدوات
عند استدعاء الدوال، تكون قناة الإصلاح هي نتيجة الأداة. أعيدوا خطأً منظمًا، وسيصحح النموذج نفسه في الدور التالي، من دون الحاجة إلى حلقة منفصلة.
msgs.append({'role': 'tool', 'tool_call_id': call.id,
'content': json.dumps({'error': 'amount must be positive', 'got': args['amount']})})
# next model turn will re-issue the call with a corrected argumentIdempotency والآثار الجانبية
عندما تغلّف حلقة إصلاح إجراءً، لا مجرد عملية توليد، تأكدوا من أن عمليات إعادة المحاولة تتسم بخاصية idempotency. استخدموا مفاتيح idempotency حتى لا يؤدي استدعاء مُعاد إصداره إلى تحصيل الرسوم مرتين أو تكرار سجل. تحققوا من الصحة قبل تنفيذ الآثار الجانبية، وليس بعدها مطلقًا.
راقبوا معدلات الإصلاح
يُعد معدل الإصلاح مؤشرًا مبكرًا مهمًا على الجودة. ويشير ارتفاعه إلى تراجع في المطالبة، أو إلى مخطط صارم أكثر من اللازم، أو إلى انجراف في النموذج. سجّلوا عدد المحاولات لكل نجاح وأبرز مسارات الأخطاء، وأطلقوا تنبيهًا عند ارتفاعها المفاجئ.
metrics.histogram('llm.repair.attempts', tries)
metrics.increment('llm.repair.error', tags={'path': top_error_path})اجمعوا بين القيود والإصلاح
يضع خط الأنابيب الأقوى طبقات متعددة من الحماية: فك ترميز مقيّد أو وضع مخطط صارم لتقليل حالات الفشل، وتنظيفًا حتميًا للإصلاحات الرخيصة، وحلقة إصلاح محدودة بواسطة النموذج لمعالجة الحالات النادرة المتبقية. لا تكفي أي طبقة بمفردها.
اختبار سريع
تعيد واجهة API القيمة length في finish_reason مع JSON مبتور. ما الاستجابة الصحيحة؟
خلاصة
خطوط أنابيب الإصلاح المتينة:
- تحققوا على طبقات: تركيبية، وبنيوية، ودلالية.
- أعيدوا الأخطاء الدقيقة على مستوى المسار إلى النموذج.
- جرّبوا التنظيف الحتمي قبل دفع تكلفة استدعاء النموذج.
- اكتشفوا الاقتطاع بشكل منفصل وأعيدوا التوليد.
- ضعوا حدًا للمحاولات، وتأكدوا من idempotency، وراقبوا معدلات الإصلاح.
لقد أتممتم التوليد المنظم. الدورة التالية: حواجز الأمان والتحقق من المخرجات.
الأسئلة الشائعة
هل درس «حلقات الإصلاح والتحقق» مجاني؟
نعم — نص درس «حلقات الإصلاح والتحقق» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة AI Prompt Engineering، انتقل إلى CoddyKit PRO. تتضمن دورة AI Prompt Engineering 4 دروس في المجموع.
ماذا ستتعلم في «حلقات الإصلاح والتحقق»؟
إصلاح المخرجات غير الصحيحة البنية. تتمرن على AI Prompt Engineering مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ AI Prompt Engineering؟
لا تُشترط خبرة سابقة. AI Prompt Engineering على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.
كم من الوقت يستغرق درس «حلقات الإصلاح والتحقق»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس AI Prompt Engineering هذا؟
نعم. كل درس في AI Prompt Engineering يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- لماذا نستخدم المخرجات المهيكلة
- مخطط JSON في التلقينات
- مخططات الأدوات والدوال
- حلقات الإصلاح والتحقق