教學課程:S3 Vectors 入門 - Amazon Simple Storage Service

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

教學課程:S3 Vectors 入門

注意

Amazon S3 Vectors 目前為 Amazon Simple Storage Service 的預覽版本,可能會有所變更。

在本教學課程中,您會在 Amazon S3 主控台 AWS 區域 的 中建立 S3 向量儲存貯體和向量索引。 Amazon S3 接著,您可以使用 Amazon Bedrock 內嵌模型來產生資料的向量內嵌,並將其存放在向量索引中,以執行語意搜尋。

若要開始使用,如果您還沒有帳戶,請註冊 AWS 帳戶。如需使用 帳戶設定 的詳細資訊,請參閱 Amazon S3 入門

步驟 1:使用主控台建立向量儲存貯體

S3 向量儲存貯體是一種 Amazon S3 儲存貯體,專門用於存放和查詢向量。您可以使用專用 API 操作來寫入和查詢向量資料。您可以使用存取控制機制來控制向量資料的存取,例如 IAM 身分型政策和資源型政策。

在此步驟中,您可以使用 Amazon S3 主控台來建立您的第一個向量儲存貯體。如需建立向量儲存貯體的其他方式,請參閱 建立向量儲存貯體

建立向量儲存貯體

  1. 登入 AWS Management Console ,並在 https://console.aws.amazon.com/s3/:// 開啟 Amazon S3 主控台。

  2. 在左側導覽窗格中,選擇向量儲存貯體。

  3. 向量儲存貯體頁面上,選擇建立向量儲存貯體。

  4. 建立向量儲存貯體頁面上,針對向量儲存貯體名稱欄位輸入名稱。在本教學課程中,我們使用媒體內嵌做為向量儲存貯體名稱。向量儲存貯體名稱必須是 3 到 63 個字元,且在 中是唯一的 AWS 區域。有效字元為小寫字母 (a-z)、數字 (0-9) 和連字號 (-)。

    注意

    建立儲存貯體後,無法變更向量儲存貯體名稱。

  5. 加密下,選擇指定加密類型。您可以選擇將加密類型指定為具有 AWS Key Management Service 金鑰的伺服器端加密 (SSE-KMS)具有 Amazon S3 受管金鑰 (SSE-S3) 的預設伺服器端加密。在本教學課程中,我們選擇使用 Amazon S3 受管金鑰 (SSE-S3) 進行伺服器端加密。如需設定向量儲存貯體加密組態的詳細資訊,請參閱S3 Vectors 中的資料保護和加密

    注意

    建立向量儲存貯體後,就無法變更加密類型。

  6. 選擇建立向量儲存貯體。

步驟 2:使用主控台在向量儲存貯體中建立向量索引

注意

請仔細選擇向量索引組態參數。建立向量索引後,您無法更新向量索引名稱、維度、距離指標或無法篩選的中繼資料索引鍵。若要變更任何這些值,您必須建立新的向量索引。

在此步驟中,您會在向量儲存貯體中建立向量索引。向量索引用於存放和查詢向量內嵌。如需向量索引的詳細資訊,請參閱 向量索引

