❤️ AZDIGI chính thức cập nhật hệ thống blog mới hoàn chỉnh. Tuy nhiên có thể một số bài viết bị sai lệch hình ảnh, hãy ấn nút Báo cáo bài viết ở cuối bài để AZDIGI cập nhật trong thời gian nhanh nhất. Chân thành cám ơn.

$490 trong 3 ngày. Đó là con số thật từ session Telegram của một người dùng OpenClaw chạy Claude Max 20x plan (là AZDIGI đó). Trung bình $160/ngày chỉ cho một AI assistant hoạt động 24/7. Và mình nghĩ việc này không hiếm với những người mới bắt đầu sử dụng OpenClaw.

Vấn đề không phải do OpenClaw tốn kém, mà vấn đề là cấu hình mặc định chưa được tối ưu cho việc chạy dài hạn. Sau khi audit và điều chỉnh, chi phí giảm xuống còn khoảng $50-70/ngày, tiết kiệm gần 70% cho background tasks.

Bài này mình sẽ đi qua từng bước: từ cách hiểu token hoạt động ra sao, cách audit usage, đến 4 fix cụ thể đã áp dụng. Tất cả dựa trên số liệu thật. Nếu bạn chưa cài OpenClaw, xem hướng dẫn cài đặt OpenClaw từ A tới Z trước.

Hiểu cách tính token: tại sao cache miss đắt gấp 10 lần

Trước khi sửa gì, bạn cần hiểu cách API tính tiền. Có 3 loại token chính:

  • Input tokens: toàn bộ nội dung gửi lên API mỗi lượt, bao gồm system prompt, lịch sử hội thoại, tool outputs
  • Output tokens: phần AI trả lời. Với Claude Opus 4.5/4.6, giá $25/triệu token output
  • Cache hit vs cache miss: đây là phần quan trọng nhất

Hiểu nhanh thì: khi bạn gửi tin nhắn, API sẽ kiểm tra xem phần đầu của input có giống lượt trước không. Nếu giống (cache hit), giá rẻ hơn khoảng 10 lần so với phải đọc lại toàn bộ (cache miss).

Với Claude Opus 4.5/4.6 (pricing chính thức từ Anthropic, cập nhật tháng 3/2026):

  • Input: $5/triệu tokens
  • Cache read (hit): $0.50/triệu tokens (rẻ hơn 10x so với input)
  • Cache write (5 phút): $6.25/triệu tokens
  • Cache write (1 giờ): $10/triệu tokens
  • Output: $25/triệu tokens

Nôm na là: nếu context của bạn phình đến 639K tokens và bị cache miss, một turn đơn lẻ có thể tốn $3-4. Nhân lên 1574 turns trong 3 ngày, con số $490 không hề vô lý.

💡 Cache miss thường xảy ra khi context thay đổi nhiều giữa các turn, ví dụ compaction chạy, tool output dài, hoặc system prompt bị inject lại khác đi.

Audit thực tế: kiểm tra bạn đang tốn bao nhiêu

Bước đầu tiên luôn là đo lường. OpenClaw có sẵn vài cách để bạn kiểm tra usage:

1. Xem tổng quan hệ thống:

openclaw status

Lệnh này cho bạn thấy model đang dùng, số sessions active, heartbeat interval, và trạng thái gateway.

2. Kiểm tra danh sách cron jobs:

openclaw cron list

Xem có bao nhiêu cron job đang chạy, tần suất, và model nào được gán. Đây thường là nguồn tốn token “ẩn” mà nhiều người bỏ qua.

3. Xem session transcript:

Mỗi session được lưu dạng JSONL trong ~/.openclaw/agents/main/sessions/. Cost nằm trong field message.usage.cost.total (đơn vị USD). Dùng script Python để phân tích:

# Liệt kê cost mỗi turn (chạy trong thư mục sessions)
cat SESSION_ID.jsonl | python3 -c "
import sys, json
for line in sys.stdin:
    d = json.loads(line)
    total = d.get('message', {}).get('usage', {}).get('cost', {}).get('total', 0)
    if total > 0:
        ts = d.get('timestamp', '')[:19]
        role = d.get('message', {}).get('role', '?')
        print(f'{ts} | {role} | \${total:.4f}')
