Trang chủ / Tài liệu / Quản lý ngữ cảnh

Quản lý ngữ cảnh

Vì sao chi phí của các phiên dài tăng phi tuyến và những cách giữ lịch sử trong giới hạn.

API không lưu trạng thái. Mỗi lượt đều gửi lại toàn bộ cuộc hội thoại, nên số token đầu vào tăng theo bản ghi hội thoại — và chi phí cũng tăng theo ở mọi lệnh gọi tiếp theo.

Đặc điểm của vấn đề

Một cuộc hội thoại gồm N lượt, mỗi lượt thêm khoảng T token, tiêu tốn tổng số token đầu vào ở mức N²T/2 thay vì NT. Tăng gấp đôi độ dài phiên khiến chi phí đầu vào tăng xấp xỉ gấp bốn. Đó là lý do một tác nhân có vẻ rẻ trong mười phút lại khiến bạn lo ngại sau một giờ.

Bốn cách tiếp cận hiệu quả

MẫuCách thực hiệnĐánh đổi
Cửa sổ trượtGiữ K lượt gần nhất, bỏ phần còn lạiMất hoàn toàn ngữ cảnh ban đầu
Bản tóm tắt được cập nhật liên tụcĐịnh kỳ thay thế các lượt cũ bằng bản tóm tắt do mô hình viếtTốn thêm một lệnh gọi; giữ được ý chính
Phiên mới cho mỗi tác vụBắt đầu lại từ đầu khi chủ đề thay đổiKhông tốn thêm chi phí và thường là lựa chọn đúng
Lưu trữ bên ngoàiLưu trạng thái trong tệp hoặc cơ sở dữ liệu, chỉ tải những gì bước hiện tại cầnTốn công nhất, kết quả tốt nhất

Tóm tắt các lượt cũ

def compact(history, keep=6):
    class="s">""class="s">"Replace everything but the last `keep` turns with one summary turn."class="s">""
    if len(history) <= keep:
        return history
    old, recent = history[:-keep], history[-keep:]
    summary = summarise(old)          class=class="s">"c"># one cheap Haiku call
    return [{class="s">"role": class="s">"user", class="s">"content": fclass="s">"Summary of earlier discussion: {summary}"}] + recent

Chạy tác vụ tóm tắt bằng một mô hình có chi phí thấp. Đây là tác vụ nén thông tin, không phải tác vụ suy luận.

Kết quả công cụ thường là thủ phạm

Trong các công cụ tác nhân, bắt đầu phiên mới giữa những tác vụ không liên quan là cách tối ưu ít tốn kém nhất. Trong Claude Code, đó là /clear.