1. Kiến trúc multi-agent của OpenClaw
OpenClaw không dùng kiểu "orchestrator + workers" như nhiều framework AI agent khác. Nó dùng mô hình isolated agents — mỗi agent có:
- Workspace riêng (thư mục cấu hình, skills, identity)
- Auth profile riêng (tại
~/.openclaw/agents/<agentId>/agent/auth-profiles.json) - Session store riêng (chat history tại
~/.openclaw/agents/<agentId>/sessions) - Skill allowlist riêng qua
agents.list[].skills - Model primary + fallback riêng qua
agents.list[].model
Các agent được phân phối traffic thông qua routing bindings — bạn "pin" một channel (Telegram, WhatsApp, Discord, Slack, Signal...) tới một agent cụ thể. Ví dụ: tin nhắn đến Telegram account support sẽ luôn vào agent cs-triage, còn tin nhắn Discord guild dev-channel sẽ vào agent dev-helper.
Đây là triết lý quan trọng: không có một "brain" trung tâm điều phối các agent con. Thay vào đó, bạn có nhiều agent độc lập, mỗi agent là một "nhân viên" chuyên một việc, và traffic được route tới đúng người. Đơn giản hơn, dễ debug hơn, và quan trọng nhất — mỗi agent dùng model riêng phù hợp với việc của mình.
2. Chiến lược routing model theo độ khó
Trước khi setup, hãy nắm nguyên tắc vàng: đừng dùng búa tạ để đập ruồi. OpenClaw hỗ trợ primary model + fallback list trong agents.defaults.model — và mỗi agent có thể có cấu hình model riêng.
Phân loại tác vụ thành 3 nhóm:
Tác vụ đơn giản — phân loại câu hỏi, trích xuất thông tin, trả lời FAQ, greeting — dùng Haiku 4.5 (anthropic/claude-haiku-4-5) hoặc GPT-5.4 mini (openai/gpt-5.4-mini). Rẻ, nhanh, làm tốt những việc có quy tắc rõ ràng.
Tác vụ trung bình — viết email khách hàng, tóm tắt đơn hàng, soạn câu trả lời có context — dùng Sonnet 4.6 (anthropic/claude-sonnet-4-6) hoặc GPT-5.4 (openai/gpt-5.4). Sweet spot: đủ thông minh, giá vừa phải.
Tác vụ phức tạp — case dispute khó, phân tích intent mơ hồ, escalation cần logic nhiều bước — dùng Opus 4.6 (anthropic/claude-opus-4-6). Chỉ 5-10% request thực sự cần model này.
Theo thống kê trên khách hàng OnMay, 70-80% tác vụ chạy trên Haiku, 15-20% trên Sonnet, dưới 10% trên Opus là tỉ lệ lý tưởng cho phần lớn hệ thống hỗ trợ khách hàng.
3. Case study: Hệ thống chăm sóc khách hàng tiếng Việt
3.1. Bối cảnh
Bạn bán hàng online trên Zalo (qua Telegram bridge), Facebook Messenger, và Discord. Trung bình nhận ~300 tin/ngày (≈10.000/tháng). 70% là câu hỏi quen thuộc ("đơn SHOP123 khi nào giao?", "shop đóng cửa lúc mấy giờ?"), 20% cần tư vấn (so sánh sản phẩm, soạn phản hồi email), 10% là khiếu nại phức tạp (dispute refund, đổi trả quá hạn).
Mục tiêu: 3 agent OpenClaw chia nhau xử lý, trả lời trong 30 giây, chi phí < 150$/tháng.
3.2. Ba agent — vai trò như 3 nhân viên
| Agent | Vai trò "đời thực" | Model | Xử lý |
|---|---|---|---|
cs-triage |
Lễ tân | Haiku 4.5 | Tin nhắn đến đầu tiên — chào, phân loại, trả câu dễ |
cs-responder |
Nhân viên CSKH | Sonnet 4.6 | Case cần tư vấn, soạn email, xử lý khiếu nại cấp 1 |
cs-escalator |
Quản lý ca trực | Opus 4.6 | Dispute, refund đặc biệt, khiếu nại pháp lý |
Triage luôn là người "bắt máy" đầu tiên. Nếu nó thấy case phức tạp, nó handoff cho escalator (mình sẽ giải thích cơ chế ở cuối). Responder chỉ nhận traffic từ channel VIP đã được bind sẵn.
3.3. Chuẩn bị trên VPS OnMay
Đăng nhập SSH vào VPS của bạn (Pro 229K/tháng là đủ). Kiểm tra OpenClaw đã cài sẵn:
openclaw --version # Nên hiển thị version 2.x
Set 2 env var và persist vào ~/.bashrc:
export ANTHROPIC_API_KEY="sk-ant-api03-..."
export OPENAI_API_KEY="sk-proj-..."
# Nếu traffic lớn, bổ sung thêm key để rotate
export ANTHROPIC_API_KEYS="sk-ant-api03-k1,sk-ant-api03-k2,sk-ant-api03-k3"
Chạy onboard để OpenClaw nhận auth:
openclaw onboard --auth-choice apiKey
Expected output cuối:
✓ Anthropic API key saved
✓ Default model set to anthropic/claude-sonnet-4-6
3.4. Tạo 3 workspace và 3 agent
Mỗi agent có workspace riêng — đây là thư mục chứa "bộ não" của nó (personality, skills, sessions). Tạo workspace và thêm agent cùng lúc:
# Lễ tân
openclaw agents add cs-triage \
--workspace ~/.openclaw/workspace-cs-triage \
--model anthropic/claude-haiku-4-5 \
--non-interactive
# Nhân viên CSKH
openclaw agents add cs-responder \
--workspace ~/.openclaw/workspace-cs-responder \
--model anthropic/claude-sonnet-4-6 \
--non-interactive
# Quản lý ca
openclaw agents add cs-escalator \
--workspace ~/.openclaw/workspace-cs-escalator \
--model anthropic/claude-opus-4-6 \
--non-interactive
Verify:
openclaw agents list
Output kỳ vọng:
┌───────────────┬──────────────────────────────────┬─────────────────────────────┐
│ ID │ Model │ Workspace │
├───────────────┼──────────────────────────────────┼─────────────────────────────┤
│ main │ anthropic/claude-sonnet-4-6 │ ~/.openclaw/workspace │
│ cs-triage │ anthropic/claude-haiku-4-5 │ ~/.openclaw/workspace-... │
│ cs-responder │ anthropic/claude-sonnet-4-6 │ ~/.openclaw/workspace-... │
│ cs-escalator │ anthropic/claude-opus-4-6 │ ~/.openclaw/workspace-... │
└───────────────┴──────────────────────────────────┴─────────────────────────────┘
3.5. Viết "linh hồn" cho từng agent
Đây là phần quan trọng nhất — và cũng là phần nhiều người bỏ qua. Mỗi workspace của OpenClaw chứa vài file markdown đóng vai trò system prompt:
~/.openclaw/workspace-cs-triage/
├── SOUL.md ← Tính cách, giọng điệu, giới hạn hành vi
├── IDENTITY.md ← Tên, emoji mà khách hàng nhìn thấy
├── AGENTS.md ← Operating instructions (quy trình xử lý)
├── USER.md ← (tùy chọn) profile khách hàng cụ thể
└── skills/ ← Skills riêng của agent này
SOUL.md được inject vào context mỗi phiên chat, nên viết ngắn gọn, rõ ràng. Dưới đây là mẫu cho cs-triage:
# SOUL — cs-triage
## Who you are
Bạn là **Bống**, lễ tân ảo của shop ABC. Khách nhắn tin Zalo/Messenger
sẽ gặp bạn đầu tiên.
## Tone
- Thân thiện, dùng "em" với khách.
- Ngắn gọn — tối đa 3 câu trừ khi khách hỏi chi tiết.
- Không bao giờ dùng emoji quá 1 cái/tin.
## Hard limits
- KHÔNG hứa hẹn giảm giá, refund, đổi trả ngoài chính sách.
- KHÔNG chia sẻ số điện thoại nhân viên, địa chỉ kho.
- Nếu khách DỌA kiện / đòi refund gấp đôi / hỏi hợp đồng pháp lý
→ chuyển escalator ngay (dùng skill `handoff-escalate`).
## Khi nào chuyển escalator
Dùng skill `handoff-escalate` nếu:
1. Khách đã 3 lần nhắc lại cùng 1 vấn đề mà bạn chưa giải quyết.
2. Có từ khóa: "kiện", "pháp lý", "gấp đôi", "gian lận", "lừa đảo".
3. Case liên quan > 2 đơn hàng cùng lúc.
Viết file này bằng một lệnh:
cat > ~/.openclaw/workspace-cs-triage/SOUL.md <<'EOF'
# SOUL — cs-triage
## Who you are
Bạn là Bống, lễ tân ảo của shop ABC...
(paste nội dung ở trên)
EOF
Tương tự, viết IDENTITY.md cho khách hàng thấy tên đúng:
cat > ~/.openclaw/workspace-cs-triage/IDENTITY.md <<'EOF'
Name: Bống (Lễ tân shop ABC)
Emoji: 🌸
Vibe: Thân thiện, gọn gàng, nhanh nhẹn
EOF
Apply identity từ file:
openclaw agents set-identity --agent cs-triage --from-identity
Làm tương tự cho cs-responder (gợi ý: tên "Hà", vibe "chuyên nghiệp, chi tiết") và cs-escalator (tên "Anh Minh", vibe "điềm tĩnh, quyết đoán"). Giọng điệu khác nhau để khách cảm nhận được sự chuyển cấp.
3.6. Tạo 2 skill tối thiểu
Skill là đơn vị "kỹ năng" của agent — mỗi skill là một thư mục có SKILL.md ở gốc. Ta cần 2 skill cho case study:
Skill 1: ecom-lookup — tra cứu đơn hàng/sản phẩm
mkdir -p ~/.openclaw/skills/ecom-lookup
cat > ~/.openclaw/skills/ecom-lookup/SKILL.md <<'EOF'
---
name: ecom-lookup
description: Tra cứu đơn hàng, sản phẩm, tồn kho từ API shop ABC
metadata:
openclaw:
requirements:
env: [SHOP_API_KEY]
---
# Ecom Lookup
## Khi nào dùng
- Khách hỏi trạng thái đơn hàng (có mã dạng SHOP\d+)
- Khách hỏi còn hàng không, giá sản phẩm
- Kiểm tra chính sách đổi trả của sản phẩm X
## Cách làm
Gọi API shop qua `curl`:
\```bash
curl -H "X-API-Key: $SHOP_API_KEY" \
https://api.shop-abc.vn/v1/orders/SHOP12345
\```
Trả về: trạng thái (PENDING/SHIPPED/DELIVERED), ngày giao dự kiến, tracking.
## Format trả lời
"Đơn {code} của anh/chị đang {trạng thái}, dự kiến giao {ngày}.
Tracking: {link}."
EOF
Skill 2: handoff-escalate — chuyển case sang escalator
mkdir -p ~/.openclaw/skills/handoff-escalate
cat > ~/.openclaw/skills/handoff-escalate/SKILL.md <<'EOF'
---
name: handoff-escalate
description: Chuyển case phức tạp sang cs-escalator qua Slack channel
---
# Handoff Escalate
## Khi nào dùng
Khi SOUL.md yêu cầu chuyển cấp (từ khóa nguy hiểm, khách bức xúc,
case > 2 đơn).
## Cách làm
1. Tóm tắt case hiện tại thành 3-5 dòng.
2. Post vào Slack channel `escalations` qua webhook:
\```bash
curl -X POST $SLACK_WEBHOOK_ESCALATIONS \
-d '{"text": "[HANDOFF từ cs-triage]\n{summary}\n\nLast message: {msg}"}'
\```
3. Trả cho khách: "Em đang chuyển anh/chị cho quản lý Minh,
sẽ có phản hồi trong 5-10 phút ạ."
EOF
Enable skill trong config (bước kế tiếp) và set biến môi trường:
export SHOP_API_KEY="your-shop-api-key"
export SLACK_WEBHOOK_ESCALATIONS="https://hooks.slack.com/services/..."
3.7. Gom tất cả vào openclaw.json
File ~/.openclaw/openclaw.json là nơi bạn "dây điện" cho mọi thứ. Mở file (tạo mới nếu chưa có) và paste:
{
agents: {
// Mặc định dùng Sonnet + fallback cross-provider
defaults: {
model: {
primary: "anthropic/claude-sonnet-4-6",
fallbacks: ["openai/gpt-5.4", "anthropic/claude-haiku-4-5"],
},
skills: ["ecom-lookup"], // baseline cho mọi agent
},
list: [
// Lễ tân — rẻ, nhanh, biết handoff
{
id: "cs-triage",
model: {
primary: "anthropic/claude-haiku-4-5",
fallbacks: ["openai/gpt-5.4-mini"],
},
skills: ["ecom-lookup", "handoff-escalate"],
},
// Nhân viên — xử lý case tư vấn / email
{
id: "cs-responder",
model: {
primary: "anthropic/claude-sonnet-4-6",
fallbacks: ["openai/gpt-5.4"],
},
skills: ["ecom-lookup", "email-composer"],
},
// Quản lý — case nặng, dùng Opus
{
id: "cs-escalator",
model: {
primary: "anthropic/claude-opus-4-6",
fallbacks: ["openai/gpt-5.4-pro", "anthropic/claude-sonnet-4-6"],
},
skills: [
"ecom-lookup",
"email-composer",
"ticket-create", // tự viết thêm nếu cần
"legal-lookup",
],
},
],
},
// Enable skill + inject env
skills: {
entries: {
"ecom-lookup": {
enabled: true,
apiKey: { source: "env", provider: "default", id: "SHOP_API_KEY" },
},
"handoff-escalate": {
enabled: true,
env: { SLACK_WEBHOOK_ESCALATIONS: "" }, // đọc từ host env
},
},
},
}
Restart OpenClaw gateway để áp dụng:
openclaw gateway restart
3.8. Bind channel — quyết định tin nào vào agent nào
Binding có format channel:accountId. Phần accountId là tên tài khoản/bot bạn đã cấu hình trong plugin channel (Telegram bot name, Messenger page ID, Discord guild...). Nếu bạn mới chỉ có 1 tài khoản Telegram tên shop-bot:
# Mọi tin Telegram đến bot shop-bot → cs-triage (lễ tân)
openclaw agents bind --agent cs-triage --bind telegram:shop-bot
# Messenger page "shop-abc-fb" → cs-triage
openclaw agents bind --agent cs-triage --bind messenger:shop-abc-fb
# Discord channel VIP "premium" → responder thẳng (khách VIP không qua triage)
openclaw agents bind --agent cs-responder --bind discord:premium
# Slack channel "escalations" → escalator (đây là channel nội bộ,
# handoff-escalate skill sẽ post vào đây)
openclaw agents bind --agent cs-escalator --bind slack:escalations
Verify:
openclaw agents bindings --json
Bạn sẽ thấy JSON với channel, accountId, agentId cho từng binding.
3.9. Kịch bản thật — tin nhắn "Đơn SHOP12345 đâu rồi em?"
Đây là điều xảy ra khi khách nhắn vào Zalo/Telegram:
1. Tin nhắn đến Telegram bot shop-bot
2. OpenClaw Gateway thấy binding telegram:shop-bot → cs-triage
3. cs-triage (Haiku) load context:
- SOUL.md (Bống, tone thân thiện...)
- IDENTITY.md (tên hiển thị "Bống")
- Skill allowlist: [ecom-lookup, handoff-escalate]
4. Haiku phân tích tin:
- Có mã "SHOP12345" → match với ecom-lookup
- Intent: hỏi trạng thái đơn
5. Agent gọi skill ecom-lookup → cURL API → JSON:
{status: "SHIPPED", eta: "2026-04-22"}
6. Agent trả: "Đơn SHOP12345 của anh đang trên đường giao,
dự kiến 22/04 ạ 🌸 Anh cần gì thêm không em?"
Token tiêu thụ: ~800 input + 80 output = 880 token. Với Haiku 4.5 ($1/1M input, $5/1M output), tin này tốn ≈ $0.0012 — chưa tới 30 VND.
3.10. Kịch bản handoff — "Shop lừa đảo, tôi sẽ kiện!"
1. Tin vào telegram:shop-bot → cs-triage
2. cs-triage đọc SOUL.md → phát hiện từ khóa "kiện", "lừa đảo"
3. Agent trigger skill handoff-escalate:
- Tóm tắt: "Khách bức xúc về đơn SHOP9999, yêu cầu bồi thường,
đe doạ kiện. Đơn hàng đã giao nhưng khách không nhận được."
- POST vào Slack webhook → xuất hiện trong channel #escalations
4. cs-triage trả khách: "Em đã chuyển anh cho quản lý Minh,
anh chờ 5-10 phút nhé ạ."
5. Channel slack:escalations đã bind → cs-escalator
6. cs-escalator (Opus) nhận tin handoff, đọc context đầy đủ,
có quyền gọi skill ticket-create để mở case pháp lý nội bộ,
soạn phản hồi chỉn chu + hướng xử lý cho team.
Bạn có thể xem handoff này trên dashboard OpenClaw (Web UI mặc định ở http://localhost:3030) — sessions của 2 agent được lưu riêng, không nhiễm nhau.
3.11. Những điều NGÀY ĐẦU hay sai
Bind cùng 1 channel vào 2 agent. Không làm được — binding là 1-1. Nếu muốn VIP vào responder, phải tách tài khoản/channel VIP riêng.
Quên enable skill trong openclaw.json. Skill tồn tại ở thư mục nhưng không bật trong skills.entries → agent không thấy. Dùng openclaw skills list để verify.
SOUL.md quá dài. Nhớ: file này inject mỗi session. Giữ dưới 500 token (≈ 400 từ). Nguyên tắc, hướng dẫn, giới hạn — không phải luận văn.
Đặt ID agent là main. Reserved — OpenClaw từ chối. Dùng tên riêng như cs-triage.
Không restart gateway sau khi sửa openclaw.json. File config chỉ load lúc start. Luôn openclaw gateway restart sau khi đổi.
Agent không có fallback. Anthropic đôi khi rate limit đột ngột. Luôn cấu hình ít nhất 1 fallback, ưu tiên cross-provider.
4. So sánh chi phí thực tế
Giả định: 10.000 tin nhắn/tháng, trung bình 1.500 token input + 500 token output mỗi tin.
Cách cũ (1 agent dùng Opus cho tất cả): 20M token × pricing Opus 4.6 (~$15 input, ~$75 output per 1M) = ~$450/tháng.
Cách multi-agent (phân bổ 70-20-10):
- 70% qua Haiku 4.5 (14M token × ~$1 input + ~$5 output/1M) = ~$25
- 20% qua Sonnet 4.6 (4M token × ~$3 input + ~$15 output/1M) = ~$35
- 10% qua Opus 4.6 (2M token × ~$15 input + ~$75 output/1M) = ~$65
- Tổng: ~$125/tháng
Tiết kiệm ~$325/tháng (-72%). Ở quy mô 50.000 tin nhắn/tháng, tiết kiệm ~$1.600/tháng.
Thêm vào đó, OpenClaw hỗ trợ API key rotation qua ANTHROPIC_API_KEYS và OPENCLAW_LIVE_<PROVIDER>_KEY — khi một key bị rate limit, hệ thống tự retry với key tiếp theo. Kết hợp với fallback cross-provider, bạn hiếm khi bị "chết" API giữa peak traffic.
5. Áp dụng cho các business domain khác
Pattern "multi-agent chuyên biệt + channel routing + model theo độ khó" áp dụng được cho phần lớn SaaS/e-commerce. Vài ví dụ:
Thương mại điện tử mở rộng. Tách thêm cs-marketing (viết content, A/B copy — Sonnet), cs-inventory (kiểm kho, báo hết hàng — Haiku), cs-analytics (phân tích sales weekly — Opus, chỉ chạy cron). Mỗi agent bind vào một Telegram group riêng cho team thấy.
SaaS technical support. tech-triage (Haiku — phân loại bug vs. feature request), tech-docs (Sonnet — trả lời từ docs qua RAG skill), tech-dev (Opus — debug code khách gửi, reproduce issue). Channel binding: Discord server support → triage, nhưng channel bug-reports → dev agent thẳng.
Content & marketing. content-writer (Sonnet — viết draft), content-editor (Sonnet — edit + SEO), content-reviewer (Opus — review chất lượng cuối). Pipeline qua shared workspace: writer save file → editor đọc file → reviewer duyệt.
DevOps & monitoring. ops-monitor (Haiku — đọc log, alert thường xuyên), ops-investigator (Sonnet — deep-dive alert), ops-oncall (Opus — incident response khi page). Channel binding: PagerDuty/Telegram critical → oncall, Telegram monitoring → monitor.
Nguyên tắc chung: tần suất cao + logic đơn giản → Haiku. Tần suất trung bình + cần context → Sonnet. Tần suất thấp + logic phức tạp → Opus.
6. Checklist tối ưu multi-agent
Một hệ thống multi-agent "sạch" trên OpenClaw thường có các đặc điểm:
Mỗi agent có workspace riêng (--workspace ~/.openclaw/workspace-<name>) — không share để tránh session nhiễm nhau.
Mỗi agent có skill allowlist rõ ràng qua agents.list[].skills — agent triage không nên có skill ticket-create, escalator không nên thấy skill debug-code trừ khi cần.
Primary + ít nhất 1 fallback cross-provider trong mọi agent quan trọng — Anthropic chính, OpenAI dự phòng (hoặc ngược lại).
API key rotation cho traffic lớn: ANTHROPIC_API_KEYS="k1,k2,k3", đặc biệt với Haiku khi gọi nhiều.
Channel binding rõ ràng — kiểm tra định kỳ bằng openclaw agents bindings --json, đảm bảo không có binding cũ trỏ sai agent.
Identity riêng (openclaw agents set-identity --agent cs-triage --name "Hỗ trợ OnMay") — khách hàng thấy chatbot có tên, tăng trust.
Tracking chi phí — OpenClaw log usage per agent; định kỳ kiểm tra xem có agent nào đang "đốt" Opus cho việc lẽ ra Haiku làm được không.
Bắt đầu trên OnMay
OpenClaw cài sẵn trên mọi VPS OnMay. Gói Pro 229K/tháng (4 vCPU, 4GB RAM) đủ chạy 3-5 agent đồng thời cho hệ thống hỗ trợ khách hàng quy mô vừa. Chỉ cần tạo VPS, set ANTHROPIC_API_KEY và OPENAI_API_KEY qua env, chạy openclaw onboard, và copy config ở trên làm điểm xuất phát.