Amazon Bedrock: fundamentos, sistemas e escalabilidade

🇺🇸 Read in English
Índice

Este artigo assume familiaridade com Transformers, inferência probabilística e otimização. O foco é a camada de serviço do Amazon Bedrock e como seus componentes se conectam a uma stack moderna de IA generativa.

1) O que o Amazon Bedrock é no nível de sistema

Amazon Bedrock é um plano de controle/dados para inferência de modelos fundacionais (FM). Em termos simplificados:

  • Plano de controle: seleção de modelo, controle de acesso, versionamento, métricas e políticas.
  • Plano de dados: execução de inferência com isolamento, governança e integração com serviços AWS.

Formalmente, a inferência pode ser vista como um operador:

Iθ:(x,h)y\mathcal{I}_{\theta}: (x, h) \mapsto y

onde xx é o prompt, hh são hiperparâmetros de geração (temperatura, top-pp, top-kk, etc.) e yy é a sequência gerada amostrada de um modelo parametrizado por θ\theta.

2) Fundamentos matemáticos da geração

2.1 Cadeia de Markov autorregressiva

Geração de texto é um processo autorregressivo:

P(y1:Tx)=t=1TP(ytx,y<t).P(y_{1:T} \mid x) = \prod_{t=1}^{T} P(y_t \mid x, y_{<t}).

A inferência é um problema de amostragem sobre P(ytx,y<t)P(y_t \mid x, y_{<t}). O Bedrock expõe essa dinâmica via parâmetros de amostragem.

2.2 Temperatura, top-kk e top-pp

Se i\ell_i são os logits do modelo para o próximo token, então:

P(i)=exp(i/τ)jexp(j/τ)P(i) = \frac{\exp(\ell_i / \tau)}{\sum_j \exp(\ell_j / \tau)}
  • Temperatura τ\tau controla a entropia. Quando τ0\tau \to 0, a distribuição colapsa para o argmax.
  • Top-kk restringe o suporte aos kk tokens mais prováveis.
  • Top-pp (amostragem de núcleo) escolhe o menor conjunto SS tal que iSP(i)p\sum_{i \in S} P(i) \ge p.

Matematicamente, top-pp produz uma distribuição truncada e renormalizada:

Pp(i)=P(i)1[iS]jSP(j).P_p(i) = \frac{P(i) \cdot \mathbf{1}[i \in S]}{\sum_{j \in S} P(j)}.

2.3 Perplexidade e entropia cruzada

A qualidade de modelos de linguagem é comumente analisada via entropia cruzada:

L=1Tt=1TlogP(ytx,y<t).\mathcal{L} = -\frac{1}{T} \sum_{t=1}^{T} \log P(y_t \mid x, y_{<t}).

A perplexidade é:

PPL=exp(L).\mathrm{PPL} = \exp(\mathcal{L}).

Na avaliação, reduzir L\mathcal{L} implica maior previsibilidade e menor incerteza na geração.

3) Atenção: o núcleo do Transformer

Para um bloco de atenção multi-cabeça:

Attention(Q,K,V)=softmax(QKdk)V.\mathrm{Attention}(Q,K,V)=\mathrm{softmax}\left(\frac{QK^\top}{\sqrt{d_k}}\right)V.

Para hh cabeças:

MHA(X)=Concat(head1,,headh)WO,\mathrm{MHA}(X)=\mathrm{Concat}(\text{head}_1,\dots,\text{head}_h)W^O,

com

extheadi=Attention(XWiQ,XWiK,XWiV). ext{head}_i = \mathrm{Attention}(XW_i^Q, XW_i^K, XW_i^V).

A complexidade por camada é O(T2d)O(T^2 d), o que explica os custos de latência para sequências longas. No Bedrock, isso se traduz em maior tempo/custo para prompts grandes e gerações longas.

4) RAG (Geração Aumentada por Recuperação) no Bedrock

Um pipeline RAG típico pode ser visto como uma composição:

y^=Iθ(xRetrieve(x,D),h)\hat{y} = \mathcal{I}_{\theta}(x \oplus \mathrm{Retrieve}(x, \mathcal{D}), h)

onde D\mathcal{D} é o corpus indexado e \oplus é um operador de concatenação ou fusão.

4.1 Embeddings e busca vetorial

O embedding e(x)Rde(x) \in \mathbb{R}^d é produzido por um codificador:

e(x)=fϕ(x).e(x) = f_\phi(x).

A recuperação usa similaridade, por exemplo, cosseno:

sim(x,z)=e(x)e(z)e(x)e(z).\mathrm{sim}(x, z) = \frac{e(x) \cdot e(z)}{\|e(x)\| \|e(z)\|}.

Os top-kk documentos {zi}\{z_i\} são:

argmaxzD  sim(x,z).\arg\max_{z \in \mathcal{D}} \; \mathrm{sim}(x,z).

4.2 Mistura ótima de contexto

Para mitigar alucinações, uma estratégia é ponderar os trechos recuperados por score:

C=i=1kwici,wi=exp(αsi)jexp(αsj)C = \sum_{i=1}^k w_i c_i,\quad w_i=\frac{\exp(\alpha s_i)}{\sum_j \exp(\alpha s_j)}

onde sis_i é o score de similaridade e cic_i é o conteúdo. Isso induz roteamento suave de contexto.

5) Roteamento e seleção de modelo

O Bedrock permite escolher diferentes FMs. Podemos modelar a escolha como um problema de minimização de risco:

heta=argminθΘ  E(x,y)D[(Iθ(x,h),y)]+λCost(θ). heta^* = \arg\min_{\theta \in \Theta} \; \mathbb{E}_{(x,y) \sim \mathcal{D}}\big[\ell(\mathcal{I}_\theta(x,h), y)\big] + \lambda \cdot \mathrm{Cost}(\theta).

Isso equilibra qualidade (perda \ell) e custo. Para aplicações em produção, esse tradeoff é central.

6) Latência e custo: um modelo simplificado

A latência total pode ser aproximada como:

Ttotal=Ttokenize+Tforward(nin)+Tdecode(nout).T_{\text{total}} = T_{\text{tokenize}} + T_{\text{forward}}(n_{\text{in}}) + T_{\text{decode}}(n_{\text{out}}).

Se CinC_\text{in} e CoutC_\text{out} são custos por token (hipotéticos) e nin,noutn_{\text{in}}, n_{\text{out}} são tokens de entrada/saída:

Cost=Cinnin+Coutnout.\mathrm{Cost} = C_\text{in} \cdot n_{\text{in}} + C_\text{out} \cdot n_{\text{out}}.

Otimização prática envolve:

  • reduzir ninn_{\text{in}} via compressão de prompt
  • limitar noutn_{\text{out}} via max_tokens
  • escolher θ\theta com o melhor tradeoff custo/qualidade

7) Avaliação e calibração

Para avaliar respostas geradas, podem-se usar métricas baseadas em distância semântica e consistência factual. Um modelo simples:

Score(y)=β1sim(y,y)β2Risk(y)\mathrm{Score}(y) = \beta_1 \cdot \mathrm{sim}(y, y^*) - \beta_2 \cdot \mathrm{Risk}(y)

onde yy^* é uma resposta de referência. Para calibração probabilística, a confiabilidade pode ser medida via Erro de Calibração Esperado (ECE):

ECE=m=1MBmnacc(Bm)conf(Bm).\mathrm{ECE} = \sum_{m=1}^M \frac{|B_m|}{n} \left|\mathrm{acc}(B_m) - \mathrm{conf}(B_m)\right|.

8) Segurança, políticas e mitigação

Um classificador de segurança pode ser modelado como gψ(x)[0,1]g_\psi(x) \in [0,1]. A política pode ser:

extAllow(x)=1[gψ(x)δ]. ext{Allow}(x) = \mathbf{1}[g_\psi(x) \leq \delta].

Em pipelines robustos, o classificador atua antes e depois da geração (pré- e pós-filtro), reduzindo o risco de saídas indesejadas.

9) Exemplo numérico: efeito da temperatura

Considere logits para três tokens: =[2.0,1.0,0.1]\ell = [2.0, 1.0, 0.1].

Para τ=1\tau = 1:

P=softmax([2.0,1.0,0.1])[0.659,0.242,0.099].P = \mathrm{softmax}([2.0, 1.0, 0.1]) \approx [0.659, 0.242, 0.099].

Para τ=0.5\tau = 0.5:

P=softmax([4.0,2.0,0.2])[0.866,0.117,0.017].P = \mathrm{softmax}([4.0, 2.0, 0.2]) \approx [0.866, 0.117, 0.017].

A entropia cai de H0.86H \approx 0.86 para H0.42H \approx 0.42, tornando a geração mais determinística.

10) Checklist técnico para produção

  1. Definir metas quantitativas de qualidade e custo.
  2. Modelar latência e uso de tokens com métricas observáveis.
  3. Implementar RAG com vetores e re-ranking.
  4. Aplicar políticas de segurança com limiares calibrados.
  5. Executar avaliações offline e testes A/B contínuos.

Se quiser, posso adicionar uma seção de benchmarks ou um tutorial prático usando o AWS SDK (Python ou TypeScript).

Comentários