Quay lại blog

AI cho người mớiHướng dẫn

Token đầu vào vs đầu ra: AI API tính phí bạn những gì

Tại sao AI API đếm token đầu vào và đầu ra riêng biệt, nơi đọc chúng trong trường usage, và cách tính chi phí của một yêu cầu.

Bởi CheapTokens TeamĐã xuất bản Đã cập nhật 7 phút đọc

Ảnh bìa với tiêu đề “Token đầu vào vs đầu ra” và dòng “Bạn trả tiền cho cái gì trong một yêu cầu API” trên nền lưới tối
Trên trang này
  1. Cái gì được tính là đầu vào và cái gì được tính là đầu ra
  2. Nơi đọc các con số: khối usage
  3. Tại sao hai phía có giá khác nhau
  4. Công thức
  5. Một ví dụ tính toán với mô hình thực
  6. Sử dụng trong mã nguồn
  7. Cách chi ít token hơn
  8. Những điều cần nhớ

Nếu bạn vừa thực hiện lệnh gọi API đầu tiên tới một mô hình ngôn ngữ, có lẽ bạn đã thấy một khối usage trong phản hồi và tự hỏi chính xác nó đếm cái gì. Câu trả lời ngắn gọn: mỗi yêu cầu có hai đồng hồ đo. Một cái đếm số token bạn gửi đi (đầu vào), cái kia đếm số token mô hình viết trả lại (đầu ra). Mỗi đồng hồ có giá riêng, và chi phí của một yêu cầu là tổng của cả hai.

Hướng dẫn này chỉ ra nơi tìm các con số, cách quy đổi chúng ra đô la, và những gì bạn có thể thay đổi để chi ít hơn. Nếu từ "token" vẫn còn mơ hồ, hãy bắt đầu với Token trong AI là gì?.

Cái gì được tính là đầu vào và cái gì được tính là đầu ra#

Token đầu vào là mọi thứ mô hình phải đọc để trả lời bạn:

  • tin nhắn mới nhất của bạn;
  • system prompt (các chỉ dẫn như "trả lời ngắn gọn, bằng tiếng Anh");
  • các tin nhắn trước đó của cuộc hội thoại, nếu bạn gửi lại chúng;
  • tài liệu, mã nguồn hoặc kết quả tìm kiếm bạn dán vào yêu cầu.

Token đầu ra là mọi thứ mô hình tạo ra để trả lời. Trong định dạng tương thích OpenAI, đây là văn bản trong choices[0].message.content. Một số mô hình ở chế độ suy luận cũng tạo ra token suy luận trước câu trả lời cuối cùng; hãy kiểm tra trang giá của mô hình để xem chúng có được tính như đầu ra hay không.

Điểm quan trọng cho người mới: mô hình không ghi nhớ cuộc trò chuyện của bạn giữa các yêu cầu. Một ứng dụng chat gửi lại toàn bộ lịch sử mỗi lần, vì vậy đầu vào của một cuộc hội thoại dài tăng lên theo từng lượt, ngay cả khi tin nhắn mới của bạn chỉ là một dòng.

Nơi đọc các con số: khối usage#

Mọi phản hồi không streaming từ một API tương thích OpenAI đều kết thúc bằng một đối tượng usage. Đây là một ví dụ minh họa về hình dạng của nó:

json
{
  "choices": [
    { "message": { "role": "assistant", "content": "..." }, "finish_reason": "stop" }
  ],
  "usage": {
    "prompt_tokens": 2000,
    "completion_tokens": 500,
    "total_tokens": 2500
  }
}
Trường Ý nghĩa Tính phí là
prompt_tokens Token trong mọi thứ bạn đã gửi Đầu vào
completion_tokens Token mô hình đã tạo ra Đầu ra
total_tokens prompt_tokens + completion_tokens Không phải một mức giá riêng: nó chỉ là tổng

Một lỗi phổ biến của người mới là nhân total_tokens với một mức giá. Vì đầu vào và đầu ra có giá khác nhau, bạn cần hai con số riêng biệt.

Một số nhà cung cấp thêm các trường bổ sung. Ví dụ, API riêng của DeepSeek cũng tách prompt_tokens thành prompt_cache_hit_tokens và prompt_cache_miss_tokens và, ở chế độ suy luận, báo cáo reasoning_tokens (nguồn: tài liệu API DeepSeek, kiểm tra ngày 21 tháng 10 năm 2026). Ba trường trong bảng là những trường bạn có thể tin cậy trong bất kỳ phản hồi tương thích OpenAI nào.

Khi bạn stream câu trả lời, usage không được biết ngay từ đầu. Trong API riêng của DeepSeek, nó đến trong chunk nội dung cuối cùng trước data: [DONE] (tài liệu API DeepSeek, kiểm tra ngày 21 tháng 10 năm 2026); các API khác có thể gửi nó theo cách khác hoặc chỉ khi được yêu cầu, vì vậy hãy kiểm tra những gì client của bạn nhận được. Bản thân streaming được đề cập trong Phản hồi streaming trong Python.

Tại sao hai phía có giá khác nhau#

Đọc prompt của bạn và viết câu trả lời là hai loại công việc khác nhau. Mô hình xử lý toàn bộ prompt trong một lượt, nhưng nó phải tạo ra câu trả lời từng token một, và mỗi token mới phụ thuộc vào các token trước đó. Đó là lý do các nhà cung cấp thường định giá đầu ra cao hơn đầu vào, và lý do bạn thấy hai con số cho mỗi mô hình trong bất kỳ bảng giá nào.

Mô hình chúng tôi dùng làm ví dụ dưới đây, MiniMax-M2.7 (id minimax-m2.7), tuân theo mô hình này. Giá hiện tại trên 1M token là $0.05 cho đầu vào và $0.15 cho đầu ra.

