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/abc123def456Funkcja mapowania profili wnioskowania (inference profile mapping) w LibreChat pozwala na:
- Mapuj przyjazne identyfikatory modeli na niestandardowe ARN profili wnioskowania
- Kieruj żądania przez własne profile, zachowując jednocześnie wykrywanie możliwości modelu
- 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 regionami | Automatyczne rozdzielanie żądań między wieloma regionami AWS |
| Alokacja kosztów | Oznaczanie 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:
- Konto AWS z włączonym dostępem do Bedrock
- AWS CLI zainstalowane i skonfigurowane
- Uprawnienia IAM:
bedrock:CreateInferenceProfilebedrock:ListInferenceProfilesbedrock:GetInferenceProfilebedrock:InvokeModel/bedrock:InvokeModelWithResponseStream
- 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.
Metoda 1: AWS CLI (Zalecane)
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-1Krok 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-1Metoda 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/def456Konfigurowanie 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-12. 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.jsonDołą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-1Sprawdź, czy logowanie jest włączone:
aws bedrock get-model-invocation-logging-configuration --region us-east-1Weryfikacja 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-1Na 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:
modelIdpokazuje twój niestandardowy ARN profilu wnioskowania (zawieraapplication-inference-profile)inferenceRegionmoże się różnić (pokazuje, że routing między regionami działa)
Jeśli mapowanie nie działa:
modelIdwyświetli surowy identyfikator modelu zamiast ARN
Wyświetlanie logów przez konsolę AWS
- Otwórz CloudWatch w konsoli AWS
- Przejdź do Logs > Log groups
- Wybierz
/aws/bedrock/model-invocations - Kliknij najnowszy strumień logów
- 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-1Konsola AWS
- Konsola Bedrock > Profile wnioskowania > karta Aplikacja
- Kliknij swój profil niestandardowy
- Wyświetl metryki wywołań i statystyki użycia
Rozwiązywanie problemów
Typowe problemy
| Problem | Przyczyna | Rozwiązanie |
|---|---|---|
| Model nie został rozpoznany | Brak modelu w tablicy models | Dodaj identyfikator modelu do models w pliku librechat.yaml |
| ARN nie jest używany | Identyfikator modelu nie pasuje | Upewnij się, że identyfikator modelu w inferenceProfiles dokładnie odpowiada temu w models |
| Zmienna środowiskowa nie została rozwiązana | Literówka lub brak ustawienia | Sprawdź plik .env i upewnij się, że nazwa zmiennej pasuje do ${VAR_NAME} |
| Odmowa dostępu | Brak uprawnień IAM | Dodaj uprawnienia bedrock:InvokeModel* dla ARN profilu wnioskowania |
| Odmowa dostępu do modelu | Brak zgody na model lub propagacja | Zaakceptuj umowę modelu Bedrock i poczekaj na propagację dostępności |
| Profil nie został znaleziony | Błędny region | Upewnij 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:0Szukaj:
agreementAvailability.statusustawione naAVAILABLEauthorizationStatusustawione naAUTHORIZEDentitlementAvailabilityustawione naAVAILABLEregionAvailabilityustawione naAVAILABLE
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
- Model ID znajduje się w tablicy
models - Identyfikator modelu w
inferenceProfilesjest dokładnie zgodny (z uwzględnieniem wielkości liter) - Zmienna środowiskowa jest ustawiona (jeśli używasz składni
${VAR}) - Poświadczenia AWS mają uprawnienia do wywoływania profilu wnioskowania (inference profile)
- Podstawowa umowa dotycząca modelu bazowego jest
AVAILABLEw Bedrock - 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/ghi789Skrypt 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 tablePowiązane zasoby
- Dokumentacja AWS Bedrock Inference Profiles
- Dokumentacja dostępu do modeli AWS Bedrock
- Struktura obiektu AWS Bedrock - odniesienie do pól konfiguracji YAML
- Konfiguracja AWS Bedrock - Podstawowa konfiguracja Bedrock
- AWS Bedrock Model Invocation Logging
Jaka jest ta instrukcja?