Objetivo: ao final, o consultor descreve o pipeline de RAG ponta a ponta, sabe que a Anthropic não fornece modelo de embedding, e reconhece os quatro pontos onde a qualidade se perde.
voyage-4), com a orientação explícita de avaliar outros fornecedores — e o parâmetro input_type (document ao indexar, query ao buscar) é obrigatório para retrieval e degrada silenciosamente quando esquecido.import voyageai
vo = voyageai.Client() # lê VOYAGE_API_KEY do ambiente
# 1. Indexação — uma vez, ou quando o acervo mudar
pedacos = fatiar_por_secao(documentos) # ver "corte", abaixo
vetores = vo.embed(pedacos, model="voyage-4",
input_type="document").embeddings # input_type = document
guardar(vetores, pedacos) # vector DB
# 2. Consulta — a cada pergunta
import numpy as np
q = vo.embed([pergunta], model="voyage-4",
input_type="query").embeddings[0] # input_type = query
# Vetores da Voyage são normalizados: produto escalar == similaridade de cosseno
similaridades = np.dot(vetores, q)
top = np.argsort(similaridades)[-20:][::-1] # 20, não 5
contexto = "\n\n".join(pedacos[i] for i in top)
resposta = client.messages.create(
model="claude-opus-5",
max_tokens=4000,
messages=[{"role": "user",
"content": f"<documentos>\n{contexto}\n</documentos>\n\n{pergunta}"}],
)
Repare que o passo 2 monta o contexto em tag XML e põe os documentos antes da pergunta — as duas técnicas da aula 3.6.1, aplicadas aqui.
| Modelo | Contexto | Dimensões | Quando |
|---|---|---|---|
voyage-4-large |
32.000 | 1024 (padrão), 256, 512, 2048 | Melhor qualidade geral e multilíngue |
voyage-4 |
32.000 | idem | Equilíbrio entre qualidade e custo |
voyage-4-lite |
32.000 | idem | Latência e custo baixos |
voyage-code-3 |
32.000 | idem | Código — relevante para ABAP e CDS |
voyage-finance-2 |
32.000 | 1024 | Domínio financeiro |
voyage-law-2 |
16.000 | 1024 | Jurídico e contexto longo |
voyage-context-4 |
120.000 | idem | Embedding de pedaço com contexto do documento (aula 3.8.2) |
preview — pode mudar· Modelos e limites conferidos em julho de 2026. Voyage é um fornecedor terceiro: preço, disponibilidade e termos são dele, não da Anthropic.
Dois detalhes que valem dinheiro:
int8 corta por 4, binary corta por 32. Em acervo grande, a diferença entre float e int8 é a diferença entre um índice caro e um barato.| Ponto | O que dá errado | O que fazer |
|---|---|---|
| Corte | Fatiar por número de caracteres corta tabela, separa título do conteúdo | Fatiar pela estrutura: seção, título, item. Sobreposição de 10–20% entre pedaços vizinhos |
| Perda de contexto | "O limite é de 50 mil" — de quê? | Contextual retrieval ou voyage-context-4 (aula 3.8.2) |
| Vão de vocabulário | Pergunta e documento não compartilham palavra | É o que a busca semântica resolve — na maior parte dos casos |
| Quantos trazer | 5 pedaços é o padrão dos tutoriais, e é pouco | 20, conforme a medição da Anthropic |
input_type omitido |
Busca pior, sem erro nenhum | document ao indexar, query ao buscar. Sempre |
A linha do corte merece um exemplo de projeto: uma FS com tabela de alçada fatiada a cada 800 caracteres pode produzir um pedaço com os valores e outro com os cargos. Nenhum dos dois responde "quem aprova acima de 50 mil", e os dois parecem relevantes na busca.
Não há número universal, mas há um raciocínio:
| Pedaço | Efeito |
|---|---|
| Muito pequeno (< 200 tokens) | Preciso, mas sem contexto — muitos pedaços para reconstruir uma resposta |
| Médio (300–800 tokens) | A faixa usual |
| Grande (> 1500 tokens) | Traz contexto junto, mas dilui: o pedaço casa com muita coisa e discrimina pouco |
E a regra que dispensa a discussão em metade dos casos: fatie pela estrutura antes de pensar em tamanho. Documento de projeto tem seção, título e item. Respeitar isso resolve mais que qualquer ajuste de número.
Regra Wayon Índice construído sobre documentação de cliente é infraestrutura que hospeda dado de cliente — vale a mesma classificação do módulo 3.9 aplicada ao vector DB e ao fornecedor de embedding, incluindo onde os vetores ficam armazenados e por quanto tempo. Vetorizar documento de cliente com fornecedor terceiro é envio de dado a terceiro, e passa pela política da aula 1.1.4 como qualquer outro envio.
📖 Embeddings · Técnicas de prompt — aula 3.6.1
claude-embed-1, otimizado para uso conjunto com os modelos ClaudeNão existe; é o tipo de suposição que só a leitura da documentação desfaz.
Correto, e tem consequência prática: o embedding é contrato com terceiro.
output_config específico para vetoresA Messages API não devolve vetores de embedding.
input_type. Qual é o efeito?A chamada passa — é justamente por isso que o erro sobrevive em produção.
input_type só afeta modelos multimodaisAfeta os modelos de texto usados em retrieval, que são o caso aqui.
Correto. É degradação silenciosa, o tipo mais difícil de encontrar depois.
Correto. É o argumento para fatiar pela estrutura do documento antes de pensar em tamanho.
Não há junção automática: o que vai ao modelo é o que a busca devolveu.
Tabela é texto como qualquer outro e entra no índice normalmente.
Correto. É recomendação medida, não regra de bolso.
É o padrão da maioria dos tutoriais e está abaixo do recomendado.
Encher a janela não é estratégia de recuperação e desperdiça tokens.