DEV Community

Cover image for Cách Giảm Chi Phí API Claude (Opus 4.8 và Fable 5)
Sebastian Petrus
Sebastian Petrus

Posted on • Originally published at apidog.com

Cách Giảm Chi Phí API Claude (Opus 4.8 và Fable 5)

Hóa đơn Claude của bạn thường phình lên vì token đầu vào, không phải đầu ra. API không trạng thái, nên mỗi lượt gọi bạn thường gửi lại toàn bộ lịch sử: system prompt, định nghĩa tool, tài liệu đã dán vào và các tin nhắn trước đó. Trong một vòng lặp agent dài hoặc phiên Claude Code, phần ngữ cảnh bị gửi lại này tăng rất nhanh và bị tính phí ở mỗi request.

Dùng thử Apidog ngay hôm nay

Vì vậy, muốn giảm chi phí Claude, hãy tập trung vào 3 hướng: gửi ít token hơn, trả ít tiền hơn cho mỗi token, hoặc tránh gửi lại ngữ cảnh không còn cần thiết. Bài viết này đi theo hướng triển khai: bắt đầu từ các tính năng nội bộ của Claude, sau đó là proxy pxpipe, và cuối cùng là cách dùng API mock khi bạn vẫn đang build/test.

Nếu bạn cần nắm lại nền tảng về cách Claude tính phí, token là gì, cache được tính như thế nào và xử lý theo lô hoạt động ra sao, hãy đọc trước bài giải thích chi phí API Claude của chúng tôi. Bài này chỉ tập trung vào cách cắt giảm hóa đơn.

1. Bật prompt caching cho phần prompt ổn định

Prompt caching thường là thay đổi có tác động lớn nhất với agent, Claude Code hoặc workflow dùng nhiều lượt gọi.

Ý tưởng triển khai:

  1. Tách prompt thành 2 phần:
    • Ổn định: system prompt, tool definitions, tài liệu tham khảo dài.
    • Biến động: user message hiện tại, timestamp, request ID, dữ liệu phiên.
  2. Chỉ cache phần ổn định.
  3. Đảm bảo phần được cache giống hệt nhau ở cấp byte giữa các request.

Prompt caching khớp tiền tố ở cấp byte. Chỉ cần một thay đổi nhỏ trong vùng cache, ví dụ timestamp, session ID, thứ tự tool bị đổi, hoặc request counter, cache sẽ miss và bạn trả lại chi phí đầu vào đầy đủ.

Chi phí cũng cần được hiểu đúng:

  • Đọc từ cache có giá khoảng 0.1x so với input token thông thường.
  • Ghi cache tốn nhiều hơn input token thường:
    • TTL 5 phút: khoảng 1.25x
    • TTL 1 giờ: khoảng 2x
  • Điểm hòa vốn:
    • Cache 5 phút: khoảng 2 request
    • Cache 1 giờ: khoảng 3 request

Nói cách khác: cache chỉ đáng dùng khi tiền tố được tái sử dụng.

Checklist triển khai

  • Không đặt timestamp trong system prompt.
  • Không trộn user-specific data vào phần cache.
  • Giữ thứ tự tool definition ổn định.
  • Không serialize JSON với thứ tự key thay đổi.
  • Theo dõi usage.cache_read_input_tokens.

Ví dụ kiểm tra cache hit:

const response = await client.messages.create({
  model: "claude-opus-4-8",
  max_tokens: 1024,
  messages: [
    {
      role: "user",
      content: "Phân tích đoạn code này..."
    }
  ]
});

console.log(response.usage.cache_read_input_tokens);
Enter fullscreen mode Exit fullscreen mode

Nếu cache_read_input_tokens luôn bằng 0 trong các request lặp lại, tiền tố của bạn đang thay đổi hoặc chưa được cache đúng cách.

Để hiểu sâu hơn cơ chế này, xem lưu trữ cache lời nhắc là gì và hoạt động như thế nào.

