Skip to main content
LibreChat is joining ClickHouse to power the open-source Agentic Data Stack 🎉 Learn more
LibreChat

Profils d'inférence Bedrock

Configurez et utilisez les profils d'inférence personnalisés AWS Bedrock avec LibreChat pour l'équilibrage de charge inter-régions, l'allocation des coûts et les contrôles de conformité.

Ce guide explique comment configurer et utiliser les profils d'inférence personnalisés AWS Bedrock avec LibreChat, vous permettant d'acheminer les requêtes de modèles via des profils d'inférence d'application personnalisés pour un meilleur contrôle, une meilleure répartition des coûts et un équilibrage de charge inter-régions.

Aperçu

Les profils d'inférence AWS Bedrock vous permettent de créer des configurations de routage personnalisées pour les modèles de fondation. Lorsque vous créez un profil d'inférence personnalisé (application), AWS génère un ARN unique qui ne contient pas d'informations sur le nom du modèle :

arn:aws:bedrock:us-east-1:123456789012:application-inference-profile/abc123def456

La fonctionnalité de mappage de profil d'inférence de LibreChat vous permet de :

  1. Mapper des identifiants de modèle conviviaux vers des ARN de profils d'inférence personnalisés
  2. Acheminez les requêtes via vos profils personnalisés tout en conservant la détection des capacités des modèles
  3. Utilisez des variables d'environnement pour une gestion sécurisée des ARN

Pourquoi utiliser des profils d'inférence personnalisés ?

AvantageDescription
Équilibrage de charge inter-régionsDistribue automatiquement les requêtes entre plusieurs régions AWS
Allocation des coûtsÉtiquetez et suivez les coûts par application ou par équipe
Gestion du débitConfigurez un débit dédié pour vos applications
ConformitéAcheminez les requêtes via des régions spécifiques pour la résidence des données
SurveillanceSuivez l'utilisation par profil d'inférence dans CloudWatch

Prérequis

