Sessions and memory

Quản lý phiên

OpenClaw sắp xếp các cuộc trò chuyện thành phiên. Mỗi tin nhắn được định tuyến đến một phiên dựa trên nơi nó xuất phát -- DM, cuộc trò chuyện nhóm, cron job, v.v.

Cách tin nhắn được định tuyến

Nguồn Hành vi
Tin nhắn trực tiếp Theo mặc định dùng chung phiên
Cuộc trò chuyện nhóm Tách biệt theo từng nhóm
Phòng/kênh Tách biệt theo từng phòng
Cron job Phiên mới cho mỗi lần chạy
Webhook Tách biệt theo từng hook

Tách biệt DM

Theo mặc định, tất cả DM dùng chung một phiên để duy trì tính liên tục. Điều này phù hợp với các thiết lập một người dùng.

Cách khắc phục:

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

Các tùy chọn khác:

  • main (mặc định) -- tất cả DM dùng chung một phiên.
  • per-peer -- tách biệt theo người gửi (trên các kênh).
  • per-channel-peer -- tách biệt theo kênh + người gửi (khuyến nghị).
  • per-account-channel-peer -- tách biệt theo tài khoản + kênh + người gửi.

Gắn kênh đã liên kết

Các lệnh dock cho phép người dùng chuyển tuyến trả lời của phiên trò chuyện trực tiếp hiện tại sang một kênh đã liên kết khác mà không bắt đầu phiên mới. Xem Gắn kênh để biết ví dụ, cấu hình và cách khắc phục sự cố.

Xác minh thiết lập của bạn bằng openclaw security audit.

Vòng đời phiên

Phiên được tái sử dụng cho đến khi hết hạn:

  • Đặt lại hằng ngày (mặc định) -- phiên mới lúc 4:00 sáng theo giờ địa phương trên máy chủ gateway. Độ mới hằng ngày dựa trên thời điểm sessionId hiện tại bắt đầu, không dựa trên các lần ghi siêu dữ liệu sau đó.
  • Đặt lại khi nhàn rỗi (tùy chọn) -- phiên mới sau một khoảng thời gian không hoạt động. Đặt session.reset.idleMinutes. Độ mới khi nhàn rỗi dựa trên lần tương tác thực gần nhất của người dùng/kênh, nên các sự kiện hệ thống heartbeat, cron và exec không giữ phiên tiếp tục hoạt động.
  • Đặt lại thủ công -- nhập /new hoặc /reset trong chat. /new <model> cũng chuyển đổi model.

Khi cả đặt lại hằng ngày và đặt lại khi nhàn rỗi đều được cấu hình, cơ chế nào hết hạn trước sẽ được áp dụng. Heartbeat, cron, exec và các lượt sự kiện hệ thống khác có thể ghi siêu dữ liệu phiên, nhưng các lần ghi đó không kéo dài độ mới của đặt lại hằng ngày hoặc khi nhàn rỗi. Khi một lần đặt lại chuyển sang phiên mới, các thông báo sự kiện hệ thống đang xếp hàng cho phiên cũ sẽ bị loại bỏ để các cập nhật nền đã cũ không được thêm vào đầu prompt đầu tiên trong phiên mới.

Các phiên có một phiên CLI đang hoạt động do provider sở hữu sẽ không bị cắt bởi mặc định hằng ngày ngầm định. Dùng /reset hoặc cấu hình rõ ràng session.reset khi những phiên đó cần hết hạn theo bộ hẹn giờ.

Nơi lưu trạng thái

Tất cả trạng thái phiên thuộc sở hữu của gateway. Các client UI truy vấn gateway để lấy dữ liệu phiên.

  • Kho lưu trữ: ~/.openclaw/agents/<agentId>/sessions/sessions.json
  • Bản ghi cuộc trò chuyện: ~/.openclaw/agents/<agentId>/sessions/<sessionId>.jsonl

sessions.json giữ các dấu thời gian vòng đời riêng biệt:

  • sessionStartedAt: thời điểm sessionId hiện tại bắt đầu; đặt lại hằng ngày dùng giá trị này.
  • lastInteractionAt: lần tương tác người dùng/kênh gần nhất kéo dài thời gian sống khi nhàn rỗi.
  • updatedAt: lần thay đổi hàng trong kho lưu trữ gần nhất; hữu ích cho việc liệt kê và cắt tỉa, nhưng không có thẩm quyền đối với độ mới của đặt lại hằng ngày/khi nhàn rỗi.

Các hàng cũ không có sessionStartedAt được phân giải từ header phiên JSONL trong bản ghi cuộc trò chuyện khi có sẵn. Nếu một hàng cũ cũng thiếu lastInteractionAt, độ mới khi nhàn rỗi sẽ quay về thời điểm bắt đầu phiên đó, không phải các lần ghi sổ sách sau đó.

Bảo trì phiên

OpenClaw tự động giới hạn dung lượng lưu trữ phiên theo thời gian. Theo mặc định, nó chạy ở chế độ warn (báo cáo những gì sẽ được dọn dẹp). Đặt session.maintenance.mode thành "enforce" để tự động dọn dẹp:

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

Đối với các giới hạn maxEntries ở quy mô production, các lần ghi của runtime Gateway dùng một bộ đệm high-water nhỏ và dọn lại về mức trần đã cấu hình theo lô. Các lần đọc kho lưu trữ phiên không cắt tỉa hoặc giới hạn mục trong quá trình khởi động Gateway. Điều này tránh chạy dọn dẹp toàn bộ kho lưu trữ ở mỗi lần khởi động hoặc phiên cron tách biệt. openclaw sessions cleanup --enforce áp dụng giới hạn ngay lập tức.

Bảo trì giữ lại các con trỏ cuộc trò chuyện bên ngoài bền vững, bao gồm phiên nhóm và phiên chat theo phạm vi luồng, trong khi vẫn cho phép các mục cron, hook, heartbeat, ACP và sub-agent tổng hợp cũ đi và bị loại bỏ.

Nếu trước đây bạn đã dùng tách biệt tin nhắn trực tiếp rồi sau đó đưa session.dmScope về main, hãy xem trước các hàng DM cũ theo khóa peer bằng openclaw sessions cleanup --dry-run --fix-dm-scope. Áp dụng cùng cờ đó sẽ ngừng dùng các hàng direct-DM cũ và giữ bản ghi cuộc trò chuyện của chúng dưới dạng kho lưu trữ đã xóa.

Xem trước bằng openclaw sessions cleanup --dry-run.

Kiểm tra phiên

  • openclaw status -- đường dẫn kho lưu trữ phiên và hoạt động gần đây.
  • openclaw sessions --json -- tất cả phiên (lọc bằng --active <minutes>).
  • /status trong chat -- mức sử dụng ngữ cảnh, model và các công tắc.
  • /context list -- nội dung có trong system prompt.

Đọc thêm

Liên quan