【译】Kỹ Thuật Ngữ Cảnh: Đừng Nhồi Nhét Quá Nhiều Vào Cửa Sổ! Sử Dụng Bốn Bước Viết, Lọc, Nén Và Tách Rời, Cảnh Giác Với Sự Can Thiệp Gây Rối, Để Chặn Âm Thanh Ở Bên Ngoài — Từ Từ Học AI 170
Lời Mở Đầu
- Giới hạn của AI không chỉ phụ thuộc vào kích thước mô hình, mà còn vào kỹ năng “quản lý ngữ cảnh”. Nó giống như việc cấu hình bộ nhớ cho CPU, quyết định độ sâu và hiệu quả trong suy nghĩ của tác nhân.
- Cửa sổ ngữ cảnh không phải là thùng rác: Quá tải thông tin có thể “gây ô nhiễm”, làm nhiễu loạn, và khiến AI đưa ra phán đoán sai. Độ chính xác quan trọng hơn nhiều so với việc có quá nhiều thông tin.
- Những người khéo tay sử dụng bốn nguyên tắc “Viết, Lọc, Nén, Tách” để quản lý ngữ cảnh AI, tập trung vào việc sử dụng “bộ nhớ” có hạn một cách hiệu quả, nhằm gia tăng hiệu suất và giảm chi phí.
- Sự cạnh tranh trong tương lai chính là sự cạnh tranh về hiệu suất hệ thống. Việc sử dụng kiến trúc đa tác nhân để tách biệt nhiệm vụ và cho phép mỗi tác nhân phát huy tối đa tại “cửa sổ nhỏ” của mình là điều quyết định trong việc xây dựng các hệ thống nhiệm vụ phức tạp.
Tóm Tắt Chính
Tác nhân (Agent) thực hiện nhiệm vụ không thể thiếu ngữ cảnh (Context). Kỹ thuật “ngữ cảnh” chính là nghệ thuật và khoa học trong việc chính xác cung cấp thông tin phù hợp cho cửa sổ ngữ cảnh của tác nhân tại từng bước thực hiện nhiệm vụ. Bài viết này sẽ tổng hợp các chiến lược ngữ cảnh hiện nay mà các tác nhân nổi bật đang sử dụng thành một số mô hình chung.
Kỹ Thuật Ngữ Cảnh (Context Engineering)
Như Andrej Karpathy đã nói, mô hình ngôn ngữ lớn (LLM) giống như một “hệ điều hành mới”. LLM là CPU, còn “cửa sổ ngữ cảnh” của nó giống như RAM, đóng vai trò là bộ nhớ làm việc của mô hình. Cũng giống như RAM có dung lượng hạn chế, cửa sổ ngữ cảnh của LLM cũng gặp phải giới hạn dung lượng khi xử lý nhiều nguồn ngữ cảnh khác nhau. Một trong những công việc chính của hệ điều hành là quản lý cách sử dụng RAM của CPU một cách hiệu quả, và “kỹ thuật ngữ cảnh” đóng vai trò tương tự. Karpathy đã tóm tắt điều này rất chính xác:
Kỹ thuật ngữ cảnh là “… một nghệ thuật và khoa học tinh tế trong việc chính xác bổ sung thông tin vào cửa sổ ngữ cảnh cho bước tiếp theo (tính toán).”
Khi xây dựng ứng dụng LLM, chúng ta cần quản lý những loại ngữ cảnh nào? Khái niệm tổng quát về kỹ thuật ngữ cảnh bao gồm các loại ngữ cảnh khác nhau sau đây:
- • Hướng dẫn (Instructions) – Từ khóa, trí nhớ, ví dụ với số lượng ít, mô tả công cụ, v.v.
- • Kiến thức (Knowledge) – Sự thật, trí nhớ, v.v.
- • Công cụ (Tools) – Thông tin phản hồi từ các lệnh gọi công cụ.
Kỹ Thuật Ngữ Cảnh Hướng Tới Tác Nhân
Năm nay, với sự gia tăng khả năng của LLM trong việc suy luận và gọi công cụ, sự quan tâm đối với các tác nhân ngày càng tăng lên. Tác nhân thực hiện nhiệm vụ bằng cách luân phiên gọi LLM và công cụ, đặc biệt xuất sắc trong việc xử lý các nhiệm vụ phức tạp kéo dài.
Tuy nhiên, các nhiệm vụ dài hạn và phản hồi từ việc gọi công cụ liên tục có nghĩa là tác nhân thường tiêu tốn nhiều token. Điều này có thể dẫn đến nhiều vấn đề: vượt quá giới hạn dung lượng của cửa sổ ngữ cảnh, dẫn đến gia tăng chi phí và độ trễ, thậm chí giảm hiệu suất của tác nhân. Drew Breunig đã chỉ ra rõ ràng rằng, ngữ cảnh quá dài có thể gây ra các vấn đề hiệu suất qua những cách sau:
- • Ngữ cảnh bị ô nhiễm (Context Poisoning): Khi thông tin sai lệch (mê mờ) vào ngữ cảnh.
- • Ngữ cảnh phân tán (Context Distraction): Khi thông tin ngữ cảnh quá nhiều, làm cho mô hình bị ngợp trước kiến thức huấn luyện ban đầu.
- • Ngữ cảnh bị nhầm lẫn (Context Confusion): Khi thông tin ngữ cảnh không liên quan ảnh hưởng đến phản hồi của mô hình.
- • Ngữ cảnh mâu thuẫn (Context Clash): Khi các phần khác nhau trong ngữ cảnh mâu thuẫn với nhau.
Xem xét các vấn đề này, công ty Cognition AI đã nhấn mạnh tầm quan trọng của kỹ thuật ngữ cảnh:
“Kỹ thuật ngữ cảnh”… thực sự là nhiệm vụ hàng đầu của kỹ sư xây dựng AI.
Công ty Anthropic cũng chỉ ra rõ ràng:
Tác nhân thường cần thực hiện hàng trăm lượt đối thoại, điều này yêu cầu chúng tôi áp dụng các chiến lược quản lý ngữ cảnh cẩn trọng.
Vậy, hiện nay các nhà phát triển đang đối mặt với thách thức này như thế nào? Tôi sẽ tổng hợp các phương pháp hiện có thành bốn loại — Viết (Write), Lọc (Select), Nén (Compress) và Tách Rời (Isolate) — và đưa ra ví dụ cho từng loại.
Viết Ngữ Cảnh (Write Context)
Viết ngữ cảnh là chỉ việc lưu giữ thông tin bên ngoài cửa sổ ngữ cảnh, để tác nhân có thể sử dụng khi thực hiện nhiệm vụ.
Bảng Ghi Chú (Scratchpads)
Con người trong quá trình giải quyết vấn đề thường ghi chú và nhớ một số điều để sử dụng trong tương lai khi xử lý các nhiệm vụ liên quan. Tác nhân cũng đang dần có được những khả năng này! Việc ghi chú trong “bảng ghi chú” là một phương pháp lâu dài giúp lưu trữ thông tin trong khi tác nhân thực hiện nhiệm vụ. Ý tưởng cốt lõi là lưu trữ thông tin bên ngoài cửa sổ ngữ cảnh nhưng lại có thể được truy cập bất cứ lúc nào. Hệ thống nghiên cứu đa tác nhân của Anthropic cung cấp một ví dụ rõ ràng:
“Nghiên cứu viên chính” sẽ suy nghĩ về cách giải quyết vấn đề và lưu kế hoạch vào “trí nhớ” để duy trì ngữ cảnh, bởi vì một khi cửa sổ ngữ cảnh vượt quá 200,000 token, nó có thể bị cắt đứt, do đó việc giữ kế hoạch rất quan trọng.
Có nhiều cách để thực hiện bảng ghi chú này. Nó có thể là một lệnh gọi công cụ đơn giản, chẳng hạn như ghi vào một tệp; hoặc có thể là một trường trong đối tượng trạng thái tại thời điểm chạy, giữ nguyên trong suốt phiên làm việc. Dù theo cách nào, bảng ghi chú cho phép tác nhân lưu giữ thông tin hữu ích để hoàn thành nhiệm vụ tốt hơn.
Trí Nhớ (Memories)
Bảng ghi chú giúp tác nhân giải quyết nhiệm vụ trong một phiên, nhưng đôi khi tác nhân cần nhớ những điều qua nhiều phiên. Mô hình Reflexion đã cho ra ý tưởng về việc phản ánh sau mỗi lượt hành động của tác nhân và tái sử dụng trí nhớ tự tạo. Mô hình Generative Agents có khả năng tổng hợp trí nhớ định kỳ từ bộ phản hồi của các tác nhân trong quá khứ.
Những khái niệm này đã được áp dụng trong các sản phẩm phổ biến như ChatGPT, Cursor và Windsurf. Tất cả đều có cơ chế tự động tạo trí nhớ lâu dài dựa trên sự tương tác giữa người dùng và tác nhân.
Lọc Ngữ Cảnh (Select Context)
Lọc ngữ cảnh là việc kéo thông tin cần thiết vào cửa sổ ngữ cảnh, để giúp tác nhân thực hiện nhiệm vụ.
Bảng Ghi Chú (Scratchpad)
Cơ chế lọc ngữ cảnh từ bảng ghi chú phụ thuộc vào cách thức thực hiện. Nếu nó là một công cụ, tác nhân chỉ cần gọi công cụ để đọc. Nếu nó là một phần của trạng thái hoạt động của tác nhân, nhà phát triển có thể chọn lọc từng phần của trạng thái để cung cấp cho tác nhân ở mỗi bước. Điều này cho phép kiểm soát chính xác việc cung cấp ngữ cảnh từ bảng ghi chú cho LLM trong các lượt sau.
Trí Nhớ (Memories)
Nếu tác nhân có khả năng lưu trữ trí nhớ, chúng cũng cần khả năng lọc trí nhớ có liên quan đến nhiệm vụ hiện tại. Điều này rất hữu ích vì một số lý do: tác nhân có thể chọn ví dụ với số lượng ít (trí nhớ bối cảnh) để học mẫu hành vi mong muốn; có thể chọn hướng dẫn (trí nhớ chương trình) để định hướng hành vi của chính mình; hoặc chọn sự thật (trí nhớ ngữ nghĩa) để cung cấp bối cảnh liên quan cho nhiệm vụ.
Một thách thức lớn là đảm bảo rằng trí nhớ được lọc ra là liên quan. Một số tác nhân phổ biến chỉ sử dụng một lượng nhỏ tệp tĩnh, những tệp này luôn được nạp vào ngữ cảnh. Ví dụ, nhiều tác nhân mã sử dụng tệp để lưu ý hướng dẫn (“trí nhớ chương trình”), hoặc trong một số trường hợp, lưu giữ ví dụ (“trí nhớ bối cảnh”). Claude Code sử dụng CLAUDE.md
, trong khi Cursor và Windsurf sử dụng tệp quy tắc.
Tuy nhiên, nếu tác nhân lưu trữ một số lượng lớn thông tin (ví dụ như loại “trí nhớ ngữ nghĩa”), việc lọc trở nên khó khăn hơn. ChatGPT là một ví dụ tốt, nó lưu trữ và lọc từ một lượng lớn trí nhớ của người dùng.
Embedding vector và/hoặc đồ thị tri thức là những kỹ thuật chỉ mục trí nhớ thường được sử dụng để hỗ trợ lọc. Dù vậy, việc lọc trí nhớ vẫn gặp nhiều thách thức. Tại Hội nghị Thế giới về kỹ sư AI, Simon Willison đã chia sẻ một ví dụ về việc lọc trí nhớ gây lỗi: ChatGPT đã lấy thông tin vị trí của anh từ trí nhớ và vô tình đưa nó vào bức ảnh mà anh yêu cầu. Việc truy xuất trí nhớ khó lường hoặc không mong muốn này có thể khiến một số người dùng cảm thấy cửa sổ ngữ cảnh “không còn thuộc về họ” nữa!
Công Cụ (Tools)
Tác nhân cần sử dụng công cụ, nhưng nếu công cụ cung cấp quá nhiều, chúng có thể bị quá tải. Thường thì điều này xảy ra vì mô tả công cụ có thể chồng chéo, gây bối rối cho mô hình khi lựa chọn công cụ nào. Một phương pháp là ứng dụng RAG (Tìm kiếm Tăng cường) vào mô tả công cụ, nhằm tìm kiếm công cụ có liên quan nhất cho nhiệm vụ dựa trên độ tương đồng ngữ nghĩa. Một số luận văn gần đây đã chỉ ra rằng phương pháp này có thể cải thiện độ chính xác trong việc lựa chọn công cụ gấp ba lần.
Kiến Thức (Knowledge)
Tìm kiếm Tăng cường (RAG) tự thân nó là một chủ đề rộng lớn và có thể trở thành thách thức chính trong kỹ thuật ngữ cảnh. Tác nhân mã là một trong những ví dụ tốt nhất về việc RAG được ứng dụng quy mô lớn. Varun của Windsurf đã tóm tắt một số thách thức:
Lập chỉ mục mã ≠ tìm kiếm ngữ cảnh…… Những gì chúng tôi đang làm là phân tích mã thông qua AST (Cây cú pháp trừu tượng) và phân khúc theo các ranh giới có ý nghĩa ngữ nghĩa…… Tuy nhiên, với việc mở rộng quy mô thư viện mã, tìm kiếm bằng embedding vector như một phương pháp tìm kiếm trở nên không đáng tin…… Chúng tôi phải dựa vào tổ hợp nhiều công nghệ, chẳng hạn như tìm kiếm grep/tệp, tìm kiếm dựa trên đồ thị tri thức, và…… một bước tái sắp xếp, trong đó ngữ cảnh sẽ được sắp xếp theo độ liên quan.
Nén Ngữ Cảnh (Compress Context)
Nén ngữ cảnh là việc chỉ giữ lại những token cần thiết cho việc thực hiện nhiệm vụ.
Tóm Tắt Ngữ Cảnh (Context Summarization)
Sự tương tác của tác nhân có thể kéo dài hàng trăm lượt, và sử dụng các công cụ tiêu tốn nhiều token. Tóm tắt là một phương pháp phổ biến để đối phó với những thách thức này. Nếu bạn đã sử dụng Claude Code, bạn đã thấy ứng dụng thực tế của nó. Khi mức sử dụng cửa sổ ngữ cảnh vượt quá 95%, Claude Code sẽ thực hiện “nén tự động”, tóm tắt toàn bộ chuỗi tương tác giữa người dùng và tác nhân. Việc nén chuỗi tương tác của tác nhân có thể thực hiện theo nhiều chiến lược, chẳng hạn như tóm tắt đệ quy hoặc tóm tắt phân cấp.
Việc kịp thời bổ sung bước tóm tắt trong thiết kế của tác nhân cũng rất có lợi. Chẳng hạn, nó có thể được sử dụng để xử lý một số lần gọi công cụ (đặc biệt là những công cụ tiêu tốn nhiều token như công cụ tìm kiếm). Ngoài ra, công ty Cognition đã đề xuất tiến hành tóm tắt ở các ranh giới khi chuyển giao giữa tác nhân với tác nhân, nhằm giảm tiêu hao token trong quá trình truyền đạt kiến thức. Nếu cần nắm bắt các sự kiện hoặc quyết định cụ thể, việc tóm tắt có thể trở nên khó khăn. Cognition đã sử dụng một mô hình tinh chỉnh cho điều này, cho thấy rằng bước này có thể đòi hỏi một khối lượng công việc lớn.
Cắt Bớt Ngữ Cảnh (Context Trimming)
Tóm tắt thường dùng LLM để chiết xuất các đoạn ngữ cảnh có liên quan nhất, trong khi việc cắt bớt thì giống như việc lọc hay “cắt tỉa” như cách Drew Breunig đã nói. Điều này có thể được thực hiện theo quy tắc hướng dẫn được mã hóa cứng, chẳng hạn như loại bỏ các thông điệp cũ hơn khỏi danh sách thông điệp. Drew cũng đã đề cập đến Provence, một trình cắt bớt ngữ cảnh được huấn luyện cho nhiệm vụ hỏi đáp.
Tách Rời Ngữ Cảnh (Isolating Context)
Tách rời ngữ cảnh là việc chia nhỏ ngữ cảnh ra để giúp tác nhân thực hiện nhiệm vụ.
Đa Tác Nhân (Multi-agent)
Một trong những cách phổ biến để tách rời ngữ cảnh là phân chia nó thành nhiều tác nhân phụ. Một động lực cho thư viện Swarm của OpenAI chính là “phân tách điểm chú ý”, tức là để một đội ngũ tác nhân xử lý các nhiệm vụ con. Mỗi tác nhân có bộ công cụ riêng, hướng dẫn và cửa sổ ngữ cảnh độc lập.
Hệ thống nghiên cứu đa tác nhân của Anthropic đã cung cấp chứng cứ mạnh mẽ cho điều này: nhiều tác nhân với ngữ cảnh độc lập thể hiện hiệu suất tốt hơn so với một tác nhân đơn lẻ, phần lớn là nhờ vào việc mỗi cửa sổ ngữ cảnh của các tác nhân phụ có thể tập trung vào một nhiệm vụ con hẹp hơn. Như blog của họ đã đề cập:
Các tác nhân phụ hoạt động song song trong khi mang theo những cửa sổ ngữ cảnh của riêng mình, khám phá các khía cạnh khác nhau của vấn đề.
Tất nhiên, đa tác nhân cũng phải đối mặt với những thách thức, bao gồm việc tiêu tốn token (ví dụ: Anthropic báo cáo rằng lượng token sử dụng của họ cao hơn gấp 15 lần so với một cuộc trò chuyện), cần phải có kỹ thuật gợi ý cẩn thận để lập kế hoạch cho công việc của các tác nhân phụ, và các vấn đề phối hợp giữa chúng.
Tách Rời Ngữ Cảnh Bằng Môi Trường (Context Isolation with Environments)
Dự án Deep Research của HuggingFace đã trình bày một ví dụ thú vị khác về việc tách rời ngữ cảnh. Hầu hết các tác nhân sử dụng các lệnh gọi công cụ API, những API này trả về các đối tượng JSON (các tham số công cụ), rồi được gửi cho công cụ (như API tìm kiếm) để lấy phản hồi (như kết quả tìm kiếm). HuggingFace thì sử dụng một CodeAgent, nó trực tiếp xuất mã bao gồm các lệnh gọi công cụ cần thiết. Những mã này sau đó được chạy trong một môi trường sandbox. Chỉ có ngữ cảnh cụ thể từ lệnh gọi công cụ (như giá trị trả về) được truyền lại cho LLM.
Điều này cho phép ngữ cảnh được tách rời trong môi trường với LLM. Hugging Face chỉ ra rằng đây là một cách tuyệt vời để tách rời các đối tượng tiêu tốn nhiều token:
Các Code Agents có khả năng quản lý trạng thái tốt hơn…… Cần lưu trữ hình ảnh/âm thanh/dữ liệu khác để sử dụng sau? Không thành vấn đề, chỉ cần phân bổ nó như một biến, và bạn có thể sử dụng nó sau này.
Trạng Thái (State)
Điều đáng lưu ý là trạng thái đang chạy của tác nhân cũng là một cách tốt để tách rời ngữ cảnh. Nó có thể hoạt động tương tự như môi trường sandbox. Trạng thái có thể được thiết kế theo một mẫu (Schema, chẳng hạn như mô hình Pydantic) với các trường có thể ghi vào ngữ cảnh. Một trường trong mẫu (như messages
) có thể được đưa ra cho LLM trong mỗi lượt tương tác của tác nhân, nhưng mẫu có thể giữ thông tin tách biệt ở các trường khác để sử dụng một cách chọn lọc hơn.
Kết Luận
Các mô hình kỹ thuật ngữ cảnh cho tác nhân vẫn đang liên tục phát triển, nhưng chúng ta có thể tổng hợp các phương pháp phổ biến thành bốn loại — Viết, Lọc, Nén và Tách Rời:
- • Viết ngữ cảnh, là việc lưu giữ thông tin bên ngoài cửa sổ ngữ cảnh, để tác nhân có thể sử dụng khi thực hiện nhiệm vụ.
- • Lọc ngữ cảnh, là việc kéo thông tin cần thiết vào cửa sổ ngữ cảnh, để giúp tác nhân thực hiện nhiệm vụ.
- • Nén ngữ cảnh, là việc chỉ giữ lại những token cần thiết cho việc thực hiện nhiệm vụ.
- • Tách rời ngữ cảnh, là việc chia nhỏ ngữ cảnh ra, để giúp tác nhân thực hiện nhiệm vụ.
Hiểu và áp dụng những mô hình này là công việc trung tâm trong việc xây dựng các tác nhân hiệu quả trong thời đại ngày nay.