Bedrock couvre l’immense majorité des besoins agentiques. Mais il arrive qu’on ait besoin de son propre modèle : un modèle open-weights précis, un modèle fine-tuné sur un jargon métier, un embedding spécialisé pour un domaine, un reranker entraîné sur vos données. C’est le territoire d’Amazon SageMaker AI — la plateforme pour entraîner, déployer et contrôler des modèles sur des endpoints à vous.

SageMaker JumpStart : déployer un modèle en quelques lignes

JumpStart est le catalogue de modèles prêts à déployer (Llama, Mistral, modèles d’embeddings, rerankers…). On choisit un modèle, on le déploie sur un endpoint temps réel, et on l’interroge comme une API.

from sagemaker.jumpstart.model import JumpStartModel

# Déploiement d'un modèle open-weights sur un endpoint temps réel
modele = JumpStartModel(model_id="meta-textgeneration-llama-3-8b-instruct")
predictor = modele.deploy(instance_type="ml.g5.2xlarge", accept_eula=True)

reponse = predictor.predict({"inputs": "Explique le RAG en une phrase."})
print(reponse)
# Pensez à supprimer l'endpoint quand il n'est plus utilisé : predictor.delete_endpoint()

Brancher un endpoint SageMaker à LangGraph

Un endpoint SageMaker s’intègre comme n’importe quel modèle de chat. On encapsule la sérialisation entrée/sortie (propre à chaque modèle) dans un ContentHandler.

import json
from langchain_aws import ChatSagemakerEndpoint
from langchain_aws.llms.sagemaker_endpoint import ChatModelContentHandler
from langchain_core.messages import AIMessage

class Handler(ChatModelContentHandler):
    content_type = "application/json"
    accepts = "application/json"

    def transform_input(self, messages, model_kwargs) -> bytes:
        payload = {"messages": [{"role": m.type, "content": m.content} for m in messages],
                   **model_kwargs}
        return json.dumps(payload).encode("utf-8")

    def transform_output(self, output: bytes) -> AIMessage:
        data = json.loads(output.read().decode("utf-8"))
        return AIMessage(content=data["choices"][0]["message"]["content"])

modele = ChatSagemakerEndpoint(
    endpoint_name="llama3-8b-instruct",
    region_name="eu-west-1",
    content_handler=Handler(),
    model_kwargs={"temperature": 0.2, "max_tokens": 1024},
)

Ce modele se passe à create_react_agent ou à n’importe quel nœud, exactement comme un modèle Bedrock. Toute votre logique LangGraph reste inchangée.

Le cas d’usage roi : embeddings et rerankers sur-mesure

L’agentique sur SageMaker ne se résume pas à héberger un LLM. Le besoin le plus rentable est souvent d’héberger les modèles de récupération : un modèle d’embeddings spécialisé sur votre domaine, ou un reranker fine-tuné, améliorent le RAG bien plus qu’un changement de LLM.

from langchain_community.embeddings import SagemakerEndpointEmbeddings

# Un modèle d'embeddings domaine-spécifique, hébergé sur SageMaker, alimente
# directement l'index OpenSearch du RAG hybride (cf. le deep-dive RAG hybride).
embeddings = SagemakerEndpointEmbeddings(
    endpoint_name="embeddings-metier",
    region_name="eu-west-1",
    content_handler=HandlerEmbeddings(),
)

On branche alors ces embeddings dans le pipeline du RAG hybride sur AWS : récupération AWS, vectorisation maison.

Fine-tuning et entraînement à grande échelle

Quand un modèle de base ne suffit pas, SageMaker permet de l’adapter :

  • Fine-tuning (depuis JumpStart ou un job d’entraînement) sur vos données étiquetées — pour un ton, un format ou un domaine spécifiques.
  • SageMaker HyperPod — l’infrastructure d’entraînement distribué pour les charges lourdes (pré-entraînement, fine-tuning de grands modèles).

SageMaker ou Bedrock : la grille

BesoinBedrockSageMaker AI
Raisonnement agentique généraliste✅ (Claude, Nova)possible, plus de travail
Démarrage rapide, zéro infra❌ (endpoints à gérer)
Modèle absent de Bedrock✅ (JumpStart, Hub)
Fine-tuning poussélimité✅ (jobs, HyperPod)
Embeddings / rerankers sur-mesure
Facturationau tokenà l’instance/heure
Contrôle latence/scalingdéléguétotal

La combinaison gagnante est souvent hybride : Bedrock pour le raisonnement avec outils, SageMaker pour les modèles spécialisés (embeddings, classifieurs, rerankers).

Bonnes pratiques & pièges

Bonnes pratiques
  • Restez sur Bedrock par défaut ; passez à SageMaker pour un besoin précis (modèle, fine-tuning, contrôle).
  • Le gain le plus rentable : héberger embeddings/rerankers sur-mesure pour le RAG.
  • Encapsulez la sérialisation dans un ContentHandler ; le reste de LangGraph ne change pas.
  • Dimensionnez les endpoints, activez l'auto-scaling, utilisez serverless/async pour le trafic intermittent.
  • Architecture hybride : Bedrock pour raisonner, SageMaker pour les tâches spécialisées.
  • Épuisez prompt/RAG/routage avant de fine-tuner.
Pièges à éviter
  • Laisser tourner un endpoint temps réel inutilisé : facturé à l'heure, sans trafic.
  • Supposer le tool calling natif sur tout modèle open-weights : vérifiez d'abord.
  • Fine-tuner par réflexe alors que le RAG ou le prompt suffirait.
  • Sous-dimensionner sans auto-scaling : throttling et latence sous charge.
  • Réinventer un raisonnement généraliste sur SageMaker que Claude fait mieux sur Bedrock.

Ce qu’il faut retenir

  • SageMaker AI sert quand Bedrock ne suffit pas : modèle absent, fine-tuning, contrôle de latence/coût.
  • Un endpoint SageMaker s’intègre à LangGraph comme tout modèle, via un ContentHandler.
  • Le cas le plus rentable est souvent d’héberger des embeddings/rerankers sur-mesure pour le RAG.
  • Un endpoint temps réel est une instance facturée à l’heure : dimensionnez et auto-scalez.
  • L’architecture saine est souvent hybride : Bedrock pour raisonner, SageMaker pour le spécialisé.

Modèles, récupération, hébergement : il reste à tout assembler en une architecture qui tient en production. Direction le déploiement agentique sur AWS.

#aws#sagemaker#fine-tuning#embeddings#langgraph