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

Profili di inferenza Bedrock

Configura e utilizza i profili di inferenza personalizzati di AWS Bedrock con LibreChat per il bilanciamento del carico tra regioni, l'allocazione dei costi e i controlli di conformità.

Questa guida spiega come configurare e utilizzare i profili di inferenza personalizzati di AWS Bedrock con LibreChat, consentendoti di instradare le richieste dei modelli attraverso profili di inferenza applicativi personalizzati per un controllo migliore, l'allocazione dei costi e il bilanciamento del carico tra diverse regioni.

Panoramica

I profili di inferenza AWS Bedrock consentono di creare configurazioni di routing personalizzate per i modelli di base (foundation models). Quando si crea un profilo di inferenza personalizzato (applicazione), AWS genera un ARN univoco che non contiene informazioni sul nome del modello:

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

La funzionalità di mappatura del profilo di inferenza di LibreChat ti consente di:

  1. Mappa gli ID modello descrittivi agli ARN dei profili di inferenza personalizzati
  2. Instrada le richieste attraverso i tuoi profili personalizzati mantenendo il rilevamento delle funzionalità del modello
  3. Utilizza le variabili d'ambiente per una gestione sicura degli ARN

Perché utilizzare i Custom Inference Profiles?

VantaggioDescrizione
Bilanciamento del carico cross-regionDistribuisci automaticamente le richieste tra più regioni AWS
Allocazione dei costiEtichetta e traccia i costi per applicazione o team
Gestione del throughputConfigura un throughput dedicato per le tue applicazioni
ConformitàInstrada le richieste attraverso regioni specifiche per la residenza dei dati
MonitoraggioTraccia l'utilizzo per profilo di inferenza in CloudWatch

Prerequisiti

Prima di iniziare, assicurati di avere:

  1. Account AWS con accesso a Bedrock abilitato
  2. AWS CLI installato e configurato
  3. Autorizzazioni IAM:
    • bedrock:CreateInferenceProfile
    • bedrock:ListInferenceProfiles
    • bedrock:GetInferenceProfile
    • bedrock:InvokeModel / bedrock:InvokeModelWithResponseStream
  4. LibreChat con endpoint Bedrock configurato (vedi Configurazione AWS Bedrock)

Creazione di profili di inferenza personalizzati

Importante: I profili di inferenza personalizzati possono essere creati solo tramite API (AWS CLI, SDK, ecc.) e non possono essere creati dalla Console AWS.

Passaggio 1: Elenca i profili di inferenza di sistema disponibili

# 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')]"

Passaggio 2: Creare un Custom Inference Profile

# 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

Passaggio 3: Verifica la creazione

# 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

Metodo 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"
    )

Configurazione di LibreChat

Configurazione di librechat.yaml

Aggiungi la configurazione dell'endpoint bedrock al tuo librechat.yaml. Per il riferimento completo dei campi, consulta 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'

Variabili d'ambiente

Aggiungi la tua region Bedrock, le impostazioni di autenticazione AWS e gli ARN dei profili di inferenza al tuo file .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

Configurazione del Logging

Per verificare che i tuoi profili di inferenza vengano utilizzati correttamente, abilita la registrazione delle invocazioni dei modelli AWS Bedrock.

1. Creare un gruppo di log CloudWatch

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

2. Crea un ruolo IAM per il logging di Bedrock

Crea il file della policy di attendibilità (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:*"
        }
      }
    }
  ]
}

Crea il ruolo:

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

Allega le autorizzazioni per 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:*"
      }
    ]
  }'

Crea un bucket S3 per dati di grandi dimensioni (richiesto):

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. Abilitare il logging dell'invocazione dei modelli

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

Verifica che la registrazione (logging) sia abilitata:

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

Verifica della configurazione

Visualizza i log tramite CLI

Dopo aver effettuato una richiesta tramite LibreChat, controlla i log:

# 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

Cosa cercare

Nell'output del log, cerca il campo 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"
}

