تخطَّ إلى المحتوى
kazma.
البحث في كاظمه والتوثيق
EN

طبقة الالتزام (الحل قبل التنفيذ)

طبقة الالتزام — الحل قبل التنفيذ

Section titled “طبقة الالتزام — الحل قبل التنفيذ”

بوابة سياسة بين نموذج اللغة والتعديلات الدائمة. قبل أن يُسمح للوكيل بالجدولة أو الإرسال أو التنفيذ أو تغيير الإعدادات، تحلّ كاظمه نيّته مقابل الذاكرة والسياسة. الأفعال الغامضة يُزال غموضها بـبطاقة توضيح/تأكيد دلالية تفاعلية على كل منصة. كل الأطوار (0–8) مُسلَّمة. مفتاح إيقاف الطبقة وتدهور الاستيراد غير المتاح يفشلان انفتاحًا (يُعامَلان كطبقة مطفأة). استثناءات محرك التفويض على الأدوات الدلالية تفشل مغلقةً عند الاختناقين — يجب ألا يُطلق محرك سياسة معطوب remind/exec بحرية. الثوابت: AGENTS.md §20.

ذو صلة: الأمان والسلامة (ثلاثة مسارات تنفيذ HITL + السجل)، الذاكرة وRAG (مخزن المعتقدات الذي تقرأه البوابة)، أوامر الشرطة المائلة.


1. لماذا وُجدت — فئة الحوادث التي تمنعها

Section titled “1. لماذا وُجدت — فئة الحوادث التي تمنعها”

تخيَّل وكيل جدولة. يقول المستخدم “ذكِّرني بالاجتماع.” دون طبقة التزام، يستطيع نموذج اللغة اختراع تاريخ معقول، وجدولته، والأسوأ — الكتابة فوق اعتقاد المستخدم الحقيقي بشأن موعد الاجتماع. هذا فئة فشل حقيقية (“حادثة CoPilot”): يتصرف النموذج بثقة بناءً على حقيقة مهلوسة والنظام يسمح ببقائها.

تحلّ كاظمه النية مقابل الذاكرة قبل التنفيذ، وتحجب المسار السيئ عند طبقتين:

  1. طبقة الجدولة — العبارة النسبية (“الثلاثاء القادم”، “بعد يومين”) تُربَط بواقعة حقيقية في الذاكرة، ويُعاد كتابة fire_at الخاص بالأداة إلى القيمة الصحيحة من الذاكرة (قيمة البوابة تتفوق على قيمة النموذج).
  2. طبقة الذاكرة — لا يجوز أن يُستبدل معتقد user_explicit بمصدر ثقة أدنى (llm_inferred / system_tool) (بوابة ثقة المصدر).

إزالة أيٍّ من الثابتين تُعيد فئة الحوادث.


كل مسار معدِّل يمر عبر authorize_effect (في kazma_core/safety/commitment/authorize.py). هناك ثلاثة مواضع استدعاء:

نقطة الاختناقالمسارالدور
tool_worker_node (agent/graph_tool_worker.py، _commitment_resolve_gate)دردشة أحادية الوكيلقرارات كاملة؛ يعمل قبل انقسام HITL الأمني ليتمكن من إعادة كتابة الوسائط أولًا
LocalToolRegistry.execute (agent/tool_registry.py)IDE / السربقائمة حجب exec / قائمة سماح الصادر / المفاتيح المحمية للإعدادات تُفرض هنا. يحتاج remind/cancel_job إلى سياق الرسم البياني (تدقيق فقط على هذا المسار). H-8: طبِّق rewritten_args؛ وclarify/confirm تفشلان مغلقتين (“شغِّله من الدردشة”) — لا تُصكّ أبدًا بوابة HITL ثانية
_mutate_functional (memory/belief_mutation.py)كتابات الذاكرةالنصف الفاسد — بوابة ثقة المصدر (مستقلة عن بوابة السياسة)

يعيد authorize_effect قيمة EffectDecision بأحد أربعة نتائج:

