Bỏ qua đến nội dung chính

Prompt caching in action

📖 Nội dung bài học

Tóm tắt

Prompt caching là một tính năng tối ưu hóa mạnh mẽ, giúp giảm chi phí và tăng tốc độ cho các yêu cầu khi bạn gửi nội dung giống hệt nhau đến Claude nhiều lần. Yêu cầu ban đầu sẽ ghi vào cache, và các yêu cầu tiếp theo có thể đọc từ đó. Cache tồn tại trong 5 phút và cực kỳ hữu ích vì nhiều ứng dụng gửi các sơ đồ công cụ (tool schemas), system prompt, hoặc lịch sử tin nhắn giống hệt nhau lặp đi lặp lại.

Cách Prompt Caching Hoạt Động

Khi bạn đánh dấu nội dung để cache, Claude sẽ xử lý nó một lần và lưu kết quả. Các yêu cầu tiếp theo bao gồm nội dung giống hệt có thể bỏ qua bước xử lý và đọc trực tiếp từ cache. Điều này chỉ hoạt động nếu nội dung được cache giống hệt nhau - ngay cả một thay đổi ký tự duy nhất cũng sẽ làm mất hiệu lực cache.

Bạn có thể đặt nhiều điểm dừng cache trong một yêu cầu. Thứ tự caching tuân theo trình tự sau:

  • Sơ đồ công cụ (Tool schemas)
  • System prompt
  • Lịch sử tin nhắn

Thiết Lập Caching Sơ Đồ Công Cụ

Để cache sơ đồ công cụ, bạn cần thêm trường cache_control vào công cụ cuối cùng trong danh sách của bạn. Đây là cách thực hiện đúng mà không cần sửa đổi các sơ đồ công cụ ban đầu của bạn:

if tools:
    tools_clone = tools.copy()
    last_tool = tools_clone[-1].copy()
    last_tool["cache_control"] = {"type": "ephemeral"}
    tools_clone[-1] = last_tool
    params["tools"] = tools_clone

Cách tiếp cận này tạo bản sao của cả danh sách công cụ và sơ đồ công cụ cuối cùng trước khi thêm trường cache control. Điều này ngăn chặn việc vô tình sửa đổi định nghĩa công cụ ban đầu của bạn, có thể gây ra sự cố nếu bạn sắp xếp lại các công cụ sau này.

Caching System Prompt

Đối với system prompt, bạn cần cấu trúc tham số system dưới dạng một danh sách với một khối văn bản bao gồm trường cache control:

if system:
    params["system"] = [
        {
            "type": "text",
            "text": system,
            "cache_control": {"type": "ephemeral"}
        }
    ]

Hiểu Hành Vi Cache

Khi bạn thực hiện yêu cầu đầu tiên với nội dung có thể cache, bạn sẽ thấy cache_creation_input_tokens trong trường usage. Điều này cho biết Claude đã ghi bao nhiêu token vào cache. Đối với các yêu cầu tiếp theo với nội dung giống hệt, bạn sẽ thấy cache_read_input_tokens thay thế.

Nếu bạn có cả nội dung được cache và nội dung mới trong cùng một yêu cầu, bạn có thể thấy cả việc đọc và ghi cache. Ví dụ, nếu bạn giữ nguyên sơ đồ công cụ nhưng thay đổi system prompt, bạn sẽ đọc các công cụ từ cache trong khi ghi system prompt mới vào cache.

Mất Hiệu Lực Cache

Cache cực kỳ nhạy cảm với các thay đổi. Sửa đổi ngay cả một ký tự duy nhất trong mô tả sơ đồ công cụ, system prompt hoặc bất kỳ nội dung nào được cache sẽ làm mất hiệu lực mục cache đó. Khi điều này xảy ra, Claude coi đó là nội dung hoàn toàn mới và tạo một mục cache mới.

Sự nhạy cảm này có nghĩa là bạn nên cân nhắc cẩn thận những gì bạn cache. Các sơ đồ công cụ và system prompt ổn định trong nhiều yêu cầu là những ứng cử viên lý tưởng. Nội dung động thay đổi thường xuyên sẽ không hưởng lợi từ việc caching.

Triển Khai Thực Tế

Trong thực tế, bạn nên tích hợp caching vào các hàm chat của mình theo mặc định. Hầu hết các ứng dụng sử dụng cùng sơ đồ công cụ và system prompt trong nhiều yêu cầu, làm cho chúng trở nên hoàn hảo cho việc caching. Lợi ích về hiệu suất và chi phí là rất đáng kể khi bạn thực hiện nhiều yêu cầu với nội dung tương tự.

Hãy nhớ rằng caching có giá trị nhất khi bạn gửi nội dung giống nhau lặp đi lặp lại. Vì điều này xảy ra cực kỳ thường xuyên trong các ứng dụng thực tế - đặc biệt là với sơ đồ công cụ và system prompt - việc triển khai caching sớm trong quy trình phát triển của bạn sẽ mang lại lợi ích khi ứng dụng của bạn mở rộng quy mô.

Tải xuống

🔁 Bài học liên quan

📚 Nguồn & ghi nhận

Bài học có hữu ích không?

Góp ý / Báo lỗiPhát hiện sai sót hoặc có ý tưởng cải thiện?