Mục lục bài viết

Amazon Web Services (AWS) vừa công bố tính năng mới quan trọng cho dịch vụ Amazon Bedrock: Prompt Caching. 

1. Amazon Bedrock Prompt Caching

1.1. Tổng quan

Prompt Caching là tính năng cho phép lưu trữ tạm thời các ngữ cảnh (context) thường xuyên được sử dụng trong các prompt, giúp tránh việc phải xử lý lại những nội dung giống nhau trong các lần gọi API tiếp theo.

1.2. Ứng dụng thực tế

Tính năng này đặc biệt hữu ích cho:

  • Hệ thống hỏi đáp tài liệu (Document Q&A)
  • Trợ lý lập trình cần duy trì ngữ cảnh về code
  • Chatbot với system prompt và examples cố định
  • Các ứng dụng cần xử lý nhiều câu hỏi về cùng một tài liệu

1.3. Lợi ích chính

  1. Giảm chi phí:
    • Giảm tới 90% chi phí khi sử dụng cache
    • Giảm 90% chi phí cho cache read so với non-cached input tokens
    • Không tính phí infrastructure cho cache storage
  2. Cải thiện hiệu suất:
    • Giảm tới 85% độ trễ

1.4. Các model được hỗ trợ

Tại US West (Oregon):

  • Claude 3.5 Haiku
  • Claude 3.5 Sonnet v2

Tại US East (N. Virginia):

  • Amazon Nova Micro
  • Amazon Nova Lite
  • Amazon Nova Pro

1.5. Code mẫu triển khai

Dưới đây là ví dụ về cách implement prompt caching trong Python:

import json

import boto3

MODEL_ID = "us.anthropic.claude-3-5-sonnet-20241022-v2:0"

AWS_REGION = "us-west-2"

bedrock_runtime = boto3.client(

    "bedrock-runtime",

    region_name=AWS_REGION,

)

# Danh sách documents cần xử lý

DOCS = [

    "bedrock-or-sagemaker.pdf",

    "generative-ai-on-aws-how-to-choose.pdf",

    "machine-learning-on-aws-how-to-choose.pdf",

]

messages = []

def converse(new_message, docs=[], cache=False):

    # Khởi tạo message mới nếu cần

    if len(messages) == 0 or messages[-1]["role"] != "user":

        messages.append({"role": "user", "content": []})

    # Thêm documents vào message

    for doc in docs:

        print(f"Đang thêm document: {doc}")

        name, format = doc.rsplit('.', maxsplit=1)

        with open(doc, "rb") as f:

            bytes = f.read()

        messages[-1]["content"].append({

            "document": {

                "name": name,

                "format": format,

                "source": {"bytes": bytes},

            }

        })

    # Thêm câu hỏi mới

    messages[-1]["content"].append({"text": new_message})

    # Thêm cache point nếu được yêu cầu

    if cache:

        messages[-1]["content"].append({"cachePoint": {"type": "default"}})

    # Gọi API

    response = bedrock_runtime.converse(

        modelId=MODEL_ID,

        messages=messages,

    )

    # Xử lý response

    output_message = response["output"]["message"]

    response_text = output_message["content"][0]["text"]

    print("Response text:")

    print(response_text)

    print("Usage metrics:")

    print(json.dumps(response["usage"], indent=2))

    messages.append(output_message)

converse("Compare AWS Trainium and AWS Inferentia in 20 words or less.", docs=DOCS, cache=True)

converse("Compare Amazon Textract and Amazon Transcribe in 20 words or less.")

converse("Compare Amazon Q Business and Amazon Q Developer in 20 words or less.")

Đối với mỗi lệnh gọi, tập lệnh sẽ in phản hồi và bộ đếm mức sử dụng.

Adding document: bedrock-or-sagemaker.pdf

Adding document: generative-ai-on-aws-how-to-choose.pdf

Adding document: machine-learning-on-aws-how-to-choose.pdf

Response text:

AWS Trainium is optimized for machine learning training, while AWS Inferentia is designed for low-cost, high-performance machine learning inference.

Usage:

{

  "inputTokens": 4,

  "outputTokens": 34,

  "totalTokens": 29879,

  "cacheReadInputTokenCount": 0,

  "cacheWriteInputTokenCount": 29841

}

Response text:

Amazon Textract extracts text and data from documents, while Amazon Transcribe converts speech to text from audio or video files.

Usage:

{

  "inputTokens": 59,

  "outputTokens": 30,

  "totalTokens": 29930,

  "cacheReadInputTokenCount": 29841,

  "cacheWriteInputTokenCount": 0

}

Response text:

Amazon Q Business answers questions using enterprise data, while Amazon Q Developer assists with building and operating AWS applications and services.

Usage:

{

  "inputTokens": 108,

  "outputTokens": 26,

  "totalTokens": 29975,

  "cacheReadInputTokenCount": 29841,

  "cacheWriteInputTokenCount": 0

}

Các messages trong lần gọi đầu tiên chứa các tài liệu, câu hỏi đầu tiên và cache point. Vì các messages trước cache point hiện không có trong cache nên chúng được ghi vào cache.

"cacheWriteInputTokenCount": 29841

Đối với các lần gọi tiếp theo, phản hồi trước đó và câu hỏi mới được thêm vào danh sách messages. Các messages trước cachePoint không bị thay đổi và được tìm thấy trong bộ nhớ đệm.

Cho nên chúng ta có thể biết từ bộ đếm sử dụng(usage counters) rằng cùng số lượng token đã viết trước đó hiện được đọc từ cache.

"cacheReadInputTokenCount": 29841

1.6. Monitoring và Usage Metrics

Amazon Bedrock cung cấp các metrics đặc biệt cho prompt caching:

  • cacheReadInputTokenCount: Số token đọc từ cache
  • cacheWriteInputTokenCount: Số token ghi vào cache
  • Tổng số token = input tokens + output tokens + cache read/write tokens

2. Những điểm cần lưu ý

  • Chỉ khả dụng cho một số model được chọn
  • Đang trong giai đoạn preview
  • Yêu cầu đăng ký để được truy cập

3. Chi Phí

  • Giảm 90% chi phí cho cache reads
  • Không tính phí infrastructure
  • Tính phí cho cache writes với model Anthropic
  • Miễn phí cache writes với model Nova

Kết luận

Vậy là Amazon Bedrock đã có tính năng mới Prompt Caching.

Đây là giải pháp pháp thiết thực cho các thách thức về chi phí và hiệu suất trong việc triển khai ứng dụng AI.Hy vọng có thể giúp các nhà phát triển ứng dụng AI trong tương lai.

Cảm ơn rất nhiều các bạn đã đọc đến cuối bài viết!