Avant de commencer, assurez-vous d'avoir :

  1. Compte AWS avec accès Bedrock activé
  2. AWS CLI installé et configuré
  3. Autorisations IAM :
    • bedrock:CreateInferenceProfile
    • bedrock:ListInferenceProfiles
    • bedrock:GetInferenceProfile
    • bedrock:InvokeModel / bedrock:InvokeModelWithResponseStream
  4. LibreChat avec le endpoint Bedrock configuré (voir Configuration d'AWS Bedrock)

Création de profils d'inférence personnalisés

Important : Les profils d'inférence personnalisés ne peuvent être créés que via l'API (AWS CLI, SDK, etc.) et ne peuvent pas être créés depuis la console AWS.

Étape 1 : Lister les profils d'inférence système disponibles

# List all inference profiles
aws bedrock list-inference-profiles --region us-east-1
 
# Filter for Claude models
aws bedrock list-inference-profiles --region us-east-1 \
  --query "inferenceProfileSummaries[?contains(inferenceProfileId, 'claude')]"

Étape 2 : Créer un profil d'inférence personnalisé

# Get the system inference profile ARN to copy from
export SOURCE_PROFILE_ARN=$(aws bedrock list-inference-profiles --region us-east-1 \
  --query "inferenceProfileSummaries[?inferenceProfileId=='us.anthropic.claude-3-7-sonnet-20250219-v1:0'].inferenceProfileArn" \
  --output text)
 
# Create your custom inference profile
aws bedrock create-inference-profile \
  --inference-profile-name "MyApp-Claude-3-7-Sonnet" \
  --description "Custom inference profile for my application" \
  --model-source copyFrom="$SOURCE_PROFILE_ARN" \
  --region us-east-1

Étape 3 : Vérifier la création

# List your custom profiles
aws bedrock list-inference-profiles --type-equals APPLICATION --region us-east-1
 
# Get details of a specific profile
aws bedrock get-inference-profile \
  --inference-profile-identifier "arn:aws:bedrock:us-east-1:123456789012:application-inference-profile/abc123" \
  --region us-east-1

Méthode 2 : Script Python

import boto3
 
AWS_REGION = 'us-east-1'
 
def create_inference_profile(profile_name: str, source_model_id: str):
    """
    Create a custom inference profile for LibreChat.
 
    Args:
        profile_name: Name for your custom profile
        source_model_id: The system inference profile ID to copy from
                        (e.g., 'us.anthropic.claude-3-7-sonnet-20250219-v1:0')
    """
    bedrock = boto3.client('bedrock', region_name=AWS_REGION)
 
    profiles = bedrock.list_inference_profiles()
    source_arn = None
    for profile in profiles['inferenceProfileSummaries']:
        if profile['inferenceProfileId'] == source_model_id:
            source_arn = profile['inferenceProfileArn']
            break
 
    if not source_arn:
        raise ValueError(f"Source profile {source_model_id} not found")
 
    response = bedrock.create_inference_profile(
        inferenceProfileName=profile_name,
        description=f'Custom inference profile for {profile_name}',
        modelSource={'copyFrom': source_arn},
        tags=[
            {'key': 'Application', 'value': 'LibreChat'},
            {'key': 'Environment', 'value': 'Production'}
        ]
    )
 
    print(f"Created profile: {response['inferenceProfileArn']}")
    return response['inferenceProfileArn']
 
if __name__ == "__main__":
    create_inference_profile(
        "LibreChat-Claude-3-7-Sonnet",
        "us.anthropic.claude-3-7-sonnet-20250219-v1:0"
    )
    create_inference_profile(
        "LibreChat-Claude-Sonnet-4-5",
        "us.anthropic.claude-sonnet-4-5-20250929-v1:0"
    )

Configuration de LibreChat

Configuration de librechat.yaml

Ajoutez la configuration de l'endpoint bedrock à votre librechat.yaml. Pour une référence complète des champs, consultez AWS Bedrock Object Structure.

endpoints:
  bedrock:
    # List the models you want available in the UI
    models:
      - 'us.anthropic.claude-3-7-sonnet-20250219-v1:0'
      - 'us.anthropic.claude-sonnet-4-5-20250929-v1:0'
      - 'global.anthropic.claude-opus-4-5-20251101-v1:0'
    # Map model IDs to their custom inference profile ARNs
    inferenceProfiles:
      # Using environment variable (recommended for security)
      'us.anthropic.claude-3-7-sonnet-20250219-v1:0': '${BEDROCK_CLAUDE_37_PROFILE}'
      # Using direct ARN
      'us.anthropic.claude-sonnet-4-5-20250929-v1:0': 'arn:aws:bedrock:us-east-1:123456789012:application-inference-profile/abc123'
      # Another env variable example
      'global.anthropic.claude-opus-4-5-20251101-v1:0': '${BEDROCK_OPUS_45_PROFILE}'
    # Optional: Configure available regions for cross-region inference
    availableRegions:
      - 'us-east-1'
      - 'us-west-2'

Variables d'environnement

Ajoutez votre région Bedrock, vos paramètres d'authentification AWS et vos ARN de profil d'inférence à votre fichier .env :

#===================================#
# AWS Bedrock Configuration         #
#===================================#
 
BEDROCK_AWS_DEFAULT_REGION=us-east-1
 
# Option 1: Use an AWS profile
BEDROCK_AWS_PROFILE=your-profile-name
 
# Option 2: Omit BEDROCK_AWS_PROFILE and Bedrock-specific static credentials
# to use the AWS SDK default credential provider chain.
 
# Option 3: Static Bedrock credentials, if profiles or IAM roles are not suitable
# BEDROCK_AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE
# BEDROCK_AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
# BEDROCK_AWS_SESSION_TOKEN=your-session-token
 
# Option 4: Bedrock API key (bearer auth)
# BEDROCK_AWS_BEARER_TOKEN=your-bedrock-api-key
 
# Inference Profile ARNs
BEDROCK_CLAUDE_37_PROFILE=arn:aws:bedrock:us-east-1:123456789012:application-inference-profile/abc123
BEDROCK_OPUS_45_PROFILE=arn:aws:bedrock:us-east-1:123456789012:application-inference-profile/def456

Configuration de la journalisation

Pour vérifier que vos profils d'inférence sont utilisés correctement, activez la journalisation des invocations de modèles AWS Bedrock.

1. Créer un groupe de journaux CloudWatch

aws logs create-log-group \
  --log-group-name /aws/bedrock/model-invocations \
  --region us-east-1

2. Créer un rôle IAM pour la journalisation de Bedrock

Créez le fichier de politique de confiance (bedrock-logging-trust.json) :

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "bedrock.amazonaws.com"
      },
      "Action": "sts:AssumeRole",
      "Condition": {
        "StringEquals": {
          "aws:SourceAccount": "YOUR_ACCOUNT_ID"
        },
        "ArnLike": {
          "aws:SourceArn": "arn:aws:bedrock:us-east-1:YOUR_ACCOUNT_ID:*"
        }
      }
    }
  ]
}

Créer le rôle :

aws iam create-role \
  --role-name BedrockLoggingRole \
  --assume-role-policy-document file://bedrock-logging-trust.json

Attacher les permissions CloudWatch Logs :

