Định tuyến Đa Tác Nhân
Mục tiêu: nhiều tác nhân cô lập (workspace riêng +agentDir + phiên), cùng với nhiều tài khoản kênh (ví dụ: hai WhatsApp) trong một Gateway đang chạy. Dữ liệu đầu vào được định tuyến đến một tác nhân thông qua liên kết.
”Một tác nhân” là gì?
Một tác nhân là một bộ não hoàn chỉnh với:- Workspace (tệp, AGENTS.md/SOUL.md/USER.md, ghi chú cục bộ, quy tắc persona).
- Thư mục trạng thái (
agentDir) cho hồ sơ xác thực, đăng ký mô hình và cấu hình từng tác nhân. - Kho lưu trữ phiên (lịch sử chat + trạng thái định tuyến) dưới
~/.openclaw/agents/<agentId>/sessions.
agentDir giữa các tác nhân (nó gây ra xung đột xác thực/phiên). Nếu muốn chia sẻ thông tin xác thực, sao chép auth-profiles.json vào agentDir của tác nhân khác.
Kỹ năng là theo từng tác nhân thông qua thư mục skills/ của mỗi workspace, với các kỹ năng chia sẻ có sẵn từ ~/.openclaw/skills. Xem Kỹ năng: theo tác nhân vs chia sẻ.
Gateway có thể lưu trữ một tác nhân (mặc định) hoặc nhiều tác nhân cùng lúc.
Lưu ý về Workspace: workspace của mỗi tác nhân là thư mục làm việc mặc định, không phải là một sandbox cứng. Đường dẫn tương đối được giải quyết bên trong workspace, nhưng đường dẫn tuyệt đối có thể truy cập các vị trí khác trên máy chủ trừ khi sandboxing được kích hoạt. Xem Sandboxing.
Đường dẫn (bản đồ nhanh)
- Cấu hình:
~/.openclaw/openclaw.json(hoặcOPENCLAW_CONFIG_PATH) - Thư mục trạng thái:
~/.openclaw(hoặcOPENCLAW_STATE_DIR) - Workspace:
~/.openclaw/workspace(hoặc~/.openclaw/workspace-<agentId>) - Thư mục tác nhân:
~/.openclaw/agents/<agentId>/agent(hoặcagents.list[].agentDir) - Phiên:
~/.openclaw/agents/<agentId>/sessions
Chế độ một tác nhân (mặc định)
Nếu không làm gì, OpenClaw chạy một tác nhân duy nhất:agentIdmặc định làmain.- Các phiên được khóa với
agent:main:<mainKey>. - Workspace mặc định là
~/.openclaw/workspace(hoặc~/.openclaw/workspace-<profile>khiOPENCLAW_PROFILEđược thiết lập). - Trạng thái mặc định là
~/.openclaw/agents/main/agent.
Trợ giúp tác nhân
Sử dụng trình hướng dẫn tác nhân để thêm một tác nhân cô lập mới:bindings (hoặc để trình hướng dẫn làm điều đó) để định tuyến tin nhắn đầu vào.
Xác minh với:
Bắt đầu nhanh
Tạo workspace cho mỗi tác nhân
Sử dụng trình hướng dẫn hoặc tạo workspace thủ công:Mỗi tác nhân có workspace riêng với
SOUL.md, AGENTS.md, và USER.md tùy chọn, cùng với agentDir và kho lưu trữ phiên riêng dưới ~/.openclaw/agents/<agentId>.Tạo tài khoản kênh
Tạo một tài khoản cho mỗi tác nhân trên các kênh ưa thích:Xem hướng dẫn kênh: Discord, Telegram, WhatsApp.
- Discord: một bot cho mỗi tác nhân, bật Message Content Intent, sao chép mỗi token.
- Telegram: một bot cho mỗi tác nhân qua BotFather, sao chép mỗi token.
- WhatsApp: liên kết mỗi số điện thoại cho mỗi tài khoản.
Thêm tác nhân, tài khoản và liên kết
Thêm tác nhân dưới
agents.list, tài khoản kênh dưới channels.<channel>.accounts, và kết nối chúng với bindings (ví dụ dưới đây).Nhiều tác nhân = nhiều người, nhiều tính cách
Với nhiều tác nhân, mỗiagentId trở thành một persona cô lập hoàn toàn:
- Số điện thoại/tài khoản khác nhau (theo
accountIdkênh). - Tính cách khác nhau (tệp workspace theo tác nhân như
AGENTS.mdvàSOUL.md). - Xác thực + phiên riêng biệt (không có giao tiếp chéo trừ khi được bật rõ ràng).
Một số WhatsApp, nhiều người (chia DM)
Bạn có thể định tuyến các DM WhatsApp khác nhau đến các tác nhân khác nhau trong khi vẫn sử dụng một tài khoản WhatsApp. Khớp theo sender E.164 (như+15551234567) với peer.kind: "direct". Phản hồi vẫn đến từ cùng một số WhatsApp (không có danh tính người gửi theo tác nhân).
Chi tiết quan trọng: các cuộc trò chuyện trực tiếp gộp lại thành khóa phiên chính của tác nhân, vì vậy sự cô lập thực sự yêu cầu một tác nhân cho mỗi người.
Ví dụ:
- Kiểm soát truy cập DM là toàn cầu cho mỗi tài khoản WhatsApp (ghép đôi/danh sách cho phép), không phải theo tác nhân.
- Đối với các nhóm chia sẻ, liên kết nhóm với một tác nhân hoặc sử dụng Nhóm phát sóng.
Quy tắc định tuyến (cách tin nhắn chọn tác nhân)
Liên kết là xác định và cụ thể nhất thắng:- Khớp
peer(id DM/nhóm/kênh chính xác) - Khớp
parentPeer(kế thừa chuỗi) guildId + roles(định tuyến vai trò Discord)guildId(Discord)teamId(Slack)- Khớp
accountIdcho một kênh - Khớp cấp kênh (
accountId: "*") - Dự phòng cho tác nhân mặc định (
agents.list[].default, nếu không có thì mục đầu tiên trong danh sách, mặc định:main)
peer + guildId), tất cả các trường được chỉ định đều cần thiết (ngữ nghĩa AND).
Chi tiết quan trọng về phạm vi tài khoản:
- Một liên kết bỏ qua
accountIdchỉ khớp với tài khoản mặc định. - Sử dụng
accountId: "*"cho một dự phòng toàn kênh trên tất cả các tài khoản. - Nếu sau đó bạn thêm cùng một liên kết cho cùng một tác nhân với một id tài khoản rõ ràng, OpenClaw nâng cấp liên kết chỉ dành cho kênh hiện có thành phạm vi tài khoản thay vì nhân đôi nó.
Nhiều tài khoản / số điện thoại
Các kênh hỗ trợ nhiều tài khoản (ví dụ: WhatsApp) sử dụngaccountId để xác định
mỗi lần đăng nhập. Mỗi accountId có thể được định tuyến đến một tác nhân khác nhau, vì vậy một máy chủ có thể lưu trữ
nhiều số điện thoại mà không trộn lẫn các phiên.
Nếu bạn muốn một tài khoản mặc định toàn kênh khi accountId bị bỏ qua, thiết lập
channels.<channel>.defaultAccount (tùy chọn). Khi không được thiết lập, OpenClaw sẽ dự phòng
đến default nếu có, nếu không thì id tài khoản đầu tiên được cấu hình (đã sắp xếp).
Các kênh phổ biến hỗ trợ mô hình này bao gồm:
whatsapp,telegram,discord,slack,signal,imessageirc,line,googlechat,mattermost,matrix,nextcloud-talkbluebubbles,zalo,zalouser,nostr,feishu
Khái niệm
agentId: một “bộ não” (workspace, xác thực theo tác nhân, kho lưu trữ phiên theo tác nhân).accountId: một phiên bản tài khoản kênh (ví dụ: tài khoản WhatsApp"personal"vs"biz").binding: định tuyến tin nhắn đầu vào đến mộtagentIdtheo(channel, accountId, peer)và tùy chọn id guild/team.- Các cuộc trò chuyện trực tiếp gộp lại thành
agent:<agentId>:<mainKey>(theo tác nhân “chính”;session.mainKey).
Ví dụ nền tảng
Bot Discord theo tác nhân
Mỗi tài khoản bot Discord ánh xạ đến mộtaccountId duy nhất. Liên kết mỗi tài khoản với một tác nhân và giữ danh sách cho phép theo bot.
- Mời mỗi bot vào guild và bật Message Content Intent.
- Token nằm trong
channels.discord.accounts.<id>.token(tài khoản mặc định có thể sử dụngDISCORD_BOT_TOKEN).
Bot Telegram theo tác nhân
- Tạo một bot cho mỗi tác nhân với BotFather và sao chép mỗi token.
- Token nằm trong
channels.telegram.accounts.<id>.botToken(tài khoản mặc định có thể sử dụngTELEGRAM_BOT_TOKEN).
Số WhatsApp theo tác nhân
Liên kết mỗi tài khoản trước khi khởi động gateway:~/.openclaw/openclaw.json (JSON5):
Ví dụ: Chat WhatsApp hàng ngày + Công việc sâu trên Telegram
Chia theo kênh: định tuyến WhatsApp đến một tác nhân nhanh hàng ngày và Telegram đến một tác nhân Opus.- Nếu bạn có nhiều tài khoản cho một kênh, thêm
accountIdvào liên kết (ví dụ{ channel: "whatsapp", accountId: "personal" }). - Để định tuyến một DM/nhóm duy nhất đến Opus trong khi giữ phần còn lại trên chat, thêm một liên kết
match.peercho peer đó; các khớp peer luôn thắng so với các quy tắc toàn kênh.
Ví dụ: cùng kênh, một peer đến Opus
Giữ WhatsApp trên tác nhân nhanh, nhưng định tuyến một DM đến Opus:Tác nhân gia đình liên kết với một nhóm WhatsApp
Liên kết một tác nhân gia đình chuyên dụng với một nhóm WhatsApp duy nhất, với việc kiểm soát nhắc nhở và chính sách công cụ chặt chẽ hơn:- Danh sách cho phép/cấm công cụ là công cụ, không phải kỹ năng. Nếu một kỹ năng cần chạy một
nhị phân, đảm bảo
execđược cho phép và nhị phân tồn tại trong sandbox. - Để kiểm soát chặt chẽ hơn, thiết lập
agents.list[].groupChat.mentionPatternsvà giữ danh sách cho phép nhóm được bật cho kênh.
Cấu hình Sandbox và Công cụ Theo Tác Nhân
Mỗi tác nhân có thể có sandbox và hạn chế công cụ riêng:setupCommand nằm dưới sandbox.docker và chạy một lần khi tạo container.
Các ghi đè sandbox.docker.* theo tác nhân bị bỏ qua khi phạm vi được giải quyết là "shared".
Lợi ích:
- Cô lập bảo mật: Hạn chế công cụ cho các tác nhân không đáng tin cậy
- Kiểm soát tài nguyên: Sandbox các tác nhân cụ thể trong khi giữ các tác nhân khác trên máy chủ
- Chính sách linh hoạt: Quyền khác nhau cho từng tác nhân
tools.elevated là toàn cầu và dựa trên người gửi; nó không thể cấu hình theo tác nhân.
Nếu bạn cần ranh giới theo tác nhân, sử dụng agents.list[].tools để cấm exec.
Đối với mục tiêu nhóm, sử dụng agents.list[].groupChat.mentionPatterns để các @mentions ánh xạ rõ ràng đến tác nhân dự định.
Xem Sandbox & Công cụ Đa Tác Nhân để biết ví dụ chi tiết.