Claude Certification Guide
0% chương trình học đã hoàn thành
5.1

Quản lý cửa sổ ngữ cảnh

Những điều bạn cần biết

Quản lý cửa sổ ngữ cảnh (context window) là nền tảng của mọi hệ thống Claude đáng tin cậy. Mọi cuộc hội thoại nhiều lượt, mọi pipeline đa agent, và mọi tác vụ trích xuất tài liệu dài đều phụ thuộc vào việc bạn quản lý tốt đến đâu những gì đưa vào context window. Làm sai điều này và agent hỗ trợ khách hàng của bạn sẽ quên số tiền hoàn tiền, pipeline nghiên cứu của bạn sẽ đánh rơi trích dẫn, và hệ thống trích xuất của bạn sẽ mất độ chính xác đúng ở những trường dữ liệu quan trọng nhất.

Cái bẫy của tóm tắt lũy tiến

Khi hội thoại kéo dài, một chiến lược phổ biến là tóm tắt các lượt trước để giải phóng ngân sách token. Đây là một cái bẫy. Tóm tắt lũy tiến (progressive summarisation) một cách hệ thống phá hủy những thông tin quan trọng nhất trong các hệ thống hướng khách hàng và xử lý dữ liệu: giá trị số, ngày tháng, phần trăm, và kỳ vọng khách hàng đã nêu ra.

Xét một ví dụ thực tế. Một khách hàng liên hệ hỗ trợ về việc hoàn tiền:

Lượt 3: "Tôi muốn hoàn lại 247,83 đô la cho đơn hàng #8891 đặt ngày 3 tháng 3"

Sau khi tóm tắt, câu này trở thành:

Tóm tắt: "Khách hàng muốn hoàn tiền cho một đơn hàng gần đây"

Số tiền, mã đơn hàng, và ngày tháng — ba dữ kiện agent cần để xử lý việc hoàn tiền — đã biến mất. Đây không phải một tình huống thất bại giả định; đó là hành vi mặc định của việc tóm tắt khi áp dụng lên dữ liệu giao dịch.

Cách khắc phục: khối dữ kiện vụ việc bền vững (persistent case facts block). Trích xuất các dữ kiện giao dịch (số tiền, ngày tháng, mã đơn hàng, trạng thái) vào một khối có cấu trúc, được đưa vào mọi prompt, nằm ngoài phần lịch sử đã tóm tắt. Khối này không bao giờ bị tóm tắt. Nó tồn tại xuyên suốt mọi lượt hội thoại, bất kể chuyện gì xảy ra với lịch sử hội thoại.

jsonCopy

{
  "caseFactsBlock": {
    "customerId": "C-4421",
    "issues": [
      {
        "orderId": "#8891",
        "orderDate": "2024-03-03",
        "refundAmount": "$247.83",
        "status": "pending_refund",
        "itemDescription": "Wireless headphones — defective"
      }
    ]
  }
}

Đối với các phiên có nhiều vấn đề, nơi khách hàng nêu ra nhiều sự cố trong một cuộc hội thoại, hãy trích xuất và duy trì dữ liệu vấn đề có cấu trúc trong một tầng ngữ cảnh riêng. Mỗi vấn đề có một mục riêng với mã đơn hàng, số tiền, và trạng thái riêng. Điều này ngăn việc lẫn lộn dữ liệu giữa các vấn đề trong quá trình tóm tắt.

Hiệu ứng "lạc giữa dòng"

Các mô hình xử lý thông tin ở đầu và cuối của các đầu vào dài một cách đáng tin cậy. Những phát hiện bị chôn vùi ở giữa một ngữ cảnh dài có thể bị bỏ sót hoặc được coi trọng ít hơn. Đây là một hiện tượng đã được ghi nhận kỹ trong các mô hình ngôn ngữ lớn, và nó ảnh hưởng trực tiếp đến cách bạn cấu trúc các đầu vào tổng hợp.

Cách khắc phục nằm ở cấu trúc, không phải ở prompt. Đặt phần tóm tắt các phát hiện chính ở đầu các đầu vào tổng hợp. Sắp xếp kết quả chi tiết với các tiêu đề mục rõ ràng xuyên suốt. Nếu bạn đang đưa cho một agent tổng hợp đầu ra của ba subagent nghiên cứu, hãy bắt đầu bằng một mục "Tóm tắt các phát hiện chính", sau đó mới cung cấp các đầu ra chi tiết với ranh giới mục rõ ràng.