القرارالمعنىما يحدث
allowتنفيذاختياريًا مع rewritten_args (مثلًا حسبت البوابة fire_at الصحيح لتذكير)
clarifyمقاطعة بسؤال موجَّهتُطلق بطاقة مقاطعة حقيقية بخيارات متمايزة (انظر §4)
confirmمقاطعة طلبًا لموافقة صريحةنفس تجربة البطاقة، تُستخدم للأفعال الحرجة
denyمحجوبيُعاد إلى النموذج خطأ واضح؛ لا بطاقة، ولا تنفيذ

بالإضافة إلى مسار تدقيق فقط لأدوات القراءة، وmutate_fs (الاحتواء في IdeService.resolve)، وdelegate (ثقة HMAC تُفحص عند وقت تحميل المهارة).

الفعلسلوك المُحلِّل
remind (جدولة)وقت نسبي مربوط بواقعة في الذاكرة → سماح + إعادة كتابة fire_at. عبارة نسبية غامضة مع واقعة قريبة → clarify. غير قابلة للتحقق → deny.
cancel_jobيُحل مقابل مهام cron المعلقة.
exec (الصدفة)قائمة حجب تحجب الأوامر الكارثية (rm -rf /، وقنابل fork، وcurl | sh، وdd of=/dev/، وmkfs، والإطفاء، وchmod 777 /) قبل بطاقة HITL. الأوامر الآمنة تمر (تبقى HITL مطبَّقة).
send_outboundعندما يكون agent.commitment.outbound_allowed_targets مضبوطًا، الأهداف غير المعروفة → clarify مع قائمة السماح.
config_changeالمفاتيح المحمية (safety.*، وagent.commitment.*، وnotifications.lifecycle.*) لا يمكن للوكيل تعديلها — حماية ذاتية.
منشور مدعوم بمقترحيرفض x_post / x_schedule_post / book_x_post العمل دون proposal_id قابل للحل. تعيد البوابة كتابة text إلى القطعة المخزَّنة (المعرف يتفوق على سياق النموذج). فشل مخزن القطع المعطوب يحجب مغلقًا.

إعادة الكتابة عند السماح: قيمة fire_at التي حسبتها البوابة (للتذكير) تتفوق دائمًا على وسائط النموذج الأصلية. التوقيت الأصلي، وربما الخاطئ، لا يصل إلى المجدول أبدًا.


4. بطاقات التوضيح / التأكيد الدلالية

Section titled “4. بطاقات التوضيح / التأكيد الدلالية”

عندما يكون القرار clarify أو confirm، يعلَّق الرسم البياني عبر interrupt() في LangGraph بحمولة تحمل سؤالًا وقائمة من الخيارات — كل خيار يحزم slots_patch (تحديث جزئي للوسائط).

flowchart LR
    U[User: "remind me about the meeting"] --> M[Model calls schedule tool with ambiguous time]
    M --> G[Commitment gate: authorize_effect]
    G -->|ambiguous| C[Clarify card: "Which meeting?"]
    C --> O1[Option: Project sync — Tue 2pm]
    C --> O2[Option: 1:1 — Wed 10am]
    C --> OX[Cancel]
    O1 --> R[Resume: apply slots_patch → correct fire_at]
    OX --> X[Aborted cleanly]
  • يُعرض في كل مكان — الويب (الدردشة + الشريط الجانبي)، وTelegram، وDiscord، وSlack. كل منصة تعرض زرًا واحدًا لكل خيار.
  • الاستئناف يطبق slots_patch الخاص بالخيار المختار على وسائط الأداة ويواصل. أزرار الموافقة/الرفض القائمة تعيّن أفضل خيار / إلغاء.
  • قائمة الخيارات فارغة → توضيح بنص حر (بلا خيارات متمايزة).
  • الإلغاء نهائي — يُقال للنموذج أن يوقف المحاولة ويسأل المستخدم، لا أن يعيد المحاولة بصمت أبدًا.

هذا ناقل HITL الموحَّد (الناقل نفسه الذي يعالج موافقات أدوات الخطورة) — لا توجد قناة مقاطعة ثانية.


