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à.
Utilizzo di DynamoDB come archivio di checkpoint per gli agenti LangGraph
LangGraph
Il langgraph-checkpoint-aws pacchetto fornisce una DynamoDBSaver classe che implementa l'interfaccia LangGraph checkpoint, consentendoti di mantenere lo stato dell'agente in DynamoDB con l'offload opzionale di Amazon Simple Storage Service per checkpoint di grandi dimensioni.
Lo stesso pacchetto fornisce anche una DynamoDBStore classe che implementa l'interfaccia LangGraph store per la memoria a lungo termine tra agenti, con ricerca semantica supportata da indici vettoriali DynamoDB. Per ulteriori informazioni, consulta Memoria semantica a lungo termine per agenti LangGraph. Questo argomento tratta del checkpoint saver.
Funzionalità principali
- Persistenza dello stato
-
Salva automaticamente lo stato dell'agente dopo ogni passaggio, consentendo agli agenti di riprendere dalle interruzioni e di riprendersi dai guasti.
- È ora di pulire Live-based
-
Fai scadere automaticamente i vecchi checkpoint utilizzando DynamoDB Time to Live per gestire i costi di storage.
- Compression
-
Facoltativamente, comprimi i dati dei checkpoint con gzip per ridurre i costi di archiviazione e migliorare la produttività.
- Offload di Amazon S3
-
Scarica automaticamente checkpoint di grandi dimensioni (superiori a 350 KB) su Amazon Simple Storage Service per funzionare entro i limiti di dimensione degli articoli di DynamoDB.
- Supporto per sincronizzazione e asincrono
-
API sincrone e asincrone per la flessibilità in diverse architetture applicative.
Prerequisiti
-
Python 3.10 o successivo
-
E Account AWS con le autorizzazioni per creare tabelle DynamoDB (e opzionalmente bucket Amazon S3)
-
AWS credenziali configurate (consulta la documentazione per le opzioni di configurazione delle credenziali) AWS
Installazione
Installa il pacchetto checkpoint da PyPI:
pip install langgraph-checkpoint-aws
Utilizzo di base
L'esempio seguente dimostra come configurare DynamoDB come archivio di checkpoint per un agente: LangGraph
from langgraph.graph import StateGraph from langgraph_checkpoint_aws import DynamoDBSaver from typing import TypedDict # Define your state schema class State(TypedDict): input: str result: str # Initialize the DynamoDB checkpoint saver checkpointer = DynamoDBSaver( table_name="langgraph-checkpoints", region_name="us-east-1" ) # Build your LangGraph workflow builder = StateGraph(State) builder.add_node("process", lambda state: {"result": "processed"}) builder.set_entry_point("process") builder.set_finish_point("process") # Compile the graph with the DynamoDB checkpointer graph = builder.compile(checkpointer=checkpointer) # Invoke the graph with a thread ID to enable state persistence config = {"configurable": {"thread_id": "session-123"}} result = graph.invoke({"input": "data"}, config)
La funzione thread_id in the configuration funge da chiave di partizione in DynamoDB, consentendoti di mantenere thread di conversazione separati e recuperare gli stati storici per ogni thread.
Configurazione di produzione
Per le distribuzioni di produzione, puoi abilitare Time to Live, la compressione e l'offloading di Amazon S3. Puoi anche utilizzare il endpoint_url parametro per puntare a un'istanza DynamoDB locale per il test:
import boto3 from botocore.config import Config from langgraph_checkpoint_aws import DynamoDBSaver # Production configuration session = boto3.Session( profile_name="production", region_name="us-east-1" ) checkpointer = DynamoDBSaver( table_name="langgraph-checkpoints", session=session, ttl_seconds=86400 * 7, # Expire checkpoints after 7 days enable_checkpoint_compression=True, # Enable gzip compression boto_config=Config( retries={"mode": "adaptive", "max_attempts": 6}, max_pool_connections=50 ), s3_offload_config={ "bucket_name": "my-checkpoint-bucket" } ) # Local testing with DynamoDB Local local_checkpointer = DynamoDBSaver( table_name="langgraph-checkpoints", region_name="us-east-1", endpoint_url="http://localhost:8000" )
Configurazione della tabella DynamoDB
Il checkpoint saver richiede una tabella DynamoDB con una chiave primaria composita. È possibile creare la tabella utilizzando il seguente modello: AWS CloudFormation
AWSTemplateFormatVersion: '2010-09-09' Description: 'DynamoDB table for LangGraph checkpoint storage' Parameters: TableName: Type: String Default: langgraph-checkpoints Resources: CheckpointTable: Type: AWS::DynamoDB::Table DeletionPolicy: Retain UpdateReplacePolicy: Retain Properties: TableName: !Ref TableName BillingMode: PAY_PER_REQUEST AttributeDefinitions: - AttributeName: PK AttributeType: S - AttributeName: SK AttributeType: S KeySchema: - AttributeName: PK KeyType: HASH - AttributeName: SK KeyType: RANGE TimeToLiveSpecification: AttributeName: ttl Enabled: true PointInTimeRecoverySpecification: PointInTimeRecoveryEnabled: true SSESpecification: SSEEnabled: true
Distribuisci il modello con la AWS CLI:
aws cloudformation deploy \ --template-file template.yaml \ --stack-name langgraph-checkpoint \ --parameter-overrides TableName=langgraph-checkpoints
Autorizzazioni IAM richieste
La seguente policy IAM fornisce le autorizzazioni minime richieste per il checkpoint saver di DynamoDB. Sostituiscilo 111122223333 con il tuo Account AWS
ID e aggiorna la regione in modo che corrisponda al tuo ambiente.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "dynamodb:GetItem", "dynamodb:PutItem", "dynamodb:Query", "dynamodb:BatchGetItem", "dynamodb:BatchWriteItem" ], "Resource": "arn:aws:dynamodb:us-east-1:111122223333:table/langgraph-checkpoints" } ] }
Se abiliti l'offload di Amazon S3, aggiungi la seguente dichiarazione alla policy:
{ "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetObject", "s3:DeleteObject", "s3:PutObjectTagging" ], "Resource": "arn:aws:s3:::my-checkpoint-bucket/*" }, { "Effect": "Allow", "Action": [ "s3:GetBucketLifecycleConfiguration", "s3:PutBucketLifecycleConfiguration" ], "Resource": "arn:aws:s3:::my-checkpoint-bucket" }
Utilizzo asincrono
Per le applicazioni asincrone, utilizzate i metodi asincroni forniti dal checkpoint saver:
import asyncio from langgraph.graph import StateGraph from langgraph_checkpoint_aws import DynamoDBSaver from typing import TypedDict class State(TypedDict): input: str result: str async def main(): checkpointer = DynamoDBSaver( table_name="langgraph-checkpoints", region_name="us-east-1" ) builder = StateGraph(State) builder.add_node("process", lambda state: {"result": "processed"}) builder.set_entry_point("process") builder.set_finish_point("process") graph = builder.compile(checkpointer=checkpointer) config = {"configurable": {"thread_id": "async-session-123"}} result = await graph.ainvoke({"input": "data"}, config) return result asyncio.run(main())
Gestione degli errori
Scenari di errore comuni:
-
Tabella non trovata: verifica
table_nameeregion_nameabbina la tabella DynamoDB. -
Limitazione: se lo vedi
ProvisionedThroughputExceededException, valuta la possibilità di passare alla modalità di fatturazione su richiesta o di aumentare la capacità messa a disposizione. -
Dimensione dell'articolo superata: se i checkpoint superano i 350 KB, abilita l'offloading di Amazon S3 (vedi). Configurazione di produzione
-
Errori relativi alle credenziali: verifica che AWS le tue credenziali siano valide e disponga delle autorizzazioni richieste. Autorizzazioni IAM richieste