建立向量索引

  1. 在 Amazon S3 主控台的向量儲存貯體清單中,導覽至新建立的向量儲存貯體。

  2. 選擇建立向量索引

  3. 建立向量索引頁面上,在向量索引名稱欄位中輸入名稱。在本教學課程中,我們使用電影做為向量索引名稱。

    向量索引名稱必須是 3 到 63 個字元,而且在此向量儲存貯體中是唯一的。有效字元為小寫字母 (a-z)、數字 (0-9)、連字號 (-) 和點 (.)。

    向量索引名稱無法在建立索引後變更。

  4. 維度下,指定介於 1 到 4096 之間的數值,以決定向量內嵌模型所產生的每個向量中將有多少數字。內嵌模型是專用機器學習 (ML) 模型,可將資料 (例如文字或影像) 轉換為數值向量。內嵌模型通常會產生介於 500-2000 個維度之間的輸出,每個維度都是浮點數。在本教學課程中,我們將使用來自 Amazon Bedrock 的 Titan Text v2 內嵌模型。此內嵌模型使用 1024 維向量做為預設值,因此我們會將向量索引的維度設定為 1024

    建立索引後無法變更維度值。根據您的內嵌模型建議,仔細指定維度值。

  5. 距離指標下,選擇餘弦 (測量角度相似度) 或歐幾里得 (測量直線距離) 作為距離指標,以定義在查詢期間計算向量之間的相似度。在本教學課程中,我們選擇 Cosine

    建立索引後無法變更距離指標。根據您的內嵌模型建議,仔細選擇距離指標。

  6. 在其他設定 (選用) 下,您可以指定不可篩選的中繼資料金鑰,將補充資訊與向量內嵌一起存放。

    注意

    當您在索引建立之後插入向量資料時,您可以將可篩選的中繼資料做為索引鍵/值對連接至每個向量。根據預設,連接至向量的所有中繼資料金鑰都是可篩選的,並且可以做為相似性查詢中的篩選條件。只有在向量索引建立期間指定為不可篩選的中繼資料金鑰,才會排除在篩選之外。

    每個不可篩選的中繼資料金鑰必須介於 1 到 63 個字元之間,且在向量索引中是唯一的。這些索引鍵適用於儲存您在相似性查詢期間不需要篩選的參考資訊。例如,使用文字內嵌時,您可能想要保留原始文字區塊以供參考。在本教學課程中,我們會新增名為 的不可篩選中繼資料金鑰source_text,以存放要為其建立向量內嵌的文字資料。

    建立索引後,您無法更新無法篩選的中繼資料金鑰。仔細規劃中繼資料結構。

  7. 選擇建立向量索引

確認您的新向量索引出現在儲存貯體內。

步驟 3:使用適用於 Python 的 SDK (Boto3) 將向量插入向量索引

若要插入、列出和查詢向量,請使用 AWS SDKs或 Amazon S3 REST API。 AWS CLI

此步驟是使用 PutVectors API 操作將向量內嵌插入向量索引。

您必須先使用您選擇的內嵌模型來產生向量內嵌。如果您使用 Amazon Bedrock,請使用 InvokeModel API 操作來指定您偏好的內嵌模型,以產生內嵌。或者,若要使用單一命令產生和插入向量內嵌,請參閱 (選用) 使用 S3 向量內嵌 CLI 自動化向量內嵌建立

下列範例程式碼使用 從 Amazon Bedrock 產生具有 Titan Text Embeddings V2 模型的 1024 維向量內嵌 適用於 Python (Boto3) 的 AWS SDK,並使用 PutVectors API 將其存放在向量索引中。除了每個向量之外,我們還會連接鍵值對做為可篩選的中繼資料。此外,我們使用名為 source_text 的不可篩選中繼資料金鑰,以保留衍生每個向量的原始文字。若要最大化請求輸送量並最佳化速度和效率,建議您分批插入和刪除向量。如需詳細資訊,請參閱S3 Vectors 最佳實務

# Populate a vector index with embeddings from Amazon Titan Text Embeddings V2. import boto3 import json # Create Bedrock Runtime and S3 Vectors clients in the AWS Region of your choice. bedrock = boto3.client("bedrock-runtime", region_name="us-west-2") s3vectors = boto3.client("s3vectors", region_name="us-west-2") # Texts to convert to embeddings. texts = [ "Star Wars: A farm boy joins rebels to fight an evil empire in space", "Jurassic Park: Scientists create dinosaurs in a theme park that goes wrong", "Finding Nemo: A father fish searches the ocean to find his lost son" ] # Generate vector embeddings. embeddings = [] for text in texts: response = bedrock.invoke_model( modelId="amazon.titan-embed-text-v2:0", body=json.dumps({"inputText": text}) ) # Extract embedding from response. response_body = json.loads(response["body"].read()) embeddings.append(response_body["embedding"]) # Write embeddings into vector index with metadata. s3vectors.put_vectors( vectorBucketName="media-embeddings", indexName="movies", vectors=[ { "key": "Star Wars", "data": {"float32": embeddings[0]}, "metadata": {"source_text": texts[0], "genre":"scifi"} }, { "key": "Jurassic Park", "data": {"float32": embeddings[1]}, "metadata": {"source_text": texts[1], "genre":"scifi"} }, { "key": "Finding Nemo", "data": {"float32": embeddings[2]}, "metadata": {"source_text": texts[2], "genre":"family"} } ] )

