Trong tuần chạy OpenClaw, khi kiểm tra lại trên giao diện của Anthropic, tôi nhận được bảng chi tiết sau:
| Ngày | Số Token Sử Dụng | Chi Phí (USD) |
|---|---|---|
| Ngày 1 | 2.1 triệu | $8.40 |
| Ngày 2 | 3.7 triệu | $14.80 |
| Ngày 3 | 4.2 triệu | $16.80 |
| Ngày 4 | 5.1 triệu | $20.40 |
| Ngày 5 | 4.8 triệu | $19.20 |
| Ngày 6 | 3.9 triệu | $15.60 |
| Ngày 7 | 5.5 triệu | $22.00 |
| Tổng cộng | 29.3 triệu | $117.20 (≈ 850 NTD) |
Với mức trung bình mỗi ngày là 121 NTD, tổng cộng trong một tháng sẽ lên đến hơn 3.600 NTD. Điều này chỉ đơn thuần là cho một Agent thực hiện các nhiệm vụ hàng ngày.
Vấn đề không nằm ở OpenClaw mà nằm ở việc bạn không biết rằng tiền mình đã trả cho những gì.
Bài viết này sẽ hướng dẫn tôi qua 6 phương pháp cụ thể giúp giảm chi phí từ 121 NTD xuống còn chỉ 11 NTD mỗi ngày (tỷ lệ giảm 91%) cùng với cấu hình và dữ liệu thực tế.
1. Hiểu rõ Token đã bị tiêu thụ ở đâu?
Trước khi tối ưu, bạn cần xác định rõ nguồn gốc của chi phí. Mỗi lần gọi LLM của OpenClaw sử dụng Token như sau:
┌──────────────────────────────────────────────────┐
│ Thành phần Token mỗi lần gọi LLM │
├──────────────────────────────────────────────────┤
│ System Prompt (tự động tạo bởi OpenClaw) │
│ ├── Mô tả Công cụ (Tool Descriptions) ~2.000 │
│ ├── Các quy tắc an toàn (Safety Guardrails) ~500 │
│ ├── Danh sách Skill + Đường dẫn ~800 │
│ ├── Tiêm các tệp của khu vực làm việc │
│ │ ├── AGENTS.md ~1.500 │
│ │ ├── SOUL.md ~300 │
│ │ ├── USER.md ~200 │
│ │ └── HEARTBEAT.md ~400 │
│ ├── Metadata thời gian chạy ~200 │
│ └── Tổng cộng ~5.900 │
├──────────────────────────────────────────────────┤
│ Lịch sử cuộc trò chuyện (Conversation History) │
│ ├── Tất cả các tin nhắn user/assistant trước đó ~3.000+ │
│ ├── Kết quả tất cả các cuộc gọi công cụ trước đó ~5.000+ │
│ └── Tổng cộng (tăng tuyến tính theo số vòng trò chuyện) ~8.000+ │
├──────────────────────────────────────────────────┤
│ Yêu cầu hiện tại │
│ ├── Tin nhắn người dùng ~100 │
│ └── Nội dung tệp/dính kèm (nếu có) ~2.000+ │
├─────────────────────────────────────────────┤
│ Đầu ra mô hình (Output Tokens) │
│ ├── Suy luận/think ~1.000 │
│ └── Phản hồi cuối cùng + Cuộc gọi công cụ ~500 │
├─────────────────────────────────────────────┤
│ Tổng cộng (một nhiệm vụ đơn giản) ~15.500 │
│ Tổng cộng (một nhiệm vụ phức tạp đa vòng trong một lần gọi) ~50.000+ │
└─────────────────────────────────────────────┘
Phát Hiện Khóa Chìa
Lời nhắc của bạn chỉ chiếm khoảng 1% tổng Token. Phần lớn chi phí đến từ System Prompt (được tiêm vào mỗi yêu cầu) và lịch sử cuộc trò chuyện liên tục mở rộng.
Dùng một ví dụ thực tế - yêu cầu Agent tìm lịch trình hôm nay và gửi thông báo qua Feishu:
| Nguồn Token | Số Token | Tỷ lệ | Có thể tối ưu hóa? |
|---|---|---|---|
| System Prompt | 5.900 | 38% | Có thể cắt ngắn đáng kể |
| Lịch sử cuộc trò chuyện (vòng 10) | 6.200 | 40% | Nén/giảm ngay lập tức |
| Kết quả Tool (API Notion trả về) | 2.800 | 18% | Cắt ngắn kết quả |
| Tin nhắn người dùng | 80 | 0.5% | Đã rất ngắn gọn |
| Đầu ra mô hình | 520 | 3.5% | Có thể kiểm soát mức độ |
Kết luận: Điểm tối ưu hóa chính là System Prompt + Lịch sử cuộc trò chuyện + Kết quả Tool, chứ không phải lời nhắc của bạn.
2. Sáu Phương Pháp Tối Ưu Hóa - Mỗi Bước Có Mã Cấu Hình Và Dữ Liệu Thực Tế
Phương Pháp 1: Reset Session Đúng Thời Gian - Tiết kiệm 40%-60%
Nguyên lý: Lịch sử cuộc trò chuyện của OpenClaw tăng tuyến tính theo mỗi vòng tương tác, sau 10 vòng, lịch sử có thể chiếm từ 8.000 đến 20.000 Token. API LLM là không trạng thái - mỗi yêu cầu đều phải gửi lại toàn bộ lịch sử.
Phương pháp 1: Reset Session trong cuộc trò chuyện (hiệu quả trực tiếp nhất)
Gửi lệnh gạch chéo bất kỳ kênh trò chuyện nào (WhatsApp / Telegram / Discord / Feishu v.v.):
# Reset session hiện tại, xóa lịch sử cuộc trò chuyện, bắt đầu từ đầu
/reset
# Hoặc sử dụng /new, hiệu quả tương tự, có thể chuyển đổi mô hình cùng lúc
/new
/new haiku # Reset và chuyển sang mô hình Haiku
Phương pháp 2: Thực thi một vòng của Agent thông qua CLI (tự phân cách)
Lệnh agent của OpenClaw có thể thực thi các nhiệm vụ một lần thông qua Gateway:
# Thực thi một vòng của agent thông qua Gateway, có thể chọn gửi kết quả đến kênh trò chuyện
openclaw agent --message "Tìm lịch trình hôm nay và gửi thông báo Feishu" --deliver
# Chỉ định kênh đích
openclaw agent --to +15555550123 --message "Tóm tắt công việc hôm nay" --deliver
Phương pháp 3: Tạo Cron Job tự động reset Session
Các công việc Cron của OpenClaw tự động tạo một sessionId mới cho mỗi lần chạy (theo tài liệu chính thức: "Công việc Cron bị cô lập luôn tạo ra một sessionId mới mỗi lần chạy"), do đó công việc định kỳ sẽ không tích lũy lịch sử:
# Quản lý Cron job thông qua CLI
openclaw cron --help
Phương pháp 4: Xóa các Session hết hạn thông qua CLI
# Xem tất cả các Session
openclaw sessions --verbose
# Xem trước việc xóa (không thực hiện xóa)
openclaw sessions cleanup --dry-run
# Thực hiện xóa
openclaw sessions cleanup --enforce
Dữ liệu thực tế:
| Trường hợp | Không reset (vòng 15) | Reset mỗi nhiệm vụ | Tiết kiệm |
|---|---|---|---|
| Tìm lịch trình | 18.200 token | 7.800 token | 57% |
| Gửi thông báo Feishu | 22.500 token | 9.100 token | 60% |
| Tóm tắt tệp | 35.000 token | 15.200 token | 57% |
Phương Pháp 2: Tối Ưu Hóa System Prompt - Tiết kiệm 15%-25%
Nguyên lý: System Prompt tự động tạo bởi OpenClaw chứa nhiều thông tin bạn có thể không sử dụng - mô tả tất cả các công cụ đã đăng ký, đường dẫn của tất cả các kỹ năng, thậm chí cả các tệp khu vực làm việc mà bạn chưa từng sử dụng.
Tệp cốt lõi: AGENTS.md
OpenClaw sẽ tiêm tệp AGENTS.md trong thư mục làm việc vào mỗi System Prompt. Đây là điểm truy cập trực tiếp để kiểm soát System Prompt của bạn.
<!-- AGENTS.md —— Phiên bản tinh gọn -->
<!-- ❌ Không nên viết như thế này -->
# Mô tả dự án
Đây là một dự án tự động hóa toàn diện, bao gồm các module sau:
- Module A: Xử lý các yêu cầu truy vấn lịch trình của người dùng, hỗ trợ nhiều định dạng lịch trình...
- Module B: Gửi thông báo đến Feishu, hỗ trợ tin nhắn văn bản, card, hình ảnh...
- Module C: Đồng bộ dữ liệu, hỗ trợ Notion, Airtable, Google Sheets...
(v.v... bỏ qua 1.200 Token)
<!-- ✅ Nên viết như thế này -->
# Hướng dẫn hoạt động của Agent
- Sử dụng tiếng Việt để phản hồi
- Tìm kiếm ưu tiên sử dụng API Notion
- Gửi thông báo bằng webhook Feishu
- Hoạt động nhạy cảm cần xác nhận
Tối ưu hóa các tệp được tiêm vào System Prompt (show-system-token.sh):
# Xem tất cả các tệp sẽ được tiêm vào System Prompt
ls -la AGENTS.md SOUL.md TOOLS.md IDENTITY.md USER.md HEARTBEAT.md 2>/dev/null
# Tính toán số lượng Token của mỗi tệp (ước lượng thô: 1 chữ cái Trung Quốc ≈ 2 Token)
for f in AGENTS.md SOUL.md TOOLS.md IDENTITY.md USER.md HEARTBEAT.md; do
if [ -f "$f" ]; then
chars=$(wc -c < "$f")
tokens=$((chars * 2 / 3)) # ước lượng thô
echo "$f: ~${tokens} token"
fi
done
Danh sách đề xuất tối ưu hóa:
| Tệp | Mục đích | Chiến lược tối ưu hóa | Số lượng Token mục tiêu |
|---|---|---|---|
| AGENTS.md | Hướng dẫn hoạt động | Chỉ giữ các quy tắc cơ bản, xóa mô tả dư thừa | < 300 |
| SOUL.md | Tính cách/Nghệ thuật ngôn ngữ | Một câu định nghĩa giọng điệu, không viết tiểu phẩm | < 50 |
| USER.md | Hồ sơ người dùng | Chỉ giữ thông tin quan trọng ảnh hưởng đến việc thực hiện nhiệm vụ | < 100 |
| HEARTBEAT.md | Danh sách công việc định kỳ | Chỉ liệt kê các công việc đang hoạt động, xóa các công việc đã hoàn thành | < 200 |
| TOOLS.md | Mô tả bổ sung công cụ | Nếu không có công cụ đặc biệt, xóa tệp này | 0 |
| IDENTITY.md | Định danh của Agent | Nếu không cần đóng vai, xóa tệp này | 0 |
Hiệu quả thực tế: System Prompt từ 5.900 Token giảm xuống còn 2.100 Token, tiết kiệm 3.800 Token mỗi yêu cầu.
Phương Pháp 3: Model Router - Sử dụng Mô hình Lớn để Quyết Định, Mô hình Nhỏ để Thực Thi
Lý do chính gây ra chi phí cao nhất. Ý tưởng chính: không phải mọi nhiệm vụ đều cần một mô hình cấp độ Opus/Sonnet.
OpenClaw hỗ trợ lệnh /model để chuyển đổi mô hình, nhưng việc chuyển đổi thủ công quá phức tạp. Chúng ta cần một cách tự động hóa.
Scheme A: Cấu hình đa mô hình trong openclaw.json
{
"providerChính": "anthropic",
"mô hình": "claude-sonnet-4-5",
"nhàCungCấp": {
"anthropic": {
"apiKey": "sk-ant-xxx"
},
"ollama": {
"baseUrl": "http://127.0.0.1:11434"
}
},
"ghi đèMô hình": {
"heartbeat": "ollama/qwen3-8b",
"classification": "ollama/qwen3-8b",
"simple_lookup": "ollama/qwen3-8b"
}
}
Scheme B: claw-llm-router (tuyến doanh nội bộ)
claw-llm-router là một bộ định tuyến LLM nguồn mở hoạt động cục bộ, nó sẽ phân loại yêu cầu bằng một mô hình nhỏ trước đó định tuyến đến mô hình phù hợp:
# Cài đặt claw-llm-router
pip install claw-llm-router
# Khởi động dịch vụ định tuyến (chạy cục bộ, không gửi dữ liệu đến bên thứ ba)
claw-router start --config router_config.yaml
router_config.yaml:
# router_config.yaml
classifier:
mô hình: "ollama/qwen3-1.7b" # Mô hình phân loại nhỏ, gần như không mất phí
endpoint: "http://127.0.0.1:11434"
tuyến_doanh:
- tên: "đơn giản"
mô tả: "Truy vấn đơn giản, lịch trình, thời tiết, dịch thuật"
đích:
nhàCungCấp: "ollama"
mô hình: "qwen3-8b"
endpoint: "http://127.0.0.1:11434"
- tên: "trung_bình"
mô tả: "Viết mã, soạn thảo tài liệu, phân tích dữ liệu"
đích:
nhàCungCấp: "anthropic"
mô hình: "claude-haiku-3.5"
- tên: "phức_tạp"
mô tả: "Suy luận đa bước, thiết kế kiến trúc, gỡ lỗi phức tạp"
đích:
nhàCungCấp: "anthropic"
mô hình: "claude-sonnet-4-5"
mặc_định:
nhàCungCấp: "anthropic"
mô hình: "claude-sonnet-4-5"
Bảng so sánh chi phí giữa các mô hình (mỗi 1 triệu Token):
| Mô hình | Giá Input | Giá Output | Ứng dụng |
|---|---|---|---|
| Claude Opus 4.6 | $15.00 | $75.00 | Suy luận cực phức tạp (cố gắng tránh) |
| Claude Sonnet 4.5 | $3.00 | $15.00 | Viết mã, soạn thảo tài liệu |
| Claude Haiku 3.5 | $0.80 | $4.00 | Công việc trung bình, tóm tắt, phân loại |
| Qwen3-8B (cục bộ) | $0.00 | $0.00 | Heartbeat, truy vấn đơn giản, phân loại |
Dữ liệu thực tế:
| Loại nhiệm vụ | Trước tối ưu hóa (sử dụng Sonnet) | Sau tối ưu hóa (tuyến doanh) | Tiết kiệm |
|---|---|---|---|
| Kiểm tra heartbeat (mỗi 10 phút) | $0.18/lần | $0.00/lần (cục bộ) | 100% |
| Tìm lịch trình | $0.05/lần | $0.00/lần (cục bộ) | 100% |
| Gửi thông báo Feishu | $0.08/lần | $0.01/lần (Haiku) | 87% |
| Review mã | $0.35/lần | $0.35/lần (Sonnet) | 0% |
| Tổng cộng hàng ngày | $17.20 | $2.80 | 84% |
Phương Pháp 4: Cắt ngắn Kết quả Tool - Tiết kiệm 10%-20%
Nguyên lý: Kết quả trả về của cuộc gọi Tool sẽ được giữ nguyên trong lịch sử cuộc trò chuyện. Một truy vấn API Notion có thể trả về hơn 3.000 Token JSON, nhưng bạn chỉ cần một vài trường.
Scheme: Tiền xử lý kết quả trong Script Skill
Tái cấu trúc lại query_notion.py từ bài viết #07, thêm một lớp cắt ngắn đầu ra:
#!/usr/bin/env python3
"""query_notion_slim.py —— Phiên bản tinh gọn truy vấn Notion, chỉ xuất các trường cần thiết"""
import json
import os
import sys
from urllib.request import Request, urlopen
TOKEN_NOTION = os.environ[