2. Chọn model theo tác vụ, không chọn theo thói quen

Một lỗi phổ biến là dùng model lớn cho mọi request. Cách tiết kiệm thực tế hơn là định tuyến request theo độ khó.

Giá hiện tại cho mỗi 1 triệu token:

Mô hình ID mô hình Đầu vào Đầu ra Cửa sổ ngữ cảnh
Fable 5 claude-fable-5 $10 $50 1M
Opus 4.8 claude-opus-4-8 $5 $25 1M
Sonnet 5 claude-sonnet-5 $3 ($2 giới thiệu) $15 ($10 giới thiệu) 1M
Haiku 4.5 claude-haiku-4-5 $1 $5 200K

Cách chọn thực tế:

  • Fable 5: chỉ dùng cho reasoning rất phức tạp, nơi khả năng bổ sung thực sự thay đổi kết quả.
  • Opus 4.8: default hợp lý cho nhiều tác vụ agent, coding và tool-use.
  • Sonnet 5: phù hợp cho production traffic lớn cần chất lượng tốt nhưng chi phí thấp hơn.
  • Haiku 4.5: dùng cho phân loại, trích xuất, routing, phản hồi ngắn hoặc tác vụ cần tốc độ.

Một router đơn giản có thể như sau:

function selectClaudeModel(task: {
  type: "classify" | "extract" | "code" | "agent" | "deep_reasoning";
  latencySensitive?: boolean;
  volume?: "low" | "high";
}) {
  if (task.type === "classify" || task.type === "extract") {
    return "claude-haiku-4-5";
  }

  if (task.volume === "high") {
    return "claude-sonnet-5";
  }

  if (task.type === "deep_reasoning") {
    return "claude-fable-5";
  }

  return "claude-opus-4-8";
}
Enter fullscreen mode Exit fullscreen mode

Lưu ý về Fable 5: nếu một bộ phân loại an toàn từ chối request, tham số beta fallbacks có thể định tuyến lượt đó sang Opus 4.8 và lượt đó được tính theo giá Opus. Đây thường là giảm chi phí, không phải phí bất ngờ, nhưng bạn nên biết khi đọc billing.

Để phân tích kỹ hơn, xem giá của Opus 4.8, giá của Fable 5, và so sánh Fable 5 và Opus 4.8. Nếu bạn đang đánh giá model, xem thêm cách sử dụng Opus 4.8 miễn phígọi API Fable 5.

3. Chuyển workload không realtime sang Batch API

Nếu request không cần trả lời ngay, hãy dùng API xử lý theo lô. Bạn gửi job đến:

/v1/messages/batches
Enter fullscreen mode Exit fullscreen mode

Job chạy bất đồng bộ và bạn lấy kết quả sau. Hầu hết batch hoàn thành trong vòng một giờ, thời gian tối đa là 24 giờ. Giảm giá 50% áp dụng cho cả input token và output token trong batch.

Các workload phù hợp:

  • Chạy evaluation trên test set.
  • Phân loại hoặc trích xuất hàng loạt.
  • Tạo summary, tag hoặc metadata cho dữ liệu cũ.
  • Backfill dữ liệu.
  • Job chạy ban đêm hoặc không nhạy cảm với độ trễ.

Quy tắc đơn giản:

Nếu user đang chờ response -> dùng endpoint đồng bộ.
Nếu job có thể chờ vài phút hoặc vài giờ -> dùng batch.
Enter fullscreen mode Exit fullscreen mode

Nếu một nửa chi phí Claude của bạn đến từ xử lý offline đang chạy qua endpoint đồng bộ, chuyển phần đó sang batch có thể giảm trực tiếp 50% chi phí của workload đó.

4. Đặt effort, max_tokens và dùng count_tokens

Ba cấu hình này giúp giới hạn chi phí từng request.

output_config.effort

output_config.effort có các giá trị:

