0
0
Lập trình
Thaycacac
Thaycacac thaycacac

Kết Nối Mất: Cách Lấy Tài Liệu Đầy Đủ với AWS S3 Vectors

Đăng vào 1 tuần trước

• 4 phút đọc

Giới thiệu

Trong thế giới phát triển ứng dụng ngày nay, việc lưu trữ và truy xuất tài liệu hiệu quả là điều cần thiết. AWS S3 Vectors là một công cụ mạnh mẽ nhưng có một số khía cạnh quan trọng mà nhiều hướng dẫn hiện có không đề cập. Bài viết này sẽ cung cấp cho bạn cách thức lấy lại tài liệu đầy đủ sau khi tìm kiếm vector, một vấn đề mà các hướng dẫn khác thường bỏ qua.

Tại sao lại là AWS S3 Vectors?

AWS S3 Vectors không chỉ đơn thuần là một cơ sở dữ liệu vector. Nó quản lý chỉ mục vector nhưng không lưu trữ tài liệu của bạn. Điều này có nghĩa rằng bạn cần phải biết cách kết nối giữa chỉ mục vector và tài liệu gốc của mình. Bài viết này sẽ hướng dẫn bạn cách thực hiện điều đó một cách hiệu quả.

Cấu trúc bài viết

  1. Lưu trữ tài liệu và vectors
  2. Truy vấn S3 Vectors và lấy tài liệu
  3. Thực hành tốt nhất
  4. Những cạm bẫy thường gặp
  5. Mẹo hiệu suất
  6. Giải quyết sự cố

Lưu trữ Tài Liệu và Vectors

Để bắt đầu với AWS S3 Vectors, bạn cần thực hiện ba bước chính:

Bước 1: Lưu trữ tài liệu trong S3 Bucket

Bạn cần đưa tài liệu của mình vào một S3 Bucket thông thường. Dưới đây là đoạn mã Python sử dụng Boto3 để lưu trữ tài liệu:

python Copy
import hashlib
import boto3
import json

s3_vectors = boto3.client("s3vectors")
s3 = boto3.resource("s3")
MODEL_ID = "amazon.titan-embed-text-v2:0"
vectors_data_bucket = s3.Bucket(S3_DOCUMENTS_BUCKET_NAME)
vectors = []

for page in pages:
    key = hashlib.md5(page["metadata"]["url"].encode()).hexdigest()
    vectors_data_bucket.put_object(
        Key=key,
        Body=page["content"].encode("utf-8"),
        Metadata={
            "title": page["metadata"]["title"],
            "url": page["metadata"]["url"]
        }
    )

Bước 2: Tạo và chỉ mục embeddings

Sử dụng mô hình nhúng để tạo chỉ mục cho nội dung tài liệu:

python Copy
model_response = bedrock_runtime.invoke_model(
    modelId=MODEL_ID,
    body=json.dumps({
        "inputText": page["content"],
        "dimensions": 1024
    }).encode("utf-8"),
)
response_body = json.loads(model_response["body"].read().decode("utf-8"))
embedding = response_body["embedding"]

Bước 3: Lưu trữ embeddings trong chỉ mục S3 Vectors

Cuối cùng, bạn sẽ lưu trữ các vector vào chỉ mục S3 Vectors:

python Copy
vector = {
    "key": key,
    "data": {
        "float32": embedding
    },
    "metadata": page["metadata"]
}
vectors.append(vector)

s3_vectors.put_vectors(
    vectorBucketName=S3_VECTORS_BUCKET_NAME,
    indexName=S3_VECTORS_BUCKET_INDEX_NAME,
    vectors=vectors
)

Truy vấn S3 Vectors và Lấy Tài Liệu

Sau khi lưu trữ tài liệu và vector, bạn cần thực hiện các bước sau để truy vấn và lấy tài liệu:

Bước 1: Tạo embedding cho câu hỏi tìm kiếm

python Copy
question = "AWS S3 Vectors là gì?"
response = bedrock_runtime.invoke_model(
    modelId=MODEL_ID,
    body=json.dumps({
        "inputText": question,
        "dimensions": 1024
    }).encode("utf-8"),
)
model_response = json.loads(response["body"].read())
question_embedding = model_response["embedding"]

Bước 2: Truy vấn S3 Vectors

python Copy
query_results = s3_vectors.query_vectors(
    vectorBucketName=S3_VECTORS_BUCKET_NAME,
    indexName=S3_VECTORS_BUCKET_INDEX_NAME,
    queryVector={"float32":question_embedding},
    topK=3,
    returnDistance=True,
    returnMetadata=True
)
vectors = query_results.get("vectors", [])

Bước 3: Lấy tài liệu từ S3

python Copy
for vector in vectors:
    obj = s3.Bucket(S3_DOCUMENTS_BUCKET_NAME).Object(vector["key"]).get()
    content = obj["body"].read().decode("utf-8")
    documents.append({
        "title": vector["metadata"]["title"],
        "url": vector["metadata"]["url"],
        "content": content
    })

Thực hành tốt nhất

  • Sử dụng cùng một key cho tài liệu và vector: Điều này giúp việc tìm kiếm trở nên dễ dàng hơn khi bạn cần lấy tài liệu từ chỉ mục.
  • Nén tài liệu: Giảm kích thước tài liệu có thể cải thiện thời gian truy xuất.

Những cạm bẫy thường gặp

  • Quá nhiều yêu cầu: Truy vấn quá nhiều vector có thể làm chậm ứng dụng của bạn.
  • Không rõ ràng trong quản lý metadata: Hãy chắc chắn rằng metadata cho mỗi tài liệu được quản lý hợp lý để dễ dàng tìm kiếm.

Mẹo hiệu suất

  • Sử dụng caching: Caching cho các kết quả truy vấn thường xuyên có thể giảm thời gian phản hồi.
  • Tối ưu hóa kích thước vector: Lưu trữ các vector nhỏ hơn có thể giúp tiết kiệm chi phí và cải thiện tốc độ.

Giải quyết sự cố

  • Không tìm thấy tài liệu: Kiểm tra key và đảm bảo rằng các tài liệu đã được lưu trữ đúng cách.
  • Lỗi kết nối: Đảm bảo rằng bạn đã cấu hình đúng quyền truy cập vào S3 và S3 Vectors.

Kết luận

AWS S3 Vectors cung cấp một cách linh hoạt và tiết kiệm chi phí để quản lý các vector mà không cần phải sử dụng một cơ sở dữ liệu vector chuyên dụng. Việc hiểu rõ cách kết nối giữa các vector và tài liệu gốc là rất quan trọng để xây dựng các ứng dụng sẵn sàng cho sản xuất. Hãy thử nghiệm những gì bạn đã học hôm nay và phát triển ứng dụng của mình với AWS S3 Vectors ngay hôm nay!

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào