Tận dụng bộ nhớ cache ngữ cảnh để tối ưu hóa việc sử dụng LLM dạng dài

Khám phá cách tận dụng tính năng bộ nhớ cache ngữ cảnh của Google trong API Gemini để tối ưu hóa việc sử dụng LLM dạng dài, giảm thời gian và chi phí xử lý. Tìm hiểu chi tiết về việc triển khai và những lợi ích tiềm năng dành cho các nhà phát triển xây dựng trên API Gemini.

24 tháng 2, 2025

party-gif

Mở khóa sức mạnh của các LLM có ngữ cảnh dài với API Gemini của Google và tính năng lưu trữ ngữ cảnh mới của nó. Khám phá cách giải pháp đổi mới này có thể giảm đáng kể thời gian xử lý, độ trễ và chi phí, giúp dễ dàng sử dụng các tập dữ liệu lớn trong các ứng dụng AI của bạn. Khám phá các chi tiết triển khai thực tế và tìm hiểu cách khai thác hiệu quả công nghệ đột phá này.

Hiểu về Bộ nhớ Cache và Lợi ích của Nó

Việc Google gần đây thêm tính năng lưu trữ ngữ cảnh vào API Gemini của họ nhằm giải quyết một số hạn chế chính của các mô hình ngôn ngữ có ngữ cảnh dài (LLM). Mặc dù LLM có thể lưu trữ một lượng thông tin đáng kể, nhưng chúng gặp phải một số vấn đề:

  • Thời gian xử lý tăng: Với mỗi truy vấn, toàn bộ ngữ cảnh cần được gửi đến LLM, dẫn đến việc xử lý một lượng lớn dữ liệu, làm tăng thời gian xử lý.
  • Độ trễ cao: Việc chuyển dữ liệu lớn cần thiết cho mỗi truy vấn dẫn đến độ trễ cao.
  • Chi phí cao hơn: Vì các nhà cung cấp API tính phí dựa trên số lượng token, việc tăng chuyển dữ liệu dẫn đến chi phí cao hơn.

Tính năng lưu trữ ngữ cảnh của Google cố gắng giảm thiểu các vấn đề này. Đây là cách nó hoạt động:

  1. Khởi tạo bộ nhớ cache: Bạn cung cấp một hướng dẫn hệ thống hoặc một ngữ cảnh lớn (ví dụ: tài liệu, tệp video, tệp âm thanh) mà bạn muốn lưu trữ.
  2. Xác định bộ nhớ cache: Mỗi bộ nhớ cache có một định danh duy nhất, có thể được coi là tên của bộ nhớ cache, và một tham số "thời gian sống" để xác định thời gian hết hạn của bộ nhớ cache.
  3. Truy xuất bộ nhớ cache: Khi API Gemini nhận được truy vấn của người dùng, nó phân tích các tập dữ liệu bộ nhớ cache có sẵn, truy xuất bộ nhớ cache phù hợp và kết hợp nó với truy vấn của người dùng để xử lý.

Phương pháp này mang lại nhiều lợi ích:

  • Giảm thời gian xử lý: Bằng cách tái sử dụng dữ liệu được lưu trong bộ nhớ cache, hệ thống chỉ cần xử lý truy vấn của người dùng, giảm tổng thời gian xử lý.
  • Độ trễ thấp hơn: Chỉ gửi truy vấn của người dùng, thay vì toàn bộ ngữ cảnh, dẫn đến độ trễ thấp hơn.
  • Tiết kiệm chi phí: Giảm số lượng token được gửi với mỗi truy vấn dẫn đến chi phí thấp hơn.

Google cho biết sử dụng lưu trữ cache cho tới 2.128.000 token có thể dẫn đến chi phí thấp hơn gần bốn lần so với gửi toàn bộ ngữ cảnh với mỗi truy vấn.

