BEDROCK), com schema de request/response auto-detectado por família de modelo:
- Anthropic Claude —
anthropic.*e inference profiles (global./us./eu./apac.anthropic.*) - OpenAI GPT-OSS —
openai.gpt-oss-*(open-weights da OpenAI no Bedrock)
Por que AWS Bedrock?
Sem API key Anthropic
Usa credenciais AWS existentes (IAM role,
~/.aws/credentials, AWS_PROFILE).Billing e compliance AWS
Custos aparecem na sua conta AWS. Logs via CloudTrail, guardrails nativos do Bedrock.
Claude + GPT-OSS
Claude 3/3.5/3.7/4/4.5/4.6 (via inference profiles) e GPT-OSS 20B/120B da OpenAI.
VPC endpoints
Funciona em ambientes privados com
AWS_ENDPOINT_URL_BEDROCK_RUNTIME.Configuração
O provedor é detectado automaticamente quando o ChatCLI encontra credenciais AWS válidas (não apenas a existência de arquivos):- Credenciais estáticas em env:
AWS_ACCESS_KEY_ID - Profile selecionado:
AWS_PROFILE(via env var ou.envfile) - Arquivo
~/.aws/credentialscom ao menos umaws_access_key_idpreenchido - AWS SSO: perfil SSO em
~/.aws/config(detectasso_session,sso_start_url,sso_account_id) - Assume-role / credential_process: perfis com
role_arnoucredential_processem~/.aws/config - Token cache SSO: presença de arquivos em
~/.aws/sso/cache/(indicandoaws sso loginanterior) - Web Identity Token (EKS IRSA):
AWS_WEB_IDENTITY_TOKEN_FILE - Container Credentials (ECS):
AWS_CONTAINER_CREDENTIALS_RELATIVE_URI/_FULL_URI
Opção 1: ~/.aws/credentials (credenciais estáticas)
Se você já usa AWS CLI, basta ter um profile configurado:
Opção 2: AWS SSO (IAM Identity Center)
Se sua empresa usa AWS SSO, configure o profile no~/.aws/config:
O ChatCLI detecta automaticamente profiles SSO em
~/.aws/config (pelas chaves sso_session, sso_start_url, sso_account_id). Se o token SSO expirar, o erro será claro (SSOTokenProviderError) — basta executar aws sso login novamente.Importante: o AWS SDK não sabe qual profile está “logado”. Você precisa indicar o profile via AWS_PROFILE (env, .env, ou flag). Se seu profile SSO se chama default, ele é usado automaticamente sem AWS_PROFILE.Opção 3: Environment variables (credenciais estáticas)
Opção 4: IAM Role (EC2/ECS/EKS)
Em ambientes AWS nativos, não precisa configurar nada — o SDK pega a role automaticamente pelo IMDSv2 / webidentity. Só precisa garantir que a role tem as permissões IAM abaixo.O ChatCLI desabilita o probe IMDS (169.254.169.254) por padrão em máquinas que não são EC2/ECS/EKS, para evitar timeouts desnecessários. O IMDS é habilitado automaticamente quando env vars de container/EKS são detectadas (
AWS_CONTAINER_CREDENTIALS_*, AWS_WEB_IDENTITY_TOKEN_FILE, ECS_CONTAINER_METADATA_URI*).Para forçar o comportamento, use:AWS_EC2_METADATA_DISABLED=true— desabilita IMDS explicitamenteCHATCLI_BEDROCK_ENABLE_IMDS=1— força habilitar IMDS (útil em EC2 sem as env vars padrão)
Permissões IAM
Permissões mínimas para invocar e listar modelos:Bedrock Console → Model access → Request access.
Famílias de modelos e seleção de schema
O Bedrock usa payloads diferentes para cada família de modelo. O ChatCLI detecta automaticamente qual schema usar pelo prefixo do model id:| Prefixo do model id | Família | Schema |
|---|---|---|
anthropic.*, global.anthropic.*, us.anthropic.*, eu.anthropic.*, apac.anthropic.* | Anthropic Claude | Anthropic Messages (anthropic_version, messages, system) |
openai.*, us.openai.*, … | OpenAI GPT-OSS | OpenAI Chat Completions (messages, max_completion_tokens) |
| Outros | Não suportado nesta versão | — |
Override manual
Se o model id não começar com um prefixo conhecido (ex.: custom imports), force o schema via env var:anthropic, claude, openai, gpt (case-insensitive). A env var tem precedência sobre a detecção por prefixo.
O ChatCLI só lista e invoca modelos das famílias suportadas (
anthropic e openai). Modelos Meta Llama, Amazon Nova, Mistral e Cohere que apareçam no ListFoundationModels são filtrados automaticamente — suporte a eles pode ser adicionado no futuro.Inference Profiles vs. Model IDs
Esse é o detalhe mais importante do Bedrock com Claude. Modelos Anthropic modernos (3.7, 4.x, 4.5, 4.6) NÃO aceitam invocação on-demand direto pelo ID base. Se você tentar, recebe:| Prefixo | Significado |
|---|---|
global.* | Global — tier mais novo, disponibilidade mundial (recomendado) |
us.* | Cross-region EUA (us-east-1, us-east-2, us-west-2) |
eu.* | Cross-region Europa |
apac.* | Cross-region Ásia-Pacífico |
O ChatCLI já usa um inference profile global como modelo padrão (
global.anthropic.claude-sonnet-4-5-20250929-v1:0). Os modelos Claude 3 e 3.5 ainda aceitam invocação direta pelo ID base e também estão no catálogo.Listagem de Modelos
O/switch --model consulta duas fontes ao vivo e as mescla com o catálogo estático:
bedrock:ListFoundationModels— modelos base (on-demand capable)bedrock:ListInferenceProfiles— profiles regionais/global (paginado)
[api] são os que sua conta realmente pode invocar naquela região. Os [catalog] são registros estáticos que podem ou não estar habilitados.
Proxy Corporativo e TLS Privado
Em ambientes corporativos com proxy interceptando TLS com uma CA privada, você pode ver:| Variável | Descrição |
|---|---|
CHATCLI_BEDROCK_CA_BUNDLE | Caminho para um bundle PEM com a CA corporativa. Mescla no pool do sistema e usa como RootCAs. Tem precedência sobre AWS_CA_BUNDLE. |
CHATCLI_BEDROCK_INSECURE_SKIP_VERIFY | true desabilita verificação TLS por completo (equivalente ao NODE_TLS_REJECT_UNAUTHORIZED=0 do Node). Inseguro — use só pra confirmar que é problema de TLS. |
VPC Endpoints / endpoints privados
Se a empresa usa VPC endpoint para Bedrock:Variáveis de Ambiente
| Variável | Descrição | Padrão |
|---|---|---|
BEDROCK_PROVIDER | Override manual do schema: anthropic (default) ou openai | auto-detect |
BEDROCK_TEMPERATURE | Temperature usada nos modelos OpenAI | — |
BEDROCK_REGION | Região AWS (prioridade sobre AWS_REGION) | — |
AWS_REGION | Região AWS (fallback) | — |
AWS_PROFILE | Profile em ~/.aws/credentials ou ~/.aws/config (SSO, assume-role). Pode ser definido no .env. | — |
AWS_ACCESS_KEY_ID / AWS_SECRET_ACCESS_KEY / AWS_SESSION_TOKEN | Credenciais estáticas | — |
AWS_CA_BUNDLE | Bundle PEM lido nativamente pelo SDK v2 | — |
AWS_ENDPOINT_URL_BEDROCK_RUNTIME | Override de endpoint do Bedrock Runtime | — |
AWS_ENDPOINT_URL_BEDROCK | Override de endpoint do Bedrock (control plane) | — |
AWS_EC2_METADATA_DISABLED | true desabilita IMDS (169.254.169.254) explicitamente | — |
CHATCLI_BEDROCK_ENABLE_IMDS | 1/true força habilitar o probe IMDS em máquinas não-EC2 | false |
BEDROCK_MAX_TOKENS | Limite de tokens de saída | Do catálogo |
ANTHROPIC_MAX_TOKENS | Alternativa compartilhada com o provedor Anthropic direto | — |
CHATCLI_BEDROCK_CA_BUNDLE | Bundle PEM específico do Bedrock (precede AWS_CA_BUNDLE) | — |
CHATCLI_BEDROCK_INSECURE_SKIP_VERIFY | true desabilita verificação TLS (inseguro) | false |
HTTPS_PROXY / HTTP_PROXY / NO_PROXY | Proxy HTTP padrão Go/SDK | — |
global.anthropic.claude-sonnet-4-5-20250929-v1:0
Default region: us-east-1
Arquitetura
O ChatCLI usabedrockruntime.InvokeModel com body no schema Anthropic Messages (anthropic_version: "bedrock-2023-05-31"). A autenticação é SigV4, feita transparentemente pelo SDK. O HTTP client pode ser sobrescrito pelo ChatCLI quando CHATCLI_BEDROCK_CA_BUNDLE ou CHATCLI_BEDROCK_INSECURE_SKIP_VERIFY estão definidos (via awshttp.BuildableClient).
Diferença entre Bedrock e Anthropic Direto
| Aspecto | BEDROCK | CLAUDEAI (Anthropic direto) |
|---|---|---|
| Auth | AWS credentials chain (IAM, profile) | API key (sk-ant-...) ou OAuth |
| Endpoint | bedrock-runtime.<region>.amazonaws.com | api.anthropic.com |
| Billing | Conta AWS (console Billing + CloudTrail) | Conta Anthropic (console.anthropic.com) |
| Modelos | Claude 3, 3.5, 3.7, 4, 4.1, 4.5, 4.6 (via profiles) | Todos Claude, com as versões mais recentes primeiro |
| Streaming | Não implementado nesta versão (usa InvokeModel) | Suportado |
| OAuth/1M context | N/A | Suportado (ANTHROPIC_1MTOKENS_SONNET) |
| VPC privado | Sim (via AWS_ENDPOINT_URL_*) | Não |
| Compliance | Inherits from AWS (SOC2, HIPAA, etc.) | Inherits from Anthropic |
Troubleshooting
on-demand throughput isn't supported
on-demand throughput isn't supported
Você está invocando um modelo moderno (3.7+, 4.x+, 4.5+, 4.6) pelo ID base. Use o inference profile: adicione prefixo
global., us., eu. ou apac..AccessDeniedException: You don't have access to the model
AccessDeniedException: You don't have access to the model
Vá no console Bedrock da região e habilite Model Access pro modelo Anthropic. Demora alguns minutos. Também cheque se a role IAM tem
bedrock:InvokeModel no ARN do modelo + do inference profile.NoCredentialProviders / unable to load SDK config
NoCredentialProviders / unable to load SDK config
O SDK não achou credenciais. Verifique:Se nenhum retornar credenciais, configure via
aws configure, aws sso login, ou exporte as env vars.no EC2 IMDS role found / dial tcp 169.254.169.254:80: connect: host is down
no EC2 IMDS role found / dial tcp 169.254.169.254:80: connect: host is down
Este erro ocorre quando o AWS SDK tenta alcançar o EC2 Instance Metadata Service (IMDS) em uma máquina que não é EC2 (ex.: seu laptop). O ChatCLI desabilita o probe IMDS por padrão em máquinas não-EC2, mas se o erro persistir:Se você realmente está em EC2 e precisa do IMDS:
SSOTokenProviderError / expired token (SSO)
SSOTokenProviderError / expired token (SSO)
O token do SSO expirou (validade padrão ~8h). Faça login novamente:Lembre-se de ter
AWS_PROFILE definido (env, .env, ou o profile se chamar default).x509: certificate signed by unknown authority
x509: certificate signed by unknown authority
ThrottlingException / ServiceQuotaExceededException
ThrottlingException / ServiceQuotaExceededException
Você atingiu o quota on-demand da região. Opções:
- Use um inference profile
global.*(roteia pra qualquer região disponível) - Use Provisioned Throughput (precisa ser configurado no console Bedrock)
- Aumente os limites via Service Quotas na AWS
Próximos Passos
Provider Fallback
Configure failover automático entre Bedrock e outros provedores
OAuth Authentication
Alternativas de autenticação para outros provedores
Modelos Suportados
Lista completa de modelos Claude por provedor
Variáveis de Ambiente
Referência completa de configuração