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

Profile wnioskowania Bedrock

Skonfiguruj i używaj niestandardowych profili wnioskowania AWS Bedrock z LibreChat w celu równoważenia obciążenia między regionami, alokacji kosztów oraz kontroli zgodności.

Ten przewodnik wyjaśnia, jak skonfigurować i używać niestandardowych profili wnioskowania (custom inference profiles) AWS Bedrock w LibreChat, co pozwala na kierowanie żądań do modeli poprzez niestandardowe profile wnioskowania aplikacji w celu uzyskania lepszej kontroli, alokacji kosztów oraz równoważenia obciążenia między regionami.

Przegląd

Profile wnioskowania AWS Bedrock pozwalają na tworzenie niestandardowych konfiguracji routingu dla modeli podstawowych (foundation models). Podczas tworzenia niestandardowego (aplikacyjnego) profilu wnioskowania, AWS generuje unikalny ARN, który nie zawiera informacji o nazwie modelu:

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

Funkcja mapowania profili wnioskowania (inference profile mapping) w LibreChat pozwala na:

  1. Mapuj przyjazne identyfikatory modeli na niestandardowe ARN profili wnioskowania
  2. Kieruj żądania przez własne profile, zachowując jednocześnie wykrywanie możliwości modelu
  3. Używaj zmiennych środowiskowych do bezpiecznego zarządzania ARN

Dlaczego warto używać niestandardowych profili wnioskowania (Custom Inference Profiles)?

KorzyśćOpis
Równoważenie obciążenia między regionamiAutomatyczne rozdzielanie żądań między wieloma regionami AWS
Alokacja kosztówOznaczanie i śledzenie kosztów według aplikacji lub zespołu
Zarządzanie przepustowościąKonfiguracja dedykowanej przepustowości dla Twoich aplikacji
ZgodnośćKierowanie żądań przez określone regiony w celu zapewnienia rezydencji danych
MonitorowanieŚledzenie użycia według profilu wnioskowania (inference profile) w CloudWatch

Wymagania wstępne

Zanim zaczniesz, upewnij się, że masz:

  1. Konto AWS z włączonym dostępem do Bedrock
  2. AWS CLI zainstalowane i skonfigurowane
  3. Uprawnienia IAM:
    • bedrock:CreateInferenceProfile
    • bedrock:ListInferenceProfiles
    • bedrock:GetInferenceProfile
    • bedrock:InvokeModel / bedrock:InvokeModelWithResponseStream
  4. LibreChat ze skonfigurowanym endpointem Bedrock (zobacz Konfiguracja AWS Bedrock)

Tworzenie niestandardowych profili wnioskowania (Inference Profiles)

Ważne: Niestandardowe profile wnioskowania (custom inference profiles) można tworzyć wyłącznie za pomocą API (AWS CLI, SDK itp.) i nie można ich tworzyć z poziomu konsoli AWS.

Krok 1: Wyświetl listę dostępnych profili wnioskowania systemowego (System Inference Profiles)

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

Krok 2: Utwórz niestandardowy profil wnioskowania (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

Krok 3: Weryfikacja utworzenia

# 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

Metoda 2: Skrypt 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"
    )

Konfigurowanie LibreChat

Konfiguracja librechat.yaml

Dodaj konfigurację endpointu bedrock do swojego librechat.yaml. Pełny opis pól znajduje się w Struktura obiektu AWS Bedrock.

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'

Zmienne środowiskowe

Dodaj swój region Bedrock, ustawienia uwierzytelniania AWS oraz ARN profili wnioskowania (inference profile ARNs) do swojego pliku .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

Konfigurowanie logowania

Aby zweryfikować, czy Twoje profile wnioskowania (inference profiles) są używane poprawnie, włącz logowanie wywołań modeli AWS Bedrock.

1. Utwórz grupę logów CloudWatch

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

2. Utwórz rolę IAM dla logowania Bedrock

Utwórz plik polityki zaufania (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:*"
        }
      }
    }
  ]
}

Utwórz rolę:

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

Dołącz uprawnienia 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:*"
      }
    ]
  }'

Utwórz zasobnik S3 dla dużych danych (wymagane):

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. Włącz logowanie wywołań modelu (Model Invocation Logging)

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

Sprawdź, czy logowanie jest włączone:

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

Weryfikacja konfiguracji

Wyświetlanie logów przez CLI

Po wysłaniu żądania przez LibreChat, sprawdź logi:

# 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

Na co zwrócić uwagę