aws iam put-role-policy \
  --role-name BedrockLoggingRole \
  --policy-name BedrockLoggingPolicy \
  --policy-document '{
    "Version": "2012-10-17",
    "Statement": [
      {
        "Effect": "Allow",
        "Action": [
          "logs:CreateLogStream",
          "logs:PutLogEvents"
        ],
        "Resource": "arn:aws:logs:us-east-1:YOUR_ACCOUNT_ID:log-group:/aws/bedrock/model-invocations:*"
      }
    ]
  }'

Créer un bucket S3 pour les données volumineuses (requis) :

aws s3 mb s3://bedrock-logs-YOUR_ACCOUNT_ID --region us-east-1
 
aws iam put-role-policy \
  --role-name BedrockLoggingRole \
  --policy-name BedrockS3Policy \
  --policy-document '{
    "Version": "2012-10-17",
    "Statement": [
      {
        "Effect": "Allow",
        "Action": ["s3:PutObject"],
        "Resource": "arn:aws:s3:::bedrock-logs-YOUR_ACCOUNT_ID/*"
      }
    ]
  }'

3. Activer la journalisation des invocations de modèles

aws bedrock put-model-invocation-logging-configuration \
  --logging-config '{
    "cloudWatchConfig": {
      "logGroupName": "/aws/bedrock/model-invocations",
      "roleArn": "arn:aws:iam::YOUR_ACCOUNT_ID:role/BedrockLoggingRole",
      "largeDataDeliveryS3Config": {
        "bucketName": "bedrock-logs-YOUR_ACCOUNT_ID",
        "keyPrefix": "large-data"
      }
    },
    "textDataDeliveryEnabled": true,
    "imageDataDeliveryEnabled": true,
    "embeddingDataDeliveryEnabled": true
  }' \
  --region us-east-1

Vérifiez que la journalisation est activée :

aws bedrock get-model-invocation-logging-configuration --region us-east-1

Vérification de votre configuration

Voir les logs via CLI

Après avoir effectué une requête via LibreChat, vérifiez les logs :

# Tail logs in real-time
aws logs tail /aws/bedrock/model-invocations --follow --region us-east-1
 
# View recent logs
aws logs tail /aws/bedrock/model-invocations --since 5m --region us-east-1

À quoi faire attention

Dans la sortie des journaux, recherchez le champ modelId :

{
  "timestamp": "2026-01-16T16:56:15Z",
  "accountId": "123456789012",
  "region": "us-east-1",
  "requestId": "a8b9d8c9-87b3-41ea-8a02-e8bfdba7782f",
  "operation": "ConverseStream",
  "modelId": "arn:aws:bedrock:us-east-1:123456789012:application-inference-profile/abc123",
  "inferenceRegion": "us-west-2"
}

Indicateurs de succès :

  • modelId affiche votre ARN de profil d'inférence personnalisé (contient application-inference-profile)
  • inferenceRegion peut varier (indique que le routage inter-régional fonctionne)

Si le mappage ne fonctionne pas :

  • modelId affichera l'ID du modèle brut au lieu de l'ARN

Afficher les journaux via la console AWS

  1. Ouvrez CloudWatch dans la console AWS
  2. Accédez à Logs > Log groups
  3. Sélectionnez /aws/bedrock/model-invocations
  4. Cliquez sur le dernier flux de journaux
  5. Recherchez votre ID de profil d'inférence

Surveillance de l'utilisation

Métriques CloudWatch

Afficher les métriques Bedrock dans CloudWatch :

aws cloudwatch list-metrics --namespace AWS/Bedrock --region us-east-1

Console AWS

  1. Console Bedrock > Profils d'inférence > onglet Application
  2. Cliquez sur votre profil personnalisé
  3. Voir les métriques d'invocation et les statistiques d'utilisation

Dépannage

Problèmes courants

ProblèmeCauseSolution
Modèle non reconnuModèle manquant dans le tableau modelsAjoutez l'ID du modèle à models dans librechat.yaml
ARN non utiliséL'ID du modèle ne correspond pasAssurez-vous que l'ID du modèle dans inferenceProfiles correspond exactement à celui dans models
Variable d'environnement non résolueErreur de frappe ou non définieVérifiez le fichier .env et assurez-vous que le nom de la variable correspond à ${VAR_NAME}
Accès refuséPermissions IAM manquantesAjoutez les permissions bedrock:InvokeModel* pour l'ARN du profil d'inférence
Accès au modèle refuséAccord sur le modèle manquant ou en cours de propagationAcceptez l'accord sur le modèle Bedrock et attendez que la disponibilité se propage
Profil introuvableRégion incorrecteAssurez-vous de créer/utiliser des profils dans la même région

Propagation de l'accord d'accès aux modèles

La création d'un profil d'inférence d'application n'active pas automatiquement le modèle de base sous-jacent dans votre compte AWS. Si l'accès au modèle vient d'être activé, AWS peut également avoir besoin d'un court délai de propagation avant que les requêtes effectuées via le profil d'inférence ne réussissent.

