

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Usare DynamoDB con LangChain
<a name="ddb-langchain"></a>

[LangChain](https://www.langchain.com/)è un framework per la creazione di applicazioni con modelli linguistici di grandi dimensioni (LLM). Due LangChain integrazioni utilizzano DynamoDB: la `DynamoDBChatMessageHistory` classe memorizza la cronologia delle conversazioni in modo che un modello possa conversare avanti e indietro con un utente tra le sessioni, e la `DynamoDBVectorStore` classe implementa l'interfaccia LangChain vector store sugli indici vettoriali DynamoDB per la ricerca di similarità.

## Cronologia dei messaggi di chat
<a name="langchain-chat-history"></a>

La `DynamoDBChatMessageHistory` classe, nel `langchain-community` pacchetto per Python e nel `@langchain/community` pacchetto per JavaScript, mantiene i messaggi di chat in una tabella DynamoDB. La classe si aspetta una tabella esistente la cui chiave di partizione è un attributo di stringa denominato (configurabile tramite). `SessionId` `primary_key_name` Crea la tabella con la 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
```

Installa i pacchetti, quindi leggi e scrivi la cronologia digitata da un ID di sessione:

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

I messaggi di ogni sessione di chat sono memorizzati al suo interno`session_id`, in modo che l'utente che ritorna riprenda la conversazione da dove l'aveva interrotta. Il costruttore supporta anche chiavi composite per isolare la cronologia in base ai dettagli dell'applicazione, come l'ID utente (`key`), il tempo di Live-based scadenza delle vecchie sessioni (`ttl`) e un limite massimo per i messaggi memorizzati (). `history_size` Per l'API completa, vedi il riferimento [ Python e il riferimento](https://reference.langchain.com/python/langchain-community/chat_message_histories/dynamodb/DynamoDBChatMessageHistory). [ JavaScript ](https://reference.langchain.com/javascript/langchain-community/stores/message/dynamodb)

## Archivio vettoriale supportato da indici vettoriali
<a name="langchain-vector-store"></a>

La `DynamoDBVectorStore` classe, nel `langchain-aws` pacchetto, implementa l'interfaccia LangChain vector store utilizzando gli indici vettoriali DynamoDB (vedi). [Utilizzo degli indici vettoriali in DynamoDB](VectorSearch.md) I documenti vengono archiviati come normali elementi DynamoDB e ricercati tramite l'indice vettoriale della tabella con l'`SearchVectors`API, quindi i LangChain retriever e le catene RAG eseguono ricerche di similarità direttamente sulla tabella che contiene i dati.

Installare il pacchetto :

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

Fornisci un nome per la tabella e una funzione di incorporamento. La tabella e l'indice vettoriale vengono creati alla prima scrittura se non esistono:

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

Per definire l'ambito delle ricerche, passa `partition_attribute` quando costruisci il negozio. L'indice vettoriale viene quindi creato con una chiave di partizione dello schema di ricerca nel campo dei metadati del documento e ogni ricerca ne esamina solo un valore, ad esempio una raccolta, una categoria o un tenant, anziché l'intero corpus. Ogni ricerca fornisce quindi il valore tramite o a livello di archivio. `filter={partition_attribute: value}` `default_partition_value` La chiave di partizione fa parte dello schema dell'indice e non può essere modificata dopo la creazione dell'indice.

Ricorda quanto segue:
+ Come un indice secondario globale, l'indice vettoriale alla fine è coerente: una ricerca effettuata subito dopo `add_texts` potrebbe non includere i documenti appena scritti finché l'indice non recupera il ritardo.
+ `SearchVectors`restituisce al massimo le prime 100 corrispondenze per query, quindi il `k` parametro del negozio è limitato a 100.
+ Le dimensioni dell'indice, la funzione di distanza e lo schema di ricerca vengono fissati al momento della creazione. L'archivio li convalida rispetto a un indice esistente anziché procedere con una mancata corrispondenza.

Per l'API completa, consulta il repository [ DynamoDBVectorStore langchain-aws. ](https://github.com/langchain-ai/langchain-aws/tree/main/libs/aws/langchain_aws/vectorstores/dynamodb)

## Risorse aggiuntive
<a name="langchain-additional-resources"></a>
+ [DynamoDBChatMessageHistory Riferimento a Python ](https://reference.langchain.com/python/langchain-community/chat_message_histories/dynamodb/DynamoDBChatMessageHistory)
+ [DynamoDBChatMessageHistory JavaScript riferimento](https://reference.langchain.com/javascript/langchain-community/stores/message/dynamodb)
+ [langchain-aws attivo GitHub ](https://github.com/langchain-ai/langchain-aws)
+ [Crea un chatbot scalabile e sensibile al contesto con Amazon DynamoDB, Amazon Bedrock e LangChain ](https://aws.amazon.com/blogs/database/build-a-scalable-context-aware-chatbot-with-amazon-dynamodb-amazon-bedrock-and-langchain/)