الانتقال إلى المحتوى الرئيسي

التنفيذ المتين ليس كافيًا: نقاط التحقق على نمط Restate والنية التي يفقدها

نقاط التحقق تحفظ الحالة، لا النية. قد تكتمل جولة وكيل مستأنفة بنظافة بينما تتصرّف خارج سلطتها الأصلية. يحتاج التنفيذ المتين إلى سياق قرار مُسجَّل.

A checklist with a red checkmark symbolizing a completed task on a pastel blue background.

ما الذي يضمنه التنفيذ المتين فعليًا

محرّكات التنفيذ المتين — Restate وTemporal والأنظمة المشابهة — تحلّ مشكلة حقيقية وصعبة: تجعل سير العمل ينجو من موت العملية، وانقسامات الشبكة، وعمليات النشر. الضمانات دقيقة وتستحق أن تُذكر بوضوح.

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

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

الالتباس سهل الوقوع لأن المفردات متداخلة. "متين" تبدو وكأنها "موثوق". "مرة واحدة بالضبط" تبدو وكأنها "صحيح". في سير عمل تقليدي — خصم بطاقة، إرسال بريد إلكتروني، تحديث صف — تكون النية ثابتة عند وقت التأليف ومُرمَّزة في الرسم البياني نفسه. الرسم البياني هو النية. في جولة وكيل، يُولَّد الرسم البياني في وقت التشغيل من استدلال نموذج على هدف. يسجّل السجل ما فعله الوكيل، لا لماذا سُمح له بفعله.

فجوة النية عند وقت الاستئناف

تأمّل ما تحمله الجولة فعليًا عند بدايتها. هناك هدف ("حلّ طلب استرداد هذا العميل")، وخطة (تسلسل من استدعاءات الأدوات اقترحها الوكيل)، ومجموعة من القيود المقبولة (سقف الاسترداد، الأدوات المسموح بها، البيانات التي يجوز للوكيل قراءتها)، وميزانية (الرموز، الوقت الفعلي، عدد الاستدعاءات الخارجية).

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

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

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

Dynamic stock market trading chart showcasing live financial data and indicators for analysis.

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

تسجيل سياق القرار

الحل هو إدامة سياق القرار إلى جانب الحالة. على وجه التحديد، ينبغي لنقطة التحقق أن تحمل:

  • الهدف كما ذُكر عند بدء الجولة، مع بصمة (hash) للتعليمة المصدرية؛
  • إصدار الخطة الذي ينفذه الوكيل، لا الخطوة التالية فقط؛
  • منح نطاق الأدوات — أي أدوات، وبموجب أي سياسة، وبأي انتهاء صلاحية؛
  • الميزانية المتبقية بالوحدات التي تهم (الاستدعاءات، الرموز، الحدود المكافئة للعملة معبَّرًا عنها كحدود سياسة، لا كمبالغ)؛
  • سبب الخطوة التالية، بصيغة يستطيع مدقّق التحقق منها.

عند الاستئناف، يعيد وقت التشغيل التحقق من هذا السياق مقابل السياسة الحالية قبل المتابعة. إعادة التحقق ليست شكليّة. إنها تسأل: هل هذا الهدف ما زال مسموحًا؟ هل نطاق الأدوات هذا ما زال ممنوحًا؟ هل الميزانية المتبقية ما زالت متسقة مع الخطة؟ هل سبب الخطوة التالية ما زال مدعومًا بالهدف؟

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

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

Idempotency ليست موافقة

مفاتيح Idempotency آلية مفهومة جيدًا: تضمن أن استدعاءً خارجيًا مُعادًا لا يخص

مفتاح Idempotency يمنع الاستدعاء نفسه من أن يسري مرتين. لا يفعل شيئًا حيال استدعاء واحد تم تحت تفويض منتهي الصلاحية. إذا انتهت صلاحية سلطة الوكيل في إصدار الاستردادات عند الساعة 14:00 واستُؤنفت الجولة عند 14:05، فإن استدعاء استرداد متوافق مع Idempotency سيُنفَّذ مرة واحدة بالضبط — وسيكون غير مصرّح به.

Historic US Army checkpoint at Berlin's Mauermuseum near former Berlin Wall.

يجب فصل المفهومين في وقت التشغيل:

  • مفتاح Idempotency يعرّف العملية، فتصبح إعادات المحاولة آمنة؛
  • رمز السلطة يعرّف التفويض، فيصبح التنفيذ مسموحًا.

يجب أن يكون كلاهما صالحًا في وقت التنفيذ. الجولة الطويلة الأمد تحتاج سلطة تنتهي صلاحيتها وتُجدَّد صراحةً، لا رمزًا يُسكّ عند البداية ويُحمل طوال عمر سير العمل. التجديد نقطة قرار: يمكن منحه، أو رفضه، أو منحه بنطاق أضيق. نقطة القرار تلك هي حيث تعود النية إلى النظام.

قواعد التصميم للجولات الطويلة الأفق

تتبع بعض القواعد مما سبق. ليست مجانية، لكنها أرخص من خلل صحة صامت.

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

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

سجّل كل حدث استئناف مع الفرق بين النية الأصلية والنية المُعاد التحقق منها. الفرق هو الأثر المثير للاهتمام. يسجّل ما تغيّر — السياسة، الميزانية، النطاق، حالة العالم — ولماذا استمرت الجولة أو توقفت. بدونه، لا طائل من مراجعة ما بعد الحادث.

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

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

مشاركةXLinkedInرابط دائم6 دقيقة قراءة

الأسئلة التي يجيب عنها هذا

What is the intent gap in durable agent execution?

The intent gap is the difference between the state a checkpoint serialises (variables, step index, tool outputs) and the decision context that justified the run (goal, plan version, tool scope, budget, reason for the next step). A resumed run can replay state correctly while acting under intent that is no longer valid.

Why is idempotency not the same as consent?

Idempotency ensures a retried call does not take effect twice. It does not ensure the call was authorised. A single call made under an expired mandate will execute exactly once and still be wrong. Idempotency keys and authority tokens must both be valid at execution time.

How should a runtime handle a failed re-validation on resume?

Treat it as a terminal state, not a retry. Retrying a policy failure produces the same refusal and burns budget. The run should stop, log the delta between original and re-validated intent, and hand back to a human or orchestrator.

Should an agent replay its plan on resume?

No. The plan should be treated as a proposal, not a script. On resume, re-derive the next step from the goal, current world state, and remaining budget. The journal constrains what has already happened; it should not dictate what happens next.