## Tóm tắt các phát hiện chính - Nguồn A: Tăng trưởng thị trường 12% trong ngành năng lượng tái tạo (2023) - Nguồn B: Số đơn xin cấp bằng sáng chế tăng 34% theo năm - Nguồn C: Khung pháp lý bị trì hoãn đến quý 3 năm 2025 ## Các phát hiện chi tiết ### Nguồn A: Báo cáo phân tích thị trường [Chi tiết đầy đủ ở đây...] ### Nguồn B: Phân tích cơ sở dữ liệu bằng sáng chế [Chi tiết đầy đủ ở đây...] ### Nguồn C: Rà soát khung pháp lý [Chi tiết đầy đủ ở đây...]

Cắt gọt kết quả tool

Kết quả tool là một kẻ âm thầm tiêu tốn ngân sách ngữ cảnh. Một lệnh tra cứu đơn hàng có thể trả về hơn 40 trường: dấu thời gian kiểm toán nội bộ, mã kho hàng, mã hãng vận chuyển, mã trung tâm hoàn tất đơn hàng, và hàng chục trường khác không liên quan đến yêu cầu hoàn tiền của khách hàng. Bạn chỉ cần 5 trường. 35 trường còn lại tiêu tốn token ở mọi lượt tiếp theo khi lịch sử hội thoại ngày càng dài.

Hãy cắt gọt các đầu ra tool dài dòng, chỉ giữ lại các trường liên quan trước khi chúng tích tụ trong ngữ cảnh. Đây không phải là một tối ưu hóa tùy chọn — nó là điều thiết yếu đối với các hệ thống nhiều lượt, nơi kết quả tool chồng chất qua từng lượt hội thoại.

pythonCopy

def trim_order_result(raw_result, relevant_fields=None):
    if relevant_fields is None:
        relevant_fields = [
            "order_id", "order_date", "total_amount",
            "return_eligible", "item_description"
        ]
    return {k: v for k, v in raw_result.items() if k in relevant_fields}

Việc cắt gọt này nên diễn ra trong một hook PostToolUse hoặc trong chính phần triển khai tool, trước khi kết quả đi vào lịch sử hội thoại. Một khi dữ liệu dài dòng đã nằm trong ngữ cảnh, nó sẽ ở đó cho mọi lượt tiếp theo.

Lịch sử hội thoại đầy đủ

Claude API là stateless (không lưu trạng thái). Mỗi request phải bao gồm toàn bộ lịch sử hội thoại. Nếu bạn bỏ qua các tin nhắn trước đó, mô hình sẽ mất tính mạch lạc của hội thoại. Không có trạng thái phiên nào được lưu ở phía server — mỗi lượt phải chứa mọi thứ mô hình cần để hiểu toàn bộ cuộc hội thoại.

Điều này tạo ra một sự căng thẳng với giới hạn ngữ cảnh: bạn cần toàn bộ lịch sử để có tính mạch lạc, nhưng lịch sử lại lớn dần theo từng lượt. Khối dữ kiện vụ việc bền vững giải quyết vấn đề này bằng cách tách các dữ kiện quan trọng ra khỏi phần tường thuật có thể tóm tắt, cho phép bạn tóm tắt dòng chảy hội thoại trong khi vẫn giữ nguyên vẹn mọi chi tiết giao dịch.

Tối ưu hóa agent thượng nguồn

Trong các hệ thống đa agent, các agent thượng nguồn thường trả về các chuỗi suy luận dài dòng và nội dung thô mà agent hạ nguồn không cần đến. Khi một subagent nghiên cứu gửi toàn bộ quá trình suy nghĩ của nó cho một agent tổng hợp có ngân sách ngữ cảnh hạn chế, agent tổng hợp sẽ lãng phí token vào phần suy luận mà nó không thể sử dụng.

Hãy chỉnh sửa các agent thượng nguồn để trả về dữ liệu có cấu trúc — các dữ kiện chính, trích dẫn, điểm mức độ liên quan — thay vì nội dung dài dòng và chuỗi suy luận. Yêu cầu subagent đưa metadata (ngày tháng, vị trí nguồn, bối cảnh phương pháp luận) vào các đầu ra có cấu trúc để hỗ trợ việc tổng hợp hạ nguồn chính xác.

jsonCopy

{
  "findings": [
    {
      "claim": "Renewable energy investment grew 12% in 2023",
      "source": "IEA World Energy Report 2024",
      "sourceUrl": "https://example.com/report",
      "relevanceScore": 0.92,
      "publicationDate": "2024-01-15"
    }
  ]
}

Đây không chỉ là chuyện tiết kiệm token. Các đầu ra có cấu trúc từ agent thượng nguồn cho phép agent hạ nguồn xử lý các phát hiện mà không cần phân tích lại văn xuôi dài dòng.

