Nhập từ khóa để bắt đầu tìm kiếm

Tạo Multi-Agent Bot trên OpenClaw — Hướng dẫn dễ hiểu cho người mới

Cập nhật lần cuối: 20/03/2026 | Phiên bản: 2.0 (viết lại cho người mới)

Bài này dành cho bạn nếu: Bạn đã cài được OpenClaw, đã chat được với 1 agent, và bây giờ muốn thử tạo thêm agent thứ hai (hoặc thứ ba). Mình sẽ giải thích mọi thứ từ đầu, không giả định bạn biết trước điều gì.


Trước tiên: "Multi-agent" nghĩa là gì?

Khi bạn mới cài OpenClaw, bạn có một agent duy nhất — giống như bạn thuê được một trợ lý. Trợ lý này có tính cách riêng (SOUL.md), biết bạn là ai (USER.md), và nhớ những gì đã nói chuyện (memory). Bạn nhắn tin cho trợ lý này qua Telegram, WhatsApp, Discord — tất cả đều đến cùng một "bộ não".

Multi-agent nghĩa là bạn thuê thêm trợ lý. Mỗi trợ lý có tính cách riêng, trí nhớ riêng, và nhiệm vụ riêng. Họ làm việc cùng một "văn phòng" (Gateway) nhưng ngồi ở bàn khác nhau, giữ hồ sơ khác nhau, và không xem hồ sơ của nhau.

Hãy hình dung thế này:

🏢 Văn phòng của bạn (Gateway — chạy trên máy bạn)
│
├── 🧑‍💼 Trợ lý "Nhà" (agent "home")
│   Tính cách: thân thiện, thoải mái
│   Trí nhớ: nhớ bạn thích phở, lịch gia đình, dự án cá nhân
│   Kênh liên lạc: WhatsApp cá nhân, Telegram
│
├── 👔 Trợ lý "Công việc" (agent "work")
│   Tính cách: chuyên nghiệp, ngắn gọn
│   Trí nhớ: nhớ dự án công ty, deadline, đồng nghiệp
│   Kênh liên lạc: Slack, Microsoft Teams
│
└── 💻 Trợ lý "Lập trình" (agent "coder")
    Tính cách: kỹ thuật, chi tiết
    Trí nhớ: nhớ codebase, CI/CD, tech stack
    Kênh liên lạc: Discord kênh #coding

Khi có tin nhắn đến, Gateway xem tin nhắn từ kênh nào, rồi chuyển cho đúng trợ lý xử lý. Đó là toàn bộ ý tưởng.


Bạn có thật sự cần nhiều agent không?

Câu trả lời thành thật: phần lớn người dùng chỉ cần 1 agent. Một agent duy nhất hoàn toàn có thể kết nối cùng lúc Telegram, WhatsApp, Discord, và Slack. Nó nhận tin nhắn từ tất cả các kênh và trả lời bình thường.

Bạn chỉ cần thêm agent khi:

Bạn muốn tách biệt hoàn toàn — ví dụ: trợ lý công việc không được biết gì về đời tư bạn, và ngược lại. Hai "bộ não" riêng, hai trí nhớ riêng, không lẫn lộn.

Bạn muốn tính cách khác nhau — một trợ lý nói chuyện kiểu bạn bè trên WhatsApp, một trợ lý nói chuyện kiểu đồng nghiệp trên Slack.

Nhiều người dùng chung một máy — bạn và vợ/chồng cùng dùng OpenClaw trên một VPS, mỗi người có trợ lý riêng với sở thích riêng.

Bạn muốn tiết kiệm tiền — một agent dùng model đắt (cho việc quan trọng), một agent dùng model rẻ (cho chat hàng ngày).

Nếu bạn chưa chắc, hãy dùng 1 agent trước. Khi nào thấy cần tách, quay lại bài này.


Cách OpenClaw quản lý nhiều agent

Điều đầu tiên cần hiểu: bạn KHÔNG cần chạy nhiều chương trình. Chỉ một Gateway chạy trên máy bạn (giống như trước) — nhưng bên trong Gateway đó, bạn tạo ra nhiều "bộ não" hoạt động song song.

