Thủ thuật
Cơ chế nén ngữ cảnh thông minh trên Pi: Cách tối ưu hóa bộ nhớ hội thoại
(giờ Việt Nam)
Tóm tắt AI
Pi tự động nén các đoạn hội thoại cũ thành tóm tắt cấu trúc khi đạt giới hạn token, giúp duy trì ngữ cảnh dài mà vẫn tiết kiệm tài nguyên. Người dùng có thể kích hoạt thủ công qua lệnh /compact để quản lý bộ nhớ hiệu quả hơn.
Bản dịch AI

Nếu bạn từng có một phiên làm việc kéo dài với một coding agent như Pi, Claude Code hoặc Codex, chắc hẳn bạn đã từng kích hoạt quá trình nén (compaction). Trong bài viết này, chúng tôi sẽ giải thích cách thức hoạt động của quá trình nén và khi nào Pi cần thực hiện việc này.
Một cuộc hội thoại với LLM
Các mô hình ngôn ngữ lớn (LLM) có cửa sổ ngữ cảnh (context window) hạn chế. Cửa sổ ngữ cảnh là những gì mô hình có thể "nhìn thấy" trong khi tạo phản hồi. Kiến trúc transformer được các LLM sử dụng giới hạn lượng dữ liệu đầu vào mà chúng có thể xử lý. Dữ liệu đầu vào cho một phiên làm việc của coding agent bao gồm tất cả các tin nhắn và lệnh gọi công cụ (tool calls) trước đó, và nó sẽ liên tục tăng lên khi bạn làm việc. Một khi vượt quá cửa sổ ngữ cảnh, LLM sẽ từ chối yêu cầu.
Khi làm việc tương tác với một coding agent như Pi, agent sẽ gửi các yêu cầu đến LLM và nhận lại phản hồi. Mỗi yêu cầu bao gồm một system prompt, các tệp đã tải như AGENTS.md, các định nghĩa công cụ và lịch sử hội thoại.
Yêu cầu LLM đầu tiên của một coding agent chứa ngữ cảnh khởi tạo này, cùng với tin nhắn đầu tiên của người dùng.
Điều này bắt đầu một lượt (turn). LLM có thể trả về tin nhắn của trợ lý chứa các lệnh gọi công cụ trước. Chương trình agent thực thi chúng và gửi một yêu cầu mới đến LLM bao gồm toàn bộ cuộc hội thoại, lúc này đã có thêm kết quả của các công cụ. Chúng ta nhận lại một tin nhắn khác từ trợ lý. Lượt hội thoại kết thúc khi trợ lý đã hoàn tất việc tạo đầu ra.
Chúng ta tiếp tục làm việc và gửi một tin nhắn khác.
Mỗi lượt hội thoại sẽ mở rộng cuộc trò chuyện. Cuối cùng, lịch sử sẽ vượt quá giới hạn ngữ cảnh. Yêu cầu tiếp theo sau đó sẽ trả về lỗi như "Request exceeds the maximum size" (Yêu cầu vượt quá kích thước tối đa).
Xử lý tràn ngữ cảnh (context overflow)
Khi chúng ta không thể tiếp tục cuộc hội thoại hiện tại như bình thường, chúng ta có hai lựa chọn.
Nén (Compaction)
Về lý thuyết, có nhiều cách để thực hiện việc nén. Ví dụ, chúng ta có thể viết một hàm tất định (deterministic function) để giữ lại một phần nội dung trong cuộc hội thoại và loại bỏ phần còn lại. Tuy nhiên, trên thực tế, các phương pháp nén thường sử dụng một yêu cầu LLM để tóm tắt lịch sử hội thoại.
Quá trình nén thay thế một phần lịch sử bằng một bản đại diện đã được nén, tạo không gian cho các tin nhắn và lệnh gọi công cụ bổ sung.
Cách triển khai của Pi
Hãy xem xét kỹ hơn cách Pi triển khai việc nén cụ thể như thế nào.
Khi các cuộc hội thoại trở nên quá dài, Pi sử dụng tính năng nén để tóm tắt nội dung cũ hơn trong khi vẫn bảo toàn công việc gần đây. Quá trình nén được kích hoạt khi giới hạn ngữ cảnh sắp chạm ngưỡng tổng kích thước của cửa sổ ngữ cảnh. Nó cũng có thể được kích hoạt thủ công bằng lệnh /compact.
Pi kiểm tra tính năng tự động nén sau khi một lượt hội thoại kết thúc. Cho đến lúc đó, mỗi yêu cầu sẽ mở rộng prompt hiện tại và có thể tái sử dụng tiền tố (prefix) đã được lưu trong bộ nhớ đệm. Pi cũng có thể nén giữa chừng nếu gặp lỗi tràn ngữ cảnh.
Khi nén, Pi giữ lại một số lượng tin nhắn gần đây mà không thay đổi.
Số lượng tin nhắn được giữ lại thay đổi tùy thuộc vào ngân sách token (token budget) có thể cấu hình được của Pi. Mặc định hiện tại của Pi là 20 nghìn token, tương đương khoảng 5 đến 20 lượt hội thoại. Tất cả các tin nhắn trước điểm cắt này sẽ được trích xuất, tuần tự hóa và tóm tắt.
Prompt nén của Pi
Kết quả lý tưởng của một bản tóm tắt tốt cho một coding agent giống như một bản bàn giao công việc từ ca này sang ca khác. Prompt nén của Pi tập trung vào thực tế là có rất nhiều nội dung trong ngữ cảnh hiện tại không còn liên quan. Chúng ta chỉ nên giữ lại những gì vẫn là ngữ cảnh quan trọng cho yêu cầu LLM tiếp theo.
Do đó, Pi gửi một yêu cầu nén khác biệt so với yêu cầu hội thoại thông thường.
Kết quả của quá trình nén được thêm vào phiên làm việc của Pi dưới dạng một mục nén (compaction entry), và phiên làm việc có thể tiếp tục. Sau yêu cầu nén, ngữ cảnh đã được nén lại.
Giờ đây, trong ngữ cảnh hội thoại đã có thêm không gian cho nhiều tin nhắn hơn.
Pi lưu trữ bản tóm tắt nén dưới dạng văn bản thuần túy trong phiên làm việc. Điều này giúp ngữ cảnh đã nén có thể đọc được và di động, vì chúng ta có thể chuyển đổi các mô hình trong Pi và tiếp tục sử dụng bản tóm tắt đó.
Nén và bộ nhớ đệm prompt (prompt caching)
Bộ nhớ đệm prompt được các nhà cung cấp LLM sử dụng để giảm chi phí cho các yêu cầu lặp lại trong cùng một cuộc hội thoại. Trong một phiên lập trình đang hoạt động, chúng ta trả ít phí hơn cho ngữ cảnh đã được mô hình tạo ra trước đó. Việc lưu vào bộ nhớ đệm này yêu cầu sự khớp chính xác về tiền tố, vì vậy việc nén một phiên làm việc sẽ làm hỏng bộ nhớ đệm prompt.
Các lượt hội thoại được giữ lại vẫn chứa cùng các token, nhưng giờ đây chúng theo sau một tiền tố khác. Do đó, trạng thái bộ nhớ đệm trước đó của chúng không thể được tái sử dụng.
Các yêu cầu mới sau khi nén sẽ được hưởng lợi từ bộ nhớ đệm prompt trở lại.
Thử nghiệm
Vì Pi có khả năng mở rộng và tùy biến cao, bạn có thể thay thế cơ chế nén của nó bằng cơ chế của riêng bạn. Để kiểm tra một cơ chế nén khác, hãy yêu cầu Pi tạo một tiện ích mở rộng (extension) với một prompt nén tùy chỉnh.
Bài viết được AI dịch và tổng hợp tự động từ Hacker News Nổi bật (buzzing.cc bản dịch tiếng Trung). Liên kết bài gốc ở phía trên. Dữ liệu đồng bộ qua API công khai được ghi nguồn tại AI HOT (canonical) ↗. AIHOT.vn luôn dẫn nguồn đầy đủ — nếu bạn thấy điểm cần chỉnh sửa, hãy gửi ý kiến tại trang phản hồi.