يمكن تقييد عمّال السرب المُرسَلين بنطاق امتياز. عندما يكون agent.commitment.swarm_scope_enforce مفعَّلًا، يبدأ العمّال افتراضيًا بـ semantic_tier عالٍ (HIGH) (يُحجب exec/outbound/config/identity بحرجة CRITICAL) وdenied_acts = {soul_delta, identity, config_change}. الافتراضي مفعَّل منذ 2026-08-15 (الإرسال التلقائي بمحرك النية) — اخرج منه عبر متغير البيئة / ConfigStore.

انظر kazma_core/safety/commitment/scope.py (ScopeToken، وdefault_worker_scope، وis_act_within_scope).


يُخلِّد محرك التحسين الذاتي “دلتا الروح” — تحسينات موجه النظام من توليد نموذج اللغة مستمدة من مخرجات محادثة/أدوات غير موثوقة. عندما يكون agent.commitment.soul_requires_confirm مفعَّلًا، تُحتجَز الدلتا حتى يؤكدها مشغِّل عبر الطابور عند GET /api/commitment/soul/pending و**POST /api/commitment/soul/{cid}/confirm** (أو /reject). افتراضي الإعدادات مطفأ؛ تفعيل تلقائي في الإنتاج / تعدد المستخدمين ما لم يضبط المشغِّل المفتاح صراحةً (get_commitment_config).

صدق التخزين: تعيش دلتا الروح في get_config_store() تحت المفتاح self_improvement.agent_evolution ({"agents": {<id>: {soul, history}}}) — وليست ملف SOUL.md ماركداون وليست ملف agent_evolution.json حيًّا. يمرّ _load_agent_evolution / _save_agent_evolution عبر ConfigStore — لا تُعد إدخال كتابة path.write_text مباشرة أبدًا. قفل قراءة-تعديل-كتابة مركّب (_agent_evo_lock) يُسلسل apply_agent_mutation داخل العملية؛ قفل ConfigStore نفسه لا يحرس إلا الفردية get/set. كلاهما مطلوب.

هجرة لمرة واحدة (_migrate_legacy_evolution_if_present) تنقل أي agent_evolution.json موجود مسبقًا إلى ConfigStore وتعيد تسميته .migrated. اترك هذا في مكانه.

تُفحص الدلتا عند وقت الإنشاء (_analyze_success/_analyze_failure) وعند وقت التطبيق (_auto_apply/apply_agent_mutation) — دفاع في العمق. لا تحقن دلتا أبدًا عبر تأطير "Apply these refinements to your behaviour:" القديم؛ استخدم دائمًا format_untrusted_block(evo, source="self_improvement").

مفتاح الإيقاف KAZMA_SELF_IMPROVEMENT=0 يُفحص حيًّا (لا عند التهيئة فقط) على مسار الدردشة/المشرف ومسار عامل السرب معًا.


7. الأوضاع ومفاتيح الإيقاف

Section titled “7. الأوضاع ومفاتيح الإيقاف”

الأوضاع (agent.commitment.mode أو KAZMA_COMMITMENT_MODE)

Section titled “الأوضاع (agent.commitment.mode أو KAZMA_COMMITMENT_MODE)”
الوضعالسلوك
strictالأكثر تحفظًا — أوسع سطح توضيح/تأكيد
balanced (الافتراضي)حلّ النية الواضحة، والتوضيح عند الغموض الحقيقي فقط
autonomousمقاطعة دنيا
yoloتمرير فعلي (أدوات الخطورة تبقى مقيَّدة بـHITL على حدة)

مفاتيح الإيقاف (كلها مطفأة افتراضيًا ما لم يُذكر خلاف ذلك — SWARM_SCOPE_ENFORCE مفعَّل افتراضيًا منذ 2026-08-15)

