Les playgrounds web sont parfaits pour les démos. Vous collez un bloc de texte, vous regardez le modèle générer un résumé propre, et vous fermez l'onglet. Mais cela ne relève pas de l'ingénierie. Le travail en production implique des API, la gestion des erreurs et du code qui s'exécute pendant que vous dormez. Si vous devez traiter des transcriptions de réunions, des tickets de support ou des articles de recherche selon un calendrier précis, vous avez besoin d'un pipeline.

Ce guide vous accompagne dans la création de précisément cela : un script de résumé de documents léger et automatisé utilisant Python, le SDK AWS pour Python (boto3) et Amazon Bedrock. Nous utiliserons Claude 3 Haiku d'Anthropic, un modèle qui offre l'équilibre idéal entre vitesse et coût pour les tâches de résumé de texte.

Pourquoi Bedrock et Claude 3 Haiku ?

Amazon Bedrock est un service managé qui expose des modèles de fondation via un ensemble unique d'API AWS. Au lieu de devoir assembler des points de terminaison externes et de gérer des modèles de facturation et de sécurité distincts, vous appelez un endpoint AWS avec les contrôles IAM standards. Vos données restent au sein de votre environnement AWS.

Claude 3 Haiku est le modèle le plus léger de la famille Claude 3 d'Anthropic. Il est conçu pour la réactivité et un coût réduit, ce qui le rend idéal pour la synthèse à haut volume où vous souhaitez des résultats prévisibles sans payer pour la puissance de calcul de modèles plus larges sur des tâches de lecture simples.

Ce dont vous avez besoin

Avant d'écrire le moindre code, assurez-vous d'avoir les éléments suivants prêts :

  • Un compte AWS actif.
  • Python 3.9 ou une version supérieure installé localement.
  • L'AWS CLI configuré avec des identifiants disposant des permissions nécessaires pour invoquer les modèles Bedrock. Si vous n'avez pas encore exécuté aws configure, faites-le maintenant. Si vous rencontrez des erreurs de permission plus tard, vous devrez probablement attacher les permissions d'invocation Bedrock appropriées à votre utilisateur ou rôle IAM.
  • L'accès au modèle activé spécifiquement pour Anthropic Claude 3 Haiku dans la console AWS Bedrock. AWS exige que vous acceptiez explicitement chaque fournisseur de modèle avant de pouvoir l'appeler.

Étape 1 : Activer l'accès au modèle

Bedrock ne vous permet pas d'appeler des modèles par défaut. Vous devez d'abord activer l'option dans la console.

  1. Connectez-vous à la console de gestion AWS.
  2. Utilisez la barre de recherche pour trouver Amazon Bedrock.
  3. Dans le panneau de navigation de gauche, sélectionnez Model access.
  4. Cliquez sur Modify model access.
  5. Cochez la case Anthropic (Claude 3 Haiku) et soumettez votre demande.

Une fois que le statut passe à "Access granted", vous pouvez appeler le modèle via votre code.

Étape 2 : Configurer votre environnement

Un environnement Python propre permet d'isoler les dépendances et de garantir la reproductibilité. Ouvrez votre terminal et exécutez ces commandes :

mkdir bedrock-summarizer && cd bedrock-summarizer
python3 -m venv venv
source venv/bin/activate
pip install boto3

Les utilisateurs de Windows doivent remplacer la commande d'activation par venv\Scripts\activate. Une fois que pip install boto3 est terminé, vous avez tout ce dont vous avez besoin pour communiquer avec les API AWS.

Étape 3 : Écrire le script

Créez un fichier nommé summarize.py. L'objectif est de lire un document sur le disque, de le transmettre à l'API Bedrock Converse, et d'afficher un résumé concis.

Vous trouverez ci-dessous une implémentation complète et fonctionnelle. Nous utilisons l'API Converse car elle fait abstraction du formatage JSON brut attendu par les différents fournisseurs de modèles. Il vous suffit de passer une liste de messages et des paramètres d'inférence.

import boto3

def summarize_document(text: str) -> str:
    client = boto3.client("bedrock-runtime")
    
    model_id = "anthropic.claude-3-haiku-20240307-v1:0"
    
    messages = [
        {
            "role": "user",
            "content": [
                {
                    "text": (
                        "Provide a concise summary of the following document. "
                        "Focus on the main points and avoid unnecessary detail:\n\n"
                        f"{text}"
                    )
                }
            ]
        }
    ]
    
    response = client.converse(
        modelId=model_id,
        messages=messages,
        inferenceConfig={
            "temperature": 0.3,
            "maxTokens": 512
        }
    )
    
    summary = response["output"]["message"]["content"][0]["text"]
    return summary.strip()