Mỗi agent có 3 thứ riêng, hoàn toàn tách biệt:

1. Workspace — Thư mục chứa "tính cách" và "trí nhớ" của agent. Đây là nơi chứa SOUL.md (tính cách), USER.md (thông tin về bạn), AGENTS.md (quy tắc làm việc), và MEMORY.md (trí nhớ dài hạn). Mỗi agent có workspace ở thư mục riêng.

Ví dụ: agent "home" có workspace ở ~/.openclaw/workspace-home/, agent "work" ở ~/.openclaw/workspace-work/. Hai thư mục khác nhau, không dùng chung file nào.

2. Hồ sơ xác thực (auth) — Mỗi agent có thể dùng API key riêng. Agent "home" dùng Claude Sonnet (rẻ hơn cho chat hàng ngày), agent "work" dùng Claude Opus (mạnh hơn cho công việc phức tạp). OpenClaw lưu thông tin này ở thư mục riêng cho từng agent.

3. Lịch sử chat (session) — Mỗi agent nhớ cuộc trò chuyện riêng. Bạn nói gì với agent "home" thì agent "work" không biết, và ngược lại.

Một quy tắc cực kỳ quan trọng: Không bao giờ cho hai agent dùng chung thư mục auth (agentDir). Nếu làm vậy, hai agent sẽ "đánh nhau" — gây ra lỗi rất khó tìm nguyên nhân. Mỗi agent phải có thư mục riêng hoàn toàn.


Hướng dẫn từng bước: Tạo agent thứ hai

Giả sử bạn đã có agent chính (thường tên là "main") đang chạy tốt. Bây giờ bạn muốn tạo thêm agent "work" cho công việc.

Bước 1: Tạo agent mới bằng lệnh

Mở terminal và gõ:

openclaw agents add work

OpenClaw sẽ hỏi bạn vài câu. Trả lời như sau:

"Workspace location?" — Nhấn Enter để chấp nhận mặc định (~/.openclaw/workspace-work). Đây là thư mục riêng cho agent mới.

"Model?" — Bạn có thể chọn model riêng hoặc nhấn Enter để dùng chung model mặc định. Nếu muốn agent này dùng model mạnh hơn (ví dụ Claude Opus), gõ tên model vào.

"Display name?" — Đặt tên hiển thị, ví dụ: "Trợ lý Công việc".

Xong! Agent mới đã được tạo. Nhưng nó chưa biết làm gì — bạn cần "dạy" nó.

Bước 2: Dạy agent mới — Viết workspace files

Vào thư mục workspace của agent mới:

cd ~/.openclaw/workspace-work

Bạn sẽ thấy vài file đã có sẵn. Bây giờ hãy chỉnh sửa chúng.

Bước 2a: Viết SOUL.md — "Tính cách" của agent

Mở file SOUL.md bằng editor bất kỳ (nano, vim, VS Code...):

nano SOUL.md

Viết vào (đây chỉ là ví dụ — bạn viết theo ý mình):

# Tính cách

Bạn là trợ lý công việc. Phong cách giao tiếp:
- Ngắn gọn, đi thẳng vào vấn đề
- Chuyên nghiệp nhưng không cứng nhắc
- Khi không chắc, hỏi lại thay vì đoán
- Tập trung vào giải pháp, không lan man

Bạn KHÔNG xử lý việc cá nhân — nếu ai hỏi việc cá nhân, 
nhắc họ liên hệ trợ lý cá nhân.

Lưu file và thoát.

Bước 2b: Viết USER.md — "Bạn là ai" (với góc nhìn công việc)

nano USER.md
# Về người dùng

- Tên: Minh
- Vai trò: Tech Lead tại công ty ABC
- Múi giờ: UTC+7 (Hà Nội)
- Công cụ hay dùng: Slack, Linear, GitHub, Notion
- Sở thích giao tiếp: trả lời ngắn, dùng bullet points

Bước 2c: Viết AGENTS.md — "Quy trình làm việc"

nano AGENTS.md
## Mỗi khi bắt đầu phiên mới

