Kỹ thuật xây dựng ngữ cảnh hiệu quả cho các tác nhân AI
Sau vài năm tập trung vào kỹ thuật prompt (prompt engineering) trong lĩnh vực AI ứng dụng, một thuật ngữ mới đã nổi lên: kỹ thuật ngữ cảnh (context engineering). Xây dựng ứng dụng với mô hình ngôn ngữ không còn chỉ là tìm ra từ ngữ và cụm từ phù hợp cho prompt của bạn, mà còn là trả lời câu hỏi rộng hơn: "Cấu hình ngữ cảnh nào có khả năng tạo ra hành vi mong muốn nhất từ mô hình của chúng ta?"
Ngữ cảnh (context) đề cập đến tập hợp các token được bao gồm khi lấy mẫu từ một mô hình ngôn ngữ lớn (LLM). Vấn đề kỹ thuật (engineering) ở đây là tối ưu hóa tiện ích của các token đó dựa trên các ràng buộc vốn có của LLM để đạt được kết quả mong muốn một cách nhất quán. Việc điều khiển LLM hiệu quả thường đòi hỏi tư duy trong ngữ cảnh (thinking in context)—nói cách khác: xem xét trạng thái tổng thể mà LLM có tại bất kỳ thời điểm nào và những hành vi tiềm năng mà trạng thái đó có thể mang lại.
Trong bài viết này, chúng ta sẽ khám phá nghệ thuật mới nổi của kỹ thuật ngữ cảnh và đưa ra một mô hình tinh thần tinh tế hơn để xây dựng các agent có khả năng điều khiển và hiệu quả.
Tại Anthropic, chúng tôi coi kỹ thuật ngữ cảnh là sự phát triển tự nhiên của kỹ thuật prompt. Kỹ thuật prompt đề cập đến các phương pháp viết và tổ chức hướng dẫn cho LLM nhằm đạt kết quả tối ưu (xem tài liệu của chúng tôi để biết tổng quan và các chiến lược kỹ thuật prompt hữu ích). Kỹ thuật ngữ cảnh (context engineering) đề cập đến tập hợp các chiến lược để quản lý và duy trì tập token (thông tin) tối ưu trong quá trình suy luận của LLM, bao gồm tất cả thông tin khác có thể xuất hiện ngoài prompt.
Trong những ngày đầu của kỹ thuật với LLM, việc tạo prompt là thành phần lớn nhất trong công việc kỹ thuật AI, vì phần lớn các trường hợp sử dụng ngoài các tương tác trò chuyện hàng ngày đều yêu cầu prompt được tối ưu hóa cho các tác vụ phân loại hoặc tạo văn bản một lần. Như tên gọi, trọng tâm chính của kỹ thuật prompt là cách viết prompt hiệu quả, đặc biệt là prompt hệ thống. Tuy nhiên, khi chúng ta tiến tới xây dựng các agent có khả năng hơn, hoạt động qua nhiều lượt suy luận và khung thời gian dài hơn, chúng ta cần các chiến lược để quản lý toàn bộ trạng thái ngữ cảnh (hướng dẫn hệ thống, công cụ, Giao thức Ngữ cảnh Mô hình (MCP), dữ liệu bên ngoài, lịch sử tin nhắn, v.v.).
Một agent chạy trong vòng lặp tạo ra ngày càng nhiều dữ liệu có thể liên quan đến lượt suy luận tiếp theo, và thông tin này phải được tinh chỉnh theo chu kỳ. Kỹ thuật ngữ cảnh là nghệ thuật và khoa học của việc quản lý những gì sẽ được đưa vào cửa sổ ngữ cảnh hạn chế từ vũ trụ thông tin tiềm năng không ngừng thay đổi đó.
Mặc dù có tốc độ nhanh và khả năng quản lý khối lượng dữ liệu ngày càng lớn, chúng tôi đã quan sát thấy rằng LLM, giống như con người, mất tập trung hoặc gặp nhầm lẫn ở một điểm nhất định. Các nghiên cứu về điểm chuẩn dạng "tìm kim trong đống cỏ" (needle-in-a-haystack) đã phát hiện ra khái niệm suy giảm ngữ cảnh (context rot): khi số lượng token trong cửa sổ ngữ cảnh tăng lên, khả năng của mô hình trong việc nhớ lại chính xác thông tin từ ngữ cảnh đó giảm đi.
Mặc dù một số mô hình có sự suy giảm nhẹ hơn so với các mô hình khác, đặc điểm này xuất hiện ở tất cả các mô hình. Do đó, ngữ cảnh phải được
được coi là một nguồn tài nguyên hữu hạn với lợi nhuận biên giảm dần. Giống như con người, vốn có dung lượng bộ nhớ làm việc hạn chế, các LLM có một "ngân sách chú ý" mà chúng sử dụng khi xử lý khối lượng lớn ngữ cảnh. Mỗi token mới được đưa vào sẽ tiêu hao một phần ngân sách này, làm tăng nhu cầu phải quản lý cẩn thận các token có sẵn cho LLM.
Sự khan hiếm chú ý này bắt nguồn từ các ràng buộc kiến trúc của LLM. LLM dựa trên kiến trúc transformer, cho phép mọi token có thể chú ý đến mọi token khác trong toàn bộ ngữ cảnh. Điều này tạo ra n² mối quan hệ cặp đôi cho n token.
Khi độ dài ngữ cảnh tăng lên, khả năng nắm bắt các mối quan hệ cặp đôi này của mô hình bị kéo căng, tạo ra sự căng thẳng tự nhiên giữa kích thước ngữ cảnh và sự tập trung chú ý. Ngoài ra, các mô hình phát triển các mẫu chú ý từ phân phối dữ liệu huấn luyện, nơi các chuỗi ngắn hơn thường phổ biến hơn các chuỗi dài hơn. Điều này có nghĩa là các mô hình có ít kinh nghiệm hơn và ít tham số chuyên biệt hơn cho các phụ thuộc trên toàn ngữ cảnh.
Các kỹ thuật như nội suy mã hóa vị trí cho phép các mô hình xử lý các chuỗi dài hơn bằng cách thích ứng chúng với ngữ cảnh nhỏ hơn đã được huấn luyện ban đầu, mặc dù có một số suy giảm trong việc hiểu vị trí token. Các yếu tố này tạo ra một gradient hiệu suất thay vì một vách đá cứng: các mô hình vẫn có khả năng cao ở các ngữ cảnh dài hơn nhưng có thể cho thấy độ chính xác giảm trong việc truy xuất thông tin và suy luận tầm xa so với hiệu suất của chúng trên các ngữ cảnh ngắn hơn.
Những thực tế này có nghĩa là việc thiết kế ngữ cảnh một cách cẩn thận là điều cần thiết để xây dựng các agent có năng lực.
Với việc LLM bị ràng buộc bởi một ngân sách chú ý hữu hạn, thiết kế ngữ cảnh tốt có nghĩa là tìm ra tập hợp nhỏ nhất có thể các token có tín hiệu cao để tối đa hóa khả năng đạt được một kết quả mong muốn nào đó. Việc thực hiện nguyên tắc này nói dễ hơn làm, nhưng trong phần tiếp theo, chúng tôi phác thảo ý nghĩa của nguyên tắc chỉ đạo này trong thực tế đối với các thành phần khác nhau của ngữ cảnh.
Prompt hệ thống nên cực kỳ rõ ràng và sử dụng ngôn ngữ đơn giản, trực tiếp, trình bày các ý tưởng ở độ cao phù hợp cho agent. Độ cao phù hợp là vùng Goldilocks giữa hai chế độ thất bại phổ biến. Ở một thái cực, chúng ta thấy các kỹ sư mã hóa cứng logic phức tạp, dễ vỡ trong prompt của họ để kích hoạt hành vi agent chính xác. Cách tiếp cận này tạo ra sự mong manh và tăng độ phức tạp bảo trì theo thời gian. Ở thái cực kia, các kỹ sư đôi khi cung cấp hướng dẫn mơ hồ, cấp cao, không cung cấp cho LLM các tín hiệu cụ thể cho đầu ra mong muốn hoặc giả định sai về ngữ cảnh chung. Độ cao tối ưu đạt được sự cân bằng: đủ cụ thể để hướng dẫn hành vi hiệu quả, nhưng đủ linh hoạt để cung cấp cho mô hình các heuristic mạnh mẽ nhằm hướng dẫn hành vi.
Chúng tôi khuyến nghị tổ chức prompt thành các phần riêng biệt (như <thông_tin_nền>, <hướng_dẫn>, ## Hướng dẫn công cụ, ## Mô tả đầu ra, v.v.) và sử dụng các kỹ thuật như gắn thẻ XML hoặc tiêu đề Markdown để phân định các phần này, mặc dù định dạng chính xác
Việc tinh chỉnh prompt có thể đang trở nên ít quan trọng hơn khi các mô hình ngày càng mạnh mẽ hơn.
Dù bạn chọn cấu trúc system prompt như thế nào, bạn nên hướng tới một bộ thông tin tối thiểu nhưng đầy đủ để mô tả hành vi mong muốn. (Lưu ý rằng tối thiểu không nhất thiết có nghĩa là ngắn; bạn vẫn cần cung cấp đủ thông tin cho agent ngay từ đầu để đảm bảo nó tuân thủ hành vi mong muốn.) Tốt nhất nên bắt đầu bằng cách kiểm thử một prompt tối giản với mô hình tốt nhất hiện có để xem nó thực hiện nhiệm vụ của bạn như thế nào, sau đó thêm các hướng dẫn rõ ràng và ví dụ để cải thiện hiệu suất dựa trên các lỗi phát hiện trong quá trình kiểm thử ban đầu.
**Tools** cho phép agent tương tác với môi trường của chúng và thu thập thêm ngữ cảnh mới trong quá trình làm việc. Vì tools xác định ranh giới giữa agent và không gian thông tin/hành động của chúng, điều cực kỳ quan trọng là tools phải thúc đẩy hiệu quả, cả bằng cách trả về thông tin tiết kiệm token và khuyến khích các hành vi hiệu quả của agent.
Trong bài viết *Viết tools cho AI agents – với AI agents*, chúng tôi đã thảo luận về việc xây dựng các tools mà LLM hiểu rõ và có chức năng trùng lặp tối thiểu. Tương tự như các hàm trong một codebase được thiết kế tốt, tools nên độc lập, chịu lỗi tốt và cực kỳ rõ ràng về mục đích sử dụng. Các tham số đầu vào cũng nên mang tính mô tả, không mơ hồ và tận dụng các thế mạnh vốn có của mô hình.
Một trong những lỗi phổ biến nhất chúng tôi thấy là bộ tools quá phình to, bao phủ quá nhiều chức năng hoặc dẫn đến các điểm quyết định mơ hồ về việc nên sử dụng tool nào. Nếu một kỹ sư con người không thể xác định chắc chắn tool nào nên được sử dụng trong một tình huống nhất định, thì không thể kỳ vọng một AI agent làm tốt hơn. Như chúng tôi sẽ thảo luận sau, việc quản lý một bộ tools tối thiểu khả thi cho agent cũng có thể dẫn đến việc bảo trì và cắt tỉa ngữ cảnh đáng tin cậy hơn trong các tương tác dài.
Cung cấp ví dụ, còn được gọi là few-shot prompting, là một phương pháp thực hành tốt nổi tiếng mà chúng tôi tiếp tục khuyến nghị mạnh mẽ.