if __name__ == "__main__":
    with open("document.txt", "r", encoding="utf-8") as f:
        document_text = f.read()
    
    result = summarize_document(document_text)
    print("\n--- Summary ---\n")
    print(result)

Quelques détails pratiques importants :

  • boto3.client("bedrock-runtime") cible le point de terminaison d'exécution qui gère l'inférence. Assurez-vous que votre région AWS dans ~/.aws/config prend en charge Bedrock et que vous avez activé Haiku dans cette même région.
  • L'ID du modèle anthropic.claude-3-haiku-20240307-v1:0 est l'identifiant exact attendu par Bedrock. Copiez-le précisément.
  • Une température réglée sur 0.3 permet de garder le résultat ancré dans la réalité. Pour la synthèse, vous recherchez la cohérence et la fidélité au texte source, pas l'embellissement créatif. Si vous augmentez la température vers 1.0, le modèle commence à prendre des libertés avec la formulation et invente parfois des détails.
  • Le prompt lui-même est spécifique. Au lieu de soumettre un texte brut au modèle avec un vague « résume ceci », nous demandons explicitement les points principaux et lui donnons l'instruction de sauter le superflu. Ce type de clarté fait la différence entre un résultat inutilisable et quelque chose que vous pouvez réellement exploiter.

Placez n'importe quel fichier texte que vous souhaitez résumer dans le même répertoire et nommez-le document.txt.

Étape 4 : L'exécuter

Avec votre environnement virtuel activé, exécutez :

python summarize.py

Si vos identifiants et votre accès au modèle sont corrects, vous devriez voir un résumé propre s'afficher dans votre terminal en quelques secondes. Si vous obtenez une erreur d'accès, vérifiez vos permissions IAM et confirmez que vous avez bien activé Claude 3 Haiku dans la console.

Aller au-delà du script

Ce pipeline est intentionnellement simple, mais il constitue le fondement d'une véritable automatisation. Voici comment vous pouvez l'étendre sans l'alourdir.

Traitement par lots. Remplacez la lecture d'un fichier unique par une boucle sur un répertoire. Déposez cinquante PDF ou fichiers texte dans un dossier d'entrée, parcourez-les, et écrivez les résumés dans un dossier de sortie. Si vous souhaitez ingérer des PDF directement, vous aurez besoin d'une étape de prétraitement avec une bibliothèque comme PyPDF2 ou pdfplumber pour extraire le texte brut avant qu'il n'atteigne Bedrock.

Stratégie de découpage (chunking). Les documents très longs peuvent dépasser la limite de contexte du modèle. Le cas échéant, divisez le texte en segments logiques par paragraphe ou section, résumez chaque segment individuellement, puis soumettez les résumés intermédiaires au modèle pour une synthèse finale. Cette approche en deux étapes vous permet de rester sous les limites de tokens tout en préservant la couverture de l'intégralité du document.

Gestion des erreurs. Le code de production doit spécifiquement intercepter boto3.exceptions.ClientError. AWS peut limiter le débit de vos requêtes si vous appelez l'API de manière trop agressive. Enveloppez votre appel converse dans une boucle de répétition avec un backoff exponentiel, ou utilisez une bibliothèque comme tenacity pour gérer les limites de débit avec élégance.

Ingénierie de prompt. La différence entre un résumé médiocre et un résumé utile tient souvent au prompt. Demandez des listes à puces si vous avez besoin d'une lecture rapide. Demandez un résumé exécutif d'un paragraphe si le public est composé de cadres dirigeants. Vous pouvez même passer des contraintes de formatage, telles que « Limitez le résumé à trois phrases » ou « Retournez le résultat au format JSON avec des clés pour topic, key_points et action_items ».

L'essentiel à retenir

Passer d'un environnement de test (playground) de chat à un script fonctionnel est le point d'inflexion où l'IA devient une infrastructure. Une fois que ce pipeline fonctionne localement, vous pouvez le déployer dans une fonction AWS Lambda déclenchée par des téléchargements S3, le planifier sur ECS Fargate ou l'intégrer à un flux de données existant. L'appel à l'API est la partie facile. La valeur de l'ingénierie réside dans l'encapsulation de cet appel dans une logique qui gère les fichiers, les erreurs et le formatage, afin que vous n'ayez plus jamais à copier et coller du texte dans un navigateur.

Pour plus de contexte et des variantes de cette configuration, consultez le tutoriel original sur Dev.to. Si vous souhaitez discuter d'architectures AWS, de pipelines LLM ou d'ingénierie de prompt avec une communauté de bâtisseurs, rejoignez la conversation sur [GyaanSetu AI on Telegram](https://t.me/GyaanSet