Quản lý Phiên
OpenClaw coi một phiên trò chuyện trực tiếp cho mỗi agent là chính. Các cuộc trò chuyện trực tiếp được gộp lại thànhagent:<agentId>:<mainKey> (mặc định là main), trong khi các cuộc trò chuyện nhóm/kênh có khóa riêng. session.mainKey được tôn trọng.
Sử dụng session.dmScope để kiểm soát cách tin nhắn trực tiếp được nhóm:
main(mặc định): tất cả các tin nhắn trực tiếp chia sẻ phiên chính để liên tục.per-peer: cô lập theo id người gửi qua các kênh.per-channel-peer: cô lập theo kênh + người gửi (khuyến nghị cho hộp thư nhiều người dùng).per-account-channel-peer: cô lập theo tài khoản + kênh + người gửi (khuyến nghị cho hộp thư nhiều tài khoản). Sử dụngsession.identityLinksđể ánh xạ id người gửi có tiền tố nhà cung cấp thành một danh tính chuẩn để cùng một người chia sẻ một phiên DM qua các kênh khi sử dụngper-peer,per-channel-peer, hoặcper-account-channel-peer.
Chế độ DM an toàn (khuyến nghị cho thiết lập nhiều người dùng)
Cảnh báo Bảo mật: Nếu agent của bạn có thể nhận DM từ nhiều người, bạn nên cân nhắc mạnh mẽ việc kích hoạt chế độ DM an toàn. Nếu không, tất cả người dùng sẽ chia sẻ cùng một ngữ cảnh cuộc trò chuyện, có thể làm rò rỉ thông tin riêng tư giữa các người dùng.Ví dụ về vấn đề với cài đặt mặc định:
- Alice (
<SENDER_A>) nhắn tin cho agent của bạn về một chủ đề riêng tư (ví dụ, một cuộc hẹn y tế) - Bob (
<SENDER_B>) nhắn tin cho agent của bạn hỏi “Chúng ta đã nói về điều gì?” - Vì cả hai DM chia sẻ cùng một phiên, mô hình có thể trả lời Bob bằng ngữ cảnh trước đó của Alice.
dmScope để cô lập các phiên theo người dùng:
- Bạn có sự chấp thuận ghép đôi cho nhiều hơn một người gửi
- Bạn sử dụng danh sách cho phép DM với nhiều mục
- Bạn đặt
dmPolicy: "open" - Nhiều số điện thoại hoặc tài khoản có thể nhắn tin cho agent của bạn
- Mặc định là
dmScope: "main"để liên tục (tất cả DM chia sẻ phiên chính). Điều này phù hợp cho thiết lập một người dùng. - CLI cục bộ ghi
session.dmScope: "per-channel-peer"mặc định khi chưa được đặt (giá trị rõ ràng hiện có được giữ nguyên). - Đối với hộp thư nhiều tài khoản trên cùng một kênh, ưu tiên
per-account-channel-peer. - Nếu cùng một người liên hệ với bạn trên nhiều kênh, sử dụng
session.identityLinksđể gộp các phiên DM của họ thành một danh tính chuẩn. - Bạn có thể xác minh cài đặt DM của mình với
openclaw security audit(xem bảo mật).
Gateway là nguồn sự thật
Tất cả trạng thái phiên được sở hữu bởi gateway (OpenClaw “chính”). Các khách hàng UI (ứng dụng macOS, WebChat, v.v.) phải truy vấn gateway để lấy danh sách phiên và số lượng token thay vì đọc các tệp cục bộ.- Trong chế độ từ xa, kho lưu trữ phiên bạn quan tâm nằm trên máy chủ gateway từ xa, không phải trên máy Mac của bạn.
- Số lượng token hiển thị trong UI đến từ các trường lưu trữ của gateway (
inputTokens,outputTokens,totalTokens,contextTokens). Các khách hàng không phân tích các bản ghi JSONL để “sửa chữa” tổng số.
Nơi lưu trữ trạng thái
- Trên máy chủ gateway:
- Tệp lưu trữ:
~/.openclaw/agents/<agentId>/sessions/sessions.json(mỗi agent).
- Tệp lưu trữ:
- Bản ghi:
~/.openclaw/agents/<agentId>/sessions/<SessionId>.jsonl(các phiên chủ đề Telegram sử dụng.../<SessionId>-topic-<threadId>.jsonl). - Kho lưu trữ là một bản đồ
sessionKey -> { sessionId, updatedAt, ... }. Xóa các mục là an toàn; chúng được tạo lại khi cần. - Các mục nhóm có thể bao gồm
displayName,channel,subject,room, vàspaceđể gắn nhãn các phiên trong UI. - Các mục phiên bao gồm siêu dữ liệu
origin(nhãn + gợi ý định tuyến) để UI có thể giải thích nguồn gốc của một phiên. - OpenClaw không đọc các thư mục phiên Pi/Tau cũ.
Bảo trì
OpenClaw áp dụng bảo trì kho lưu trữ phiên để giữsessions.json và các bản ghi phiên trong giới hạn theo thời gian.
Mặc định
session.maintenance.mode:warnsession.maintenance.pruneAfter:30dsession.maintenance.maxEntries:500session.maintenance.rotateBytes:10mbsession.maintenance.resetArchiveRetention: mặc định làpruneAfter(30d)session.maintenance.maxDiskBytes: không đặt (vô hiệu hóa)session.maintenance.highWaterBytes: mặc định là80%củamaxDiskByteskhi ngân sách được kích hoạt
Cách hoạt động
Bảo trì chạy trong quá trình ghi kho lưu trữ phiên, và bạn có thể kích hoạt nó theo yêu cầu vớiopenclaw sessions cleanup.
mode: "warn": báo cáo những gì sẽ bị loại bỏ nhưng không thay đổi các mục/bản ghi.mode: "enforce": áp dụng dọn dẹp theo thứ tự này:- loại bỏ các mục cũ hơn
pruneAfter - giới hạn số lượng mục đến
maxEntries(cũ nhất trước) - lưu trữ các tệp bản ghi cho các mục đã bị loại bỏ không còn được tham chiếu
- xóa các bản lưu trữ
*.deleted.<timestamp>và*.reset.<timestamp>cũ theo chính sách lưu trữ - xoay
sessions.jsonkhi vượt quárotateBytes - nếu
maxDiskBytesđược đặt, thực thi ngân sách đĩa hướng tớihighWaterBytes(các hiện vật cũ nhất trước, sau đó là các phiên cũ nhất)
- loại bỏ các mục cũ hơn
Lưu ý về hiệu suất cho các kho lưu trữ lớn
Các kho lưu trữ phiên lớn là phổ biến trong các thiết lập có lưu lượng cao. Công việc bảo trì là công việc trên đường ghi, vì vậy các kho lưu trữ rất lớn có thể tăng độ trễ ghi. Những gì tăng chi phí nhất:- giá trị
session.maintenance.maxEntriesrất cao - cửa sổ
pruneAfterdài giữ lại các mục cũ - nhiều hiện vật bản ghi/lưu trữ trong
~/.openclaw/agents/<agentId>/sessions/ - kích hoạt ngân sách đĩa (
maxDiskBytes) mà không có giới hạn cắt tỉa/hạn chế hợp lý
- sử dụng
mode: "enforce"trong sản xuất để tăng trưởng được giới hạn tự động - đặt cả giới hạn thời gian và số lượng (
pruneAfter+maxEntries), không chỉ một - đặt
maxDiskBytes+highWaterBytescho giới hạn trên cứng trong các triển khai lớn - giữ
highWaterBytesthấp hơn đáng kể so vớimaxDiskBytes(mặc định là 80%) - chạy
openclaw sessions cleanup --dry-run --jsonsau khi thay đổi cấu hình để xác minh tác động dự kiến trước khi thực thi - đối với các phiên hoạt động thường xuyên, truyền
--active-keykhi chạy dọn dẹp thủ công
Ví dụ tùy chỉnh
Sử dụng chính sách thực thi bảo thủ:Cắt tỉa phiên
OpenClaw tự động loại bỏ kết quả công cụ cũ khỏi ngữ cảnh trong bộ nhớ ngay trước khi gọi LLM theo mặc định. Điều này không viết lại lịch sử JSONL. Xem /concepts/session-pruning.Xả bộ nhớ trước khi nén
Khi một phiên gần đến tự động nén, OpenClaw có thể chạy một lượt xả bộ nhớ im lặng nhắc nhở mô hình ghi chú bền vững vào đĩa. Điều này chỉ chạy khi workspace có thể ghi. Xem Memory và Compaction.Ánh xạ phương tiện → khóa phiên
- Các cuộc trò chuyện trực tiếp tuân theo
session.dmScope(mặc định làmain).main:agent:<agentId>:<mainKey>(liên tục qua các thiết bị/kênh).- Nhiều số điện thoại và kênh có thể ánh xạ đến cùng một khóa chính của agent; chúng hoạt động như các phương tiện vào một cuộc trò chuyện.
per-peer:agent:<agentId>:direct:<peerId>.per-channel-peer:agent:<agentId>:<channel>:direct:<peerId>.per-account-channel-peer:agent:<agentId>:<channel>:<accountId>:direct:<peerId>(accountId mặc định làdefault).- Nếu
session.identityLinkskhớp với một id người gửi có tiền tố nhà cung cấp (ví dụtelegram:123), khóa chuẩn thay thế<peerId>để cùng một người chia sẻ một phiên qua các kênh.
- Các cuộc trò chuyện nhóm cô lập trạng thái:
agent:<agentId>:<channel>:group:<id>(phòng/kênh sử dụngagent:<agentId>:<channel>:channel:<id>).- Các chủ đề diễn đàn Telegram thêm
:topic:<threadId>vào id nhóm để cô lập. - Các khóa
group:<id>cũ vẫn được công nhận để di chuyển.
- Các chủ đề diễn đàn Telegram thêm
- Các ngữ cảnh đầu vào có thể vẫn sử dụng
group:<id>; kênh được suy ra từProvidervà chuẩn hóa thành dạng chuẩnagent:<agentId>:<channel>:group:<id>. - Các nguồn khác:
- Công việc cron:
cron:<job.id>(cô lập) hoặcsession:<custom-id>(bền vững) - Webhooks:
hook:<uuid>(trừ khi được đặt rõ ràng bởi hook) - Chạy Node:
node-<nodeId>
- Công việc cron:
Vòng đời
- Chính sách đặt lại: các phiên được tái sử dụng cho đến khi hết hạn, và hết hạn được đánh giá vào tin nhắn đầu vào tiếp theo.
- Đặt lại hàng ngày: mặc định là 4:00 AM theo giờ địa phương trên máy chủ gateway. Một phiên là cũ khi cập nhật cuối cùng của nó sớm hơn thời gian đặt lại hàng ngày gần nhất.
- Đặt lại khi không hoạt động (tùy chọn):
idleMinutesthêm một cửa sổ không hoạt động trượt. Khi cả đặt lại hàng ngày và không hoạt động được cấu hình, bất kỳ cái nào hết hạn trước sẽ buộc một phiên mới. - Không hoạt động chỉ cũ: nếu bạn đặt
session.idleMinutesmà không có bất kỳ cấu hìnhsession.reset/resetByType, OpenClaw sẽ ở chế độ không hoạt động chỉ để tương thích ngược. - Ghi đè theo loại (tùy chọn):
resetByTypecho phép bạn ghi đè chính sách cho các phiêndirect,group, vàthread(thread = các thread Slack/Discord, các chủ đề Telegram, các thread Matrix khi được cung cấp bởi connector). - Ghi đè theo kênh (tùy chọn):
resetByChannelghi đè chính sách đặt lại cho một kênh (áp dụng cho tất cả các loại phiên cho kênh đó và có ưu tiên hơnreset/resetByType). - Kích hoạt đặt lại: chính xác
/newhoặc/reset(cộng với bất kỳ bổ sung nào trongresetTriggers) bắt đầu một id phiên mới và truyền phần còn lại của tin nhắn qua./new <model>chấp nhận một bí danh mô hình,provider/model, hoặc tên nhà cung cấp (khớp mờ) để đặt mô hình phiên mới. Nếu/newhoặc/resetđược gửi một mình, OpenClaw sẽ chạy một lượt chào ngắn để xác nhận đặt lại. - Đặt lại thủ công: xóa các khóa cụ thể khỏi kho lưu trữ hoặc xóa bản ghi JSONL; tin nhắn tiếp theo sẽ tạo lại chúng.
- Các công việc cron cô lập luôn tạo một
sessionIdmới cho mỗi lần chạy (không tái sử dụng khi không hoạt động).
Chính sách gửi (tùy chọn)
Chặn gửi cho các loại phiên cụ thể mà không cần liệt kê các id riêng lẻ./send on→ cho phép cho phiên này/send off→ từ chối cho phiên này/send inherit→ xóa ghi đè và sử dụng quy tắc cấu hình Gửi những điều này dưới dạng tin nhắn độc lập để chúng được đăng ký.
Cấu hình (ví dụ đổi tên tùy chọn)
Kiểm tra
openclaw status— hiển thị đường dẫn lưu trữ và các phiên gần đây.openclaw sessions --json— xuất tất cả các mục (lọc với--active <minutes>).openclaw gateway call sessions.list --params '{}'— lấy các phiên từ gateway đang chạy (sử dụng--url/--tokenđể truy cập gateway từ xa).- Gửi
/statusdưới dạng tin nhắn độc lập trong cuộc trò chuyện để xem liệu agent có thể truy cập được không, bao nhiêu ngữ cảnh phiên được sử dụng, các chuyển đổi hiện tại/nhanh/chi tiết, và khi nào thông tin đăng nhập web WhatsApp của bạn được làm mới lần cuối (giúp phát hiện nhu cầu liên kết lại). - Gửi
/context listhoặc/context detailđể xem những gì có trong lời nhắc hệ thống và các tệp workspace được chèn (và các đóng góp ngữ cảnh lớn nhất). - Gửi
/stop(hoặc các cụm từ hủy độc lập nhưstop,stop action,stop run,stop openclaw) để hủy bỏ lượt hiện tại, xóa các lượt theo dõi đã xếp hàng cho phiên đó, và dừng bất kỳ lượt chạy sub-agent nào được tạo ra từ nó (phản hồi bao gồm số lượng đã dừng). - Gửi
/compact(hướng dẫn tùy chọn) dưới dạng tin nhắn độc lập để tóm tắt ngữ cảnh cũ hơn và giải phóng không gian cửa sổ. Xem /concepts/compaction. - Các bản ghi JSONL có thể được mở trực tiếp để xem lại các lượt đầy đủ.
Mẹo
- Giữ khóa chính dành riêng cho lưu lượng 1:1; để các nhóm giữ khóa riêng của họ.
- Khi tự động hóa dọn dẹp, xóa các khóa riêng lẻ thay vì toàn bộ kho lưu trữ để bảo toàn ngữ cảnh ở nơi khác.
Siêu dữ liệu nguồn gốc phiên
Mỗi mục phiên ghi lại nơi nó đến (cố gắng tốt nhất) trongorigin:
label: nhãn người dùng (được giải quyết từ nhãn cuộc trò chuyện + chủ đề nhóm/kênh)provider: id kênh đã chuẩn hóa (bao gồm các phần mở rộng)from/to: id định tuyến thô từ phong bì đầu vàoaccountId: id tài khoản nhà cung cấp (khi nhiều tài khoản)threadId: id thread/chủ đề khi kênh hỗ trợ Các trường nguồn gốc được điền cho tin nhắn trực tiếp, kênh, và nhóm. Nếu một connector chỉ cập nhật định tuyến giao hàng (ví dụ, để giữ một phiên DM chính mới), nó vẫn nên cung cấp ngữ cảnh đầu vào để phiên giữ lại siêu dữ liệu giải thích của nó. Các phần mở rộng có thể làm điều này bằng cách gửiConversationLabel,GroupSubject,GroupChannel,GroupSpace, vàSenderNametrong ngữ cảnh đầu vào và gọirecordSessionMetaFromInbound(hoặc truyền cùng ngữ cảnh đếnupdateLastRoute).