本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
教學課程: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 主控台來建立您的第一個向量儲存貯體。如需建立向量儲存貯體的其他方式,請參閱 建立向量儲存貯體。
建立向量儲存貯體
登入 AWS Management Console ,並在 https://console.aws.amazon.com/s3/
:// 開啟 Amazon S3 主控台。 -
在左側導覽窗格中,選擇向量儲存貯體。
-
在向量儲存貯體頁面上,選擇建立向量儲存貯體。
-
在建立向量儲存貯體頁面上,針對向量儲存貯體名稱欄位輸入名稱。在本教學課程中,我們使用
媒體內嵌
做為向量儲存貯體名稱。向量儲存貯體名稱必須是 3 到 63 個字元,且在 中是唯一的 AWS 區域。有效字元為小寫字母 (a-z)、數字 (0-9) 和連字號 (-)。注意
建立儲存貯體後,無法變更向量儲存貯體名稱。
-
在加密下,選擇指定加密類型。您可以選擇將加密類型指定為具有 AWS Key Management Service 金鑰的伺服器端加密 (SSE-KMS) 或具有 Amazon S3 受管金鑰 (SSE-S3) 的預設伺服器端加密。在本教學課程中,我們選擇使用 Amazon S3 受管金鑰 (SSE-S3) 進行伺服器端加密。如需設定向量儲存貯體加密組態的詳細資訊,請參閱S3 Vectors 中的資料保護和加密。
注意
建立向量儲存貯體後,就無法變更加密類型。
-
選擇建立向量儲存貯體。
步驟 2:使用主控台在向量儲存貯體中建立向量索引
注意
請仔細選擇向量索引組態參數。建立向量索引後,您無法更新向量索引名稱、維度、距離指標或無法篩選的中繼資料索引鍵。若要變更任何這些值,您必須建立新的向量索引。
在此步驟中,您會在向量儲存貯體中建立向量索引。向量索引用於存放和查詢向量內嵌。如需向量索引的詳細資訊,請參閱 向量索引。
建立向量索引
-
在 Amazon S3 主控台的向量儲存貯體清單中,導覽至新建立的向量儲存貯體。
-
選擇建立向量索引。
-
在建立向量索引頁面上,在向量索引名稱欄位中輸入名稱。在本教學課程中,我們使用
電影
做為向量索引名稱。向量索引名稱必須是 3 到 63 個字元,而且在此向量儲存貯體中是唯一的。有效字元為小寫字母 (a-z)、數字 (0-9)、連字號 (-) 和點 (.)。
向量索引名稱無法在建立索引後變更。
-
在維度下,指定介於 1 到 4096 之間的數值,以決定向量內嵌模型所產生的每個向量中將有多少數字。內嵌模型是專用機器學習 (ML) 模型,可將資料 (例如文字或影像) 轉換為數值向量。內嵌模型通常會產生介於 500-2000 個維度之間的輸出,每個維度都是浮點數。在本教學課程中,我們將使用來自 Amazon Bedrock 的 Titan Text v2 內嵌模型。此內嵌模型使用 1024 維向量做為預設值,因此我們會將向量索引的維度設定為
1024
。建立索引後無法變更維度值。根據您的內嵌模型建議,仔細指定維度值。
-
在距離指標下,選擇餘弦 (測量角度相似度) 或歐幾里得 (測量直線距離) 作為距離指標,以定義在查詢期間計算向量之間的相似度。在本教學課程中,我們選擇 Cosine。
建立索引後無法變更距離指標。根據您的內嵌模型建議,仔細選擇距離指標。
-
在其他設定 (選用) 下,您可以指定不可篩選的中繼資料金鑰,將補充資訊與向量內嵌一起存放。
注意
當您在索引建立之後插入向量資料時,您可以將可篩選的中繼資料做為索引鍵/值對連接至每個向量。根據預設,連接至向量的所有中繼資料金鑰都是可篩選的,並且可以做為相似性查詢中的篩選條件。只有在向量索引建立期間指定為不可篩選的中繼資料金鑰,才會排除在篩選之外。
每個不可篩選的中繼資料金鑰必須介於 1 到 63 個字元之間,且在向量索引中是唯一的。這些索引鍵適用於儲存您在相似性查詢期間不需要篩選的參考資訊。例如,使用文字內嵌時,您可能想要保留原始文字區塊以供參考。在本教學課程中,我們會新增名為 的不可篩選中繼資料金鑰
source_text
,以存放要為其建立向量內嵌的文字資料。建立索引後,您無法更新無法篩選的中繼資料金鑰。仔細規劃中繼資料結構。
-
選擇建立向量索引。
確認您的新向量索引出現在儲存貯體內。
步驟 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 知識庫
-
AWS Management Console 使用具有 Amazon Bedrock 許可的 IAM 角色登入 ,然後開啟位於 https://https://console.aws.amazon.com/bedrock/
的 Amazon Bedrock 主控台。 -
在左側導覽窗格中,選擇知識庫。
-
在知識庫區段中,選擇建立。在下拉式清單中,選擇具有向量存放區的知識庫。
-
將知識庫名稱、知識庫描述和 IAM 許可保留在本教學課程中的預設值。
-
針對選擇資料來源類型,選擇要連接知識庫的資料來源。在本教學課程中,選擇 Amazon S3。
-
(選用) 提供任何標籤或應用程式日誌。
-
選擇下一步。
-
在設定資料來源頁面上,將資料來源名稱、資料來源位置、剖析策略和區塊策略保留在本教學課程中的預設設定。
-
在 S3 URI 中,輸入包含來源檔案的 S3 一般用途儲存貯體,或選擇瀏覽 S3,然後選擇 S3 一般用途儲存貯體。
-
針對加密的 S3 資料,選取為 S3 資料新增客戶受管 KMS 金鑰,並指定您的客戶受管 KMS 金鑰。
-
選擇下一步以繼續下一個步驟,指定內嵌模型和向量存放區選項。
-
在內嵌模型區段中,選擇選取模型,然後選擇與 S3 向量搭配使用相容的內嵌模型。您必須使用浮點內嵌。不支援二進位類型。
-
(選用) 展開其他組態區段以查看下列組態選項 (並非所有模型都支援所有組態):
-
內嵌類型 – 是否要將資料轉換為浮點 (float32) 向量內嵌 (更精確但更昂貴) 或二進位向量內嵌 (更不精確但成本更低)。若要與 S3 向量整合,您必須選擇浮點向量內嵌。
-
向量維度 – 選擇內嵌模型建議的維度大小。
-
-
在向量存放區區段中,選擇建議的方法 快速建立新的向量存放區以自動設定新的向量儲存貯體,或者如果可用,請選擇使用現有的向量存放區來使用現有的向量儲存貯體。如需有關使用現有向量存放區流程的資訊,請參閱《Amazon Bedrock 使用者指南》中的使用您為知識庫建立之向量存放區的先決條件。
-
對於其他組態 – 根據預設,您的向量儲存貯體會使用伺服器端加密搭配 Amazon S3 受管金鑰 (SSE-S3)。您可以選擇使用自己的 KMS 金鑰與 AWS Key Management Service 金鑰 (SSE-KMS) 進行伺服器端加密,以增強對加密設定的控制。
-
選擇下一步以檢閱知識庫詳細資訊,然後選擇建立知識庫。
注意
建立知識庫所需的時間取決於您的特定組態。建立知識庫完成後,知識庫的狀態會變更為就緒或可用。一旦知識庫準備就緒且可用,請第一次或每當您想要將內容保持在最新狀態時同步資料來源。若要同步資料來源,請在主控台中選擇您的知識庫,然後在資料來源概觀區段中選擇同步。
(選用) 整合 S3 向量與 Amazon OpenSearch
Amazon OpenSearch Service
如需詳細資訊,請參閱搭配 OpenSearch Service 使用 S3 向量。