步驟 4. 使用適用於 Python 的 SDK (Boto3) 查詢向量索引中的向量

在向量索引中存放向量內嵌之後,您可以使用 QueryVectors API 操作執行相似性搜尋。

您必須先使用在 中插入時使用的相同內嵌模型來產生查詢向量內嵌步驟 3:使用適用於 Python 的 SDK (Boto3) 將向量插入向量索引。在本教學課程中,透過適用於 Python 的 SDK (Boto3),從 Amazon Bedrock 使用 Titan Text Embeddings V2 模型。

您可以執行相似性搜尋,以傳回最接近的相符向量。在相似性搜尋中,您可以選擇使用中繼資料金鑰,根據特定條件縮小結果範圍,同時保持語意相關性。

# Query a vector index with an embedding from Amazon Titan Text Embeddings V2. import boto3 import json # Create Bedrock Runtime and S3 Vectors clients in the AWS Region of your choice. bedrock = boto3.client("bedrock-runtime", region_name="us-west-2") s3vectors = boto3.client("s3vectors", region_name="us-west-2") # Query text to convert to an embedding. input_text = "adventures in space" # Generate the vector embedding. response = bedrock.invoke_model( modelId="amazon.titan-embed-text-v2:0", body=json.dumps({"inputText": input_text}) ) # Extract embedding from response. model_response = json.loads(response["body"].read()) embedding = model_response["embedding"] # Query vector index. response = s3vectors.query_vectors( vectorBucketName="media-embeddings", indexName="movies", queryVector={"float32": embedding}, topK=3, returnDistance=True, returnMetadata=True ) print(json.dumps(response["vectors"], indent=2)) # Query vector index with a metadata filter. response = s3vectors.query_vectors( vectorBucketName="media-embeddings", indexName="movies", queryVector={"float32": embedding}, topK=3, filter={"genre": "scifi"}, returnDistance=True, returnMetadata=True ) print(json.dumps(response["vectors"], indent=2))

(選用) 使用 S3 向量內嵌 CLI 自動化向量內嵌建立

Amazon S3 Vectors Embed CLI 是一種獨立的命令列工具,可簡化在 S3 Vectors 中使用向量內嵌的程序。透過單一命令,您可以使用 Amazon Bedrock 為資料建立向量內嵌,並將它們存放在 S3 向量索引中並進行查詢。此工具支援下列命令:

  • s3vectors-embed put:產生文字、檔案內容或 S3 物件的向量內嵌,並將其儲存為 S3 向量索引中的向量。

  • s3vectors-embed query:內嵌查詢輸入,並在 S3 向量索引中搜尋類似的向量。

如需命令和用量的詳細資訊,請參閱 Amazon S3 Vectors Embed CLI GitHub 儲存庫

(選用) 整合 S3 向量與 Amazon Bedrock 知識庫

Amazon Bedrock 知識庫與 S3 Vectors 整合,以實現向量資料集的成本效益和長期儲存。

先決條件

遵循先決條件,以確保您擁有建立 Amazon Bedrock 知識庫的必要許可。

  • S3 Vectors 和 Amazon Bedrock 服務的適當 IAM 許可。如需 S3 向量 IAM 許可的詳細資訊,請參閱 S3 向量中的身分和存取管理

  • 準備擷取至知識庫的來源文件。

  • 了解您的內嵌模型需求。

在主控台中使用 S3 向量建立 Amazon Bedrock 知識庫

