Chuyển đến nội dung chính
OpenClaw tổ chức các cuộc hội thoại thành phiên. Mỗi tin nhắn được định tuyến đến một phiên dựa trên nguồn gửi đến — tin nhắn trực tiếp, cuộc trò chuyện nhóm, tác vụ Cron, v.v.

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

NguồnHành vi
Tin nhắn trực tiếpMặc định dùng phiên dùng chung
Cuộc trò chuyện nhómCô lập theo từng nhóm
Phòng/kênhCô lập theo từng phòng
Tác vụ CronPhiên mới cho mỗi lần chạy
WebhookCô lập theo từng hook

Cô lập DM

Theo mặc định, tất cả DM dùng chung một phiên để duy trì tính liên tục. Cách này phù hợp cho thiết lập một người dùng.
Nếu nhiều người có thể nhắn tin cho agent của bạn, hãy bật cô lập DM. Nếu không, tất cả người dùng sẽ dùng chung cùng ngữ cảnh hội thoại — tin nhắn riêng của Alice sẽ hiển thị với Bob.
Cách sửa:
{
  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 — cô lập theo người gửi (trên các kênh).
  • per-channel-peer — cô lập theo kênh + người gửi (khuyến nghị).
  • per-account-channel-peer — cô lập theo tài khoản + kênh + người gửi.
Nếu cùng một người liên hệ với bạn từ nhiều kênh, hãy dùng session.identityLinks để liên kết các danh tính của họ để họ dùng chung một phiên.

Dock các 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 Dock 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

Các 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 rảnh (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 rảnh dựa trên lần tương tác thực gần nhất của người dùng/kênh, vì vậy các sự kiện hệ thống Heartbeat, Cron và exec không giữ phiên sống.
  • Đặt lại thủ công — nhập /new hoặc /reset trong trò chuyện. /new <model> cũng chuyển đổi mô hình.
Khi cả đặt lại hằng ngày và đặt lại khi rảnh đều được cấu hình, điều kiện nào hết hạn trước sẽ được áp dụng. Các lượt sự kiện hệ thống Heartbeat, Cron, exec và 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 đặt lại khi rảnh. 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 đã 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ó phiên CLI do provider sở hữu đang hoạt động 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ờ.

Trạng thái nằm ở đâu

Toàn bộ trạng thái phiên thuộc sở hữu của Gateway. Các máy khách 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 hội thoại: ~/.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 lượng rảnh.
  • updatedAt: lần đột biến 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 rảnh.
Các hàng cũ không có sessionStartedAt được phân giải từ tiêu đề phiên JSONL của bản ghi hội thoại khi có. Nếu một hàng cũ cũng thiếu lastInteractionAt, độ mới khi rảnh sẽ dùng dự phòng là 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ế độ enforce và áp dụng dọn dẹp trong quá trình bảo trì. Đặt session.maintenance.mode thành "warn" để báo cáo những gì sẽ được dọn dẹp mà không thay đổi kho lưu trữ/tệp:
{
  session: {
    maintenance: {
      mode: "enforce",
      pruneAfter: "30d",
      maxEntries: 500,
    },
  },
}
Đối với các giới hạn maxEntries cỡ môi trường sản xuất, các lần ghi runtime của Gateway dùng một vùng đệm ngưỡng cao 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 số mục trong quá trình khởi động Gateway. Cách 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 cô lập. openclaw sessions cleanup --enforce áp dụng mức trần ngay lập tức. Các phiên thăm dò lần chạy mô hình của Gateway mặc định có thời gian sống ngắn. Các hàng khớp với khóa tường minh nghiêm ngặt như agent:*:explicit:model-run-<uuid> dùng thời hạn lưu giữ cố định 24h, nhưng việc dọn dẹp được kích hoạt theo áp lực: nó chỉ xóa các hàng thăm dò đã cũ khi đạt đến áp lực bảo trì/giới hạn số mục phiên. Khi dọn dẹp lần chạy mô hình chạy, nó chạy trước ngưỡng tuổi của mục đã cũ rộng hơn và giới hạn số mục. Các phiên trực tiếp, nhóm, luồng, Cron, hook, Heartbeat, ACP và sub-agent thông thường không kế thừa thời hạn lưu giữ 24 giờ này. Bảo trì giữ lại các con trỏ hội thoại bên ngoài bền vững, bao gồm các phiên nhóm và phiên trò chuyện 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 hết tuổi. Nếu trước đây bạn dùng cô lập tin nhắn trực tiếp và sau đó đưa session.dmScope về main, hãy xem trước các hàng DM cũ dùng khóa peer bằng openclaw sessions cleanup --dry-run --fix-dm-scope. Áp dụng cùng cờ đó sẽ cho nghỉ các hàng DM trực tiếp cũ đó và giữ bản ghi hội thoại 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 trò chuyện — mức sử dụng ngữ cảnh, mô hình và các nút bật/tắt.
  • /context list — nội dung trong system prompt.

Đọc thêm

Liên quan