low, medium, high, xhigh, max
Enter fullscreen mode Exit fullscreen mode

Nó ảnh hưởng đến mức độ model “suy nghĩ” trước khi trả lời. Token dùng cho phần suy nghĩ cũng bị tính phí.

Cách dùng thực tế:

  • Bắt đầu với medium.
  • Chỉ tăng lên high, xhigh hoặc max khi benchmark cho thấy chất lượng tăng rõ.
  • Với phân loại, trích xuất, routing: thử low.

Ví dụ cấu hình theo loại tác vụ:

const effortByTask = {
  classification: "low",
  extraction: "low",
  code_review: "medium",
  agent_loop: "medium",
  hard_reasoning: "high"
} as const;
Enter fullscreen mode Exit fullscreen mode

max_tokens

max_tokens là giới hạn cứng cho output. Nó không làm response ngắn rẻ hơn, nhưng ngăn model trả lời quá dài ngoài ý muốn.

Ví dụ:

const response = await client.messages.create({
  model: "claude-haiku-4-5",
  max_tokens: 300,
  messages: [
    {
      role: "user",
      content: "Trả về JSON gồm sentiment và category cho đoạn text sau..."
    }
  ]
});
Enter fullscreen mode Exit fullscreen mode

Nếu bạn chỉ cần JSON ngắn, đừng để max_tokens là vài nghìn.

count_tokens

Dùng count_tokens để ước tính chi phí trước khi gửi request thật.

Không dùng tiktoken cho Claude. tiktoken là tokenizer của OpenAI và có thể ước tính thiếu token Claude khoảng 15–20%, khiến budget lệch đáng kể.

Luồng triển khai nên là:

build request -> count_tokens -> kiểm tra budget -> gửi request thật
Enter fullscreen mode Exit fullscreen mode

Ví dụ logic:

if (inputTokenCount > MAX_INPUT_TOKENS) {
  throw new Error("Prompt quá lớn, cần rút gọn trước khi gọi Claude");
}
Enter fullscreen mode Exit fullscreen mode

5. Cắt ngữ cảnh bị gửi lại trong agent loop

Vì API không trạng thái, agent loop dài thường gửi lại toàn bộ lịch sử ở mỗi lượt. Sau vài chục lượt, nhiều phần lịch sử không còn hữu ích:

  • Tool result cũ.
  • File đã đọc một lần.
  • Nhánh điều tra đã bị bỏ qua.
  • Log trung gian.
  • Output dài từ command line.

Bạn vẫn trả tiền để gửi lại chúng.

Claude có hai tính năng phía server để giảm phần này:

  • Chỉnh sửa ngữ cảnh: clear_tool_uses_20250919 Xóa các kết quả tool cũ khỏi ngữ cảnh gửi lại.
  • Nén ngữ cảnh: compact_20260112 Tóm tắt lịch sử cũ thành dạng ngắn hơn.

Hai tính năng này giúp bạn tránh tự viết logic tóm tắt hoặc tự cắt mảng message thủ công.

Với Claude Code, đây cũng là vấn đề khiến phiên làm việc chạm giới hạn context giữa chừng. Xem thêm hướng dẫn về cửa sổ token và đặt lại trong Claude Code.

Nguyên tắc billing rất đơn giản: đừng trả tiền để gửi lại ngữ cảnh mà model không còn cần.

6. Thử pxpipe nếu ngữ cảnh của bạn lớn, ổn định và dày đặc

Các cách ở trên giảm hoặc định giá lại token bạn gửi. pxpipe tiếp cận khác: chuyển một số phần ngữ cảnh thành hình ảnh để giảm chi phí token hóa.

pxpipe là gì?

pxpipe là proxy cục bộ, MIT license, viết bằng TypeScript. Nó nằm giữa client của bạn và Anthropic API.

Bạn trỏ:

ANTHROPIC_BASE_URL
Enter fullscreen mode Exit fullscreen mode

