AI Engineer Roadmap: Tokens, Cửa Sổ Ngữ Cảnh và Chi Phí API: Giải Mã

Chào mừng trở lại với series “AI Engineer Roadmap“! Nếu bạn đã theo dõi hành trình của chúng ta từ những bài viết đầu tiên như “Kỹ Sư AI Là Gì?” hay “Sự Khác Biệt Giữa Kỹ sư AI và ML“, bạn đã hiểu vai trò ngày càng quan trọng của Kỹ sư AI trong kỷ nguyên mới này.

Chúng ta đã cùng nhau khám phá lý do tại sao nên bắt đầu với các mô hình AI được huấn luyện trước, thảo luận về những hạn chế cần lưu ý, và so sánh các mô hình hàng đầu hiện nay.

Trong các bài viết trước, đặc biệt là khi bắt đầu với OpenAI Chat Completions API và nắm vững khả năng & độ dài ngữ cảnh của mô hình OpenAI, chúng ta đã chạm đến các khái niệm như “token” và “context window”. Đây không chỉ là những thuật ngữ kỹ thuật đơn thuần mà còn là những yếu tố cốt lõi ảnh hưởng trực tiếp đến cách bạn tương tác với mô hình, hiệu suất làm việc và quan trọng không kém: chi phí khi sử dụng API.

Với vai trò là một Kỹ sư AI, hiểu rõ về Tokens, Context Windows và cách chúng liên quan đến chi phí API là điều bắt buộc để bạn có thể thiết kế, triển khai và quản lý các ứng dụng AI một cách hiệu quả và tối ưu. Bài viết này sẽ giúp bạn “giải mã” ba khái niệm này một cách chi tiết và dễ hiểu nhất.

Tokens: Đơn Vị “Ngôn Ngữ” Của Mô Hình AI

Hãy tưởng tượng bạn đang xây một bức tường. Thay vì dùng gạch nguyên khối, bạn dùng những viên gạch nhỏ hơn, hoặc thậm chí là những hạt cát. Trong thế giới của các mô hình ngôn ngữ lớn (LLMs), “Tokens” chính là những đơn vị ngôn ngữ cơ bản nhất mà mô hình có thể “hiểu” và xử lý.

Tokens không nhất thiết phải là một từ hoàn chỉnh. Tùy thuộc vào thuật toán phân tách văn bản (tokenizer) của từng mô hình, một token có thể là:

  • Một từ (ví dụ: “hello”)
  • Một phần của từ (ví dụ: “ing” trong “running”)
  • Một ký tự đặc biệt (ví dụ: “,”, “.”, “!”)
  • Khoảng trắng

Ví dụ, chuỗi văn bản “Hello world!” có thể được phân tách thành các token như sau (minh họa, cách phân tách có thể khác tùy tokenizer):

"Hello" -> token 1
" world" -> token 2
"!" -> token 3

Tổng cộng là 3 token.

Đối với tiếng Anh, một quy tắc ước tính phổ biến là 1 token tương đương khoảng 4 ký tự hoặc 3/4 từ. Đối với tiếng Việt, do cấu trúc phức tạp hơn và việc sử dụng các dấu thanh, số lượng token trên mỗi từ có thể thay đổi, nhưng nguyên tắc cơ bản vẫn là văn bản được chia nhỏ thành các đơn vị xử lý.

Tại Sao Tokens Lại Quan Trọng?

Tokens là “tiền tệ” của các mô hình AI dựa trên transformer. Mọi thứ mô hình làm đều dựa trên việc xử lý các token:

  • Đầu vào (Input): Prompt bạn gửi cho mô hình được chuyển đổi thành một chuỗi các token.
  • Đầu ra (Output): Mô hình tạo ra phản hồi bằng cách dự đoán và sinh ra từng token một, nối lại thành văn bản hoàn chỉnh.
  • Chi phí: Hầu hết các API của các nhà cung cấp mô hình (như OpenAI, Anthropic, Google) tính phí dựa trên số lượng token được xử lý (cả đầu vào và đầu ra).