"
# Chỉ hiện turn > $1
cat SESSION_ID.jsonl | python3 -c "
import sys, json
for line in sys.stdin:
    d = json.loads(line)
    total = d.get('message', {}).get('usage', {}).get('cost', {}).get('total', 0)
    if total > 1:
        print(f'\${total:.2f} - {d.get(chr(39)timestamp chr(39), chr(39) chr(39))[:19]}')
"

Trong case study này, audit cho thấy:

  • 1574 turns trong 3 ngày, trung bình $0.31/turn
  • 114 turns tốn hơn $1 mỗi turn (cache miss, context phình)
  • Context cao nhất đạt 639K tokens
  • 6 cron jobs + heartbeat mỗi giờ, tất cả chạy Opus
  • System prompt 19KB inject mỗi turn

Tối ưu #1: Chọn đúng model cho đúng việc

So sánh chi phí giữa Claude Opus, Sonnet và Gemini Flash

Sai lầm lớn nhất của mình là dùng Claude Opus ($25/M output) cho mọi thứ. Opus là model mạnh nhất, nhưng bạn có cần nó để check lịch Google Calendar không? Hay để đọc RSS feed?

Nguyên tắc đơn giản:

  • Claude Opus: suy luận phức tạp, coding khó, phân tích sâu. Dùng cho session chính khi bạn chat trực tiếp
  • Claude Sonnet: task thông thường, input $3/M và output $15/M (rẻ hơn đáng kể so với Opus). Đủ tốt cho cron jobs, tóm tắt tin, check email
  • Gemini Flash / GPT-5 Mini: task đơn giản, phân loại, extract data. Rẻ nhất

Trong OpenClaw, bạn gán model cho từng cron job bằng CLI:

openclaw cron add \
  --name "gcal-check" \
  --every "3h" \
  --session isolated \
  --message "Check Google Calendar..." \
  --model anthropic/claude-sonnet-4-20250514 \
  --announce

Hoặc nếu đã có sẵn cron jobs đang chạy Opus, bạn nhờ bot qua chat: “Chuyển tất cả cron jobs sang dùng Sonnet”. Bot sẽ tự update lại.

6 cron jobs trong case study đã được chuyển toàn bộ từ Opus sang Sonnet:

  • panot-gcal-check: check lịch mỗi 3 giờ
  • vn-morning-news: tin sáng lúc 7h
  • feedly-digest: tóm tắt RSS lúc 8h

Kết quả: chi phí background tasks giảm khoảng 80% chỉ từ việc đổi model.

💡 Thêm fallback chain cũng giúp ích. OpenClaw hỗ trợ failover 2 giai đoạn: đầu tiên xoay auth profile trong cùng provider (round-robin, ưu tiên OAuth trước API key), nếu tất cả profile fail mới chuyển sang model tiếp theo trong danh sách fallbacks. Cooldown tăng dần theo exponential: 1 phút → 5 phút → 25 phút → 1 giờ (cap). Auth profile còn được pin per-session để giữ cache warm, tránh miss không cần thiết.

Tối ưu #2: Tối ưu Heartbeat và Cron

Heartbeat là cơ chế OpenClaw dùng để giữ kết nối và kiểm tra xem có task nào cần xử lý không. Mặc định, nếu bạn set heartbeat mỗi 1 giờ, đó là 24 API calls/ngày chỉ để hỏi “có gì mới không?”.

Với Opus, mỗi heartbeat turn tốn khoảng $0.20-0.50 (tuỳ context size). 24 turns/ngày = $5-12/ngày chỉ cho heartbeat.

Giải pháp: tăng interval từ 1h lên 3h, bật lightContext.

Thay đổi trong config ~/.openclaw/openclaw.json:

{
  "agents": {
    "defaults": {
      "heartbeat": {
        "every": "3h",
        "lightContext": true
      }
    }
  }
}