vào proxy, sau đó pxpipe kiểm tra và viết lại request trước khi gửi đi.

Cách chạy

Cài và chạy proxy:

npx pxpipe-proxy
Enter fullscreen mode Exit fullscreen mode

Proxy mặc định chạy tại:

127.0.0.1:47821
Enter fullscreen mode Exit fullscreen mode

Chạy Claude Code qua proxy:

ANTHROPIC_BASE_URL=http://127.0.0.1:47821 claude
Enter fullscreen mode Exit fullscreen mode

Nó tiết kiệm bằng cách nào?

pxpipe chuyển các khối lớn, ổn định và dày đặc như system prompt, tool docs hoặc lịch sử cũ thành PNG nhỏ gọn. Nội dung dày đặc có thể đạt khoảng 3,1 ký tự trên mỗi image-token, so với khoảng 1 ký tự trên mỗi text-token.

Dự án báo cáo một ví dụ: system prompt cộng tool docs dài khoảng 48k ký tự chỉ còn khoảng 2,7k image token, so với khoảng 25k token nếu để dạng văn bản.

Quan trọng: pxpipe có logic kiểm tra lợi ích. Nó chỉ chuyển sang hình ảnh khi tính toán token cho thấy có lợi. Văn xuôi thưa sẽ được giữ nguyên dưới dạng text.

Hỗ trợ model

Mặc định, pxpipe chuyển hình ảnh request cho:

  • claude-fable-5
  • GPT 5.6

Opus 4.7/4.8 và GPT 5.5 là tùy chọn, vì dự án báo cáo các model này đọc ngữ cảnh hình ảnh kém hơn đáng kể. Bạn có thể bật bằng biến môi trường:

PXPIPE_MODELS=...
Enter fullscreen mode Exit fullscreen mode

hoặc qua dashboard tại URL proxy.

Các con số tiết kiệm được báo cáo

Đây là số liệu do chính dự án báo cáo, không phải số liệu được xác minh độc lập:

  • Snapshot production tiết kiệm 59%.
  • Hóa đơn 100 USD giảm còn khoảng 41 USD trên 13.709 request.
  • SWE-bench Lite giảm 65% kích thước request.

Hãy coi đây là benchmark của nhà cung cấp và đo lại trên traffic của bạn.

Đánh đổi cần kiểm tra

pxpipe không phải “tiền miễn phí”.

Thứ nhất, nó có thể xung đột với prompt caching. Prompt caching khớp byte theo tiền tố. Khi pxpipe chuyển nội dung thành hình ảnh, byte của request thay đổi. Vì cả hai đều nhắm vào input token, bạn cần benchmark:

cache only vs pxpipe only vs cache + pxpipe
Enter fullscreen mode Exit fullscreen mode

Thứ hai, model đọc phần hình ảnh bằng thị giác. Dự án cũng cảnh báo rằng chuỗi dày đặc như ID hex dài hoặc token chính xác có thể bị đọc sai. Lỗi bỏ sót có thể im lặng, không phải exception.

Thứ ba, đây là proxy bên thứ ba nằm trên đường đi của request. Dù chạy cục bộ, bạn vẫn nên đánh giá theo chính sách bảo mật trước khi đưa production traffic qua nó.

pxpipe đáng thử nếu ngữ cảnh của bạn lớn, dày đặc, lặp lại nhiều lần và bạn có test chất lượng đủ tốt.

7. Mock Anthropic API trong giai đoạn dev/test

Các cách trên giảm chi phí production. Nhưng trong lúc build integration, bạn vẫn có thể đốt token thật cho những thứ không cần model thật:

  • Test parsing response.
  • Test retry logic.
  • Test error handling.
  • CI chạy sau mỗi lần push.
  • Debug request schema.
  • Kiểm tra contract giữa frontend/backend.

Apidog không làm giảm hóa đơn Claude production của bạn, và không nên được hiểu theo hướng đó. Nó giúp giảm chi phí trong vòng lặp phát triển và kiểm thử.