Amazon Bedrock 知識庫提供全受管end-to-end RAG 工作流程。當您使用 S3 向量建立知識庫時,Amazon Bedrock 會自動從 S3 資料來源擷取資料、將內容轉換為文字區塊、產生內嵌,並將它們存放在向量索引中。然後,您可以查詢知識庫,並根據從來源資料擷取的區塊產生回應。

在主控台中使用 S3 向量建立 Amazon Bedrock 知識庫
  1. AWS Management Console 使用具有 Amazon Bedrock 許可的 IAM 角色登入 ,然後開啟位於 https://https://console.aws.amazon.com/bedrock/ 的 Amazon Bedrock 主控台。

  2. 在左側導覽窗格中,選擇知識庫

  3. 知識庫區段中,選擇建立。在下拉式清單中,選擇具有向量存放區的知識庫

  4. 知識庫名稱知識庫描述IAM 許可保留在本教學課程中的預設值。

  5. 針對選擇資料來源類型,選擇要連接知識庫的資料來源。在本教學課程中,選擇 Amazon S3

  6. (選用) 提供任何標籤應用程式日誌

  7. 選擇下一步

  8. 設定資料來源頁面上,將資料來源名稱資料來源位置剖析策略區塊策略保留在本教學課程中的預設設定。

  9. S3 URI 中,輸入包含來源檔案的 S3 一般用途儲存貯體,或選擇瀏覽 S3,然後選擇 S3 一般用途儲存貯體。

  10. 針對加密的 S3 資料,選取為 S3 資料新增客戶受管 KMS 金鑰,並指定您的客戶受管 KMS 金鑰。

  11. 選擇下一步以繼續下一個步驟,指定內嵌模型向量存放區選項。

  12. 內嵌模型區段中,選擇選取模型,然後選擇與 S3 向量搭配使用相容的內嵌模型。您必須使用浮點內嵌。不支援二進位類型。

  13. (選用) 展開其他組態區段以查看下列組態選項 (並非所有模型都支援所有組態):

    • 內嵌類型 – 是否要將資料轉換為浮點 (float32) 向量內嵌 (更精確但更昂貴) 或二進位向量內嵌 (更不精確但成本更低)。若要與 S3 向量整合,您必須選擇浮點向量內嵌

    • 向量維度 – 選擇內嵌模型建議的維度大小。

  14. 向量存放區區段中,選擇建議的方法 快速建立新的向量存放區以自動設定新的向量儲存貯體,或者如果可用,請選擇使用現有的向量存放區來使用現有的向量儲存貯體。如需有關使用現有向量存放區流程的資訊,請參閱《Amazon Bedrock 使用者指南》中的使用您為知識庫建立之向量存放區的先決條件

  15. 對於其他組態 – 根據預設,您的向量儲存貯體會使用伺服器端加密搭配 Amazon S3 受管金鑰 (SSE-S3)。您可以選擇使用自己的 KMS 金鑰與 AWS Key Management Service 金鑰 (SSE-KMS) 進行伺服器端加密,以增強對加密設定的控制。

  16. 選擇下一步以檢閱知識庫詳細資訊,然後選擇建立知識庫

注意

建立知識庫所需的時間取決於您的特定組態。建立知識庫完成後,知識庫的狀態會變更為就緒或可用。一旦知識庫準備就緒且可用,請第一次或每當您想要將內容保持在最新狀態時同步資料來源。若要同步資料來源,請在主控台中選擇您的知識庫,然後在資料來源概觀區段中選擇同步

(選用) 整合 S3 向量與 Amazon OpenSearch

Amazon OpenSearch Service 是一項全受管服務,可簡化 AWS 雲端中 OpenSearch 的部署、擴展和操作。S3 Vectors 和 OpenSearch 之間有兩種整合。其中一個是將向量資料從 S3 向量匯出至 OpenSearch Serverless,以獲得高效能搜尋功能。另一個使用 S3 Vectors 作為 OpenSearch 中的經濟實惠儲存引擎,同時保持對 OpenSearch 功能的存取。

如需詳細資訊,請參閱搭配 OpenSearch Service 使用 S3 向量