Section titled “مفاتيح الإيقاف (كلها مطفأة افتراضيًا ما لم يُذكر خلاف ذلك — SWARM_SCOPE_ENFORCE مفعَّل افتراضيًا منذ 2026-08-15)”
متغير البيئةالطبقةالافتراضيالأثر
KAZMA_COMMITMENT_ENABLEDالطبقة بأكملهامفعَّليعطِّل 0 الطبقة كلها
KAZMA_COMMITMENT_MODEالوضعbalancedيتجاوز الوضع
KAZMA_COMMITMENT_SWARM_SCOPE_ENFORCEنطاق السربمفعَّليقيّد امتيازات العمّال المُرسَلين (عطِّله للخروج)
KAZMA_COMMITMENT_SOUL_REQUIRES_CONFIRMبوابة الروحمطفأ (تفعيل تلقائي في الإنتاج / تعدد المستخدمين ما لم يُضبط)تحتجز دلتا الروح بانتظار التأكيد
KAZMA_AUTO_STORE_BELIEFSالتخزين التلقائي للذاكرةمتحفظمدى عدوانية تخزين المعتقدات

كل مفتاح إعدادات قابل للضبط أيضًا في واجهة الإعدادات / ConfigStore تحت agent.commitment.* ويُعاد قراءته حيًّا (get_commitment_config) — لا حاجة إلى إعادة تشغيل.


مقاييس Prometheus مكشوفة عند /metrics:

  • kazma_commitment_decisions_total{decision="allow|clarify|confirm|deny|cancelled"}
  • kazma_commitment_pending — الالتزامات المحتجزة حاليًا بانتظار الحل

9. المكوّنات (kazma_core/safety/commitment/)

Section titled “9. المكوّنات (kazma_core/safety/commitment/)”
الوحدةالمسؤولية
side_effects.pyسجل مصدر الحقيقة الوحيد: أداة → ToolEffectProfile. أدوات MCP (mcp__*) تمر عبر classify_mcp_tool_effect. المعدِّلات غير المسجلة تفشل مغلقةً (مُرمَّزة) عندما يكون enforce_unknown_mutators مفعَّلًا.
authorize.pyauthorize_effect (البوابة) + EffectDecision + محلِّلات الأفعال (remind، وcancel_job، وexec، وsend_outbound، وconfig_change، والمنشور المدعوم بمقترح)
relative_time.pyresolve_remind — ربط الوقت النسبي (EN + AR)، مقيس بـG2 (صفر سماح خاطئ)
store.pyصفوف Commitment + جداول ops-SQLite + TTL/GC + احتجاز متدرج + list_pending_soul()
constraints.pyis_commitment_enabled + load_constraint_beliefs + cron_pending_jobs
config.pyget_commitment_config — قارئ الإعدادات الحي الوحيد
scope.pyScopeToken + swarm_scope (ContextVar) + default_worker_scope() + is_act_within_scope()
resume.pybuild_resume_value() + is_semantic_kind() — يعيّن الموافقة/الرفض → خيار/إلغاء على كل منصة
_commitment_resolve_gateالبوابة المستخرجة في graph_tool_worker.py (وليست graph_builder.py)

  • مفتاح الإيقاف / الاستيراد مفقود → فشل انفتاحًا (تُعامَل الطبقة كمطفأة). الاستثناءات على الأدوات الدلالية → فشل مغلقًا عند الاختناقين (لا تُطلق remind/exec بحرية لأن محرك السياسة رمى استثناءً).
  • تخزين تلقائي متحفظ — لا تُستبدل المعتقدات بعدوانية. ثقة المصدر: معتقدات user_explicit الوظيفية لا يمكن أن تُستبدل بـ llm_inferred / system_tool.
  • لا موافقة متأخرة — لا يمكن المصادقة على التزام بأثر رجعي بعد الوقوع؛ يجب حلّه في دوره.
  • إيقاع GC — الالتزامات منتهية الصلاحية/المحتجزة تُحصد في حلقة start_memory_worker كل 15 دقيقة (نفس الحلقة تحمل TTL بوابة HITL).

الطبقة بأكملها مفعَّلة افتراضيًا في وضع balanced؛ أطفئها بـ KAZMA_COMMITMENT_ENABLED=0 إذا احتجت سلوك تمرير خامًا.