本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
教學課程:開始使用 S3 Vectors
在本教學課程中,您會在 Amazon S3 主控台 AWS 區域 的 中建立 S3 向量儲存貯體和向量索引。 Amazon S3 接著,您使用 Amazon Bedrock 嵌入模型產生資料的向量嵌入,並將其儲存在向量索引中,以執行語義搜尋。
若要開始使用,如果您還沒有帳戶,請註冊 AWS 帳戶。如需有關使用帳戶進行設定的詳細資訊,請參閱 Amazon S3 入門。
主題
步驟 1:使用主控台建立向量儲存貯體
S3 向量儲存貯體是一種 Amazon S3 儲存貯體,專門用於儲存和查詢向量。您可以使用專用的 API 操作來寫入和查詢向量資料。您可以使用存取控制機制來控制向量資料的存取,例如 IAM 身分型政策和資源型政策。
在此步驟中,您使用 Amazon S3 主控台建立第一個向量儲存貯體。如需建立向量儲存貯體的其他方式,請參閱 建立向量儲存貯體。
建立向量儲存貯體
登入 AWS 管理主控台 ,並在 https://https://console.aws.amazon.com/s3/
開啟 Amazon S3 主控台。 -
在左側導覽窗格中,選擇向量儲存貯體。
-
在向量儲存貯體頁面上,選擇建立向量儲存貯體。
-
在建立向量儲存貯體頁面上,在向量儲存貯體名稱欄位輸入名稱。在本教學課程中,我們使用
media-embeddings做為向量儲存貯體名稱。向量儲存貯體名稱必須介於 3 到 63 個字元之間,且在 AWS 區域中是唯一的。有效字元為小寫字母(a-z)、數字 (0-9) 和連字號 (-)。注意
建立儲存貯體後,就無法變更向量儲存貯體。
-
在加密下,選擇指定加密類型。您可以選擇將加密類型指定為具有 AWS Key Management Service 金鑰的伺服器端加密 (SSE-KMS) 或具有 Amazon S3 受管金鑰 (SSE-S3) 的預設伺服器端加密。在本教學課程中,我們選擇使用 Amazon S3 受管金鑰 (SSE-S3) 的伺服器端加密。如需有關設定向量儲存貯體的加密組態的詳細資訊,請參閱 S3 Vectors 中的資料保護和加密。
注意
建立向量儲存貯體後,就無法變更加密類型。
-
在標籤 (選用) 下,您可以將標籤新增為鍵值對,以協助組織和指定向量儲存貯體的許可。輸入 Key (索引鍵) 和 Value (數值)。若要新增其他標籤,選擇 Add Tag (新增標籤)。您可以為向量儲存貯體輸入最多 50 個標籤。如需詳細資訊,請參閱搭配 S3 向量儲存貯體使用標籤。
-
選擇建立向量儲存貯體。
步驟 2:使用主控台在向量儲存貯體中建立向量索引
注意
請仔細選擇向量索引組態參數。建立向量索引後,便無法更新向量索引名稱、維度、距離指標,或無法篩選的中繼資料索引鍵。若要變更這些值,則必須建立新的向量索引。
在此步驟中,您可在向量儲存貯體中建立向量索引。向量索引用於儲存和查詢向量嵌入。如需向量索引的詳細資訊,請參閱 向量索引。
建立向量索引
-
在 Amazon S3 主控台上的向量儲存貯體清單中,導覽至新建立的向量儲存貯體。
-
選擇建立向量索引。
-
在建立向量索引頁面上,在向量索引名稱欄位中輸入名稱。在本教學課程中,我們使用
電影做為向量索引名稱。向量索引名稱必須介於 3 到 63 個字元之間,而且在此向量儲存貯體中是唯一的。有效字元為小寫字母 (a-z)、數字 (0-9)、連字號 (-) 和點 (.)。
在建立索引後,就無法變更向量索引名稱。
-
在維度下,指定介於 1 到 4096 之間的數值,以確定向量嵌入模型所產生的每個向量中有多少數字。嵌入模型是專用機器學習 (ML) 模型,可將資料 (例如文字或影像) 轉換為數值向量。嵌入模型通常會產生介於 500-2000 個維度的輸出,每個維度都是浮點數。在本教學課程中,我們會使用來自 Amazon Bedrock 的 Titan Text v2 嵌入模型。此嵌入模型使用 1024 維向量做為預設值,因此我們會將向量索引的維度設定為
1024。建立索引後,就無法變更維度值。根據您的嵌入模型建議,小心指定維度值。
-
在距離指標下,選擇餘弦 (測量角度相似度) 或歐幾里得 (測量直線距離) 做為距離指標,以定義在查詢期間計算向量之間的相似度。在本教學課程中,我們選擇餘弦。
建立索引後,就無法變更距離指標。根據您的嵌入模型建議,仔細選擇距離指標。
-
在其他設定 (選用) 下,您可以指定不可篩選的中繼資料索引鍵,一起儲存補充資訊與向量嵌入。
注意
當您在索引建立之後插入向量資料時,可以將可篩選的中繼資料以鍵值對形式連接到每個向量。根據預設,連接至向量的所有中繼資料索引鍵都是可篩選的,並且可以當作相似度查詢中的篩選條件。只有在向量索引建立期間指定為不可篩選的中繼資料索引鍵,才會排除在篩選範圍外。
每個不可篩選的中繼資料索引鍵必須介於 1 到 63 個字元之間,且在向量索引中是唯一的。這些索引鍵適用於儲存您在相似度查詢期間不需要篩選的參考資訊。例如,在使用文字嵌入時,您可能會想要保留原始文字區塊以供參考。在本教學課程中,我們會新增名為
source_text的不可篩選中繼資料索引鍵,以儲存要為其建立向量嵌入的文字資料。建立索引後,就無法更新不可篩選的中繼資料索引鍵。仔細規劃中繼資料結構。
-
在加密下,選擇指定加密類型。您可以選擇使用儲存貯體層級加密設定或覆寫向量索引的加密設定。如果您覆寫儲存貯體層級設定,您可以選擇將向量索引的加密類型指定為使用 AWS Key Management Service 金鑰 (SSE-KMS) 的伺服器端加密,或使用 Amazon S3 受管金鑰 (SSE-S3) 的伺服器端加密。在本教學課程中,我們選擇使用儲存貯體設定進行加密。如需設定向量儲存貯體和索引加密組態的詳細資訊,請參閱 S3 Vectors 中的資料保護和加密。
-
在標籤 (選用) 下,您可以將標籤新增為鍵值對,以協助使用 AWS Billing and Cost Management 追蹤和組織向量索引成本。輸入 Key (索引鍵) 和 Value (數值)。若要新增其他標籤,選擇 Add Tag (新增標籤)。您可以為向量索引輸入最多 50 個標籤。如需詳細資訊,請參閱搭配 S3 向量儲存貯體使用標籤。
-
選擇建立向量索引。
確認您的新向量索引出現在儲存貯體內。
步驟 3:使用 SDK for Python (Boto3) 將向量插入向量索引
若要插入、列出和查詢向量,請使用 AWS SDKs或 Amazon S3 REST API。 AWS CLI
此步驟使用 PutVectors API 操作將向量嵌入項目插入向量索引。
您必須先使用選擇的嵌入模型來產生向量嵌入。如果您使用 Amazon Bedrock,請使用 InvokeModel API 操作來指定您偏好的嵌入模型,藉以產生嵌入。或者,若要使用單一命令產生和插入向量嵌入,請參閱 (選用) 使用 S3 Vectors Embed CLI 自動建立向量嵌入。
下列範例程式碼使用 從 Amazon Bedrock 產生具有 Titan Text Embeddings V2 模型的 1024 維向量內嵌 AWS SDK for Python (Boto3),並使用 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. 使用 SDK for Python (Boto3) 查詢向量索引中的向量
在向量索引中儲存向量嵌入之後,您可以使用 QueryVectors API 操作執行相似性搜尋。
您必須先使用在 步驟 3:使用 SDK for Python (Boto3) 將向量插入向量索引 中插入時使用的相同嵌入模型,產生查詢向量嵌入。在本教學課程中,透過 SDK for Python (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 Vectors Embed 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 Vectors 與 Amazon Bedrock 知識庫
Amazon Bedrock 知識庫與 S3 Vectors 整合,以提高向量資料集的成本效益,並達到長期儲存之目的。
先決條件
遵循先決條件,確保您擁有建立 Amazon Bedrock 知識庫的必要權限。
-
適用於 S3 Vectors 和 Amazon Bedrock 服務的 IAM 許可。如需 S3 Vectors 的 IAM 許可的詳細資訊,請參閱 S3 Vectors 中的身分和存取管理。
-
為擷取至知識庫而準備的來源文件。
-
了解您的嵌入模型要求。
在主控台使用 S3 Vectors 建立 Amazon Bedrock 知識庫
Amazon Bedrock 知識庫提供全託管的端對端 RAG 工作流程。當您使用 S3 Vectors 建立知識庫時,Amazon Bedrock 會自動從 S3 資料來源擷取資料、將內容轉換為文字區塊、產生嵌入,並將其儲存在向量索引中。接著您可以查詢知識庫,並根據從來源資料擷取的區塊產生回應。
在主控台使用 S3 Vectors 建立 Amazon Bedrock 知識庫
-
AWS 管理主控台 使用具有 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 Vectors 搭配使用的相容嵌入模型。您必須使用浮點嵌入。不支援二進位類型。
-
(選用) 展開其他組態區段,查看下列組態選項 (並非所有模型都支援所有組態):
-
嵌入類型 – 是否要將資料轉換為浮點 (float32) 向量嵌入 (更精確,但較昂貴) 或二進位向量嵌入 (較不精確,但成本較低)。若要與 S3 Vectors 整合,您必須選擇浮點向量嵌入。
-
向量維度 – 選擇嵌入模型建議的維度大小。
-
-
在向量儲存區段中,選擇建議的方法即快速建立新的向量儲存,以自動設定新的向量儲存貯體,或者如果可行,選擇使用現有向量存放區來使用現有的向量儲存貯體。如需有關使用現有向量存放區流程的資訊,請參閱《Amazon Bedrock 使用者指南》中的使用您為知識庫建立之向量存放區的先決條件。
-
關於其他組態 – 根據預設,您的向量儲存貯體會搭配使用伺服器端加密和 Amazon S3 受管金鑰 (SSE-S3)。您可以選擇使用自己的 KMS 金鑰與 AWS Key Management Service 金鑰 (SSE-KMS) 進行伺服器端加密,以增強對加密設定的控制。
-
選擇下一步以檢閱知識庫詳細資訊,然後選擇建立知識庫。
注意
建立知識庫所需的時間,取決於您的特定組態。建立好知識庫後,知識庫的狀態會變更為就緒或可用。一旦知識庫準備就緒且可用,請於首次同步資料來源,或可隨時同步您的內容,以保持其最新狀態。若要同步資料來源,請在主控台選擇您的知識庫,然後在資料來源概觀區段選擇同步。
(選用) 整合 S3 Vectors 與 Amazon OpenSearch
Amazon OpenSearch Service
如需詳細資訊,請參閱搭配 OpenSearch Service 使用 S3 Vectors。