Hiểu cách văn bản chuyển thành token giúp bạn ước lượng kích thước đầu vào/đầu ra và từ đó, ước tính chi phí sử dụng API.

Context Window: “Trí Nhớ” Ngắn Hạn Của Mô Hình

Mô hình ngôn ngữ lớn không có “trí nhớ” dài hạn theo cách con người hiểu. Khi bạn trò chuyện với chúng qua API, mỗi yêu cầu API là một “lần gọi” độc lập. Để mô hình có thể duy trì ngữ cảnh (context) của cuộc trò chuyện hoặc văn bản dài, bạn cần cung cấp lại ngữ cảnh đó trong mỗi lần gọi.

“Context Window” (hay cửa sổ ngữ cảnh) là giới hạn về số lượng token tối đa mà mô hình có thể xử lý trong một lần gọi API duy nhất. Nó bao gồm:

  • Các hướng dẫn hệ thống (system message, nếu có).
  • Lịch sử cuộc trò chuyện (các lượt trao đổi trước đó, nếu có).
  • Prompt hiện tại của người dùng.
  • Phản hồi mà mô hình tạo ra (mô hình cần “không gian” trong cửa sổ ngữ cảnh để sinh token đầu ra).

Hãy nghĩ về Context Window như một tấm bảng trắng có kích thước cố định. Bạn viết thông tin lên đó (lịch sử chat, prompt). Mô hình nhìn vào toàn bộ nội dung trên tấm bảng để quyết định viết gì tiếp theo. Nhưng nếu bạn viết quá nhiều, thông tin cũ sẽ bị xóa đi hoặc tấm bảng bị đầy, và mô hình không thể xử lý thêm nữa.

Kích thước Context Window là một trong những đặc điểm phân biệt quan trọng giữa các phiên bản và loại mô hình khác nhau. Các mô hình đời cũ có cửa sổ nhỏ (ví dụ: 4k token), trong khi các mô hình mới nhất có thể có cửa sổ rất lớn (ví dụ: 128k token hoặc hơn).

Ý Nghĩa Của Context Window

  • Khả năng hiểu ngữ cảnh: Cửa sổ càng lớn, mô hình càng có khả năng “ghi nhớ” và tham chiếu đến thông tin xa hơn trong quá trình tương tác hoặc xử lý văn bản. Điều này rất quan trọng cho các tác vụ tóm tắt tài liệu dài, phân tích văn bản pháp lý, hoặc duy trì cuộc trò chuyện sâu sắc.
  • Giới hạn xử lý: Bạn không thể gửi một lượng văn bản (tính bằng token) vượt quá kích thước Context Window của mô hình. Nếu vượt quá, yêu cầu API sẽ bị lỗi, hoặc nhà cung cấp có thể tự động cắt bớt (truncate) phần đầu của văn bản, khiến mô hình mất đi ngữ cảnh quan trọng.
  • Ảnh hưởng đến kiến trúc ứng dụng: Khi xử lý dữ liệu rất dài (ví dụ: cả cuốn sách), bạn không thể chỉ gửi toàn bộ vào một lần gọi API. Bạn sẽ cần các kỹ thuật đặc biệt như chia nhỏ văn bản, tóm tắt, hoặc sử dụng Retrieval-Augmented Generation (RAG) – một chủ đề rất quan trọng mà chúng ta sẽ khám phá trong các bài viết sau của series này.

Bạn có thể tham khảo lại bài viết “Nắm Vững Khả Năng & Độ Dài Ngữ Cảnh Của Các Mô Hình OpenAI” để xem ví dụ cụ thể về kích thước cửa sổ ngữ cảnh của các model OpenAI phổ biến.

Chi Phí API: Tokens Là Đồng Tiền

