تخطَّ إلى المحتوى
دلالDOCS

DOCS / actions

الإجراءات وحدودها

ما الذي يُسمح لدلال بتنفيذه، وأين تقف الموافقة اليدوية.

ثلاث درجات، لا اثنتان

كل أداة تُعرّفها بدرجة أثر واحدة، وهي التي تقرّر ما يحدث عند استدعائها:

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

السياسة هي الصلاحية

دلال لا ينفّذ شيئاً لأنّه يبدو مناسباً. المرحلة POLICY تربط ما فهمه من العميل بسياسة نشطة واحدة، وتحمل السياسة الأدوات المسموحة وسقف المبلغ.

{
  "intent": "refund_request",
  "allowed_tools": ["refund_order", "get_order"],
  "max_refund_usd": 50
}

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

الموافقة اليدوية

حين يقترح الرد أداة irreversible، لا تُستدعى الأداة. يُكتب صفّ موافقة يحمل الأداة ومعاملاتها المقترحة ومعرّف المحادثة، وتنتهي الحلقة عند awaiting_approval.

المعاملات تُحفظ لأنّ «اعتمد استرداداً» ليس قراراً يمكن اتخاذه. القرار هو «اعتمد استرداد ٦٨٢ ريالاً على الطلب MN-40871» — والصفّ يحمل ذلك، فتقرأه اللوحة كما هو.

وحين تعتمد، تُستدعى الأداة بالمعاملات المحفوظة نفسها لا بمعاملات تُعاد صياغتها. وإن رفضت، لا يُستدعى شيء ويصل العميل موظفاً.

متى يُعتبر الإجراء تمّ

ليس عند رد 200. المرحلة VERIFY_CLOSURE تعيد قراءة نظامك للتأكّد أنّ ما كُتب تغيّر فعلاً؛ فإن لم تتأكّد، تُصعَّد المحادثة ولا تُحتسب حلّاً.

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