View a markdown version of this page

Uso de DynamoDB con LangChain - Amazon DynamoDB

Uso de DynamoDB con LangChain

LangChain es un marco para crear aplicaciones con modelos de lenguaje de gran tamaño (LLM). Dos integraciones de LangChain utilizan DynamoDB: la clase DynamoDBChatMessageHistory almacena el historial de conversaciones para que un modelo pueda conversar con un usuario en todas las sesiones, y la clase DynamoDBVectorStore implementa la interfaz de almacenamiento vectorial de LangChain en los índices vectoriales de DynamoDB para la búsqueda de similitudes.

Historial de mensajes de chat

La clase DynamoDBChatMessageHistory, en el paquete langchain-community para Python y el paquete @langchain/community para JavaScript, conserva los mensajes de chat en una tabla de DynamoDB. La clase espera una tabla existente cuya clave de partición sea un atributo de cadena llamado SessionId (configurable mediante primary_key_name). Cree la tabla con la 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 los paquetes y, a continuación, lea y escriba el historial codificado por un identificador de sesión:

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)

Los mensajes de cada sesión de chat se guardan bajo su session_id, por lo que los usuarios recurrentes retoman la conversación donde la dejaron. El constructor también admite claves compuestas para aislar el historial según los detalles de la aplicación, como el ID de usuario (key), el vencimiento de las sesiones antiguas basado en el Periodo de vida (ttl) y un límite a los mensajes almacenados (history_size). Para ver la API completa, consulte la referencia de Python y la referencia de JavaScript.

Almacén de vectores respaldado por índices vectoriales

La clase DynamoDBVectorStore del paquete langchain-aws implementa la interfaz de almacén de vectores de LangChain mediante índices vectoriales de DynamoDB (consulte Uso de índices vectoriales en DynamoDB). Los documentos se almacenan como elementos normales de DynamoDB y se buscan en el índice vectorial de la tabla con la API SearchVectors, por lo que los recuperadores de LangChain y las cadenas de RAG realizan búsquedas de similitud directamente en la tabla que contiene los datos.

Instale el paquete :

pip install langchain-aws boto3

Proporcione un nombre de tabla y una función de incrustación. La tabla y el índice vectorial se crean al escribirlos por primera vez si no existen:

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 delimitar las búsquedas, pase partition_attribute al construir el almacén. A continuación, se crea el índice vectorial con una clave de partición del esquema de búsqueda en el campo de metadatos del documento, y cada búsqueda examina solo un valor del mismo, como una colección, una categoría o un inquilino, en lugar de examinar todo el corpus. Luego, cada búsqueda proporciona el valor a través de filter={partition_attribute: value} o un default_partition_value por tienda. La clave de partición forma parte del esquema del índice y no se puede cambiar una vez creado el índice.

Tenga en cuenta lo siguiente:

  • Al igual que un índice secundario global, el índice vectorial es coherente en última instancia: una búsqueda realizada inmediatamente después de add_texts puede no incluir los documentos recién escritos hasta que el índice se ponga al día.

  • SearchVectors devuelve como máximo las 100 coincidencias principales por consulta, por lo que el parámetro k de la tienda tiene un límite de 100.

  • Las dimensiones, la función de distancia y el esquema de búsqueda del índice se fijan en el momento de la creación. La tienda los valida con un índice existente en lugar de proceder con una discrepancia.

Para ver la API completa, consulte DynamoDBVectorStore en el repositorio de langchain-aws.

Recursos adicionales