Đây là phần mà Tokens và Context Window ảnh hưởng trực tiếp đến túi tiền của bạn (hoặc công ty bạn). Hầu hết các nhà cung cấp AI API tính phí dựa trên số lượng token được xử lý trong mỗi yêu cầu. Công thức cơ bản thường là:

Tổng chi phí = (Số lượng Input Tokens * Giá mỗi Input Token) + (Số lượng Output Tokens * Giá mỗi Output Token)

Input Tokens vs. Output Tokens

Tại sao lại có sự phân biệt này? Việc tính toán và xử lý các token đầu vào để “hiểu” ngữ cảnh thường tốn ít tài nguyên tính toán hơn so với việc “sáng tạo” và sinh ra các token đầu ra một cách mạch lạc và phù hợp. Do đó, giá cho mỗi token đầu ra thường cao hơn giá cho mỗi token đầu vào.

Ví dụ (giá chỉ mang tính minh họa và có thể thay đổi):

  • Mô hình X có giá: 0.0015 USD / 1k Input Tokens và 0.002 USD / 1k Output Tokens.
  • Bạn gửi một prompt dài 500 token và nhận về phản hồi dài 300 token.
  • Chi phí cho yêu cầu này sẽ là:
    (500 / 1000) * 0.0015 + (300 / 1000) * 0.002
    = 0.5 * 0.0015 + 0.3 * 0.002
    = 0.00075 + 0.0006
    = 0.00135 USD

Chi Phí Liên Quan Đến Context Window Như Thế Nào?

  • Kích thước trực tiếp: Kích thước Context Window càng lớn, mô hình càng có khả năng xử lý nhiều token hơn trong một lần gọi. Điều này có nghĩa là bạn có thể gửi prompt dài hơn, lịch sử chat dài hơn và nhận phản hồi dài hơn. Nhưng đương nhiên, nhiều token hơn = chi phí cao hơn cho yêu cầu đó.
  • Hiệu quả sử dụng Context Window: Nếu bạn lãng phí không gian trong cửa sổ ngữ cảnh bằng cách gửi dữ liệu không cần thiết hoặc lặp lại lịch sử chat quá nhiều, bạn đang trả tiền cho những token đó mà không nhận lại giá trị tương xứng.
  • Lựa chọn mô hình: Các mô hình có Context Window lớn hơn (thường là các mô hình mạnh mẽ và mới hơn) thường có giá mỗi token cao hơn đáng kể so với các mô hình nhỏ hơn. Bạn cần cân nhắc giữa khả năng của mô hình và chi phí cho phù hợp với yêu cầu của ứng dụng.

Tổng Hợp: Mối Liên Quan Giữa Ba Khái Niệm

Ba khái niệm này gắn bó chặt chẽ với nhau:

  1. Văn bản của bạn được chia thành Tokens.
  2. Số lượng Tokens trong đầu vào (prompt, lịch sử) và đầu ra (phản hồi) phải nằm trong giới hạn của Context Window của mô hình.
  3. Bạn bị tính phí dựa trên tổng số Tokens (input + output) được xử lý thành công trong mỗi lần gọi API, với mức giá khác nhau cho input và output.

Hiểu rõ vòng lặp này là chìa khóa để trở thành một Kỹ sư AI hiệu quả.

Bảng Tổng Quan Minh Họa

Để giúp bạn hình dung rõ hơn, đây là bảng tổng quan minh họa về Context Window và mức giá tham khảo của một số mô hình phổ biến. Lưu ý: Giá cả thay đổi rất nhanh, bạn LUÔN LUÔN cần kiểm tra trực tiếp trên trang pricing chính thức của nhà cung cấp (OpenAI, Anthropic, Google, etc.) để có thông tin cập nhật nhất.

