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
| Besoin | Bedrock | SageMaker 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 | ❌ | ✅ |
| Facturation | au token | à l’instance/heure |
| Contrôle latence/scaling | dé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
- 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.
- 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.