本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
搭配 LangChain 使用 DynamoDB
LangChainDynamoDBChatMessageHistory類別存放對話歷史記錄,以便模型可以跨工作階段與使用者來回交談,而 DynamoDBVectorStore類別在 DynamoDB 向量索引上實作 LangChain 向量存放介面以進行相似性搜尋。
聊天訊息歷史記錄
在適用於 Python 的 langchain-community 套件和適用於 JavaScript 的 @langchain/community套件中, DynamoDBChatMessageHistory類別會在 DynamoDB 資料表中保留聊天訊息。類別預期現有資料表的分割區索引鍵是名為 的字串屬性 SessionId(可透過 設定primary_key_name)。使用 CLI AWS 建立資料表:
aws dynamodb create-table \ --table-name SessionTable \ --attribute-definitions AttributeName=SessionId,AttributeType=S \ --key-schema AttributeName=SessionId,KeyType=HASH \ --billing-mode PAY_PER_REQUEST
安裝套件,然後讀取和寫入由工作階段 ID 輸入的歷史記錄:
pip install langchain-community boto3
from langchain_community.chat_message_histories import DynamoDBChatMessageHistory history = DynamoDBChatMessageHistory( table_name="SessionTable", session_id="user-42", ) history.add_user_message("Hello!") history.add_ai_message("How can I help you today?") print(history.messages)
每個聊天工作階段的訊息都存放在其 下session_id,因此傳回的使用者會在他們離開的地方接聽對話。建構函數也支援複合索引鍵,以依應用程式詳細資訊隔離歷史記錄,例如使用者 ID (key)、舊工作階段的存留期到期時間 (ttl),以及已儲存訊息的上限 ()history_size。如需完整的 API,請參閱 Python 參考
向量索引支援的向量存放區
langchain-aws 套件中的 DynamoDBVectorStore類別會使用 DynamoDB 向量索引實作 LangChain 向量存放區界面 (請參閱 在 DynamoDB 中使用向量索引)。文件會儲存為一般 DynamoDB 項目,並使用 SearchVectors API 搜尋資料表的向量索引,因此 LangChain 擷取器和 RAG 鏈會直接針對存放您資料的資料表執行相似性搜尋。
安裝 套件:
pip install langchain-aws boto3
提供資料表名稱和內嵌函數。如果資料表和向量索引不存在,則會在第一次寫入時建立:
from langchain_aws.embeddings import BedrockEmbeddings from langchain_aws.vectorstores.dynamodb import DynamoDBVectorStore vector_store = DynamoDBVectorStore.from_texts( ["hello", "developer", "wife"], embedding=BedrockEmbeddings(model_id="amazon.titan-embed-text-v2:0"), table_name="my-documents", ) docs = vector_store.similarity_search("greeting", k=2)
若要限定搜尋範圍,請在建構存放區partition_attribute時傳遞 。接著會使用該文件中繼資料欄位上的搜尋結構描述分割區索引鍵建立向量索引,每個搜尋只會檢查其中的一個值,例如集合、類別或租用戶,而不是整個 corpus。然後,每次搜尋都會透過 filter={partition_attribute: value}或儲存層級 提供值default_partition_value。分割區索引鍵是索引結構描述的一部分,建立索引後就無法變更。
請謹記以下幾點:
-
與全域次要索引一樣,向量索引最終一致:在索引追上之前, 之後立即發出的搜尋
add_texts可能不會包含剛撰寫的文件。 -
SearchVectors會傳回每個查詢最多前 100 個相符項目,因此存放區的k參數上限為 100。 -
索引的維度、距離函數和搜尋結構描述會在建立時修正。存放區會根據現有的索引進行驗證,而不是繼續進行不相符。
如需完整 API,請參閱 langchain-aws 儲存庫中的 DynamoDBVectorStore