Mô Hình (Ví dụ) Context Window (Tokens) Giá Input (Tham khảo) Giá Output (Tham khảo) Ghi Chú
GPT-3.5 Turbo (4k context) 4,096 ~0.0005 USD / 1k tokens ~0.0015 USD / 1k tokens Phiên bản cũ hơn, giá rẻ.
GPT-3.5 Turbo (16k context) 16,384 ~0.0015 USD / 1k tokens ~0.002 USD / 1k tokens Tăng Context, giá cao hơn.
GPT-4 Turbo 128,000 ~0.01 USD / 1k tokens ~0.03 USD / 1k tokens Context rất lớn, giá cao hơn đáng kể.
Claude 3 Haiku 200,000 ~0.00025 USD / 1k tokens ~0.00125 USD / 1k tokens Giá cạnh tranh, context lớn.
Claude 3 Sonnet 200,000 ~0.003 USD / 1k tokens ~0.015 USD / 1k tokens Context lớn, cân bằng giữa giá và hiệu năng.
Gemini 1.5 Pro 1,000,000 (preview) ~0.0035 USD / 1k tokens ~0.0105 USD / 1k tokens Context cực lớn, mạnh mẽ.

(Lưu ý quan trọng: Đây chỉ là giá tham khảo tại thời điểm viết bài và có thể không phản ánh chính xác giá hiện tại. Luôn kiểm tra trang pricing chính thức của nhà cung cấp)

Thực Hành: Ước Tính Token và Chi Phí Với API

Các thư viện API chính thức thường cung cấp cách để ước tính số lượng token của một chuỗi văn bản mà không cần gọi mô hình đầy đủ. Hoặc, sau khi gọi API, phản hồi từ mô hình sẽ bao gồm thông tin chi tiết về số lượng token đã sử dụng.

Dưới đây là ví dụ sử dụng thư viện Python của OpenAI:


import openai
import os
from dotenv import load_dotenv

# Load API key from environment variables
load_dotenv()
openai.api_key = os.getenv("OPENAI_API_KEY")

# Example text to estimate tokens for
text = "Xin chào! Đây là một ví dụ về văn bản tiếng Việt để đếm token."

# Estimating tokens (using a helper function or specific library)
# OpenAI's standard library doesn't have a direct, guaranteed way to
# perfectly match the API's internal tokenization for *all* models offline.
# A common approach is using libraries like `tiktoken`.
# Let's demonstrate calling the API and inspecting usage, as this is the
# most reliable way to know the *actual* tokens billed.

print(f"Estimating tokens for: '{text[:50]}...'") # Print first 50 chars

try:
    # Prepare a minimal API call to get usage info
    response = openai.chat.completions.create(
        model="gpt-3.5-turbo", # Or any model you plan to use
        messages=[
            {"role": "user", "content": text},
            {"role": "assistant", "content": "OK."} # Add a minimal assistant response to see completion tokens too
        ],
        max_tokens=1 # Limit output tokens to get usage without full generation
    )

    # Access the usage information
    usage = response.usage
    prompt_tokens = usage.prompt_tokens
    completion_tokens = usage.completion_tokens
    total_tokens = usage.total_tokens

    print(f"\nAPI Call Usage:")
    print(f"- Prompt Tokens: {prompt_tokens}")
    print(f"- Completion Tokens: {completion_tokens}")
    print(f"- Total Tokens Used in this call: {total_tokens}")

    # You would then multiply prompt_tokens by input price and completion_tokens by output price
    # Example pricing (replace with actual model prices):
    input_price_per_k_tokens = 0.0005
    output_price_per_k_tokens = 0.0015

    estimated_cost = (prompt_tokens / 1000 * input_price_per_k_tokens) + \
                     (completion_tokens / 1000 * output_price_per_k_tokens)

    print(f"- Estimated cost for this call (based on example prices): ${estimated_cost:.6f}")