1. Đọc SOUL.md — đây là tính cách của bạn
2. Đọc USER.md — đây là người bạn đang giúp
3. Đọc memory ngày hôm nay và hôm qua
4. Nếu đang chat riêng (không phải group): đọc thêm MEMORY.md

## Quy tắc

- Chỉ tập trung vào công việc và dự án
- Không gửi email mà chưa được người dùng xác nhận
- Nếu ai hỏi việc cá nhân, trả lời: "Việc này thuộc phạm vi 
  trợ lý cá nhân. Hãy nhắn cho trợ lý cá nhân của bạn nhé!"

Bước 3: Kết nối kênh liên lạc cho agent mới

Mỗi agent cần có "cửa" riêng để nhận tin nhắn. Cách dễ nhất là tạo bot riêng trên mỗi nền tảng.

Ví dụ với Telegram (nền tảng dễ nhất):

Bước 3a: Mở Telegram, tìm @BotFather, tạo bot mới:
- Gõ /newbot
- Đặt tên: "Trợ lý Công việc Minh"
- Đặt username: minh_work_bot
- BotFather sẽ cho bạn token — copy lại

Bước 3b: Quay lại terminal, đăng nhập channel cho agent:

openclaw channels login --channel telegram --account work

Khi được hỏi, dán token của bot vừa tạo.

Ví dụ với WhatsApp:

Nếu bạn có hai số điện thoại (một cá nhân, một công việc):

# Đăng nhập WhatsApp số công việc
openclaw channels login --channel whatsapp --account biz
# Quét QR code từ WhatsApp Business trên điện thoại

Nếu chỉ có một số WhatsApp, đừng lo — bạn vẫn có thể phân luồng bằng "bindings" (mình sẽ giải thích ở bước tiếp).

Bước 4: Nối dây — Bảo Gateway biết tin nhắn nào đi đâu

Đây là bước quan trọng nhất: bạn cần nói cho Gateway biết "tin nhắn từ kênh nào thì chuyển cho agent nào." OpenClaw gọi cái này là bindings (nghĩa là "sự ràng buộc" — ràng buộc giữa kênh liên lạc và agent).

Mở file cấu hình chính:

nano ~/.openclaw/openclaw.json

Tìm (hoặc thêm) phần agentsbindings. Đây là ví dụ đơn giản nhất — 2 agent, 2 kênh:

{
  "agents": {
    "list": [
      {
        "id": "home",
        "default": true,
        "workspace": "~/.openclaw/workspace-home"
      },
      {
        "id": "work",
        "workspace": "~/.openclaw/workspace-work"
      }
    ]
  },
  "bindings": [
    {
      "agentId": "work",
      "match": { "channel": "slack" }
    },
    {
      "agentId": "home",
      "match": { "channel": "telegram" }
    }
  ]
}

Đọc hiểu config trên:

agents.list — Danh sách các agent. Mỗi agent có id (tên định danh) và workspace (thư mục riêng). Agent "home" có "default": true nghĩa là: "nếu tin nhắn không khớp với binding nào, gửi cho agent này."

bindings — Quy tắc phân luồng. Dòng đầu tiên nói: "mọi tin nhắn từ Slack → gửi cho agent work." Dòng thứ hai: "mọi tin nhắn từ Telegram → gửi cho agent home."

Bạn có thể làm chi tiết hơn. Ví dụ: cùng một WhatsApp, nhưng nhắn từ số điện thoại vợ/chồng thì đến agent "home", nhắn từ đồng nghiệp thì đến agent "work":

{
  "bindings": [
    {
      "agentId": "home",
      "match": {
        "channel": "whatsapp",
        "peer": { "kind": "dm", "id": "+84912345678" }
      }
    },
    {
      "agentId": "work",
      "match": {
        "channel": "whatsapp",
        "peer": { "kind": "dm", "id": "+84987654321" }
      }
    },
    {
      "agentId": "home",
      "match": { "channel": "whatsapp" }
    }
  ]
}

