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 comme magasin de points de contrôle pour les agents LangGraph
LangGraph
Le langgraph-checkpoint-aws package fournit une DynamoDBSaver classe qui implémente l'interface de LangGraph point de contrôle, vous permettant de conserver l'état de l'agent dans DynamoDB avec le déchargement facultatif d'Amazon Simple Storage Service pour les points de contrôle importants.
Fonctions principales
- Persistance de l'État
-
Enregistre automatiquement l'état de l'agent après chaque étape, ce qui permet aux agents de reprendre leurs activités après une interruption et de récupérer après une panne.
- Nettoyage basé sur Time to Live
-
Expirez automatiquement les anciens points de contrôle à l'aide de DynamoDB Time to Live pour gérer les coûts de stockage.
- Compression
-
Compressez éventuellement les données des points de contrôle avec gzip pour réduire les coûts de stockage et améliorer le débit.
- Déchargement d'Amazon S3
-
Déchargez automatiquement les points de contrôle volumineux (supérieurs à 350 Ko) vers Amazon Simple Storage Service afin de respecter les limites de taille des éléments DynamoDB.
- Support de synchronisation et d'asynchronisation
-
Synchrone et asynchrone APIs pour plus de flexibilité dans les différentes architectures d'applications.
Conditions préalables
-
Python 3.10 ou version ultérieure
-
Et Compte AWS avec les autorisations nécessaires pour créer des tables DynamoDB (et éventuellement des compartiments Amazon S3)
-
AWS informations d'identification configurées (voir la AWS documentation pour les options de configuration des informations d'identification)
Important
Ce guide crée AWS des ressources susceptibles d'entraîner des frais. DynamoDB pay-per-request utilise la facturation par défaut, et les frais Amazon S3 s'appliquent si vous activez le déchargement à des points de contrôle importants. Suivez la section Nettoyage pour supprimer des ressources lorsque vous avez terminé.
Installation
Installez le package checkpoint depuis PyPI :
pip install langgraph-checkpoint-aws
Utilisation de base
L'exemple suivant montre comment configurer DynamoDB en tant que magasin de points de contrôle pour un agent : 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 configuration thread_id intégrée fait office de clé de partition dans DynamoDB, ce qui vous permet de gérer des fils de conversation distincts et de récupérer les états historiques de n'importe quel fil.
Configuration de production
Pour les déploiements de production, vous pouvez activer Time to Live, la compression et le déchargement d'Amazon S3. Vous pouvez également utiliser le endpoint_url paramètre pour pointer vers une instance DynamoDB locale à des fins de 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" )
Configuration de la table DynamoDB
L'économiseur de points de contrôle nécessite une table DynamoDB avec une clé primaire composite. Vous pouvez créer le tableau à l'aide du AWS CloudFormation modèle suivant :
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
Déployez le modèle avec la AWS CLI :
aws cloudformation deploy \ --template-file template.yaml \ --stack-name langgraph-checkpoint \ --parameter-overrides TableName=langgraph-checkpoints
Autorisations IAM requises
La politique IAM suivante fournit les autorisations minimales requises pour l'économiseur de points de contrôle DynamoDB. 111122223333Remplacez-le par votre Compte AWS
identifiant et mettez à jour la région en fonction de votre environnement.
{ "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" } ] }
Si vous activez le déchargement sur Amazon S3, ajoutez la déclaration suivante à la politique :
{ "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" }
Utilisation asynchrone
Pour les applications asynchrones, utilisez les méthodes asynchrones fournies par l'économiseur de points de contrôle :
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())
Nettoyage
Pour éviter des frais permanents, supprimez les ressources que vous avez créées :
# Delete the DynamoDB table aws dynamodb delete-table --table-name langgraph-checkpoints # Delete the CloudFormation stack (if you used the template above) aws cloudformation delete-stack --stack-name langgraph-checkpoint # If you created an S3 bucket for large checkpoint offloading, empty and delete it aws s3 rm s3://my-checkpoint-bucket --recursive aws s3 rb s3://my-checkpoint-bucket
Gestion des erreurs
Scénarios d'erreur courants :
-
Table introuvable : vérifiez que la
table_nametable DynamoDBregion_namecorrespond à celle-ci. -
Limitation : si c'est le cas
ProvisionedThroughputExceededException, envisagez de passer en mode de facturation à la demande ou d'augmenter la capacité allouée. -
Taille de l'article dépassée : si les points de contrôle dépassent 350 Ko, activez le déchargement sur Amazon S3 (voirConfiguration de production).
-
Erreurs d'identification : vérifiez que vos AWS informations d'identification sont valides et que vous disposez des autorisations requises.