Cần lưu ý rằng có một số hạn chế và cân nhắc khi sử dụng lưu trữ ngữ cảnh:

  • Số lượng token đầu vào tối thiểu: Số lượng token đầu vào tối thiểu cho lưu trữ ngữ cảnh hiện đang được đặt ở 32.000 token.
  • Số lượng token tối đa: Số lượng token tối đa có thể được lưu trong bộ nhớ cache bị giới hạn bởi cửa sổ ngữ cảnh tối đa của mô hình, khoảng 2 triệu token cho cả mô hình Gemini Pro và Flash.
  • Chi phí lưu trữ: Có một chi phí lưu trữ liên quan đến nội dung được lưu trong bộ nhớ cache, là 1 USD cho mỗi triệu token mỗi giờ.

Nói chung, tính năng lưu trữ ngữ cảnh trong API Gemini của Google là một bổ sung có giá trị, có thể cải thiện đáng kể hiệu suất và hiệu quả về chi phí của các ứng dụng dựa trên LLM, đặc biệt là những ứng dụng xử lý lượng lớn ngữ cảnh.

Khám phá Quy trình Bộ nhớ Cache

Việc Google gần đây thêm tính năng lưu trữ ngữ cảnh vào API Gemini nhằm giải quyết các hạn chế của các mô hình ngôn ngữ có ngữ cảnh dài. Bằng cách lưu trữ ngữ cảnh, hệ thống có thể giảm thời gian xử lý, độ trễ và chi phí liên quan đến việc gửi toàn bộ ngữ cảnh với mỗi truy vấn.

Quá trình lưu trữ cache diễn ra như sau:

  1. Khởi tạo bộ nhớ cache: Bạn cung cấp một hướng dẫn hệ thống hoặc một ngữ cảnh lớn (ví dụ: tài liệu, tệp video, tệp âm thanh) mà bạn muốn lưu trữ. Mỗi bộ nhớ cache có một định danh duy nhất và một tham số "thời gian sống" để xác định thời gian hết hạn của bộ nhớ cache.

  2. Lưu trữ bộ nhớ cache: Hệ thống lưu trữ nội bộ của API Gemini, được tối ưu hóa để truy xuất nhanh chóng, lưu trữ dữ liệu được lưu trong bộ nhớ cache.

  3. Xử lý truy vấn: Khi API Gemini nhận được truy vấn của người dùng, nó phân tích các tập dữ liệu bộ nhớ cache có sẵn, xác định bộ nhớ cache phù hợp dựa trên định danh duy nhất và kiểm tra tính hợp lệ của bộ nhớ cache bằng cách kiểm tra tham số "thời gian sống". API sau đó kết hợp dữ liệu được lưu trong bộ nhớ cache và truy vấn của người dùng làm đầu vào để xử lý.

  4. Giảm chi phí và độ trễ: Bằng cách sử dụng dữ liệu được lưu trong bộ nhớ cache, hệ thống giảm số lượng token được gửi với mỗi truy vấn, dẫn đến thời gian xử lý và chi phí thấp hơn. Google ước tính rằng sử dụng lưu trữ cache cho tới 2.128.000 token có thể dẫn đến chi phí thấp hơn gần bốn lần so với gửi toàn bộ ngữ cảnh với mỗi truy vấn.

  5. Chi phí lưu trữ: Chi phí lưu trữ cho nội dung được lưu trong bộ nhớ cache là 1 USD cho mỗi triệu token mỗi giờ. Tổng chi phí phụ thuộc vào các yếu tố như số lượng token của bộ nhớ cache và tham số "thời gian sống".

  6. Các mô hình được hỗ trợ: Lưu trữ ngữ cảnh hiện được hỗ trợ bởi cả mô hình Gemini Pro và Gemini Flash.

  7. Số lượng token tối thiểu và tối đa: Số lượng token đầu vào tối thiểu cho lưu trữ ngữ cảnh là 32.000 token, và tối đa là cửa sổ ngữ cảnh tối đa của mô hình, khoảng 2 triệu token cho cả Gemini Pro và Gemini Flash.

Bằng cách sử dụng tính năng lưu trữ ngữ cảnh, các nhà phát triển có thể tối ưu hóa việc sử dụng API Gemini, giảm chi phí và cải thiện hiệu suất, đặc biệt là đối với các ứng dụng yêu cầu truy vấn thường xuyên trên các tập dữ liệu lớn.

