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

الوحدة 4 — ذاكرة العمل والذاكرة الطويلة

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

ذاكرة العمل: ما تحمله الحلقة

ذاكرة العمل هي قائمة الرسائل التي تُرسَل إلى النموذج في كلّ خطوة. تنمو بسرعة:

  • تعليمة نظام: 300 رمز.
  • سؤال المستخدم: 50 رمزًا.
  • خمس خطوات أدوات، بمعدّل استدعاء 200 رمز وملاحظة 800 رمز: 5000 رمز.
  • المجموع: 5350 رمزًا في الخطوة السادسة، بمُدخل أطول من ذلك في نافذة سياقيّة تعمل بسعة 8 آلاف رمز.

النتيجة العمليّة: بعد الخطوة السابعة، النموذج يقتطع الرسائل القديمة أو يفشل. الحلّ ليس زيادة السقف الأعمى (فاتورة تنفجر)، بل تلخيص انتقائيّ.

استراتيجيّة التلخيص التدريجيّ

عند بلوغ عتبة (مثلًا 3000 رمز مستهلَك، أو أربع خطوات مضت)، نستدعي نموذجًا يُلخّص:

def compresser_historique(messages, seuil_rmoz=3000):
if compter_rmoz(messages) < seuil_rmoz:
return messages
# نحتفظ بتعليمة النظام والسؤال الأصليّ والرسائل الثلاث الأخيرة
debut = messages[:2]
fin = messages[-3:]
milieu = messages[2:-3]
resume = client.chat.completions.create(
model="gpt-4o-mini",
messages=[
{"role": "system", "content": "لخّص هذه الخطوات في فقرة قصيرة تحتفظ بالوقائع والمصادر."},
{"role": "user", "content": json.dumps(milieu, ensure_ascii=False)},
],
).choices[0].message.content
return debut + [{"role": "system", "content": f"ملخّص الخطوات السابقة: {resume}"}] + fin

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

ما لا يجب تلخيصه

بعض العناصر تفقد قيمتها إذا لُخِّصت:

  • الوسائط الفعليّة: lire_page("https://x.com/y") مع مقتطف. الرابط قد نحتاجه في الاستشهاد النهائيّ.
  • الأرقام المذكورة: «الإصدار 16.2»، «التاريخ 2025-03-10». إبقاؤها حرفيًّا يمنع تحريفًا يخترق الجواب النهائيّ.
  • الحقائق المكرَّرة من مصدرَين: هذه تؤكّد المعلومة؛ التلخيص قد يُبقي مصدرًا واحدًا فيقلّ اليقين.

قاعدة: لخّص الاستدلال، احتفظ بالوقائع.

الذاكرة الطويلة: بين الاستفسارات

ذاكرة العمل تُنسى بمجرّد انتهاء الحلقة. لكن أحيانًا نريد أن نحفظ:

  • تفضيلات المستخدم: «أريد المذكّرات باللغة العربيّة، بمصادر عدد أدناها ثلاثة».
  • وقائع تكرّرت: «Postgres 16 معتمَد لدى الفريق منذ مارس 2025».
  • أخطاء سابقة يجب تجنّبها: «المصدر blog-x.com منشورات مُعاد نسخها؛ لا يُعتمَد».

يُنفَّذ هذا بمخزن متّجهيّ (Chroma، Qdrant، pgvector). عند بدء استفسار جديد، نستفسر الذاكرة الطويلة بسؤال المستخدم، ونحقن أعلى ثلاث نتائج في تعليمة النظام:

def preparer_contexte(question, memoire_longue):
faits = memoire_longue.search(question, k=3, seuil=0.7)
if not faits:
return SYSTEME_BASE
contexte = "\n".join(f"- {f.text}" for f in faits)
return SYSTEME_BASE + f"\n\nمعلومات مسبقة قد تفيدك:\n{contexte}"

النقطة الحاسمة: العتبة (0.7 هنا). دون عتبة، نحقن كلّ شيء وترتفع الفاتورة؛ عتبة عالية جدًّا (0.9) تجعل الذاكرة الطويلة عديمة الأثر. اضبطها على جدول تقييم مثلًا.

سياسة النسيان

ذاكرة تنمو بلا حدّ تصير مصدر ضجيج، لا مساعدة. يجب سياسة نسيان:

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

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

الخيط الأحمر: ذاكرة الوكيل

وكيل البحث الآن يعمل بذاكرتَين:

  • عمل: قائمة الرسائل داخل الحلقة، مع تلخيص كلّ أربع خطوات.
  • طويلة: مخزن متّجهيّ يضمّ وقائع مثبَّتة من مذكّرات سابقة (Postgres 16، سياسات الفريق، بائعو بيانات معتمَدون). عتبة 0.72، أعلى ثلاث نتائج.

نتيجة: على سؤال «هل يدعم Postgres 16 التقسيم؟» ثاني مرّة بعد أسبوع، الوكيل يقفز مباشرة إلى الجواب من الذاكرة الطويلة بلا استدعاء recherche_web، مع تحقّق قصير من base_interne لتأكيد استمرار السياسة. الاستهلاك يهبط من 4200 رمزًا إلى 900 رمز.

الفخّ: الذاكرة الطويلة كملجأ للأخطاء

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

اقتصد في السياق، لا تُخزِّن كلّ شيء

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

الخلاصة

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