Thay vì gọi Anthropic API thật trong dev/test, hãy mock response bằng Apidog:

  1. Định nghĩa endpoint Claude mà app của bạn đang gọi.
  2. Mô tả request body và response body.
  3. Tạo mock response có cấu trúc giống response thật.
  4. Trỏ test hoặc CI vào mock server.
  5. Chỉ gọi Claude thật ở test tích hợp cuối hoặc staging có kiểm soát.

Ví dụ response mock có thể là:

{
  "id": "msg_mock_001",
  "type": "message",
  "role": "assistant",
  "content": [
    {
      "type": "text",
      "text": "{\"sentiment\":\"positive\",\"category\":\"product_feedback\"}"
    }
  ],
  "model": "claude-haiku-4-5",
  "stop_reason": "end_turn",
  "usage": {
    "input_tokens": 120,
    "output_tokens": 20
  }
}
Enter fullscreen mode Exit fullscreen mode

Điều này giúp bạn kiểm tra parser, schema, retry và CI mà không tiêu tốn token thật.

Cách kết hợp các kỹ thuật

Đừng chọn một kỹ thuật duy nhất. Hãy áp dụng theo thứ tự có tác động cao nhất:

  1. Cache tiền tố ổn định

    Cache system prompt, tool definitions và tài liệu dài. Xác minh bằng cache_read_input_tokens.

  2. Router model theo task

    Dùng Opus 4.8 làm default cho agent/coding, Fable 5 chỉ cho reasoning rất khó, Sonnet 5 cho volume lớn, Haiku 4.5 cho tác vụ đơn giản.

  3. Batch workload offline

    Chuyển job không realtime sang /v1/messages/batches để được giảm 50%.

  4. Giới hạn từng request

    Chọn effort hợp lý, đặt max_tokens, và dùng count_tokens trước khi gửi request lớn.

  5. Cắt ngữ cảnh gửi lại

    Dùng context editing và context compression để agent loop không trả tiền cho lịch sử không còn cần.

  6. Benchmark pxpipe

    Nếu prompt lớn, dày đặc và lặp lại nhiều lần, so sánh pxpipe với prompt caching trên workload thật.

  7. Mock khi build/test

    Dùng API mock cho CI và dev loop để không đốt token thật cho test contract.

Bắt đầu với prompt caching và model routing. Đây thường là hai thay đổi mang lại phần lớn mức giảm chi phí. Sau mỗi thay đổi, đo lại bằng usage và hóa đơn thực tế.

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

Token đầu vào hay đầu ra tốn kém hơn?

Theo từng token, output token đắt hơn input token trên mọi model. Nhưng với agent và coding workflow, input thường chiếm phần lớn hóa đơn vì bạn gửi lại toàn bộ lịch sử ở mỗi lượt.

Prompt caching hay Batch API tiết kiệm hơn?

Tùy workload. Prompt caching có thể tiết kiệm tới khoảng 90% cho tiền tố lặp lại trong luồng tương tác. Batch API giảm 50% cho workload offline. Nhiều hệ thống nên dùng cả hai.

Có nên mặc định mọi request là Fable 5 không?

Không. Fable 5 đắt gấp đôi Opus 4.8 ở cả input và output. Chỉ dùng khi tác vụ thật sự cần khả năng reasoning bổ sung.

pxpipe có cộng dồn với prompt caching không?

Không chắc. Vì pxpipe thay đổi byte của request, nó có thể ảnh hưởng đến cache hit. Hãy benchmark trên prompt thật của bạn thay vì giả định hai kỹ thuật cộng dồn.

Apidog có giảm chi phí Claude production không?

Không. Apidog giúp mock Anthropic API trong dev/test để CI và test không gọi model thật. Nó giảm chi phí phát triển và kiểm thử, không giảm hóa đơn production.

Top comments (0)