Sessions and memory

مدیریت نشست

OpenClaw گفت‌وگوها را در نشست‌ها سازمان‌دهی می‌کند. هر پیام بر اساس مبدأ آن به یک نشست هدایت می‌شود -- پیام‌های مستقیم، چت‌های گروهی، کارهای Cron و غیره.

پیام‌ها چگونه هدایت می‌شوند

منبع رفتار
پیام‌های مستقیم به‌طور پیش‌فرض نشست مشترک
چت‌های گروهی جداشده برای هر گروه
اتاق‌ها/کانال‌ها جداشده برای هر اتاق
کارهای Cron نشست تازه برای هر اجرا
Webhookها جداشده برای هر هوک

جداسازی DM

به‌طور پیش‌فرض، همه DMها برای حفظ پیوستگی یک نشست مشترک دارند. این برای راه‌اندازی‌های تک‌کاربره مناسب است.

راه‌حل:

{
  session: {
    dmScope: "per-channel-peer", // isolate by channel + sender
  },
}

گزینه‌های دیگر:

  • main (پیش‌فرض) -- همه DMها یک نشست مشترک دارند.
  • per-peer -- جداسازی بر اساس فرستنده (در سراسر کانال‌ها).
  • per-channel-peer -- جداسازی بر اساس کانال + فرستنده (توصیه‌شده).
  • per-account-channel-peer -- جداسازی بر اساس حساب + کانال + فرستنده.

داک کردن کانال‌های پیوندخورده

فرمان‌های داک به کاربر اجازه می‌دهند مسیر پاسخ نشست فعلی چت مستقیم را بدون شروع نشست جدید به کانال پیوندخورده دیگری منتقل کند. برای نمونه‌ها، پیکربندی و عیب‌یابی، داک کردن کانال را ببینید.

راه‌اندازی خود را با openclaw security audit تأیید کنید.

چرخه عمر نشست

نشست‌ها تا زمان انقضا دوباره استفاده می‌شوند:

  • بازنشانی روزانه (پیش‌فرض) -- نشست جدید در ساعت 4:00 بامداد به‌وقت محلی روی میزبان Gateway. تازگی روزانه بر اساس زمان شروع sessionId فعلی است، نه بر اساس نوشتن‌های بعدی فراداده.
  • بازنشانی بیکاری (اختیاری) -- نشست جدید پس از یک دوره عدم فعالیت. مقدار session.reset.idleMinutes را تنظیم کنید. تازگی بیکاری بر اساس آخرین تعامل واقعی کاربر/کانال است، بنابراین رویدادهای سیستمی Heartbeat، Cron و exec نشست را زنده نگه نمی‌دارند.
  • بازنشانی دستی -- در چت /new یا /reset را تایپ کنید. /new <model> همچنین مدل را تغییر می‌دهد.

وقتی هر دو بازنشانی روزانه و بیکاری پیکربندی شده باشند، هرکدام زودتر منقضی شود اعمال می‌شود. نوبت‌های رویداد سیستمی Heartbeat، Cron، exec و موارد دیگر ممکن است فراداده نشست را بنویسند، اما این نوشتن‌ها تازگی بازنشانی روزانه یا بیکاری را تمدید نمی‌کنند. وقتی بازنشانی نشست را جابه‌جا می‌کند، اعلان‌های رویداد سیستمی در صف برای نشست قدیمی دور انداخته می‌شوند تا به‌روزرسانی‌های پس‌زمینه قدیمی به نخستین پرامپت در نشست جدید اضافه نشوند.

نشست‌هایی که یک نشست CLI فعال متعلق به ارائه‌دهنده دارند با پیش‌فرض روزانه ضمنی قطع نمی‌شوند. وقتی این نشست‌ها باید بر اساس زمان‌سنج منقضی شوند، از /reset استفاده کنید یا session.reset را صراحتاً پیکربندی کنید.

وضعیت کجا ذخیره می‌شود

