

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Utilisation de DynamoDB avec LangChain
<a name="ddb-langchain"></a>

[LangChain](https://www.langchain.com/)est un framework permettant de créer des applications avec de grands modèles de langage (LLM). Deux LangChain intégrations utilisent DynamoDB : la `DynamoDBChatMessageHistory` classe stocke l'historique des conversations afin qu'un modèle puisse converser avec un utilisateur d'une session à l'autre, et la `DynamoDBVectorStore` classe implémente l'interface de stockage LangChain vectoriel sur les index vectoriels DynamoDB pour la recherche de similarité.

## Historique des messages de chat
<a name="langchain-chat-history"></a>

La `DynamoDBChatMessageHistory` classe, dans le `langchain-community` package pour Python et le `@langchain/community` package pour JavaScript, conserve les messages de discussion dans une table DynamoDB. La classe attend une table existante dont la clé de partition est un attribut de chaîne nommé `SessionId` (configurable via`primary_key_name`). Créez le tableau à l'aide de 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
```

Installez les packages, puis lisez et écrivez l'historique saisi par un ID de session :

```
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)
```

Les messages de chaque session de chat sont stockés sous la sienne`session_id`, de sorte que l'utilisateur qui revient reprend la conversation là où il s'est arrêtée. Le constructeur prend également en charge les clés composites pour isoler l'historique en fonction des détails de l'application, tels que l'ID utilisateur (`key`), le Live-based délai d'expiration des anciennes sessions (`ttl`) et le plafonnement des messages stockés (`history_size`). Pour l'API complète, consultez la référence [ Python ](https://reference.langchain.com/python/langchain-community/chat_message_histories/dynamodb/DynamoDBChatMessageHistory) et la [ JavaScript référence](https://reference.langchain.com/javascript/langchain-community/stores/message/dynamodb).

## Boutique vectorielle soutenue par des index vectoriels
<a name="langchain-vector-store"></a>

La `DynamoDBVectorStore` classe du `langchain-aws` package implémente l'interface de stockage LangChain vectoriel à l'aide des index vectoriels DynamoDB (voir). [Utilisation d'index vectoriels dans DynamoDB](VectorSearch.md) Les documents sont stockés sous forme d'éléments DynamoDB classiques et recherchés via l'index vectoriel de la table à l'aide de l'`SearchVectors`API. Les LangChain récupérateurs et les chaînes RAG effectuent donc des recherches de similarité directement sur la table contenant vos données.

Installez le package :

```
pip install langchain-aws boto3
```

Fournissez un nom de table et une fonction d'intégration. La table et l'index vectoriel sont créés lors de la première écriture s'ils n'existent pas :

```
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)
```

Pour définir la portée des recherches, passez la commande `partition_attribute` lorsque vous créez la boutique. L'index vectoriel est ensuite créé à l'aide d'une clé de partition du schéma de recherche sur ce champ de métadonnées du document, et chaque recherche n'examine qu'une seule valeur de celui-ci, telle qu'une collection, une catégorie ou un tenant, plutôt que l'ensemble du corpus. Chaque recherche fournit ensuite la valeur par le biais d'un magasin `filter={partition_attribute: value}` ou d'un magasin`default_partition_value`. La clé de partition fait partie du schéma de l'index et ne peut pas être modifiée une fois l'index créé.

Gardez à l’esprit les points suivants :
+ À l'instar d'un index secondaire global, l'index vectoriel est finalement cohérent : une recherche lancée immédiatement après `add_texts` peut ne pas inclure les documents qui viennent d'être écrits tant que l'index n'a pas rattrapé son retard.
+ `SearchVectors`renvoie au maximum les 100 meilleurs résultats par requête, de sorte que le `k` paramètre du magasin est plafonné à 100.
+ Les dimensions, la fonction de distance et le schéma de recherche de l'index sont fixés lors de la création. Le magasin les valide par rapport à un index existant plutôt que de procéder à une non-concordance.

Pour l'API complète, consultez le [ DynamoDBVectorStore référentiel langchain-aws. ](https://github.com/langchain-ai/langchain-aws/tree/main/libs/aws/langchain_aws/vectorstores/dynamodb)

## Ressources supplémentaires
<a name="langchain-additional-resources"></a>
+ [DynamoDBChatMessageHistory Référence Python ](https://reference.langchain.com/python/langchain-community/chat_message_histories/dynamodb/DynamoDBChatMessageHistory)
+ [DynamoDBChatMessageHistory JavaScript référence](https://reference.langchain.com/javascript/langchain-community/stores/message/dynamodb)
+ [langchain-aws sur GitHub ](https://github.com/langchain-ai/langchain-aws)
+ [Créez un chatbot évolutif et sensible au contexte avec Amazon DynamoDB, Amazon Bedrock et LangChain ](https://aws.amazon.com/blogs/database/build-a-scalable-context-aware-chatbot-with-amazon-dynamodb-amazon-bedrock-and-langchain/)