Mẹo quan trọng: Đặt binding cụ thể nhất lên trước, chung nhất xuống cuối. OpenClaw kiểm tra từ trên xuống — binding đầu tiên khớp sẽ thắng. Trong ví dụ trên: tin nhắn từ số +84912345678 khớp binding đầu tiên → đến agent "home". Tin nhắn từ +84987654321 khớp binding thứ hai → đến agent "work". Mọi tin nhắn WhatsApp khác → khớp binding cuối → đến agent "home" (vì nó chung nhất).

Bước 5: Khởi động lại và kiểm tra

Sau khi chỉnh config xong, Gateway cần restart để nhận cấu hình mới:

# Restart Gateway
openclaw gateway restart

# Kiểm tra xem agent đã được tạo đúng chưa
openclaw agents list --bindings

Lệnh thứ hai sẽ in ra danh sách agent và binding — cho bạn thấy rõ ràng "tin nhắn từ đâu sẽ đến agent nào." Nếu thấy đúng ý → bạn đã xong!

# Kiểm tra kênh có kết nối được không
openclaw channels status --probe

Nếu channel nào báo lỗi, có thể do chưa login hoặc token sai. Xem lại bước 3.

Bước 6: Gửi tin nhắn thử

Mở Telegram (hoặc kênh bạn đã gán cho agent mới), gửi một tin nhắn đơn giản:

Xin chào, bạn là ai?

Agent phải trả lời đúng tính cách bạn đã viết trong SOUL.md. Nếu đúng → mọi thứ hoạt động!

Thử tiếp trên kênh khác (ví dụ Slack nếu bạn gán Slack cho agent "work") để xác nhận hai agent trả lời khác nhau.


4 cách setup phổ biến (chọn cách phù hợp với bạn)

Cách 1: Tách "Cá nhân" và "Công việc" — Phổ biến nhất

Đây là setup đơn giản và hữu ích nhất cho hầu hết mọi người.

Ý tưởng: WhatsApp/Telegram → agent cá nhân (thân thiện, biết sở thích bạn). Slack/Teams → agent công việc (chuyên nghiệp, biết dự án bạn).

Tại sao nên làm: Agent công việc không vô tình tiết lộ thông tin cá nhân trong group chat công ty. Agent cá nhân không bị "ô nhiễm" bởi hàng trăm tin nhắn Slack mỗi ngày.

Config đã có ở bước 4 phía trên — copy và dùng luôn.

Cách 2: Tiết kiệm tiền — Agent "nhanh rẻ" + Agent "mạnh đắt"

Ý tưởng: Agent "responder" dùng model rẻ (Haiku — rất nhanh, tốn ít tiền) cho chat hàng ngày. Agent "thinker" dùng model đắt (Opus — suy nghĩ sâu, tốn nhiều tiền hơn) cho việc quan trọng.

Config:

{
  "agents": {
    "list": [
      {
        "id": "responder",
        "default": true,
        "model": { "primary": "anthropic/claude-haiku-4-5" },
        "workspace": "~/.openclaw/workspace-responder"
      },
      {
        "id": "thinker",
        "model": { "primary": "anthropic/claude-opus-4-6" },
        "workspace": "~/.openclaw/workspace-thinker"
      }
    ]
  }
}

Cách dùng: Chat hàng ngày qua kênh mặc định → agent "responder" (rẻ) xử lý. Khi cần suy nghĩ sâu → nhắn vào bot/kênh riêng gắn với agent "thinker" (đắt). Bạn kiểm soát được chi phí.

Cách 3: Gia đình dùng chung — Mỗi người có trợ lý riêng

Ý tưởng: Bạn và vợ/chồng cùng nhắn tin cho bot qua cùng một số WhatsApp. OpenClaw nhìn số điện thoại người gửi để biết chuyển cho agent nào.

Config:

{
  "agents": {
    "list": [
      { "id": "minh", "workspace": "~/.openclaw/workspace-minh" },
      { "id": "lan", "workspace": "~/.openclaw/workspace-lan" }
    ]
  },
  "bindings": [
    {
      "agentId": "minh",
      "match": {
        "channel": "whatsapp",
        "peer": { "kind": "dm", "id": "+84901111111" }
      }
    },
    {
      "agentId": "lan",
      "match": {
        "channel": "whatsapp",
        "peer": { "kind": "dm", "id": "+84902222222" }
      }
    }
  ],
  "channels": {
    "whatsapp": {
      "dmPolicy": "allowlist",
      "allowFrom": ["+84901111111", "+84902222222"]
    }
  }
}

