Chào mừng các bạn quay trở lại với series “AI Agent Roadmap”! Trong những bài viết trước, chúng ta đã cùng nhau khám phá AI Agent là gì và cách chúng hoạt động, đi sâu vào Vòng Lặp Agent: Nhận Thức, Suy Luận và Hành Động, và tìm hiểu về nền tảng cốt lõi là Transformers và LLM cho AI Agent. Chúng ta cũng đã thảo luận về việc xây dựng công cụ và xem xét các trường hợp sử dụng thực tế, thậm chí là ứng dụng thú vị như Trợ Lý Cá Nhân cho NPC trong Game.
Nếu coi một AI Agent là một thực thể có khả năng “suy nghĩ” và “hành động”, thì Large Language Model (LLM) chính là bộ não của nó. Nhưng làm thế nào để bộ não này có thể xử lý ngôn ngữ tự nhiên mà chúng ta đưa vào? Đó là lúc chúng ta cần hiểu về Tokenization.
Tokenization là một bước tiền xử lý tưởng chừng đơn giản nhưng lại có ảnh hưởng sâu sắc đến cách LLM hoạt động, và do đó, ảnh hưởng trực tiếp đến hiệu năng, chi phí và khả năng của AI Agent. Trong bài viết này, chúng ta sẽ đi sâu vào Tokenization là gì và nó tác động như thế nào đến việc phát triển AI Agent.
Mục lục
Tokenization là gì?
LLM, giống như hầu hết các mô hình học máy, không thể xử lý trực tiếp văn bản thô. Chúng hoạt động dựa trên các con số. Tokenization là quá trình chia một chuỗi văn bản thành các đơn vị nhỏ hơn, gọi là tokens.
Tưởng tượng bạn có câu: “Tôi thích phát triển AI Agent.”
Quá trình tokenization sẽ biến câu này thành một danh sách các token. Tùy thuộc vào phương pháp tokenization, các token này có thể là từ, ký tự, hoặc các phần nhỏ hơn của từ (subword). Sau khi token hóa, mỗi token sẽ được gán một ID số duy nhất dựa trên bảng từ vựng (vocabulary) của tokenizer. Đây là bước cần thiết để chuyển văn bản thành dạng số mà LLM có thể hiểu và xử lý.
Văn bản gốc: "Tôi thích phát triển AI Agent."
Quá trình Tokenization
Tokens (ví dụ): ["Tôi", "thích", "phát", "triển", "AI", "Agent", "."]
IDs số (ví dụ dựa trên vocabulary): [123, 456, 789, 1011, 1213, 1415, 16]
Mỗi LLM đi kèm với tokenizer riêng của nó, được đào tạo cùng hoặc sau khi mô hình được tạo ra. Tokenizer này chứa một bảng từ vựng cố định các token mà nó “biết”.
Các Phương Pháp Tokenization Phổ Biến
Có nhiều cách để chia văn bản thành token, mỗi cách có ưu và nhược điểm riêng:
Tokenization dựa trên Từ (Word-based Tokenization)
Đây là phương pháp trực quan nhất: chia văn bản dựa trên khoảng trắng và dấu câu. Ví dụ: “Hello world!” -> [“Hello”, “world”, “!”].
- Ưu điểm: Đơn giản, dễ hiểu.
- Nhược điểm:
- Gặp khó khăn với các từ ghép, từ nối (ví dụ: “rock-and-roll”).
- Vốn từ vựng (vocabulary) rất lớn, bao gồm cả các dạng khác nhau của một từ (ví dụ: “run”, “running”, “ran”).
- Không xử lý được các từ chưa từng thấy (Out-of-Vocabulary – OOV).
Tokenization dựa trên Ký tự (Character-based Tokenization)
Chia văn bản thành từng ký tự riêng lẻ. Ví dụ: “Hello” -> [“H”, “e”, “l”, “l”, “o”].
- Ưu điểm:
- Vốn từ vựng cực nhỏ (chỉ bao gồm các ký tự).
- Không có vấn đề OOV (mọi thứ đều có thể biểu diễn bằng ký tự).
- Nhược điểm:
- Chuỗi token rất dài ngay cả với văn bản ngắn, làm tăng chi phí tính toán đáng kể.
- Mất đi cấu trúc ngữ nghĩa của từ.
Tokenization dựa trên Subword (Subword Tokenization)
Đây là phương pháp phổ biến nhất hiện nay trong các LLM hiện đại (bao gồm BPE, WordPiece, SentencePiece). Phương pháp này cố gắng cân bằng giữa tokenization dựa trên từ và ký tự.
Ý tưởng là chia các từ hiếm thành các phần nhỏ hơn (subwords) trong khi vẫn giữ các từ phổ biến là một token duy nhất.
- Ví dụ: Từ “unhappiness” có thể được chia thành [“un”, “happi”, “ness”]. Từ “tokenizer” có thể là [“token”, “izer”].
- Ưu điểm:
- Vốn từ vựng có kích thước hợp lý.
- Có thể xử lý các từ OOV bằng cách chia chúng thành các subword đã biết.
- Hiệu quả hơn trong việc biểu diễn ngữ nghĩa so với tokenization ký tự.
- Hoạt động tốt với nhiều ngôn ngữ khác nhau.
- Nhược điểm:
- Quy trình phức tạp hơn.
- Ý nghĩa của từ có thể bị phân mảnh nếu chia thành quá nhiều subword.
Hầu hết các LLM mạnh mẽ mà chúng ta sử dụng để xây dựng AI Agent (như GPT, LLaMA, Claude) đều sử dụng các biến thể của tokenization dựa trên subword.
Ảnh Hưởng Của Tokenization Đến Hiệu Năng Của AI Agent
Tokenization không chỉ là một bước tiền xử lý kỹ thuật; nó trực tiếp ảnh hưởng đến các khía cạnh quan trọng trong hoạt động của AI Agent:
Giới Hạn Cửa Sổ Ngữ Cảnh (Context Window Limit)
Một trong những ảnh hưởng lớn nhất là giới hạn cửa sổ ngữ cảnh của LLM. LLM chỉ có thể xử lý một số lượng token cố định tại một thời điểm. Số token này bao gồm cả prompt đầu vào của bạn và văn bản mà mô hình tạo ra làm phản hồi.
- Đối với AI Agent:
- Cửa sổ ngữ cảnh là “trí nhớ ngắn hạn” của Agent. Nó chứa các hướng dẫn ban đầu, lịch sử cuộc trò chuyện, kết quả từ việc sử dụng công cụ (như đã thảo luận trong bài viết về Vòng Lặp Agent).
- Nếu lượng thông tin cần thiết cho Agent để suy luận và hành động vượt quá giới hạn token, Agent sẽ “quên” đi các phần cũ của ngữ cảnh, dẫn đến suy luận không chính xác, lặp lại hành động, hoặc bỏ qua các thông tin quan trọng.
- Các tác vụ yêu cầu xử lý văn bản dài (tóm tắt tài liệu, phân tích log, duy trì cuộc trò chuyện kéo dài) trở nên cực kỳ khó khăn hoặc không thể thực hiện trực tiếp.
Hiệu Suất và Chi Phí
Số lượng token đầu vào và đầu ra tỷ lệ thuận với thời gian xử lý và chi phí (đặc biệt khi sử dụng các API trả phí theo token).
- Đối với AI Agent:
- Các tác vụ đòi hỏi prompt phức tạp hoặc tạo ra phản hồi dài sẽ tốn nhiều token hơn, dẫn đến thời gian phản hồi chậm hơn và chi phí cao hơn.
- Việc gọi LLM nhiều lần trong vòng lặp Agent (cho các bước nhận thức, suy luận, kế hoạch hành động) sẽ tích lũy số lượng token nhanh chóng.
- Các phương pháp tokenization khác nhau có thể tạo ra số lượng token khác nhau cho cùng một văn bản. Một tokenizer kém hiệu quả có thể tạo ra nhiều token hơn mức cần thiết, làm tăng chi phí không đáng có.
Xử Lý Từ Chưa Từng Thấy (Out-of-Vocabulary – OOV)
Nếu tokenizer gặp một từ không có trong vốn từ vựng của nó, nó sẽ cố gắng chia từ đó thành các subword đã biết. Đôi khi, việc chia này có thể làm mất đi ý nghĩa ban đầu, đặc biệt với các từ chuyên ngành, tên riêng, hoặc tiếng lóng.
- Đối với AI Agent:
- Nếu Agent được giao nhiệm vụ xử lý thông tin trong một lĩnh vực cụ thể (y tế, kỹ thuật, pháp luật) chứa nhiều thuật ngữ chuyên ngành, việc tokenizer không “hiểu” đúng các thuật ngữ này có thể dẫn đến suy luận sai hoặc tạo ra phản hồi vô nghĩa.
- Agent có thể không nhận thức hoặc hiểu đúng về các thực thể hoặc khái niệm mới được đưa vào ngữ cảnh.
Độ Chi Tiết (Granularity) Của Token
Kích thước trung bình của một token (độ chi tiết) ảnh hưởng đến cách LLM biểu diễn thông tin.
- Đối với AI Agent:
- Token hóa quá chi tiết (ví dụ: dựa trên ký tự) làm mất đi ngữ nghĩa ở cấp độ từ, khiến LLM khó nắm bắt ý nghĩa tổng thể.
- Token hóa quá thô (ví dụ: dựa trên từ với vốn từ vựng nhỏ) có thể gặp vấn đề OOV nghiêm trọng.
- Subword tokenization cố gắng tìm sự cân bằng, nhưng việc một từ quan trọng bị chia thành nhiều subword có thể làm giảm “trọng lượng” ngữ nghĩa của nó trong quá trình xử lý của LLM.
Sự Khác Biệt Ngôn Ngữ
Mỗi ngôn ngữ có cấu trúc và cách sử dụng từ vựng khác nhau. Các tokenizer được tối ưu cho tiếng Anh có thể không hoạt động hiệu quả với tiếng Việt hoặc các ngôn ngữ khác.
- Đối với AI Agent:
- Nếu xây dựng Agent cho người dùng Việt Nam, việc sử dụng tokenizer được đào tạo chuyên biệt trên tiếng Việt hoặc có khả năng xử lý tốt tiếng Việt là rất quan trọng.
- Tiếng Việt có các từ ghép, sự phức tạp trong việc ngắt câu, và thanh điệu, những yếu tố này cần được tokenizer xử lý đúng để LLM có thể hiểu chính xác.
Bảng Tổng Kết: Ưu Nhược Điểm Của Các Phương Pháp Tokenization Chính
Phương Pháp | Đơn Vị Token | Ưu Điểm | Nhược Điểm | Xử Lý OOV | Kích Thước Vocab | Độ Dài Chuỗi Token |
---|---|---|---|---|---|---|
Dựa trên Từ (Word-based) | Từ | Trực quan, giữ ngữ nghĩa từ | Vốn từ vựng lớn, OOV nghiêm trọng | Kém | Rất lớn | Ngắn |
Dựa trên Ký tự (Character-based) | Ký tự | Không OOV, vốn từ vựng nhỏ | Mất ngữ nghĩa từ, chuỗi token rất dài | Tuyệt vời (mọi thứ là ký tự) | Rất nhỏ | Rất dài |
Dựa trên Subword (BPE, WordPiece, SentencePiece) | Các phần của từ (subword) | Cân bằng, xử lý OOV tốt, vocab hợp lý | Phức tạp hơn, ý nghĩa có thể bị phân mảnh | Tốt (chia thành subword) | Trung bình | Trung bình |
Chiến Lược Giảm Thiểu Tác Động Của Tokenization Trong AI Agent
Hiểu rõ cách tokenization hoạt động và những hạn chế của nó giúp chúng ta xây dựng AI Agent hiệu quả hơn. Dưới đây là một số chiến lược:
1. Lựa Chọn Mô Hình và Tokenizer Phù Hợp
Chọn LLM có cửa sổ ngữ cảnh lớn hơn nếu Agent của bạn cần xử lý nhiều thông tin. Đồng thời, tìm hiểu về tokenizer của mô hình đó. Một số tokenizer có thể hiệu quả hơn trong việc tạo ra ít token hơn cho cùng một lượng văn bản hoặc xử lý tốt hơn các ngôn ngữ cụ thể.
2. Quản Lý Ngữ Cảnh Hiệu Quả
Đây là một kỹ thuật cực kỳ quan trọng cho AI Agent.
- Tóm tắt: Trước khi đưa thông tin vào prompt, hãy tóm tắt lịch sử trò chuyện, kết quả công cụ, hoặc tài liệu nguồn. Điều này giúp giữ prompt gọn nhẹ, tiết kiệm token mà vẫn giữ được ý chính.
- Retrieval Augmented Generation (RAG): Thay vì nhồi nhét toàn bộ thông tin vào prompt, sử dụng hệ thống truy xuất để lấy các đoạn văn bản liên quan nhất và chỉ đưa chúng vào prompt. Đây là một phương pháp mạnh mẽ để vượt qua giới hạn cửa sổ ngữ cảnh và xử lý lượng lớn thông tin nền. Chúng ta có thể sẽ đi sâu hơn vào RAG trong các bài viết sau.
- Tối ưu hóa Prompt: Viết prompt súc tích, rõ ràng, tránh dài dòng không cần thiết. Mỗi từ đều “tốn” token.
3. Xử Lý OOV (Out-of-Vocabulary)
Nếu Agent làm việc trong một lĩnh vực chuyên biệt, cân nhắc:
- Sử dụng các mô hình hoặc tokenizer đã được fine-tune trên dữ liệu của lĩnh vực đó.
- Đôi khi, có thể cần tiền xử lý văn bản để thay thế các thuật ngữ hiếm bằng các mô tả phổ biến hơn (nếu ngữ cảnh cho phép).
4. Theo Dõi và Phân Tích Sử Dụng Token
Trong quá trình phát triển, hãy theo dõi số lượng token được sử dụng cho mỗi lần gọi LLM. Điều này giúp bạn hiểu rõ hơn về chi phí và hiệu suất, từ đó tối ưu hóa prompt và luồng làm việc của Agent.
# Pseudocode ví dụ theo dõi token
prompt = construct_agent_prompt(...)
tokens_in = count_tokens(prompt, tokenizer)
response, tokens_out = call_llm_api(prompt) # API trả về số token sử dụng
total_tokens = tokens_in + tokens_out
print(f"Prompt used {tokens_in} tokens.")
print(f"Response generated {tokens_out} tokens.")
print(f"Total tokens for this turn: {total_tokens}")
Kết Luận
Tokenization là một nền tảng kỹ thuật quan trọng đứng sau khả năng xử lý ngôn ngữ của LLM. Mặc dù thường bị ẩn đi bởi các API cấp cao, việc hiểu rõ cách nó hoạt động và những hạn chế của nó là rất cần thiết cho bất kỳ ai muốn xây dựng các AI Agent mạnh mẽ và hiệu quả.
Giới hạn cửa sổ ngữ cảnh, hiệu suất, chi phí, và khả năng xử lý các từ mới đều chịu ảnh hưởng trực tiếp từ phương pháp tokenization được sử dụng. Bằng cách lựa chọn mô hình và tokenizer phù hợp, áp dụng các kỹ thuật quản lý ngữ cảnh thông minh và theo dõi việc sử dụng token, chúng ta có thể vượt qua nhiều thách thức và xây dựng các Agent có khả năng xử lý các tác vụ phức tạp hơn.
Hãy tiếp tục theo dõi series “AI Agent Roadmap” để cùng nhau khám phá sâu hơn các khía cạnh khác của việc phát triển AI Agent, từ việc tích hợp công cụ nâng cao đến các kiến trúc Agent phức tạp hơn. Hẹn gặp lại các bạn trong bài viết tiếp theo!