💡 lightContext: true chỉ inject HEARTBEAT.md vào context mỗi heartbeat turn, bỏ qua AGENTS.md (10.5KB), SOUL.md, TOOLS.md. Giảm đáng kể token mỗi heartbeat mà không ảnh hưởng chức năng.

Giảm từ ~24 xuống ~8 turns/ngày. Tiết kiệm ~16 Opus turns, khoảng $3-8/ngày riêng phần heartbeat.

Cron jobs cũng cần xem lại tần suất. Hỏi bản thân: có thật sự cần check lịch mỗi 3 giờ không? Tin tức mỗi ngày 2 lần có đủ không? Mỗi cron turn không chỉ tốn token output, mà còn load lại context, đọc workspace files, inject system prompt.

⚠️ Đừng set heartbeat quá dài (>6h) nếu bạn cần bot phản hồi nhanh. 3h là mức cân bằng tốt giữa chi phí và độ responsive.

Tối ưu #3: Context management, compaction và pruning

So sánh context trước và sau khi tối ưu

Đây là phần tác động lớn nhất. Context phình to = mỗi turn gửi nhiều token hơn = tốn tiền hơn. Và khi context thay đổi đột ngột (do compaction hoặc tool output mới), cache bị miss, chi phí nhảy lên gấp 10 lần.

Compaction mode: hiểu đúng cách hoạt động

OpenClaw có 2 chế độ compaction để nén lịch sử hội thoại khi context vượt threshold (contextWindow - reserveTokens):

  • default: dùng standard summarization, tóm tắt toàn bộ lịch sử cũ thành 1 summary duy nhất. Nhanh, gọn, phù hợp đa số trường hợp.
  • safeguard: dùng chunked summarization, chia lịch sử thành từng chunk nhỏ rồi tóm tắt từng phần riêng. Giữ context chính xác hơn cho session dài và phức tạp.

Cả hai mode đều auto-compact khi context vượt threshold. Khác nhau ở kỹ thuật tóm tắt. Vấn đề thật sự là: context phình nhanh do tool outputs lớn + nhiều turns liên tục, compact rồi vẫn phình lại nhanh.

{
  "agents": {
    "defaults": {
      "compaction": {
        "mode": "safeguard",
        "model": "anthropic/claude-sonnet-4-20250514"
      }
    }
  }
}

💡 Bạn có thể set model riêng cho compaction bằng key compaction.model. Dùng Sonnet thay Opus cho bước tóm tắt sẽ tiết kiệm đáng kể mà chất lượng summary vẫn tốt.

Compaction vs Pruning: hai cơ chế khác nhau

Nhiều người nhầm lẫn compaction và pruning. Thực ra đây là hai cơ chế bổ sung nhau:

  • Compaction: tóm tắt lịch sử cũ, lưu vĩnh viễn vào transcript JSONL, giải phóng context cho turns sau.
  • Session pruning: cắt bớt tool outputs cũ, chỉ ảnh hưởng in-memory cho turn hiện tại, không sửa transcript.

Pruning giảm bloat ngắn hạn (turn hiện tại gọn hơn), compaction giảm tích luỹ dài hạn (session không phình mãi). Kết hợp cả hai cho hiệu quả tốt nhất.

Context pruning TTL: 1h → 30 phút

Tool outputs (kết quả từ search, file read, API calls) được giữ trong context một thời gian trước khi bị prune. Giảm TTL từ 1 giờ xuống 30 phút nghĩa là dữ liệu cũ bị loại bỏ sớm hơn, giữ context gọn hơn.

{
  "agents": {
    "defaults": {
      "contextPruning": {
        "mode": "cache-ttl",
        "ttl": "30m"
      }
    }
  }
}

Trim workspace files

System prompt trong case study này nặng ~19KB, trong đó AGENTS.md chiếm 10.5KB. Mỗi turn, toàn bộ nội dung này được inject vào context. Với 1574 turns, đó là hàng triệu tokens chỉ cho system prompt.

Giải pháp: rà soát và cắt bớt AGENTS.md. Giữ lại phần thiết yếu, chuyển chi tiết vào các file riêng mà agent có thể đọc khi cần (thay vì load sẵn mỗi turn).