Công thức#

Giá được niêm yết trên 1 triệu token, vì vậy chi phí của một yêu cầu là:

text
cost = input_tokens × input_price ÷ 1,000,000
     + output_tokens × output_price ÷ 1,000,000

Đây là với các mức giá tròn giả định, chỉ để minh họa phép tính (ví dụ, hãy thay bằng giá hiện tại từ bảng dưới đây):

python
# example, substitute current prices from the table
price_in = 0.20    # USD per 1M input tokens
price_out = 0.80   # USD per 1M output tokens

prompt_tokens = 2000
completion_tokens = 500

cost = (prompt_tokens * price_in + completion_tokens * price_out) / 1_000_000
# 2000 × 0.20 ÷ 1,000,000 = 0.0004 (input)
# 500 × 0.80 ÷ 1,000,000 = 0.0004 (output)
# 0.0004 + 0.0004 = 0.0008 USD

Một ví dụ tính toán với mô hình thực#

Lấy yêu cầu từ ví dụ usage ở trên: 2.000 token đầu vào và 500 token đầu ra. Trên MiniMax-M2.7 qua CheapTokens, nó tốn $0.00018. Con số được tính từ bảng giá hiện tại mỗi lần trang được hiển thị.

Một yêu cầu đơn lẻ là rất nhỏ, nên sẽ hữu ích khi nhân rộng lên. Một ứng dụng nhỏ gửi 10.000 yêu cầu cỡ này dùng 20.000.000 token đầu vào và 5.000.000 token đầu ra, tổng cộng là $1.75.

Cùng yêu cầu đó trên các mô hình khác trong danh sách của chúng tôi:

Mô hình Chi phí OpenRouter
GLM-5.3-Flash $0.00006 $0.00012
DeepSeek-V4-Flash $0.00008 $0.00017
MiniMax-M2.7 $0.00018 $0.0012

Tổng cộng 2.000 token đầu vào và 500 token đầu ra. Giá trên 1 triệu token là giá hiện hành và thay đổi cùng với biểu phí của chúng tôi; cột OpenRouter hiển thị giá tham chiếu cho cùng khối lượng công việc.

Lưu ý rằng đầu ra chỉ là một phần nhỏ của số token ở đây (500 trên 2.500) nhưng chiếm phần lớn hơn trong hóa đơn so với tỷ lệ token của nó, vì token đầu ra có giá cao hơn (xem bảng). Với mô hình này, phía đầu ra cũng là nơi khoản tiết kiệm so với giá tham chiếu của OpenRouter được xác nhận, điều này hữu ích nếu ứng dụng của bạn viết câu trả lời dài.

Sử dụng trong mã nguồn#

Bạn có thể đọc usage từ gói Python chính thức openai bằng cách trỏ nó tới base URL của CheapTokens:

python
from openai import OpenAI

client = OpenAI(
    base_url="https://api.cheaptokens.dev/v1",
    api_key="YOUR_API_KEY",
)

response = client.chat.completions.create(
    model="MiniMaxAI/MiniMax-M2.7",
    messages=[{"role": "user", "content": "Explain input and output tokens in two sentences."}],
)

usage = response.usage
print("input:", usage.prompt_tokens)
print("output:", usage.completion_tokens)
print("total:", usage.total_tokens)

# example, substitute current prices from the table above
price_in, price_out = 0.20, 0.80
cost = (usage.prompt_tokens * price_in + usage.completion_tokens * price_out) / 1_000_000
print(f"approx. cost: ${cost:.6f}")

Nếu bạn chưa gửi yêu cầu nào, hãy làm theo Yêu cầu API đầu tiên của bạn với CheapTokens trước.

Cách chi ít token hơn#

  • Rút ngắn prompt. Cắt gọn system prompt và loại bỏ các chỉ dẫn mô hình không cần. Mỗi token bạn gửi đều bị tính phí trong mọi yêu cầu.
  • Cắt bớt lịch sử. Trong một cuộc chat dài, hãy giữ vài lượt gần nhất hoặc một bản tóm tắt ngắn thay vì toàn bộ cuộc hội thoại.
  • Chỉ gửi phần liên quan của tài liệu. Một trang văn bản rẻ hơn cả một tệp.
  • Yêu cầu đúng định dạng bạn cần. "Trả lời trong ba gạch đầu dòng" tạo ra ít token đầu ra hơn một bài luận mở.
  • Đặt max_tokens có chủ đích. Nó chỉ giới hạn đầu ra. Quá thấp thì câu trả lời bị cắt cụt; chi tiết có trong Tại sao câu trả lời của AI dừng giữa câu? MiniMax-M2.7 trên CheapTokens cho phép tối đa 8.192 token đầu ra mỗi câu trả lời và có cửa sổ ngữ cảnh 180K.

Để ước tính chi phí của một quy trình lớn hơn, xem Cách ước tính chi phí của một AI agent.

Những điều cần nhớ#

  1. Mọi yêu cầu đều có token đầu vào (prompt_tokens) và token đầu ra (completion_tokens).
  2. Chúng có giá riêng, thường đầu ra cao hơn.
  3. Chi phí = token đầu vào × giá đầu vào + token đầu ra × giá đầu ra, với giá trên 1M token.
  4. Đọc các con số từ usage trong phản hồi thay vì đoán.

Trên CheapTokens, một số dư trả trước bao phủ mọi mô hình, giá mỗi mô hình cố định không có giá giờ cao điểm, và API tương thích với OpenAI Chat Completions và Anthropic Messages. Để thử ví dụ trên, hãy lấy API key và gửi yêu cầu đầu tiên của bạn.

Giá hiện tại cho mọi mô hình: Bảng giá CheapTokens.