Khái niệm chính

Khối dữ kiện vụ việc bền vững là mẫu hình quan trọng nhất trong quản lý cửa sổ ngữ cảnh. Trích xuất các dữ kiện giao dịch (số tiền, ngày tháng, mã đơn hàng) vào một khối có cấu trúc được đưa vào mọi prompt và không bao giờ bị tóm tắt. Đây là cách khắc phục cho cái bẫy tóm tắt lũy tiến và là nền tảng cho các hệ thống nhiều lượt đáng tin cậy.

Prompt caching

Prompt caching là nửa còn lại của bài toán kinh tế ngữ cảnh. Thay vì cắt gọt những gì mô hình nhìn thấy, bạn tránh việc phải trả tiền để xử lý lại những phần không thay đổi. Khi bạn đánh dấu một tiền tố (prefix) ổn định bằng một điểm ngắt cache_control, API sẽ lưu trữ tiền tố đã xử lý đó và tái sử dụng nó ở request tiếp theo, chỉ tính một phần nhỏ chi phí đầu vào cho các token đã được cache.

Caching khớp từ đầu prompt, theo từng tiền tố một, vì vậy cách bố trí sẽ quyết định bạn có đạt được cache hit hay không. Hãy đặt phần nội dung không đổi lên trước: hướng dẫn hệ thống, định nghĩa tool, các tài liệu tham khảo dài. Đặt điểm ngắt cache_control ở cuối khối tĩnh đó. Đặt nội dung dễ thay đổi — tin nhắn mới nhất của người dùng và bất cứ thứ gì thay đổi theo từng request — sau điểm ngắt.

pythonCopy

messages = [
    {
        "role": "system",
        "content": [
            {"type": "text", "text": LONG_STATIC_INSTRUCTIONS},
            {"type": "text", "text": REFERENCE_DOC,
             "cache_control": {"type": "ephemeral"}},
        ],
    },
    {"role": "user", "content": dynamic_user_message},
]

Đặt sai thứ tự và bạn sẽ mất hoàn toàn lợi ích của caching. Nếu nội dung dễ thay đổi nằm trước khối tĩnh, tiền tố sẽ thay đổi ở mỗi request, không có gì khớp cả, và mỗi lệnh gọi sẽ phải trả đầy đủ chi phí. Cache cũng chỉ tồn tại trong thời gian ngắn: một điểm ngắt ephemeral kéo dài khoảng năm phút kể từ lần dùng cuối, vì vậy caching chỉ đem lại lợi ích cho các đợt request liên quan dồn dập, chứ không phải cho nội dung được tái sử dụng cách nhau hàng giờ.

Bẫy thi

Bẫy thi: Nghĩ rằng tóm tắt lũy tiến an toàn cho dữ liệu giao dịch

Tóm tắt phá hủy một cách hệ thống các giá trị số, ngày tháng, và mã định danh cụ thể. Một khối dữ kiện vụ việc bền vững phải giữ những thứ này bên ngoài phần lịch sử đã tóm tắt.

Bẫy thi: Cho rằng hiệu ứng 'lạc giữa dòng' được giải quyết bằng cách bảo mô hình chú ý đến mọi thứ

Cách khắc phục nằm ở cấu trúc: đặt các phát hiện chính ở đầu đầu vào và dùng tiêu đề mục rõ ràng. Các lời nhắc dựa trên prompt không đáng tin cậy đối với các hiệu ứng vị trí.

Bẫy thi: Giữ nguyên toàn bộ kết quả tool trong ngữ cảnh vì 'mô hình có thể cần đến chúng sau này'

Kết quả tool không được cắt gọt từ các lệnh tra cứu hơn 40 trường sẽ làm cạn kiệt ngân sách token qua từng lượt. Hãy cắt gọt chỉ giữ lại các trường liên quan trước khi kết quả đi vào lịch sử hội thoại.

Bẫy thi: Tin rằng lịch sử hội thoại có thể bị cắt bớt có chọn lọc mà không gây hậu quả

API là stateless. Mỗi request cần toàn bộ lịch sử hội thoại. Việc cắt bớt có chọn lọc phá vỡ tính mạch lạc của hội thoại. Hãy dùng khối dữ kiện vụ việc và tóm tắt thay vì cắt bớt.

Tình huống luyện tập

Không tìm thấy câu hỏi luyện tập "q-5-1-001".

Bài tập thực hành

Xây dựng một bộ quản lý ngữ cảnh với khối dữ kiện vụ việc bền vững