💡 30 skills loaded = 30 đoạn description nhồi vào system prompt. Xem lại xem thật sự cần bao nhiêu skill active, disable những cái ít dùng.

Fix #4: Sub-agent pattern và skill optimization

OpenClaw hỗ trợ spawn sub-agent, tức là tạo session con chạy riêng cho một task cụ thể. Tại sao điều này tiết kiệm token?

Khi bạn làm mọi thứ trong một session chính, context cứ phình lên. Research dài, viết bài, đọc file, tất cả đều nằm trong cùng một context. Mỗi turn sau đó phải gửi lại toàn bộ lịch sử này.

Khi cần task nặng (research, viết bài dài), bạn nhờ bot spawn sub-agent. Ví dụ nói: “Dùng Sonnet nghiên cứu về X, trả tóm tắt 500 từ”. Sub-agent chạy trong session riêng với context sạch, kết quả trả về session chính chỉ là bản tóm tắt ngắn.

  • Task nặng (research, viết bài) chạy trong session riêng với context sạch
  • Kết quả trả về session chính chỉ là bản tóm tắt ngắn
  • Context session chính không bị phình bởi dữ liệu trung gian
  • Sub-agent có thể dùng model rẻ hơn (Sonnet cho draft, Opus cho review)

Ngoài ra, rà soát lại skills. Mỗi skill active sẽ thêm description vào system prompt. 30 skills = thêm vài KB mỗi turn. Disable skill không dùng thường xuyên, chỉ enable khi cần. Nếu bạn muốn hiểu sâu hơn về cách tạo và quản lý skills, xem bài hướng dẫn Skills cho OpenClaw.

Bảng so sánh kết quả trước và sau khi tối ưu

Dưới đây là tổng hợp thay đổi và tác động ước tính:

Hạng mục Trước Sau Tiết kiệm
Heartbeat interval 1 giờ (~24 turns/ngày) 3 giờ (~8 turns/ngày) ~67%
Cron model Opus ($25/M output) Sonnet ($15/M output) ~80%
Compaction mode default (không set model riêng) safeguard + compaction.model Sonnet Tóm tắt chính xác hơn, tiết kiệm chi phí compaction
Pruning TTL 1 giờ 30 phút Context gọn hơn
Fallback chain Không có openai-codex/gpt-5.4 Giảm retry cost
Context peak 639K tokens ~150K tokens ~76%
Chi phí/ngày (ước tính) ~$160 ~$50-70 ~56-69%

Con số tiết kiệm cụ thể:

  • Background tasks (heartbeat + cron): giảm ~70%
  • Session chính: giảm ~40-50% nhờ context nhỏ hơn, ít cache miss
  • Tổng chi phí: từ ~$160/ngày xuống ~$50-70/ngày

💡 Những thay đổi này không ảnh hưởng chất lượng session chính. Bạn vẫn dùng Opus cho chat trực tiếp và task phức tạp. Chỉ các task nền và cách quản lý context được tối ưu.

Checklist tối ưu nhanh

Nếu bạn đang chạy OpenClaw 24/7, đây là danh sách kiểm tra nhanh:

  1. Audit trước: chạy openclaw statusopenclaw cron list, xem model nào đang gán cho task nào
  2. Cron jobs: chuyển sang Sonnet cho tất cả task không cần suy luận phức tạp
  3. Heartbeat: tăng interval lên 3h (hoặc ít nhất 2h), bật lightContext: true
  4. Compaction: chọn mode phù hợp (default cho nhanh, safeguard cho session dài), set compaction.model dùng Sonnet
  5. Pruning TTL: giảm xuống 30 phút
  6. System prompt: rà soát AGENTS.md, cắt bớt phần không cần thiết
  7. Skills: disable skill ít dùng
  8. Fallback: thêm fallback model để tránh retry tốn kém khi rate limit (xem thêm cách kết nối nhiều model AI)
  9. Sub-agents: dùng sub-agent cho task nặng thay vì chạy hết trong session chính

