createAgent({ memory }) بما يلي:
- تسترجع في بداية كل تشغيل (
send()،stream()، كل دورة في جلسة): عند أول استدعاء للنموذج في التشغيل، تُدرَج أحدث العناصر في موجّه النظام داخل كتلة<memory name="...">. تبقى الكتلة حتى نهاية التشغيل ولا تُحفَظ في سجل محادثة الجلسة. - تعطي النموذج أداة
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/في مجلد الوكيل جزء من الوكيل: راجع مجلدات الوكلاء.