Bạn sẽ học được gì

  • Triển khai mẫu hình khối dữ kiện vụ việc bền vững để bảo vệ dữ liệu giao dịch khỏi việc bị tóm tắt
  • Cắt gọt kết quả tool dài dòng chỉ giữ lại các trường liên quan trước khi chúng tích tụ trong ngữ cảnh
  • Nhận diện và giảm thiểu cái bẫy tóm tắt lũy tiến đối với giá trị số, ngày tháng, và mã định danh
  • Áp dụng biện pháp giảm thiểu hiệu ứng lạc giữa dòng bằng cách đặt các phát hiện chính ở đầu đầu vào tổng hợp
  • Hiểu rằng Claude API là stateless và mỗi request phải bao gồm toàn bộ lịch sử hội thoại

Các bước

Vì sao: Khối dữ kiện vụ việc bền vững là mẫu hình quan trọng nhất trong quản lý cửa sổ ngữ cảnh. Trích xuất các dữ kiện giao dịch vào một khối có cấu trúc không bao giờ bị tóm tắt sẽ ngăn cái bẫy tóm tắt lũy tiến phá hủy các giá trị số và mã định danh quan trọng.

Bạn sẽ thấy: Một hàm nhận đầu ra thô của tool và trả về một đối tượng có cấu trúc chỉ chứa các dữ kiện giao dịch: mã khách hàng, mã đơn hàng, số tiền, ngày tháng, và trạng thái. Nội dung tường thuật không mang tính giao dịch nên được loại bỏ.

Vì sao: Khối dữ kiện vụ việc phải tồn tại xuyên suốt mọi lượt hội thoại, bất kể chuyện gì xảy ra với lịch sử hội thoại. Nó nằm ngoài phần đã tóm tắt của ngữ cảnh, đảm bảo số tiền, ngày tháng, và mã đơn hàng vẫn còn nguyên vẹn ngay cả khi các lượt hội thoại trước đó bị nén lại.

Bạn sẽ thấy: Một hàm dựng prompt luôn đưa khối dữ kiện vụ việc lên đầu mỗi tin nhắn, tiếp theo là bất kỳ lịch sử đã tóm tắt nào, rồi đến lượt hội thoại hiện tại. Khối dữ kiện vụ việc nên được phân tách rõ ràng bằng một tiêu đề mục.

Vì sao: Kết quả tool không được cắt gọt là một kẻ âm thầm tiêu tốn ngân sách ngữ cảnh. Một lệnh tra cứu đơn hàng trả về hơn 40 trường sẽ tiêu tốn token ở mọi lượt tiếp theo khi lịch sử hội thoại ngày càng dài. Cắt gọt xuống các trường liên quan trước khi kết quả đi vào ngữ cảnh là điều thiết yếu, không phải tùy chọn.

Bạn sẽ thấy: Một hàm cắt gọt nhận vào một đối tượng kết quả tool thô và chỉ trả về các trường cần thiết cho tác vụ hiện tại. Kết quả sau khi cắt gọt nên nhỏ hơn 80-90% so với bản gốc.

Vì sao: Điều này xác nhận rằng mẫu hình dữ kiện vụ việc bền vững thực sự hiệu quả. Đề thi kiểm tra xem bạn có hiểu rằng tóm tắt lũy tiến phá hủy các số tiền và ngày tháng cụ thể hay không, và khối dữ kiện vụ việc chính là cách khắc phục. Bạn cần xác minh điều này bằng thực nghiệm.

Bạn sẽ thấy: Một cuộc hội thoại 6-8 lượt, trong đó việc tóm tắt xảy ra sau lượt thứ 4. Sau khi tóm tắt, agent vẫn phải tham chiếu chính xác số tiền hoàn (247,83 đô la), mã đơn hàng (#8891), và ngày tháng (3 tháng 3) từ khối dữ kiện vụ việc. Không có khối này, các giá trị đó sẽ bị mất do tóm tắt.

Vì sao: Các mô hình xử lý thông tin ở đầu và cuối của đầu vào dài một cách đáng tin cậy, nhưng những phát hiện bị chôn vùi ở giữa có thể bị bỏ sót. Đặt phần tóm tắt các phát hiện chính ở đầu đầu vào tổng hợp là một cách khắc phục mang tính cấu trúc cho hiện tượng đã được ghi nhận kỹ này.

Bạn sẽ thấy: Một hàm tổng hợp đặt mục Tóm tắt các phát hiện chính lên đầu các đầu vào kết hợp, tiếp theo là kết quả chi tiết với tiêu đề mục rõ ràng. Các phát hiện chính nên là các gạch đầu dòng ngắn gọn rút ra từ nội dung chi tiết.

Nguồn tham khảo