Nâng cấp thêm: OpenViking cho ai dùng API key

Tất cả tối ưu ở trên áp dụng cho mọi người dùng OpenClaw, dù bạn đang trả subscription hay dùng API key. Nhưng nếu bạn đang trả per-token qua API key (không phải subscription), còn một bước nữa có thể giảm chi phí đáng kể.

OpenViking là context database mã nguồn mở từ Volcengine (ByteDance), thiết kế riêng cho AI Agent. Thay vì nhồi toàn bộ memory vào context mỗi turn, OpenViking tổ chức context theo 3 tầng:

  • L0 (Abstract): khoảng 100 tokens, dùng cho search nhanh
  • L1 (Overview): khoảng 2K tokens, dùng cho rerank
  • L2 (Detail): nội dung đầy đủ, chỉ load khi thật sự cần

Phần lớn thời gian, agent chỉ cần L0 và L1. Nội dung chi tiết (L2) chỉ được kéo vào khi cần thiết. Kết quả: input tokens giảm mạnh so với cách nhồi hết vào context.

Benchmark thực tế trên LoCoMo10 dataset (1540 cases):

  • OpenClaw gốc (memory-core): 35.65% task completion, 24.6M input tokens
  • OpenClaw + OpenViking: 52.08% task completion, 4.3M input tokens

Tăng gần 50% task completion, giảm 83% input tokens. Không chỉ rẻ hơn mà còn chính xác hơn, vì agent lấy đúng context thay vì bị ngập trong memory thừa.

Khi nào nên dùng OpenViking:

  • Bạn dùng API key trả per-token (không phải subscription). Giảm 83% input tokens = tiết kiệm tiền thật
  • Agent cần nhớ lượng lớn context: hàng trăm tài liệu, nhiều project, customer data
  • Memory retrieval hiện tại (SQLite FTS) trả kết quả chưa đủ chính xác

Khi nào chưa cần:

  • Bạn dùng subscription (Claude Pro/Max, ChatGPT Pro). Token input không tính tiền riêng, giảm token ít ý nghĩa về chi phí
  • Nhu cầu memory đơn giản: chat hàng ngày, vài project nhỏ
  • Không muốn thêm hạ tầng phải bảo trì. OpenViking cần server riêng + embedding API + VLM API

💡 Nếu bạn đang dùng subscription và hay bị rate limit, OpenViking cũng giúp ích vì context nhỏ hơn = mỗi turn tốn ít quota hơn. Nhưng lợi ích rõ ràng nhất vẫn là cho người dùng API key.

Mình đã viết bài hướng dẫn chi tiết cách cài OpenViking và tích hợp với OpenClaw: Hướng dẫn cài đặt OpenViking cho OpenClaw.

Kết luận

Chạy AI assistant 24/7 không nhất thiết phải đắt. Phần lớn chi phí đến từ cấu hình chưa hợp lý: model quá mạnh cho task đơn giản, context phình không kiểm soát, heartbeat và cron tốn token ẩn.

Bốn thay đổi chính (chọn đúng model, tối ưu heartbeat/cron, quản lý context, dùng sub-agent) đã giảm chi phí từ ~$160/ngày xuống ~$50-70/ngày. Background tasks giảm 70%. Chất lượng session chính không thay đổi.

Nếu bạn mới bắt đầu, đừng lo. Mặc định của OpenClaw đủ tốt cho phần lớn trường hợp. Những tối ưu này dành cho ai đã chạy dài hạn và muốn kiểm soát chi phí chặt hơn. Nếu bạn đang dùng OpenClaw cho team nhiều người, việc tối ưu càng quan trọng hơn — xem thêm hướng dẫn setup OpenClaw cho team.

Chia sẻ:
Bài viết đã được kiểm duyệt bởi AZDIGI Team

Về tác giả

Trần Thắng

Trần Thắng

Chuyên gia tại AZDIGI với nhiều năm kinh nghiệm trong lĩnh vực web hosting và quản trị hệ thống.

Hơn 10 năm phục vụ 80.000+ khách hàng

Bắt đầu dự án web của bạn với AZDIGI