Skip to main content
الجلسة تتذكر محادثة واحدة. أما الذاكرة فهي ما يحتفظ به الوكيل عبر المحادثات: تفضيلات المستخدم، وحقائق أُخبر بها، وقرارات اتُّخذت الأسبوع الماضي. تعطي الوكيل خانة ذاكرة (memory slot) مسمّاة واحدة أو أكثر؛ كل خانة تخزّن عناصر نصية قصيرة عبر مزوّد، ويحدّد مفتاحَها نطاقٌ (scope) (ذاكرة واحدة للجميع، أو واحدة لكل جلسة، أو واحدة لكل مستخدم). لكل خانة، تقوم createAgent({ memory }) بما يلي:
  1. تسترجع في بداية كل تشغيل (send()، stream()، كل دورة في جلسة): عند أول استدعاء للنموذج في التشغيل، تُدرَج أحدث العناصر في موجّه النظام داخل كتلة <memory name="...">. تبقى الكتلة حتى نهاية التشغيل ولا تُحفَظ في سجل محادثة الجلسة.
  2. تعطي النموذج أداة remember_<name> (مُدخَلها { text }) لتخزين عنصر جديد، وأداة recall_<name> (مُدخَلها { query?, limit? }) للبحث في الخانة، الأحدث أولًا.

الذاكرة في الكود

ينتهي موجّه النظام في المحادثة الثانية بما يلي:

النطاقات

يقرأ التشغيل ويكتب العناصر التابعة لمفتاح النطاق الخاص به: ترى دالة النطاق sessionId الخاص بالتشغيل وmetadata الممرَّرة إلى send() / stream()، فتستطيع الاحتفاظ بذاكرة واحدة لكل مستخدم عبر جميع جلساته:
عندما لا يكون للتشغيل مفتاح نطاق (خانة 'session' في send() دون sessionId، أو دالة نطاق تُرجع undefined)، تُعطَّل الخانة في ذلك التشغيل: لا يُسترجَع شيء ولا تُعرَض أدواتها على النموذج.

خيارات الإعداد

تُرجع defineMemory(options) كائن MemorySlot: الخانة ذات expose: { remember: false } للقراءة فقط بالنسبة إلى النموذج: تملؤها أنت من الكود بـ provider.add(scopeKey, { text }).

المزوّدون

تحتفظ جميعها بما لا يزيد على maxItems عنصرًا لكل مفتاح نطاق (الافتراضي 1000؛ وإضافة عنصر زائد تحذف الأقدم) وتطابق query بالكلمات المفتاحية: يطابق العنصر إذا احتوى على إحدى كلمات الاستعلام المؤلفة من ثلاثة أحرف أو أكثر، دون تمييز بين الأحرف الكبيرة والصغيرة.

SQLite

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

اختبار الذاكرة

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

القيود

  • الاسترجاع وأدوات الذاكرة تنطبق على تشغيلات الوكيل نفسه، لا على وكلائه الفرعيين. وعندما يواصل agent.approvals.resolve() تشغيلًا بعد توقف بانتظار موافقة، تبقى الكتلة المسترجَعة في الموجّه لكن أدوات الذاكرة لا تُعرَض في ما بقي من ذلك التشغيل.
  • مجلد memory/ في مجلد الوكيل جزء من الوكيل: راجع مجلدات الوكلاء.