Giải thích: Khi số +84901111111 nhắn tin → đến agent "minh". Khi số +84902222222 nhắn → đến agent "lan". allowFrom đảm bảo chỉ hai số này được phép nhắn — người lạ bị chặn.

Agent "minh" nhớ Minh thích phở, có dự án A, deadline thứ Sáu. Agent "lan" nhớ Lan thích sushi, đang học tiếng Nhật, lịch khám bệnh thứ Ba. Hai bộ nhớ hoàn toàn riêng.

Cách 4: Nâng cao — Một "sếp" điều phối nhiều "nhân viên"

Ý tưởng: Thay vì tạo nhiều agent riêng biệt, bạn chỉ dùng 1 agent chính (orchestrator) nhưng dạy nó cách "giao việc" cho sub-agent và coding agent khi cần.

Đây thực ra KHÔNG phải multi-agent theo kiểu config nhiều agent. Nó đơn giản hơn nhiều — bạn chỉ cần viết trong AGENTS.md:

## Quy tắc giao việc

- Nếu cần nghiên cứu dài → tạo sub-agent để chạy nền, 
  báo kết quả khi xong
- Nếu cần code → mở coding agent (Codex hoặc Claude Code)
- Nếu việc đơn giản → tự làm
- Luôn tóm tắt kết quả trước khi gửi cho người dùng

Agent chính tự biết khi nào cần gọi "nhân viên" (sub-agent) và khi nào tự làm. Đây là cách tiếp cận đơn giản nhất cho chuyên môn hóa — khuyến nghị thử trước khi nhảy vào multi-agent phức tạp.


Bảo mật — Những điều cần nhớ khi chạy nhiều agent

Nhiều agent = nhiều thứ cần bảo vệ hơn. Đây là 4 điều quan trọng nhất:

1. API key: mỗi agent có key riêng
Mặc định, agent mới không tự có API key. Bạn cần thiết lập riêng cho nó, hoặc copy key từ agent chính. Nếu dùng chung key, chi phí tính chung vào một tài khoản.

2. Skill (kỹ năng): cẩn thận với thư mục chung
Skill cài vào thư mục ~/.openclaw/skills/ sẽ khả dụng cho TẤT CẢ agent. Nếu bạn cài skill Gmail vào đây, cả agent "home" lẫn agent "work" đều đọc được email. Muốn tách riêng: cài skill vào thư mục workspace/skills/ của từng agent.

3. DM policy: luôn giới hạn ai được nhắn tin
Dùng dmPolicy: "pairing" (yêu cầu xác nhận) hoặc allowlist (chỉ cho phép số cụ thể). Không bao giờ để chế độ "open" (ai cũng nhắn được) khi chạy nhiều agent.

4. Agent public: giới hạn quyền
Nếu bạn tạo agent cho group chat công khai (ví dụ: bot hỏi đáp trong Discord server), hãy giới hạn quyền của nó — chỉ cho phép gửi tin nhắn, không cho chạy lệnh shell hay truy cập file:

{
  "id": "public-bot",
  "tools": { "profile": "messaging" }
}

"profile": "messaging" nghĩa là agent chỉ được gửi tin nhắn — không làm gì khác.


Các agent có "nói chuyện" được với nhau không?

Mặc định: không. Mỗi agent hoàn toàn tách biệt. Agent "home" không biết agent "work" tồn tại, và ngược lại. Đây là thiết kế có chủ đích — để đảm bảo cách ly.

Nếu bạn muốn agent phối hợp với nhau (ví dụ: agent "work" nhờ agent "coder" viết code), cách dễ nhất là dùng sub-agent — agent chính giao việc cho phiên con, nhận kết quả, không cần routing phức tạp.

Tính năng agent-to-agent messaging (agent tự nhắn tin cho nhau) tồn tại nhưng cần bật riêng và cấu hình phức tạp. Đây là chủ đề nâng cao — nếu bạn mới bắt đầu, sub-agent là đủ.