Hiểu về Giới hạn và Chi phí Mã thông báo

Khi sử dụng tính năng lưu trữ ngữ cảnh trong API Gemini, có một số điểm quan trọng cần lưu ý về giới hạn token và chi phí:

  1. Số lượng token đầu vào tối thiểu: Số lượng token đầu vào tối thiểu cho lưu trữ ngữ cảnh là 32.000 token. Điều này có nghĩa là bạn sẽ cần lưu trữ ít nhất 32.000 token để tính năng này hoạt động.

  2. Số lượng token tối đa: Số lượng token tối đa bạn có thể lưu trữ là cửa sổ ngữ cảnh tối đa của mô hình đã cho. Đối với cả mô hình Gemini Pro và Flash, đây là khoảng 2 triệu token.

  3. Chi phí lưu trữ: Chi phí lưu trữ cho nội dung được lưu trong bộ nhớ cache là 1 USD cho mỗi triệu token mỗi giờ. Chi phí này nằm ngoài các khoản phí sử dụng API thông thường.

  4. Thời gian sống (TTL): Khi tạo một bộ nhớ cache, bạn có thể chỉ định tham số "thời gian sống" để xác định bộ nhớ cache sẽ được lưu trong bao lâu. Nếu bạn không cung cấp giá trị, mặc định là 1 giờ. Thời gian sống tối thiểu là 60 giây.

  5. Số lượng token: Khi sử dụng nội dung được lưu trong bộ nhớ cache, tổng số token bao gồm cả token được lưu trong cache và token đầu vào mới từ truy vấn của người dùng. Tổng số token này được sử dụng cho mục đích thanh toán.

  6. Tính khả dụng của lưu trữ: Lưu trữ ngữ cảnh hiện được hỗ trợ bởi cả mô hình Gemini Pro và Flash.

Bằng cách hiểu rõ các giới hạn token và cân nhắc về chi phí này, bạn có thể sử dụng hiệu quả tính năng lưu trữ ngữ cảnh để giảm thời gian xử lý và chi phí khi sử dụng API Gemini.

Triển khai Bộ nhớ Cache với Ví dụ Mã

Để triển khai lưu trữ với API Gemini, chúng ta cần thực hiện các bước sau:

  1. Cài đặt các gói cần thiết:

    !pip install google-generative-ai-client pdfplumber
    
  2. Nhập các mô-đun cần thiết:

    from google.generative.v1 import GenerativeAIClient
    from google.generative.v1.types import CachedContent
    import markdown
    import pdfplumber
    
  3. Thiết lập khách hàng API Gemini với khóa API Google của bạn:

    api_key = "your_google_api_key"
    client = GenerativeAIClient(credentials=api_key)
    
  4. Tải nội dung PDF và chuyển đổi thành một chuỗi duy nhất:

    with pdfplumber.open("path/to/your/pdf/file.pdf") as pdf:
        pages = [page.extract_text() for page in pdf.pages]
        content = "\n".join(pages)
    print(f"Total pages: {len(pages)}")
    print(f"Total words: {len(content.split())}")
    print(f"Total tokens: {len(content.split())}")
    
  5. Tạo một đối tượng nội dung được lưu trong bộ nhớ cache và lưu trữ nó:

    cached_content = CachedContent(
        model_name="gemini-1.5-flash",
        system_instruction="You are an expert on rack systems. Answer questions based on the provided text.",
        content=content,
        time_to_live_seconds=7200  # 2 hours
    )
    model = client.from_cached_content(cached_content, name="my-rack-system-cache")
    
  6. Sử dụng mô hình được lưu trong bộ nhớ cache để trả lời các câu hỏi:

    queries = [
        "What is rack? What are the main components?",
        "How to use HuggingFace in LangChain? Provide code examples.",
        "How does routing work in LangChain?"
    ]
    
    for query in queries:
        response = model.generate_text(prompt=query)
        print(markdown.markdown(response.generated_text))
        print(f"Total tokens used: {response.total_tokens}")
    
  7. Quản

Câu hỏi thường gặp