Introduction
AWS Bedrock permet d'accéder à des modèles de fondation comme Claude 3 ou Llama 3 sans gérer l'infrastructure. Ce tutoriel montre comment l'intégrer dans une application Node.js pour générer du texte et gérer les réponses en streaming. Vous apprendrez les bonnes pratiques de configuration, d'authentification et de gestion d'erreurs pour des déploiements en production.
Prérequis
- Node.js 20+
- Compte AWS avec accès à Bedrock
- Connaissances de base en TypeScript
- AWS CLI configuré
Installation des dépendances
npm init -y
npm install @aws-sdk/client-bedrock-runtime dotenvInstalle le SDK officiel AWS pour Bedrock et dotenv pour gérer les variables d'environnement de manière sécurisée.
Configuration du client Bedrock
import { BedrockRuntimeClient } from '@aws-sdk/client-bedrock-runtime';
import * as dotenv from 'dotenv';
dotenv.config();
export const bedrockClient = new BedrockRuntimeClient({
region: process.env.AWS_REGION || 'us-east-1',
credentials: {
accessKeyId: process.env.AWS_ACCESS_KEY_ID!,
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY!,
},
});Initialise le client Bedrock avec les credentials AWS. Utilisez des variables d'environnement pour éviter de hardcoder les clés.
Invocation simple du modèle
import { InvokeModelCommand } from '@aws-sdk/client-bedrock-runtime';
import { bedrockClient } from './bedrockClient';
export async function invokeClaude(prompt: string) {
const command = new InvokeModelCommand({
modelId: 'anthropic.claude-3-sonnet-20240229-v1:0',
contentType: 'application/json',
accept: 'application/json',
body: JSON.stringify({
anthropic_version: 'bedrock-2023-05-31',
max_tokens: 1000,
messages: [{ role: 'user', content: prompt }],
}),
});
const response = await bedrockClient.send(command);
return JSON.parse(new TextDecoder().decode(response.body));
}Envoie une requête à Claude 3 Sonnet. Le corps doit respecter le format spécifique du modèle anthropic.
Gestion du streaming
import { InvokeModelWithResponseStreamCommand } from '@aws-sdk/client-bedrock-runtime';
import { bedrockClient } from './bedrockClient';
export async function streamClaude(prompt: string) {
const command = new InvokeModelWithResponseStreamCommand({
modelId: 'anthropic.claude-3-sonnet-20240229-v1:0',
contentType: 'application/json',
body: JSON.stringify({
anthropic_version: 'bedrock-2023-05-31',
max_tokens: 1000,
messages: [{ role: 'user', content: prompt }],
}),
});
const response = await bedrockClient.send(command);
for await (const event of response.body!) {
if (event.chunk) {
const chunk = JSON.parse(new TextDecoder().decode(event.chunk.bytes));
if (chunk.delta?.text) process.stdout.write(chunk.delta.text);
}
}
}Utilise le streaming pour afficher les tokens au fur et à mesure, améliorant l'expérience utilisateur.
Gestion des erreurs
import { BedrockRuntimeServiceException } from '@aws-sdk/client-bedrock-runtime';
export function handleBedrockError(error: unknown) {
if (error instanceof BedrockRuntimeServiceException) {
console.error(`Bedrock error: ${error.name} - ${error.message}`);
if (error.name === 'ValidationException') {
throw new Error('Prompt invalide ou paramètres incorrects');
}
}
throw error;
}Capture les exceptions spécifiques de Bedrock pour fournir des messages d'erreur clairs et actionnables.
Bonnes pratiques
- Toujours valider et sanitiser les prompts avant envoi
- Utiliser des modèles via des alias pour faciliter les mises à jour
- Implémenter un retry avec backoff exponentiel
- Surveiller les coûts avec CloudWatch
- Stocker les credentials via IAM roles plutôt que des clés statiques
Erreurs courantes à éviter
- Oublier de demander l'accès au modèle dans la console Bedrock
- Utiliser un format de body incorrect pour le modèle choisi
- Ne pas gérer les limites de tokens et les timeouts
- Ignorer les différences de régions pour certains modèles
Pour aller plus loin
Découvrez nos formations avancées sur l'IA générative et AWS : https://learni-group.com/formations