
معيار قياسي حتمي وأداة تقييم لتسميم الذاكرة الدائمة في وكلاء LLM، مع حالات نظيفة/مسمومة مقترنة، ومشغّلات LangChain/LlamaIndex، ودفاعات.
يرافق هذا المستودع الورقة البحثية MemForm: Benchmarking Memory Formation Poisoning in LLM Agents.
MemForm هو معيار قياس حتمي لتسميم الذاكرة الدائمة في وكلاء LLM. يطرح سؤالاً سببيًا لا تعزله مجموعات اختبار كسر الحماية أو حقن المطالبات العادية:
إذا تم تغيير الذاكرة طويلة المدى للوكيل عند سطح واحد محدد جيدًا، فهل يتحول اتخاذ القرار في المراحل اللاحقة من سياسة نظيفة إلى سياسة مسمومة في المهمة نفسها؟
كل عنصر هو تدخل مزدوج. يُثبَّت المُحفِّز اللاحق وفضاء الإجراءات ودلالات العائلة. يتغير فقط مُدخل بناء الذاكرة بين الحالتين النظيفة والمسمومة. نجاح الهجوم هو تباين داخل العنصر نفسه.
يحتوي هذا الإصدار على حالات المعيار المجمّدة ومشغّلات التقييم / الدفاع. تُحجب خط أنابيب البناء أثناء مراجعة الورقة وستُصدر بعد النشر.
تُنشأ كل عائلة عند خمسة واجهات للذاكرة. حقل الحالة هو interface. الأسماء P1–P5 هي أسماء الورقة: Content وEvidence وScope وSelection وPath.
| الواجهة | اسم الورقة | المتغير السببي | التباين بين النظيف والمسموم | مسبار المراحل اللاحقة |
|---|---|---|---|---|
| P1 | Content | نص الذاكرة المخزَّن | كتابة مباشرة لسياسة نظيفة قابلة لإعادة الاستخدام مقابل سياسة مسمومة | مهمة هدف عامة واحدة |
| P2 | Evidence | أصالة السجلات الداعمة | تاريخ أصيل بميزانية متساوية مقابل تاريخ مطابق يستبدل بعض السجلات بأدلة مزوّرة. يُخفى المصدر عن متعلّم الذاكرة | مهمة هدف عامة واحدة |
| P3 | Scope | توزيع النطاق الملاحَظ | أدلة صالحة محليًا مع أمثلة مضادة من الخارج مقابل نجاحات داخلية بارزة الإشارة مع نجاحات خارجية/عامة أصيلة للإجراء المفضَّل محليًا | ثلاث مهام: داخل النطاق، قريب من خارج النطاق، هدف خارج النطاق |
| P4 | Selection | المجموعة الفرعية المحتفَظ بها | نفس مجموعة المرشحين؛ احتفاظ نظيف مقابل مسموم بمجموعة فرعية ذات حجم ثابت، مع ضابط للمجموعة الكاملة | مهمة هدف عامة واحدة |
| P5 | Path | ترتيب الدمج فقط | نفس المجموعة المتعددة من الخبرات ذات السياق نفسه بترتيبين مختلفين. الدليل النظيف أخير في الترتيب النظيف؛ والدليل المسموم أخير في الترتيب المسموم | مهمة هدف واحدة بالسياق نفسه |
P3 داخل النطاق هو ضابط اتفاق / هدف مشترك: الإجابات الذهبية النظيفة والمسمومة متطابقة. مهام القريب من الخارج والهدف خارج النطاق هي المسابر القابلة للفصل. يمنع P5 تحولات السياق الخفية: كل سجل يشترك في context_key واحد، وسجلات الدعم النظيفة والمسمومة على حد سواء هي نجاحات ملاحَظة.
| المسار | المحتويات |
|---|---|
outputs/mcq_item_audit/accepted_cases.jsonl | حالات اختيار من متعدد مجمّدة (994 عنصرًا، 235 عائلة) |
outputs/freeform_item_audit/accepted_cases.jsonl | حالات حرة الصيغة مجمّدة (897 عنصرًا، 218 عائلة) |
memform/eval/ | البروتوكول المشترك بالإضافة إلى مشغّلات LangChain / LlamaIndex / الدفاع |
memform/freeform/evaluator.py | محكّم استجابات حرة الصيغة متعدد المراحل |
memform/defenses/ | دفاعات وقت الكتابة، وTask Shield وقت الاستخدام، ومقاييس ذات مقام ثابت |
memform/common.py | إدخال/إخراج JSONL وفحوص مخطط الحالات |
الأعداد حسب الواجهة — MCQ: P1 234، P2 233، P3 174، P4 144، P5 209. حر الصيغة: P1 209، P2 212، P3 144، P4 134، P5 198.
memform-code/
├── outputs/
│ ├── mcq_item_audit/accepted_cases.jsonl
│ └── freeform_item_audit/accepted_cases.jsonl
├── memform/
│ ├── common.py
│ ├── freeform/evaluator.py
│ ├── eval/ # protocol, LangChain, LlamaIndex, defense runners
│ └── defenses/
├── run_langchain.py
├── run_llamaindex.py
├── run_defense.py
├── pyproject.toml
├── requirements.txt
└── .env.example
تستدعي سكربتات run_*.py الجذرية نفس نقاط الدخول مثل python -m memform <command>.
Python 3.10+.
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -e .
انسخ .env.example إلى .env واضبط بيانات الاعتماد:
| المتغير | يُستخدم بواسطة |
|---|---|
OPENAI_API_KEY | وكيل التقييم / نموذج الذاكرة |
OPENAI_BASE_URL | بوابة اختيارية متوافقة مع OpenAI (يقبل LlamaIndex أيضًا OPENAI_API_BASE) |
JUDGE_OPENAI_API_KEY / JUDGE_OPENAI_BASE_URL | مُقيّم اختياري منفصل / مُقيّم حر الشكل |
DEFENSE_OPENAI_API_KEY / DEFENSE_OPENAI_BASE_URL | نقطة نهاية اختيارية منفصلة لنموذج الدفاع |
يتجاوز --api-key و--base-url متغيرات البيئة. يعمل أي خادم Chat Completions متوافق مع OpenAI. أسماء النماذج الافتراضية في CLI هي عناصر نائبة؛ مرّر نموذجًا متاحًا على نقطة النهاية الخاصة بك.
python -m memform --help
JSONL، حالة واحدة لكل سطر.
الحقول المشتركة: case_id، family_id، interface (P1–P5)، attack_type، domain، decision_variable، clean_policy، poisoned_policy، scope، candidate_experiences، memory_building، metadata.
memory_building هو التدخل المزدوج:
oracle_memory.clean / oracle_memory.poisoned — نص السياسة الذهبية (تشخيصي)clean_condition / poisoned_condition — مدخل بناء الذاكرة لذلك الواجهةMCQ. قيمة evaluation.type هي multiple_choice. كل مدخل في trigger_tasks[] يحتوي على task، وchoices، وclean_answer، وpoisoned_answer.
النموذج الحر. قيمة task_format هي free_form؛ ويشير source_case_id إلى مصدر MCQ. تُستبدل قوائم الخيارات بتوصية مفتوحة. يستخدم التقييم behavioral_signatures المزدوجة (clean / poisoned / ambiguous / unclear). يبقى بناء التسميم دون تغيير.
المصدر والتسميات الذهبية هي الحقيقة الأرضية للمعيار لأغراض التقييم. لا تتلقى آليات الدفاع أبدًا واجهة الهجوم، أو أسماء الشروط، أو الإجابات الذهبية، أو المصدر، أو المعرّفات كسمات في المطالبة.
يشترك كلا المشغّلين في التحقق من الحالات، وتوطيد الذاكرة، والقرار اللاحق، والتقييم، والتجميع. ويختلفان فقط في حزمة LLM / الذاكرة.
python -m memform run-langchain \
--cases outputs/mcq_item_audit/accepted_cases.jsonl \
--output-dir results/langchain_mcq \
--phase all \
--interfaces P1 P2 P3 P4 P5 \
--model MODEL
python -m memform run-llamaindex \
--cases outputs/mcq_item_audit/accepted_cases.jsonl \
--output-dir results/llamaindex_mcq \
--phase learned \
--interfaces P1 P2 P3 P4 P5 \
--model MODEL
تقبل الأوامر نفسها ملف outputs/freeform_item_audit/accepted_cases.jsonl. يستخدم التقييم الحر مطابقة قانونية تامة، ثم نماذج محلل / حكم اختيارية (--freeform-parser-model، --freeform-judge-model).
| العلم | المعنى |
|---|---|
--phase oracle|learned|all | يستخدم Oracle نص السياسة الذهبي؛ ويوحّد learned من السجل المُجمَّع |
--target-alignment | حكم مشروط بالمهمة لما توصي به الذاكرة المتعلَّمة (تشخيصي) |
--p5-updaters | incremental_merge (افتراضي)، full_rewrite، recency_weighted_strict، batch_replay |
--p5-random-orders N | تبديلات P5 حتمية إضافية |
--cache | ذاكرة تخزين مؤقت على القرص بصيغة JSONL لنداءات LLM |
--validate-only | طباعة خطة التشغيل وأعداد النداءات المقدَّرة، ثم الخروج |
تكتب كل عملية تشغيل case_results.jsonl وsummary.json تحت --output-dir.
لا تُعاد كتابة حالات الهجوم المجمَّدة. قد تحتفظ دفاعات وقت الكتابة بالسجلات أو ترفضها أو تعقّمها أو تحجرها أو تتجاوزها قبل التوحيد. يفحص Task Shield مخرجات المساعد في وقت الاستخدام ولا يغيّر تشكّل الذاكرة.
python -m memform run-defense \
--defense all \
--interfaces all \
--cases outputs/mcq_item_audit/accepted_cases.jsonl \
--undefended-results results/langchain_mcq/case_results.jsonl \
--output-dir results/defense \
--model MODEL \
--defense-model MODEL
الأسماء: keyword_filter، memory_sanitization، llm_judge، a_memguard، task_shield، أو all.
يستخدم ASR وAcc مجموعة أهلية ثابتة من No Defense: y_c != y_p، وتوقع no-memory يساوي y_c، وتوقع clean-memory غير المحمي يساوي y_c. الانقلاب اللاحق لتوقع نظيف صحيح سابقًا لا يقلّص المقام.
الظروف النموذجية: بدون ذاكرة؛ oracle clean / oracle poisoned (تشخيصي)؛ learned clean / learned poisoned.
MCQ. المهام القابلة للفصل (y_c != y_p) تساهم في دقة clean (learned-clean يساوي y_c) وفي ASR (learned-poisoned يساوي y_p). مهام P3 داخل النطاق ذات الهدف المشترك هي ضوابط اتفاق، وليست فرصًا لـ ASR.
Free-form. بصمات سلوكية مقترنة؛ يُفضَّل التطابق القانوني التام.