Khi gặp vấn đề — Kiểm tra gì trước?

Vấn đề: Gửi tin nhắn nhưng agent sai trả lời

Nghĩa là binding (quy tắc phân luồng) bị sai. Chạy:

openclaw agents list --bindings

Xem tin nhắn từ kênh/số của bạn đang được gán cho agent nào. Nếu sai → chỉnh lại bindings trong config → restart gateway.

Vấn đề: Agent mới không trả lời gì cả

Kiểm tra theo thứ tự:
1. Kênh đã login chưa? → openclaw channels status --probe
2. Gateway đã restart chưa? → openclaw gateway restart
3. Agent có API key chưa? → Kiểm tra auth trong agentDir
4. Có ai đó cần approve pairing không? → openclaw pairing list <channel>

Vấn đề: Muốn thay đổi config nhưng không có hiệu lực

Mọi thay đổi trong openclaw.json cần restart Gateway mới có tác dụng:

openclaw gateway restart

Quên bước này là lý do phổ biến nhất khiến "config đã sửa mà không thấy gì thay đổi."


Checklist — Làm theo thứ tự này

Bước 1: ✅ Tạo agent mới
         openclaw agents add <tên>

Bước 2: ✅ Viết workspace files
         Chỉnh SOUL.md, USER.md, AGENTS.md trong workspace mới

Bước 3: ✅ Tạo kênh liên lạc riêng
         Tạo bot mới trên Telegram/Discord (1 bot = 1 agent)
         Hoặc link thêm số WhatsApp

Bước 4: ✅ Viết bindings
         Thêm vào openclaw.json: kênh nào → agent nào
         Nhớ: cụ thể nhất lên trước, chung nhất xuống cuối

Bước 5: ✅ Restart và kiểm tra
         openclaw gateway restart
         openclaw agents list --bindings
         openclaw channels status --probe

Bước 6: ✅ Gửi tin nhắn thử
         Nhắn vào mỗi kênh → xác nhận đúng agent trả lời

Bước 7: ✅ Backup workspace
         cd ~/.openclaw/workspace-<tên> && git init && git add . && git commit -m "setup"

Câu hỏi thường gặp

Q: Tạo thêm agent có tốn thêm tiền không?
A: OpenClaw miễn phí — tạo bao nhiêu agent cũng được. Tiền tốn thêm là API key: mỗi agent chat riêng nên tốn token riêng. Nếu agent dùng chung API key, chi phí cộng chung vào một tài khoản thanh toán.

Q: Tối đa được bao nhiêu agent?
A: Không có giới hạn từ phần mềm. Giới hạn thực tế là RAM và CPU trên máy bạn. 2-5 agent trên VPS $5-15/tháng là hoàn toàn ổn.

Q: Heartbeat và cron job thì sao khi có nhiều agent?
A: Mỗi agent có heartbeat và cron riêng. Agent "work" heartbeat kiểm tra Slack, agent "home" heartbeat kiểm tra WhatsApp — hoàn toàn độc lập. Bạn cấu hình heartbeat/cron trong phần config của từng agent.

Q: Có thể dùng cùng một số WhatsApp cho nhiều agent không?
A: Được! Bạn route theo số điện thoại người gửi (peer ID). Tin nhắn từ số A → agent 1, từ số B → agent 2. Nhưng cả hai agent đều reply từ cùng số WhatsApp của bạn — không có "số riêng" cho mỗi agent. Nếu cần tách hoàn toàn, dùng hai số điện thoại khác nhau.

Q: Nếu sau này muốn quay lại 1 agent thì sao?
A: Dễ. Xóa agent phụ khỏi agents.list, xóa binding liên quan, restart gateway. Workspace cũ vẫn còn trên disk nếu bạn muốn giữ lại phòng khi cần.


Xem thêm


Nguồn tham khảo: OpenClaw Docs, GitHub openclaw/openclaw, LumaDock, Stack Junkie, MoltFounders, ClawDocs, ZenVanRiel
Ngày đăng: 20/03/2026 | Tác giả: Đội ngũ Openclaw

Hướng Dẫn Liên Quan

Bình Luận (0)

Đăng nhập để bình luận.