W danych wyjściowych dziennika poszukaj pola 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"
}

Wskaźniki sukcesu:

  • modelId pokazuje twój niestandardowy ARN profilu wnioskowania (zawiera application-inference-profile)
  • inferenceRegion może się różnić (pokazuje, że routing między regionami działa)

Jeśli mapowanie nie działa:

  • modelId wyświetli surowy identyfikator modelu zamiast ARN

Wyświetlanie logów przez konsolę AWS

  1. Otwórz CloudWatch w konsoli AWS
  2. Przejdź do Logs > Log groups
  3. Wybierz /aws/bedrock/model-invocations
  4. Kliknij najnowszy strumień logów
  5. Wyszukaj swój identyfikator profilu wnioskowania (inference profile ID)

Monitorowanie użycia

Metryki CloudWatch

Wyświetl metryki Bedrock w CloudWatch:

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

Konsola AWS

  1. Konsola Bedrock > Profile wnioskowania > karta Aplikacja
  2. Kliknij swój profil niestandardowy
  3. Wyświetl metryki wywołań i statystyki użycia

Rozwiązywanie problemów

Typowe problemy

ProblemPrzyczynaRozwiązanie
Model nie został rozpoznanyBrak modelu w tablicy modelsDodaj identyfikator modelu do models w pliku librechat.yaml
ARN nie jest używanyIdentyfikator modelu nie pasujeUpewnij się, że identyfikator modelu w inferenceProfiles dokładnie odpowiada temu w models
Zmienna środowiskowa nie została rozwiązanaLiterówka lub brak ustawieniaSprawdź plik .env i upewnij się, że nazwa zmiennej pasuje do ${VAR_NAME}
Odmowa dostępuBrak uprawnień IAMDodaj uprawnienia bedrock:InvokeModel* dla ARN profilu wnioskowania
Odmowa dostępu do modeluBrak zgody na model lub propagacjaZaakceptuj umowę modelu Bedrock i poczekaj na propagację dostępności
Profil nie został znalezionyBłędny regionUpewnij się, że tworzysz/używasz profili w tym samym regionie

Propagacja umowy o dostępie do modelu

Utworzenie profilu wnioskowania aplikacji nie włącza automatycznie podstawowego modelu bazowego na Twoim koncie AWS. Jeśli dostęp do modelu został właśnie włączony, AWS może również potrzebować krótkiego czasu na propagację, zanim żądania przesyłane przez profil wnioskowania zakończą się powodzeniem.

Może to wystąpić jako AccessDeniedException, nawet jeśli profil wnioskowania istnieje, a Twoja rola IAM posiada uprawnienia bedrock:InvokeModel. Błąd może wspominać o aws-marketplace:ViewSubscriptions, aws-marketplace:Subscribe lub prosić o ponowienie próby po kilku minutach.

Sprawdź dostępność modelu bazowego przed debugowaniem mapowania w LibreChat:

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

Szukaj:

  • agreementAvailability.status ustawione na AVAILABLE
  • authorizationStatus ustawione na AUTHORIZED
  • entitlementAvailability ustawione na AVAILABLE
  • regionAvailability ustawione na AVAILABLE

Jeśli brakuje umowy, zaakceptuj umowę dotyczącą modelu w konsoli Bedrock lub za pomocą głównego użytkownika AWS (AWS principal), który może zarządzać umowami dotyczącymi modeli Bedrock oraz subskrypcjami Marketplace. Gdy jej status zmieni się na AVAILABLE, odczekaj kilka minut i spróbuj ponownie wywołać profil wnioskowania aplikacji.

Lista kontrolna debugowania

  1. Model ID znajduje się w tablicy models
  2. Identyfikator modelu w inferenceProfiles jest dokładnie zgodny (z uwzględnieniem wielkości liter)
  3. Zmienna środowiskowa jest ustawiona (jeśli używasz składni ${VAR})
  4. Poświadczenia AWS mają uprawnienia do wywoływania profilu wnioskowania (inference profile)
  5. Podstawowa umowa dotycząca modelu bazowego jest AVAILABLE w Bedrock
  6. LibreChat został zrestartowany po wprowadzeniu zmian w konfiguracji

Weryfikacja ładowania konfiguracji

Sprawdź, czy Twoja konfiguracja jest poprawnie odczytywana, analizując logi serwera podczas uruchamiania LibreChat.

Kompletny przykład

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

Skrypt szybkiej konfiguracji

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

Jaka jest ta instrukcja?