except Exception as e:
    print(f"An error occurred: {e}")
    print("Could not estimate tokens via API call. Ensure your API key is correct and you have access to the model.")
    # Fallback/Alternative: Use tiktoken for estimation (approximation)
    try:
        import tiktoken
        # Get the encoding for the specific model
        encoding = tiktoken.encoding_for_model("gpt-3.5-turbo")
        estimated_tokens_offline = len(encoding.encode(text))
        print(f"\nOffline token estimate using tiktoken: {estimated_tokens_offline}")
    except ImportError:
        print("\nInstall tiktoken (`pip install tiktoken`) for offline token estimation.")
    except Exception as e:
        print(f"\nAn error occurred during tiktoken estimation: {e}")

Đoạn code trên minh họa cách bạn có thể nhận thông tin sử dụng token trực tiếp từ phản hồi API. Bằng cách này, bạn luôn biết chính xác số lượng token đã được tính phí cho mỗi yêu cầu.

Lời Khuyên Thực Tiễn Cho Kỹ Sư AI

Với kiến thức về Tokens, Context Windows và Chi phí API, bạn có thể đưa ra các quyết định tốt hơn khi xây dựng ứng dụng AI:

  1. Ước tính chi phí trước: Trước khi triển khai rộng rãi, hãy ước tính số lượng token trung bình cho các loại yêu cầu khác nhau và tính toán chi phí dự kiến dựa trên lượng sử dụng.
  2. Quản lý Context hiệu quả:
    • Đối với cuộc trò chuyện dài: Giới hạn lịch sử chat được gửi trong mỗi lần gọi API. Có thể chỉ gửi N lượt gần nhất.
    • Đối với văn bản dài: Không nhét toàn bộ tài liệu vào prompt. Sử dụng các kỹ thuật như tóm tắt các phần của tài liệu hoặc áp dụng RAG để chỉ lấy các đoạn văn bản liên quan nhất đến câu hỏi của người dùng.
    • Tham khảo lại bài viết về Nghệ Thuật Viết Prompt – prompt hiệu quả cũng giúp tối ưu token đầu vào.
  3. Chọn mô hình phù hợp: Không phải lúc nào mô hình lớn nhất, đắt nhất với Context Window siêu bự cũng là lựa chọn tốt nhất. Hãy chọn mô hình có khả năng và Context Window đủ cho tác vụ của bạn để tiết kiệm chi phí.
  4. Theo dõi lượng sử dụng: Sử dụng dashboard hoặc API của nhà cung cấp để theo dõi số lượng token đã dùng và chi phí phát sinh.
  5. Tối ưu hóa prompt và response: Cố gắng diễn đạt prompt một cách rõ ràng nhưng súc tích. Nếu có thể, yêu cầu mô hình đưa ra phản hồi ngắn gọn hơn (chỉ khi phù hợp với yêu cầu ứng dụng).

Kết Luận

Tokens là đơn vị xử lý và tính phí, Context Window là giới hạn “trí nhớ”, và Chi phí API phản ánh số lượng token bạn sử dụng. Ba khái niệm này là nền tảng không thể thiếu cho bất kỳ ai muốn làm việc nghiêm túc với các mô hình AI thông qua API.

Nắm vững chúng không chỉ giúp bạn hiểu cách mô hình hoạt động ở cấp độ cơ bản mà còn trang bị cho bạn kỹ năng cần thiết để xây dựng các ứng dụng AI mạnh mẽ, đáng tin cậy và quan trọng nhất là hiệu quả về mặt chi phí.

Hy vọng bài viết này đã “giải mã” thành công những khái niệm này cho bạn. Đây là một bước quan trọng trên con đường trở thành Kỹ sư AI. Tiếp theo, chúng ta sẽ đào sâu hơn vào các kỹ thuật nâng cao để quản lý ngữ cảnh và tối ưu hóa tương tác với mô hình.

Hãy tiếp tục theo dõi series AI Engineer Roadmap để không bỏ lỡ những kiến thức giá trị tiếp theo nhé!

Chỉ mục