Usar o DynamoDB com o LangChain
O LangChainDynamoDBChatMessageHistory armazena o histórico de conversas para que um modelo possa conversar de forma interativa com um usuário entre sessões, e a classe DynamoDBVectorStore implementa a interface de armazenamento vetorial do LangChain nos índices vetoriais do DynamoDB para pesquisas de similaridade.
Histórico de mensagens de chat
A classe DynamoDBChatMessageHistory, no pacote langchain-community para Python e no pacote @langchain/community para JavaScript, persiste mensagens de chat em uma tabela do DynamoDB. A classe espera uma tabela existente cuja chave de partição seja um atributo de string chamado SessionId (configurável por meio de primary_key_name). Crie a tabela com a AWS CLI:
aws dynamodb create-table \ --table-name SessionTable \ --attribute-definitions AttributeName=SessionId,AttributeType=S \ --key-schema AttributeName=SessionId,KeyType=HASH \ --billing-mode PAY_PER_REQUEST
Instale os pacotes e, em seguida, leia e grave o histórico usando um ID de sessão como chave:
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)
As mensagens de cada sessão de chat são armazenadas sob seu session_id, portanto um usuário que retorna continua a conversa de onde parou. O construtor também oferece suporte a chaves compostas para isolar o histórico por detalhes da aplicação, como um ID de usuário (key), expiração de sessões antigas com base na vida útil (TTL) (ttl) e um limite para o número de mensagens armazenadas (history_size). Consulte a API completa na referência do Python
Armazenamento vetorial baseado em índices vetoriais
A classe DynamoDBVectorStore, no pacote langchain-aws, implementa a interface de armazenamento vetorial do LangChain usando índices vetoriais do DynamoDB (consulte Uso de índices vetoriais no DynamoDB). Os documentos são armazenados como itens regulares do DynamoDB e pesquisados por meio do índice vetorial da tabela com a API SearchVectors, portanto os recuperadores do LangChain e as cadeias de RAG executam pesquisas de similaridade diretamente na tabela que armazena os dados.
Instale o pacote :
pip install langchain-aws boto3
Forneça um nome de tabela e uma função de incorporação. A tabela e o índice vetorial são criados na primeira gravação, caso não existam:
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)
Para restringir o escopo das pesquisas, passe partition_attribute ao construir o armazenamento. O índice vetorial é então criado com uma chave de partição no esquema de pesquisa correspondente a esse campo de metadados do documento, e cada pesquisa examina somente um valor desse campo, como uma coleção, categoria ou locatário, em vez de todo o corpus. Cada pesquisa então fornece o valor por meio de filter={partition_attribute: value} ou de um default_partition_value no nível do armazenamento. A chave de partição faz parte do esquema do índice e não pode ser alterada depois que o índice é criado.
Lembre-se do seguinte:
-
Assim como um índice secundário global, o índice vetorial tem consistência eventual: uma pesquisa realizada imediatamente depois de
add_textspode não incluir os documentos recém-gravados até que o índice seja atualizado. -
SearchVectorsretorna no máximo as 100 principais correspondências por consulta, portanto o parâmetrokdo armazenamento é limitado a 100. -
As dimensões, a função de distância e o esquema de pesquisa do índice são definidos na criação. O armazenamento os valida em relação a um índice existente em vez de prosseguir quando há uma incompatibilidade.
Consulte a API completa em DynamoDBVectorStore no repositório langchain-aws