View a markdown version of this page

Usar o DynamoDB com o LangChain - Amazon DynamoDB

Usar o DynamoDB com o LangChain

O LangChain é um framework para criar aplicações com grandes modelos de linguagem (LLMs). Duas integrações do LangChain usam o DynamoDB: a classe DynamoDBChatMessageHistory 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 e na referência do JavaScript.

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_texts pode não incluir os documentos recém-gravados até que o índice seja atualizado.

  • SearchVectors retorna no máximo as 100 principais correspondências por consulta, portanto o parâmetro k do 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.

Recursos adicionais