Cela peut apparaître sous la forme d'une AccessDeniedException même lorsque le profil d'inférence existe et que votre rôle IAM dispose des autorisations bedrock:InvokeModel. L'erreur peut mentionner aws-marketplace:ViewSubscriptions, aws-marketplace:Subscribe, ou vous demander de réessayer après quelques minutes.

Vérifiez la disponibilité du modèle sous-jacent avant de déboguer le mappage de LibreChat :

aws bedrock get-foundation-model-availability \
  --region us-east-1 \
  --model-id us.anthropic.claude-sonnet-4-5-20250929-v1:0

Rechercher :

  • agreementAvailability.status défini sur AVAILABLE
  • authorizationStatus défini sur AUTHORIZED
  • entitlementAvailability défini sur AVAILABLE
  • regionAvailability défini sur AVAILABLE

Si l'accord est manquant, acceptez l'accord de modèle dans la console Bedrock ou avec un principal AWS capable de gérer les accords de modèle Bedrock et les abonnements Marketplace. Une fois que le statut passe à AVAILABLE, attendez quelques minutes et réessayez d'appeler le profil d'inférence de l'application.

Liste de vérification pour le débogage

  1. L'ID du modèle se trouve dans le tableau models
  2. L'ID du modèle dans inferenceProfiles correspond exactement (sensible à la casse)
  3. La variable d'environnement est définie (si vous utilisez la syntaxe ${VAR})
  4. Les identifiants AWS ont l'autorisation d'invoquer le profil d'inférence
  5. L'accord sur le modèle de base sous-jacent est AVAILABLE dans Bedrock
  6. LibreChat a été redémarré après des modifications de configuration

Vérifier le chargement de la configuration

Vérifiez que votre configuration est lue correctement en examinant les journaux du serveur au démarrage de LibreChat.

Exemple complet

librechat.yaml

version: 1.3.5
 
endpoints:
  bedrock:
    models:
      - 'us.anthropic.claude-3-7-sonnet-20250219-v1:0'
      - 'us.anthropic.claude-sonnet-4-5-20250929-v1:0'
      - 'global.anthropic.claude-opus-4-5-20251101-v1:0'
      - 'us.amazon.nova-pro-v1:0'
    inferenceProfiles:
      'us.anthropic.claude-3-7-sonnet-20250219-v1:0': '${BEDROCK_CLAUDE_37_PROFILE}'
      'us.anthropic.claude-sonnet-4-5-20250929-v1:0': '${BEDROCK_SONNET_45_PROFILE}'
      'global.anthropic.claude-opus-4-5-20251101-v1:0': '${BEDROCK_OPUS_45_PROFILE}'
    availableRegions:
      - 'us-east-1'
      - 'us-west-2'

.env

# AWS Bedrock
BEDROCK_AWS_DEFAULT_REGION=us-east-1
BEDROCK_AWS_PROFILE=your-profile-name
# Or use a Bedrock API key instead:
# BEDROCK_AWS_BEARER_TOKEN=your-bedrock-api-key
 
# Inference Profiles
BEDROCK_CLAUDE_37_PROFILE=arn:aws:bedrock:us-east-1:123456789012:application-inference-profile/abc123
BEDROCK_SONNET_45_PROFILE=arn:aws:bedrock:us-east-1:123456789012:application-inference-profile/def456
BEDROCK_OPUS_45_PROFILE=arn:aws:bedrock:us-east-1:123456789012:application-inference-profile/ghi789

Script de configuration rapide

#!/bin/bash
 
REGION="us-east-1"
ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text)
 
# Create inference profiles
for MODEL in "us.anthropic.claude-3-7-sonnet-20250219-v1:0" "us.anthropic.claude-sonnet-4-5-20250929-v1:0"; do
  PROFILE_NAME="LibreChat-${MODEL//[.:]/-}"
  SOURCE_ARN=$(aws bedrock list-inference-profiles --region $REGION \
    --query "inferenceProfileSummaries[?inferenceProfileId=='$MODEL'].inferenceProfileArn" \
    --output text)
  if [ -n "$SOURCE_ARN" ]; then
    echo "Creating profile for $MODEL..."
    aws bedrock create-inference-profile \
      --inference-profile-name "$PROFILE_NAME" \
      --model-source copyFrom="$SOURCE_ARN" \
      --region $REGION
  fi
done
 
# List created profiles
echo ""
echo "Your custom inference profiles:"
aws bedrock list-inference-profiles --type-equals APPLICATION --region $REGION \
  --query "inferenceProfileSummaries[].{Name:inferenceProfileName,ARN:inferenceProfileArn}" \
  --output table

Que pensez-vous de ce guide ?