Quản lý Context Window trong Ứng dụng AI Sản Xuất với Mô hình LLM
Quản lý số lượng token trong vùng ngữ cảnh (context window) khi phát triển ứng dụng AI, đặc biệt với các mô hình lớn như Claude-sonnet-4-6 hay GPT-4o, là thách thức lớn cần kỹ thuật chuyên sâu. Bài viết trình bày các chiến lược đếm token, cắt ngắn lịch sử hội thoại, tóm tắt cuộc trò chuyện, và tối ưu tài nguyên để ứng dụng AI hoạt động ổn định trong thực tế.

Quản lý Context Window trong Ứng dụng AI Sản Xuất với Mô hình LLM
Các mô hình ngôn ngữ lớn (Large Language Models - LLM) như Claude-sonnet-4-6 với vùng ngữ cảnh lên đến 200.000 token hoặc GPT-4o với 128.000 token có vẻ rất lớn. Tuy nhiên khi xây dựng ứng dụng tích hợp AI thực tế, đặc biệt dạng RAG (retrieval-augmented generation), việc truyền tải đồng thời bối cảnh tài liệu, lịch sử hội thoại, câu lệnh hệ thống và định nghĩa công cụ dễ dẫn đến việc vượt quá giới hạn vùng ngữ cảnh. Đây là thách thức kỹ thuật đòi hỏi quản lý token một cách nghiêm ngặt để tránh lỗi không thể phục hồi giữa cuộc trò chuyện.
Vấn đề ngân sách token
Khi thực hiện các cuộc hội thoại phức tạp, nếu vùng context quá đầy, mô hình sẽ không thể xử lý tiếp, dẫn tới việc phải kết thúc hội thoại hoặc mất thông tin quan trọng. Do đó, quản lý "ngân sách token" là một nguyên tắc kỹ thuật quan trọng trong vận hành các ứng dụng AI sản xuất.
Đếm token hiệu quả
Với API của Anthropic, ta có thể dùng endpoint đếm token trực tiếp:
import Anthropic from '@anthropic-ai/sdk';
const anthropic = new Anthropic();
async function countTokens(messages) {
const response = await anthropic.messages.countTokens({
model: 'claude-sonnet-4-6',
messages,
system: 'You are a helpful assistant.',
});
return response.input_tokens;
}
Còn với OpenAI, có thể dùng thư viện tiktoken để đếm token tại client mà không cần gọi API, tiết kiệm tài nguyên và thời gian.
Quản lý lịch sử hội thoại
Phương pháp đơn giản là giữ tất cả tin nhắn trong vùng ngữ cảnh dễ dẫn đến tràn bộ nhớ token. Thay vào đó, nên cắt gọn lịch sử hội thoại dựa trên ngân sách token còn lại sau khi trừ đi token của câu lệnh hệ thống và câu hỏi hiện tại:
function truncateHistory(history, systemPrompt, newMessage) {
const systemTokens = countOpenAITokens(systemPrompt);
const newMessageTokens = countOpenAITokens(newMessage);
const reservedForResponse = 4000;
const budget = MAX_CONTEXT_TOKENS - systemTokens - newMessageTokens - reservedForResponse;
let usedTokens = 0;
const kept = [];
for (const msg of [...history].reverse()) {
const tokens = countOpenAITokens(msg.content);
if (usedTokens + tokens > budget) break;
usedTokens += tokens;
kept.unshift(msg);
}
return kept;
}
Chiến lược tóm tắt hội thoại
Thay vì xóa tin nhắn cũ, có thể tóm tắt chúng thành một đoạn ngắn gọn nhằm tiết kiệm token mà vẫn giữ được ý nghĩa cốt lõi của cuộc trò chuyện, từ đó duy trì trải nghiệm liền mạch, ít bị đứt quãng.
async function summarizeHistory(messages) {
const conversation = messages.map(m => `${m.role}: ${m.content}`).join('\n');
const summary = await anthropic.messages.create({
model: 'claude-haiku-4-5-20251001', // mô hình giá rẻ dùng cho tóm tắt
max_tokens: 500,
messages: [{ role: 'user', content: `Summarize this conversation concisely:\n\n${conversation}` }],
});
return summary.content[0].type === 'text' ? summary.content[0].text : '';
}
Khi lịch sử quá dài, ta có thể tóm tắt nửa phần cũ nhất, giữ lại các tin nhắn gần đây đầy đủ:
async function manageContext(history) {
const totalTokens = history.reduce((sum, m) => sum + countOpenAITokens(m.content), 0);
if (totalTokens < 80_000) return history;
const midpoint = Math.floor(history.length / 2);
const old = history.slice(0, midpoint);
const recent = history.slice(midpoint);
const summary = await summarizeHistory(old);
return [
{ role: 'user', content: `[Earlier conversation summary: ${summary}]` },
...recent,
];
}
Quản lý ngân sách RAG
Trong ứng dụng RAG, ngân sách token được phân bổ cho các phần như câu lệnh hệ thống, lịch sử hội thoại, tài liệu truy xuất và phần dành cho câu trả lời. Ví dụ:
const CONTEXT_BUDGET = {
system: 2000,
history: 20000,
retrieved: 40000,
response: 4000,
};
Khi sinh prompt, ta chọn lọc tài liệu quan trọng, cắt ngắn lịch sử sao cho tổng token nằm trong ngân sách để đảm bảo hệ thống vận hành ổn định.
Streaming phản hồi dài
Thay vì chờ phản hồi hoàn chỉnh mới trả về, ta có thể stream từng phần nội dung khi mô hình sinh ra:
const stream = anthropic.messages.stream({
model: 'claude-sonnet-4-6',
max_tokens: 4096,
messages,
});
for await (const event of stream) {
if (event.type === 'content_block_delta' && event.delta.type === 'text_delta') {
process.stdout.write(event.delta.text); // hoặc gửi lên SSE
}
}
const finalMessage = await stream.finalMessage();
console.log(`Used ${finalMessage.usage.input_tokens} input tokens`);
ước tính chi phí sử dụng
Chi phí theo mỗi triệu token input/output đối với các mô hình cũng ảnh hưởng đến hiệu quả vận hành. Ví dụ:
const PRICING = {
'claude-sonnet-4-6': { input: 3.00, output: 15.00 },
'claude-haiku-4-5-20251001': { input: 0.25, output: 1.25 },
'gpt-4o': { input: 2.50, output: 10.00 },
'gpt-4o-mini': { input: 0.15, output: 0.60 },
};
function estimateCost(inputTokens, outputTokens, model) {
const prices = PRICING[model];
return (inputTokens / 1_000_000 * prices.input) + (outputTokens / 1_000_000 * prices.output);
}
Việc quản lý vùng ngữ cảnh là điều kiện tiên quyết để một ứng dụng AI không chỉ hoạt động tốt trong các bản demo mà còn vận hành bền vững với lượng hội thoại lớn. Những kỹ thuật này cũng tạo nền tảng để xây dựng các công cụ tích hợp AI phức tạp, hỗ trợ đa dụng trong sản phẩm cuối cùng.
Để tham khảo thêm về các mô hình tích hợp AI với quản lý context, RAG và streaming tự động, người dùng có thể xem dự án Whoff Agents cung cấp bộ công cụ MCP chuyên nghiệp.
Quản lý chính xác vùng context trong LLM là bài toán kỹ thuật quan trọng bậc nhất đối với nhà phát triển AI hiện nay, và các chiến lược trên sẽ giúp ứng dụng AI của bạn mạnh mẽ và ổn định hơn khi bước ra môi trường sản xuất thực tế.
Bài viết liên quan

Phần mềm
Anthropic ra mắt Claude Opus 4.7: Nâng cấp mạnh mẽ cho lập trình nhưng vẫn thua Mythos Preview
16 tháng 4, 2026

Công nghệ
Qwen3.6-35B-A3B: Quyền năng Lập trình Agentic, Nay Đã Mở Cửa Cho Tất Cả
16 tháng 4, 2026

Công nghệ
Spotify thắng kiện 322 triệu USD từ nhóm pirate Anna's Archive nhưng đối mặt với bài toán thu hồi
16 tháng 4, 2026
