Sessions and memory

إدارة الجلسات

يوجّه OpenClaw كل رسالة واردة إلى جلسة بناءً على مصدرها: الرسائل الخاصة، والمحادثات الجماعية، ومهام Cron، وما إلى ذلك. يمتلك Gateway حالة الجلسة بالكامل؛ وتستعلم عملاء واجهة المستخدم من Gateway عن بيانات الجلسة.

كيفية توجيه الرسائل

المصدر السلوك
الرسائل المباشرة جلسة مشتركة افتراضيًا
المحادثات الجماعية معزولة لكل مجموعة
الغرف/القنوات معزولة لكل غرفة
مهام Cron جلسة جديدة لكل تشغيل
Webhooks معزولة لكل خطاف

عزل الرسائل الخاصة

افتراضيًا، تشترك جميع الرسائل الخاصة في جلسة واحدة لضمان الاستمرارية، وهو أمر مناسب للإعدادات ذات المستخدم الواحد.

json5
{  session: {    dmScope: "per-channel-peer", // العزل حسب القناة + المرسل  },}

خيارات session.dmScope:

القيمة السلوك
main (الافتراضي) تشترك جميع الرسائل الخاصة في جلسة واحدة
per-peer العزل حسب المرسل، عبر القنوات
per-channel-peer العزل حسب القناة + المرسل (موصى به)
per-account-channel-peer العزل حسب الحساب + القناة + المرسل

إرساء القنوات المرتبطة

تنقل أوامر الإرساء مسار رد جلسة المحادثة المباشرة الحالية إلى قناة مرتبطة أخرى من دون بدء جلسة جديدة. راجع إرساء القنوات للاطلاع على الأمثلة والإعداد واستكشاف الأخطاء وإصلاحها.

تحقق من إعدادك باستخدام openclaw security audit.

دورة حياة الجلسة

يُعاد استخدام الجلسات حتى تنتهي صلاحيتها وفقًا لـ session.reset:

  • إعادة الضبط اليومية (الافتراضي mode: "daily") - جلسة جديدة عند ساعة محلية مضبوطة (session.reset.atHour، الافتراضي 4، 0-23) على مضيف Gateway. تعتمد الحداثة اليومية على وقت بدء sessionId الحالي، لا على عمليات كتابة بيانات التعريف اللاحقة.
  • إعادة الضبط عند الخمول (mode: "idle") - جلسة جديدة بعد session.reset.idleMinutes من عدم النشاط. تعتمد حداثة الخمول على آخر تفاعل فعلي للمستخدم/القناة، ولذلك لا تُبقي أحداث نظام Heartbeat وCron والتنفيذ الجلسة نشطة.
  • إعادة الضبط اليدوية - اكتب /new أو /reset في المحادثة. ويؤدي /new <model> أيضًا إلى تبديل النموذج.

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

لا تُقطع الجلسات التي تتضمن جلسة CLI نشطة مملوكة لمزوّد بواسطة الإعداد اليومي الافتراضي الضمني. استخدم /reset أو اضبط session.reset صراحةً عندما ينبغي أن تنتهي صلاحية تلك الجلسات وفق مؤقت.

تجاوز الإعداد الافتراضي حسب نوع المحادثة أو القناة:

json5
{  session: {    reset: { mode: "daily", atHour: 4 },    resetByType: {      group: { mode: "idle", idleMinutes: 120 },      thread: { mode: "daily", atHour: 6 },    },    resetByChannel: {      discord: { mode: "idle", idleMinutes: 10080 },    },  },}

يدعم resetByType القيم direct (الاسم البديل القديم dm) وgroup وthread. لا يزال session.idleMinutes القديم في المستوى الأعلى يعمل بوصفه اسمًا بديلًا للتوافق لإعداد افتراضي لوضع الخمول عندما لا تكون كتلة session.reset/resetByType مضبوطة.

مكان تخزين الحالة

  • صفوف جلسات وقت التشغيل: ~/.openclaw/agents/<agentId>/agent/openclaw-agent.sqlite
  • ملفات نصوص المحادثات المؤرشفة: ~/.openclaw/agents/<agentId>/sessions/
  • مصدر ترحيل الصفوف القديمة: ~/.openclaw/agents/<agentId>/sessions/sessions.json

تحتفظ صفوف الجلسات في قاعدة بيانات SQLite الخاصة بكل وكيل بطوابع زمنية منفصلة لدورة الحياة:

  • sessionStartedAt: وقت بدء sessionId الحالي؛ تستخدمه إعادة الضبط اليومية.
  • lastInteractionAt: آخر تفاعل للمستخدم/القناة يمدد مدة الخمول.
  • updatedAt: آخر تعديل لصف المخزن؛ مفيد لإعداد القوائم والتنظيف، لكنه ليس المرجع المعتمد لحداثة إعادة الضبط اليومية/عند الخمول.

أثناء الترحيل من التثبيتات الأقدم، يستورد بدء تشغيل Gateway وopenclaw doctor --fix صفوف sessions.json القديمة وسجل نصوص المحادثات النشط بتنسيق JSONL إلى SQLite تلقائيًا. تُستخلص الصفوف التي لا تحتوي على sessionStartedAt من ترويسة جلسة نص المحادثة القديم بتنسيق JSONL عند توفرها. وإذا كان صف أقدم يفتقر أيضًا إلى lastInteractionAt، فتعود حداثة الخمول إلى وقت بدء تلك الجلسة، لا إلى عمليات كتابة مسك الدفاتر اللاحقة. استخدم openclaw doctor --session-sqlite inspect --session-sqlite-all-agents وتسلسل ترحيل Doctor عندما تريد فحصًا صريحًا أو دليل تحقق.

صيانة الجلسات

يحدّ OpenClaw من تخزين الجلسات بمرور الوقت عبر session.maintenance، وتظهر القيم الافتراضية أدناه:

json5
{  session: {    maintenance: {      mode: "enforce", // يطبّق "enforce" التنظيف؛ ويقتصر "warn" على الإبلاغ      pruneAfter: "30d",      maxEntries: 500,    },  },}

بالنسبة إلى حدود maxEntries بحجم بيئات الإنتاج، تستخدم عمليات كتابة Gateway وقت التشغيل مخزنًا مؤقتًا صغيرًا لعلامة الحد الأعلى، ثم تنظّف على دفعات وصولًا إلى الحد الأقصى المضبوط. لا تنظّف قراءات مخزن الجلسات الإدخالات ولا تفرض حدًا أقصى عليها أثناء بدء تشغيل Gateway، ولذلك لا تتحمل جلسات بدء التشغيل وجلسات Cron المعزولة كلفة تنظيف المخزن بالكامل. يطبّق openclaw sessions cleanup --enforce الحد الأقصى فورًا.

جلسات فحص تشغيل النموذج في Gateway قصيرة العمر افتراضيًا. تستخدم الصفوف المطابقة لـ agent:*:explicit:model-run-<uuid> مدة احتفاظ ثابتة قدرها 24h، لكن التنظيف مشروط بالضغط: فلا يزيل صفوف الفحص القديمة إلا عند بلوغ ضغط صيانة/حد إدخالات الجلسات، ويُشغّل قبل حد العمر الأوسع للإدخالات القديمة وقبل حد الإدخالات. لا ترث جلسات الرسائل المباشرة والمجموعات والسلاسل وCron والخطافات وHeartbeat وACP والوكلاء الفرعيين العادية مدة الاحتفاظ هذه البالغة 24h.

تحافظ الصيانة على مؤشرات المحادثات الخارجية الدائمة، بما في ذلك جلسات المجموعات وجلسات المحادثة ذات نطاق السلسلة، مع السماح في الوقت نفسه لإدخالات Cron والخطافات وHeartbeat وACP والوكلاء الفرعيين الاصطناعية بانتهاء عمرها.

إذا سبق أن استخدمت عزل الرسائل الخاصة ثم أعدت session.dmScope لاحقًا إلى main، فعاين صفوف الرسائل الخاصة القديمة ذات المفاتيح المرتبطة بالنظير باستخدام openclaw sessions cleanup --dry-run --fix-dm-scope. يؤدي تطبيق العلامة نفسها إلى إيقاف صفوف الرسائل الخاصة المباشرة القديمة مع الاحتفاظ بنصوص محادثاتها كأرشيفات محذوفة.

عاين أي عملية صيانة باستخدام openclaw sessions cleanup --dry-run.

فحص الجلسات

الأمر ما يعرضه
openclaw status مسار مخزن الجلسات والنشاط الأخير
openclaw sessions --json جميع الجلسات (صفِّ باستخدام --active <minutes>)
/status في المحادثة استخدام السياق والنموذج ومفاتيح التبديل
/context list محتويات موجّه النظام

قراءة إضافية

ذو صلة

Was this useful?
On this page

On this page