Indicatori di successo:

  • modelId mostra il tuo ARN del profilo di inferenza personalizzato (contiene application-inference-profile)
  • inferenceRegion può variare (indica che il routing tra regioni sta funzionando)

Se il mapping non funziona:

  • modelId mostrerà l'ID del modello grezzo invece dell'ARN

Visualizza i log tramite la console AWS

  1. Apri CloudWatch nella Console AWS
  2. Vai su Logs > Log groups
  3. Seleziona /aws/bedrock/model-invocations
  4. Fai clic sul flusso di log più recente
  5. Cerca il tuo ID profilo di inferenza

Monitoraggio dell'utilizzo

Metriche CloudWatch

Visualizza le metriche di Bedrock in CloudWatch:

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

Console AWS

  1. Console Bedrock > Profili di inferenza > scheda Applicazione
  2. Fai clic sul tuo profilo personalizzato
  3. Visualizza le metriche di invocazione e le statistiche di utilizzo

Risoluzione dei problemi

Problemi comuni

ProblemaCausaSoluzione
Modello non riconosciutoModello mancante nell'array modelsAggiungi l'ID del modello a models in librechat.yaml
ARN non utilizzatoL'ID del modello non corrispondeAssicurati che l'ID del modello in inferenceProfiles corrisponda esattamente a quello in models
Variabile d'ambiente non risoltaErrore di battitura o non impostataControlla il file .env e assicurati che il nome della variabile corrisponda a ${VAR_NAME}
Accesso negatoPermessi IAM mancantiAggiungi i permessi bedrock:InvokeModel* per l'ARN del profilo di inferenza
Accesso al modello negatoAccordo sul modello mancante o in fase di propagazioneAccetta l'accordo sul modello Bedrock e attendi che la disponibilità si propaghi
Profilo non trovatoRegione errataAssicurati di creare/utilizzare i profili nella stessa regione

Propagazione dell'Accordo di Accesso al Modello

La creazione di un profilo di inferenza dell'applicazione non abilita automaticamente il modello di base sottostante nel tuo account AWS. Se l'accesso al modello è stato appena abilitato, AWS potrebbe richiedere anche un breve intervallo di propagazione prima che le richieste tramite il profilo di inferenza abbiano successo.

Ciò può apparire come una AccessDeniedException anche quando il profilo di inferenza esiste e il tuo ruolo IAM dispone delle autorizzazioni bedrock:InvokeModel. L'errore potrebbe menzionare aws-marketplace:ViewSubscriptions, aws-marketplace:Subscribe o chiederti di riprovare dopo alcuni minuti.

Controlla la disponibilità del modello sottostante prima di eseguire il debug del mapping di LibreChat:

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

Cerca:

  • agreementAvailability.status impostato su AVAILABLE
  • authorizationStatus impostato su AUTHORIZED
  • entitlementAvailability impostato su AVAILABLE
  • regionAvailability impostato su AVAILABLE

Se l'accordo manca, accetta l'accordo sul modello nella console Bedrock o con un principal AWS in grado di gestire gli accordi sui modelli Bedrock e gli abbonamenti al Marketplace. Dopo che lo stato è cambiato in AVAILABLE, attendi un paio di minuti e riprova a richiamare il profilo di inferenza dell'applicazione.

Checklist di Debug

  1. L'ID del modello si trova nell'array models
  2. L'ID del modello in inferenceProfiles corrisponde esattamente (distingue tra maiuscole e minuscole)
  3. La variabile d'ambiente è impostata (se si utilizza la sintassi ${VAR})
  4. Le credenziali AWS dispongono dell'autorizzazione per invocare il profilo di inferenza
  5. L'accordo sul modello di base sottostante è AVAILABLE in Bedrock
  6. LibreChat è stato riavviato dopo le modifiche alla configurazione

Verifica il caricamento della configurazione

Verifica che la tua configurazione venga letta correttamente esaminando i log del server all'avvio di LibreChat.

Esempio completo

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 di configurazione rapida

#!/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

Com’è questa guida?