همه وضعیت نشست متعلق به Gateway است. کلاینت‌های UI از Gateway داده‌های نشست را پرس‌وجو می‌کنند.

  • ذخیره‌گاه: ~/.openclaw/agents/<agentId>/sessions/sessions.json
  • رونوشت‌ها: ~/.openclaw/agents/<agentId>/sessions/<sessionId>.jsonl

sessions.json مهرزمان‌های چرخه عمر جداگانه نگه می‌دارد:

  • sessionStartedAt: زمانی که sessionId فعلی آغاز شد؛ بازنشانی روزانه از این استفاده می‌کند.
  • lastInteractionAt: آخرین تعامل کاربر/کانال که طول عمر بیکاری را تمدید می‌کند.
  • updatedAt: آخرین جهش ردیف ذخیره‌گاه؛ برای فهرست کردن و هرس مفید است، اما مرجع معتبر برای تازگی بازنشانی روزانه/بیکاری نیست.

ردیف‌های قدیمی‌تر بدون sessionStartedAt، در صورت وجود، از سرآیند نشست JSONL رونوشت حل می‌شوند. اگر یک ردیف قدیمی‌تر همچنین lastInteractionAt نداشته باشد، تازگی بیکاری به زمان شروع همان نشست برمی‌گردد، نه به نوشتن‌های حسابداری بعدی.

نگهداری نشست

OpenClaw به‌طور خودکار اندازه ذخیره‌سازی نشست را در طول زمان محدود می‌کند. به‌طور پیش‌فرض، در حالت warn اجرا می‌شود (گزارش می‌دهد چه چیزی پاک می‌شد). برای پاک‌سازی خودکار، session.maintenance.mode را روی "enforce" تنظیم کنید:

{
  session: {
    maintenance: {
      mode: "enforce",
      pruneAfter: "30d",
      maxEntries: 500,
    },
  },
}

برای محدودیت‌های maxEntries در اندازه تولید، نوشتن‌های زمان اجرای Gateway از یک بافر کوچک high-water استفاده می‌کنند و در دسته‌ها دوباره تا سقف پیکربندی‌شده پاک‌سازی می‌کنند. خواندن‌های ذخیره‌گاه نشست هنگام راه‌اندازی Gateway ورودی‌ها را هرس یا محدود نمی‌کنند. این کار از اجرای پاک‌سازی کامل ذخیره‌گاه در هر راه‌اندازی یا نشست Cron جداشده جلوگیری می‌کند. openclaw sessions cleanup --enforce سقف را فوراً اعمال می‌کند.

نگهداری، اشاره‌گرهای بادوام گفت‌وگوی خارجی، از جمله نشست‌های گروهی و نشست‌های چت با دامنه رشته را حفظ می‌کند، درحالی‌که همچنان اجازه می‌دهد ورودی‌های مصنوعی Cron، هوک، Heartbeat، ACP و زیرعامل‌ها به‌مرور منقضی شوند.

اگر قبلاً از جداسازی پیام مستقیم استفاده کرده‌اید و بعداً session.dmScope را به main برگردانده‌اید، ردیف‌های DM قدیمی کلیدگذاری‌شده با همتا را با openclaw sessions cleanup --dry-run --fix-dm-scope پیش‌نمایش کنید. اعمال همان پرچم آن ردیف‌های قدیمی direct-DM را بازنشسته می‌کند و رونوشت‌هایشان را به‌عنوان آرشیوهای حذف‌شده نگه می‌دارد.

با openclaw sessions cleanup --dry-run پیش‌نمایش کنید.

بررسی نشست‌ها

  • openclaw status -- مسیر ذخیره‌گاه نشست و فعالیت اخیر.
  • openclaw sessions --json -- همه نشست‌ها (با --active <minutes> فیلتر کنید).
  • /status در چت -- میزان استفاده از زمینه، مدل و کلیدهای تغییر وضعیت.
  • /context list -- آنچه در پرامپت سیستمی است.

مطالعه بیشتر

مرتبط