# AIVAX Documentation > Build, operate, and evaluate AI applications with AIVAX. Language: Português. Embedded API references are linked, not fetched. # Documentação AIVAX AIVAX é uma plataforma de orquestração de IA para construir, operar e avaliar aplicações de IA através de uma única conta e superfície de API. Use modelos hospedados ou bring-your-own-key (BYOK), depois adicione instruções reutilizáveis, conhecimento, ferramentas, mídia, canais de usuário e processamento em segundo plano à medida que seu produto cresce. ## Escolha por onde começar - **Faça sua primeira chamada de modelo:** siga [Primeiros passos](https://docs.aivax.net/pt-br/docs/getting-started.md) para uma conclusão de chat mínima compatível com OpenAI. - **Entenda a plataforma:** leia a [Visão geral](https://docs.aivax.net/pt-br/docs/overview.md) para escolher entre inferência direta, Portais de IA, RAG, gerações, Lote e outros produtos. - **Prepare uma integração de produção:** revise [Autenticação](https://docs.aivax.net/pt-br/docs/authentication.md), [Preços](https://docs.aivax.net/pt-br/docs/pricing.md) e [Planos e limites](https://docs.aivax.net/pt-br/docs/limits.md). ## Crie uma aplicação de IA - [Inferência](https://docs.aivax.net/pt-br/docs/inference/inference.md) — gere respostas com modelos hospedados ou BYOK através de uma API compatível com OpenAI. - [Portais de IA](https://docs.aivax.net/pt-br/docs/inference/ai-gateway.md) — reutilize um modelo, instruções, RAG, habilidades, ferramentas, moderação e configurações de inferência como um único runtime de assistente. - [Coleções RAG](https://docs.aivax.net/pt-br/docs/rag/collections.md) — indexe seu próprio conhecimento para busca semântica e respostas fundamentadas. - [Rerankers](https://docs.aivax.net/pt-br/docs/rag/reranking.md) — reordene documentos candidatos por relevância, com ou sem uma coleção gerenciada. - [Habilidades](https://docs.aivax.net/pt-br/docs/features/skills.md) — empacote instruções reutilizáveis e conhecimento operacional para Portais de IA. - [Ferramentas](https://docs.aivax.net/pt-br/docs/tools/builtin-tools.md) e [MCP](https://docs.aivax.net/pt-br/docs/tools/mcp.md) — conecte assistentes às capacidades do AIVAX e a sistemas externos. - [Clientes de chat](https://docs.aivax.net/pt-br/docs/features/chat-clients.md) — publique um portal via chat web ou integrações de mensagens suportadas. ## Processar texto e mídia - [Classificação de texto](https://docs.aivax.net/pt-br/docs/rag/classification.md) e [segmentação de texto](https://docs.aivax.net/pt-br/docs/rag/text-segmentation.md) — prepare documentos para roteamento, análise e recuperação. - [Geração de imagens](https://docs.aivax.net/pt-br/docs/generations/images.md) — crie ou edite imagens a partir de texto e imagens de referência. - [Geração de fala](https://docs.aivax.net/pt-br/docs/generations/speech.md) e [transcrição de áudio](https://docs.aivax.net/pt-br/docs/generations/audio-transcriptions.md) — converta entre texto e áudio. - [Descrições de mídia](https://docs.aivax.net/pt-br/docs/generations/media-descriptions.md) — converta imagens, áudio, vídeo ou arquivos em texto para processamento posterior. - [Sessões de voz](https://docs.aivax.net/pt-br/docs/inference/voice-session.md) — construa experiências de voz bidirecionais de baixa latência. ## Operar em escala e melhorar a qualidade - [Lote](https://docs.aivax.net/pt-br/docs/features/batch.md) — execute o mesmo fluxo de trabalho de IA em vários itens independentes em segundo plano. - [Agentic Tests](https://docs.aivax.net/pt-br/docs/inference/agentic-tests.md) — avalie conversas completas orientadas a metas e rastreie regressões repetíveis do portal. - [Respostas estruturadas](https://docs.aivax.net/pt-br/docs/inference/structured-responses.md) — valide JSON gerado contra um contrato de aplicação. - [Utilitários MCP](https://docs.aivax.net/pt-br/docs/mcp-utilities/account-management-mcp.md) — exponha capacidades de conta, coleção, documentação, web e inferência para agentes compatíveis. Para esquemas de endpoint e detalhes de solicitações geradas, use a [referência da API AIVAX](https://inference.aivax.net/apidocs). --- Source: https://docs.aivax.net/pt-br/docs/overview.html # Visão geral AIVAX é uma plataforma de orquestração de IA para construir, operar e avaliar aplicações de IA através de uma única conta, superfície de API e carteira de cobrança. Ela combina modelos hospedados e bring-your-own-key (BYOK) com configuração reutilizável de assistente, recuperação de conhecimento, ferramentas, processamento de texto e mídia, canais voltados ao usuário, jobs em segundo plano e avaliação conversacional. Você não precisa de todos os produtos para cada aplicação. Comece com inferência direta quando precisar apenas de uma resposta. Adicione outros produtos quando precisar reutilizar configurações de assistente, pesquisar seus documentos, conectar ferramentas ou canais, processar muitos registros ou avaliar comportamento. ## Escolha o ponto de partida correto | Objetivo | Comece com | Por quê | | --- | --- | --- | | Gerar ou analisar texto em uma solicitação | [Inferência](https://docs.aivax.net/pt-br/docs/inference/inference.md) | Chame um modelo hospedado ou BYOK através da API compatível com OpenAI sem criar configuração reutilizável de assistente. | | Reutilizar instruções, conhecimento, ferramentas e configurações de modelo | [Gateway de IA](https://docs.aivax.net/pt-br/docs/inference/ai-gateway.md) | Forneça à sua aplicação um runtime estável de assistente que pode evoluir sem reconstruir cada requisição. | | Pesquisar seus próprios documentos ou gerar respostas fundamentadas | [Coleções RAG](https://docs.aivax.net/pt-br/docs/rag/collections.md) | Armazene e indexe conhecimento para recuperação semântica, citações e contexto de gateway. | | Reordenar candidatos que sua aplicação já recuperou | [Reclassificadores](https://docs.aivax.net/pt-br/docs/rag/reranking.md) | Melhore a relevância sem exigir uma coleção gerenciada da AIVAX. | | Publicar um assistente para usuários finais | [Clientes de chat](https://docs.aivax.net/pt-br/docs/features/chat-clients.md) | Conecte um gateway a um chat web ou integrações de mensagens suportadas com controle de sessão e canal. | | Processar muitos registros independentes | [Lote](https://docs.aivax.net/pt-br/docs/features/batch.md) | Execute um fluxo de trabalho repetível de forma assíncrona com estado por item, validação, tentativas, custo e exportação. | | Testar uma conversa completa de assistente | [Testes Agentes](https://docs.aivax.net/pt-br/docs/inference/agentic-tests.md) | Simule um usuário orientado a objetivo e julgue o gateway em múltiplas interações. | | Construir uma experiência de voz bidirecional de baixa latência | [Sessões de voz](https://docs.aivax.net/pt-br/docs/inference/voice-session.md) | Transmita áudio de usuário e assistente em uma sessão interativa ao invés de combinar jobs de áudio separados. | ## Construa o runtime do assistente ### Inferência e Gateways de IA AIVAX expõe listagem de modelos e endpoints de conclusão de chat compatíveis com OpenAI. Use uma **chamada direta de modelo** para exploração, geração pontual ou configuração que não precise ser reutilizada. Use um **Gateway de IA** quando o mesmo modelo, instruções, coleções RAG, habilidades, ferramentas, moderação ou comportamento de saída devem atender a múltiplas chamadas ou usuários. A maioria dos assistentes de produção usa um gateway porque a aplicação pode continuar chamando um identificador enquanto a configuração do assistente muda de forma independente. Gateways podem usar modelos integrados da AIVAX ou provedores externos compatíveis com OpenAI. URL base da API de produção: ```text https://inference.aivax.net ``` URL base do SDK compatível com OpenAI: ```text https://inference.aivax.net/v1 ``` Referência: [API endpoint reference](https://inference.aivax.net/apidocs?embed=iframe&embed-endpoint=Inference%20(chat%20completions)) ### Conhecimento, recuperação e reclassificação Uma [Coleção RAG](https://docs.aivax.net/pt-br/docs/rag/collections.md) é uma biblioteca de conhecimento semântico. Adicione documentos, teste-os com [Pesquisa Semântica](https://docs.aivax.net/pt-br/docs/rag/semantic-search.md) e, em seguida, anexe a coleção a um Gateway de IA quando o assistente deve responder a partir desse conhecimento. AIVAX também pode gerar respostas fundamentadas diretamente de coleções e expor a busca de coleções através de [Collections MCP](https://docs.aivax.net/pt-br/docs/mcp-utilities/collections-mcp.md). A reclassificação é uma etapa separada: ela recebe uma consulta e documentos candidatos, então devolve os candidatos em ordem mais relevante. Use uma coleção para armazenamento e recuperação gerenciados; use a geração independente de [reclassificação](https://docs.aivax.net/pt-br/docs/rag/reranking.md) quando sua aplicação já possui os candidatos. ### Habilidades e ferramentas [Habilidades](https://docs.aivax.net/pt-br/docs/features/skills.md) empacotam instruções reutilizáveis e conhecimento operacional. Use uma habilidade quando o assistente precisa saber **como** executar uma tarefa. Use RAG quando precisar recuperar **fatos ou material de origem** que podem crescer ou mudar de forma independente. Ferramentas permitem que o assistente execute ações ou recupere informações ao vivo. Escolha entre: - [Ferramentas integradas](https://docs.aivax.net/pt-br/docs/tools/builtin-tools.md) para capacidades fornecidas pela AIVAX. - [MCP](https://docs.aivax.net/pt-br/docs/tools/mcp.md) para servidores de Protocolo de Contexto de Modelo e ecossistemas de ferramentas reutilizáveis. - [Funções de protocolo](https://docs.aivax.net/pt-br/docs/tools/protocol-functions.md) para funções HTTP definidas pela sua aplicação. - [Shell](https://docs.aivax.net/pt-br/docs/tools/shell.md) para execução controlada de comandos quando o caso de uso requer isso. Mantenha a superfície de ferramentas tão pequena quanto o trabalho do assistente permite. Cada ferramenta adicional aumenta custo, latência, permissões e caminhos de falha. ## Processar texto, documentos e mídia AIVAX inclui produtos de geração focada para trabalhos que não precisam de uma conversa completa de chat: - [Classificação de texto](https://docs.aivax.net/pt-br/docs/rag/classification.md) atribui rótulos a um ou mais documentos. - [Segmentação de texto](https://docs.aivax.net/pt-br/docs/rag/text-segmentation.md) divide conteúdo longo em blocos úteis para indexação ou processamento subsequente. - [Descrições de mídia](https://docs.aivax.net/pt-br/docs/generations/media-descriptions.md) convertem imagens, áudio, vídeo e arquivos em texto que outro modelo ou fluxo de trabalho pode usar. - [Geração de imagens](https://docs.aivax.net/pt-br/docs/generations/images.md) cria ou edita imagens. - [Geração de fala](https://docs.aivax.net/pt-br/docs/generations/speech.md) transforma texto em áudio. - [Transcrição de áudio](https://docs.aivax.net/pt-br/docs/generations/audio-transcriptions.md) transforma áudio em texto. Use inferência multimodal direta quando o modelo de chat selecionado suportar a entrada e precisar raciocinar sobre ela na mesma requisição. Use um endpoint de geração focada quando precisar de um artefato reutilizável, transcrição, descrição ou etapa de pré-processamento. Para grandes conjuntos de entrada independentes, execute a operação apropriada através de [Lote](https://docs.aivax.net/pt-br/docs/features/batch.md). Para áudio bidirecional interativo, use [Sessões de voz](https://docs.aivax.net/pt-br/docs/inference/voice-session.md) ao invés de encadear manualmente transcrição, inferência de texto e geração de fala. ## Entregar, dimensionar e avaliar ### Clientes de chat Um [cliente de chat](https://docs.aivax.net/pt-br/docs/features/chat-clients.md) conecta um Gateway de IA a um canal de usuário final. Ele controla apresentação, comportamento de sessão, origens permitidas, uploads, respostas de áudio, integrações de canal e limites voltados ao usuário. O gateway continua a controlar o comportamento do assistente, como modelo, instruções, RAG e ferramentas. Use um cliente de chat para um widget de navegador ou integração de mensagens suportada. Use a API de inferência diretamente quando seu próprio backend ou interface já gerencia usuários, estado da conversa e entrega. ### Lote [Lote](https://docs.aivax.net/pt-br/docs/features/batch.md) aplica um fluxo de trabalho a dezenas ou milhares de registros independentes. Um fluxo de trabalho define instrução, modelo ou gateway, saída estruturada, validação, ferramentas e política de tentativas. Um job importa itens, processa-os em segundo plano, expõe progresso e custo por item e exporta resultados. Não use Lote quando um item depende de outro ou quando o usuário precisa de resposta imediata. Use inferência direta para um resultado síncrono e RAG para conhecimento pesquisável. ### Testes Agentes [Testes Agentes](https://docs.aivax.net/pt-br/docs/inference/agentic-tests.md) avaliam o comportamento configurado de um Gateway de IA ao longo de uma conversa delimitada. Um usuário simulado persegue um objetivo enquanto um juiz independente avalia o progresso. Use testes persistentes para cobertura de regressão reutilizável e agendada ou uma avaliação efêmera para uma execução única. Uma execução de teste concluída não é automaticamente um resultado de comportamento bem‑sucedido. Revise o resultado da execução, o julgamento, a conversa retida, o uso e o custo em conjunto. ## Operar e conectar AIVAX AIVAX registra conversas e uso para que você possa rastrear comportamento, atribuir custo e diagnosticar falhas. O painel e as APIs de conta expõem saldo da conta, uso, conversas, recursos de gateway, transações de coleções, itens de lote e execuções de Testes Agentes. Comece com [Pricing](https://docs.aivax.net/pt-br/docs/pricing.md) e [Plans and limits](https://docs.aivax.net/pt-br/docs/limits.md) antes de habilitar um fluxo de trabalho de alto volume ou pesado em mídia. AIVAX também fornece utilitários MCP para agentes compatíveis: - [MCP de gerenciamento de conta](https://docs.aivax.net/pt-br/docs/mcp-utilities/account-management-mcp.md) - [MCP de coleções](https://docs.aivax.net/pt-br/docs/mcp-utilities/collections-mcp.md) - [MCP de documentação](https://docs.aivax.net/pt-br/docs/mcp-utilities/documentation-mcp.md) - [MCP de utilitários web](https://docs.aivax.net/pt-br/docs/mcp-utilities/web-utilities-mcp.md) - [MCP de geração de mídia](https://docs.aivax.net/pt-br/docs/mcp-utilities/media-generation-mcp.md) - [MCP de inferência](https://docs.aivax.net/pt-br/docs/mcp-utilities/inference-mcp.md) Esses utilitários expõem capacidades existentes da AIVAX através de MCP; eles não substituem os produtos subjacentes de conta, coleção ou inferência. ## Próximos passos 1. Siga o [Começando](https://docs.aivax.net/pt-br/docs/getting-started.md) para criar e verificar sua primeira conclusão de chat. 2. Leia a [Autenticação](https://docs.aivax.net/pt-br/docs/authentication.md) antes de escolher chaves privadas, chaves públicas ou sessões de chat para o limite da aplicação. 3. Revise os [Preços](https://docs.aivax.net/pt-br/docs/pricing.md) e [Planos e limites](https://docs.aivax.net/pt-br/docs/limits.md) antes de aumentar tráfego ou processar grandes coleções, mídia, testes ou jobs de Lote. 4. Mova o comportamento reutilizável do assistente para um [Gateway de IA](https://docs.aivax.net/pt-br/docs/inference/ai-gateway.md), então adicione RAG, habilidades, ferramentas e um cliente de chat somente quando o caso de uso exigir. --- Source: https://docs.aivax.net/pt-br/docs/getting-started.html # Começando Este guia leva você de uma conta AIVAX a uma conclusão de chat compatível com OpenAI verificada. O exemplo usa Python e uma chave de API privada de um ambiente do lado do servidor. Ao final, você terá confirmado que sua chave e o modelo ou AI Gateway selecionado podem concluir uma solicitação. ## Antes de começar Você precisa: - Uma conta AIVAX com acesso ao painel e permissão para criar uma chave de API privada. - Python 3.8 ou superior com `pip` disponível. Para preços e limites operacionais, veja [Preços](https://docs.aivax.net/pt-br/docs/pricing.md) e [Planos e limites](https://docs.aivax.net/pt-br/docs/limits.md). Production API base URL: ```text https://inference.aivax.net ``` OpenAI-compatible SDK base URL: ```text https://inference.aivax.net/v1 ``` ## 1. Crie uma chave de API privada Crie uma chave **privada** na área de Chaves de API do painel AIVAX. Copie a chave quando ela for exibida e armazene-a como um segredo; não cole o valor real no código abaixo. Chaves privadas são destinadas a aplicações confiáveis do lado do servidor. Chaves públicas são credenciais restritas para rotas do lado do cliente intencionalmente expostas e não substituem uma chave de backend. Se você estiver criando um widget web público ou experiência de mensagens, revise [Chat clients](https://docs.aivax.net/pt-br/docs/features/chat-clients.md) antes de expor qualquer credencial. As sessões de chat oferecem um limite mais claro para identidade do usuário, histórico de conversas e anexos. Consulte [Authentication](https://docs.aivax.net/pt-br/docs/authentication.md) para esquemas de autenticação suportados, comportamento de chaves privadas e públicas, e orientações sobre manuseio de segredos. ## 2. Instale o SDK OpenAI Instale o SDK no ambiente Python que você usará para este exemplo: ```bash python -m pip install openai ``` Mantenha a chave fora do seu arquivo fonte. Por exemplo, defina uma variável de ambiente chamada `AIVAX_API_KEY` usando o método de gerenciamento de segredos apropriado para seu shell ou plataforma de implantação. ## 3. Escolha um modelo ou AI Gateway O campo `model` pode identificar: - Um modelo hospedado retornado pelo endpoint de listagem de modelos. - Um AI Gateway disponível na sua conta. Use um **modelo hospedado** para uma chamada direta, pontual ou experimento inicial. Use um **AI Gateway** quando quiser reutilizar o mesmo modelo, instruções, coleções RAG, habilidades, ferramentas, moderação e configurações de saída em várias solicitações ou usuários. Slugs de gateway são suportados com chaves privadas. Compleções de chat com chave pública devem usar o UUID completo do gateway e não podem chamar modelos integrados diretamente. Use a referência de listagem de modelos abaixo para escolher um modelo hospedado. Se você já tem um AI Gateway, use seu identificador. [API endpoint reference](https://inference.aivax.net/apidocs?embed=iframe&embed-endpoint=Model%20listing) Copie um nome de modelo ou identificador de gateway que esteja disponível na sua conta. Você o usará como `` na próxima etapa. ## 4. Faça a primeira solicitação Crie um arquivo chamado `quickstart.py` com o código a seguir: ```python import os from openai import OpenAI client = OpenAI( base_url="https://inference.aivax.net/v1", api_key=os.environ["AIVAX_API_KEY"], ) response = client.chat.completions.create( model="", messages=[ {"role": "user", "content": "Write a one-sentence welcome message."} ], ) print(response.choices[0].message.content) ``` Substitua `` pelo nome exato do modelo hospedado ou identificador de gateway selecionado na etapa anterior. Mantenha `AIVAX_API_KEY` inalterado no código: ele é o nome da variável de ambiente, não o valor da chave. Defina essa variável antes de executar o arquivo. Execute o arquivo: ```bash python quickstart.py ``` Uma solicitação bem-sucedida imprime uma frase gerada e sai sem erro de API. Reference: [API endpoint reference](https://inference.aivax.net/apidocs?embed=iframe&embed-endpoint=Inference%20(chat%20completions)) ## 5. Confirme a integração Confirme que a resposta gerada corresponde ao prompt e vem do modelo ou AI Gateway selecionado na etapa anterior. Isso verifica o endpoint, a credencial e a seleção de modelo usada pela sua aplicação. Antes de aumentar o tráfego ou processar entradas grandes, revise [Preços](https://docs.aivax.net/pt-br/docs/pricing.md) e [Planos e limites](https://docs.aivax.net/pt-br/docs/limits.md). ## Solucionar problemas da primeira solicitação AIVAX usa dois estilos de resposta: - Endpoints compatíveis com OpenAI retornam um objeto `error` no estilo OpenAI. - Endpoints de conta e administrativos retornam um envelope de resposta AIVAX com um erro ou um valor `data` bem-sucedido. | Status | O que verificar | | --- | --- | | `400 Bad Request` | Confirme o identificador do modelo ou gateway e remova parâmetros não suportados da solicitação. | | `401 Unauthorized` | Confirme que a chave privada está presente, completa, ativa e enviada através da configuração do SDK. | | `402 Payment Required` | Revise [Preços](https://docs.aivax.net/pt-br/docs/pricing.md) e confirme que a conta está pronta para uma solicitação paga. | | `403 Forbidden` | Confirme que o tipo de chave, modelo ou recurso selecionado permite esta operação. | | `429 Too Many Requests` | Tente novamente mais tarde e revise [Planos e limites](https://docs.aivax.net/pt-br/docs/limits.md) antes de aumentar o volume de solicitações. | | `500 Internal Server Error` | Ocorreu uma falha inesperada da AIVAX. Tente novamente mais tarde; a resposta não inclui detalhes internos. | | `503 Service Unavailable` | Um serviço do qual a AIVAX depende está temporariamente indisponível. Tente novamente após o intervalo no cabeçalho `Retry-After`. | Se a solicitação ainda falhar, verifique nesta ordem: 1. `base_url` é `https://inference.aivax.net/v1`. 2. `AIVAX_API_KEY` está disponível para o processo Python e contém uma chave privada. 3. O modelo ou gateway selecionado existe e está disponível para a conta. 4. Para um gateway, teste um prompt simples antes de adicionar RAG, ferramentas, mídia ou saída estruturada para que você possa isolar problemas de configuração. ## Inferência de longa duração Se uma solicitação terminar com HTTP `524` ou um timeout de proxy enquanto a AIVAX ainda a processa, use o host de inferência direta: ```text https://direct.inference.aivax.net/v1 ``` A solicitação permanece síncrona, não um trabalho em segundo plano: mantenha a conexão do cliente aberta até que a conclusão termine e configure um timeout do cliente que cubra o tempo de processamento esperado. Use a mesma chave de API privada, identificador de modelo ou AI Gateway, mensagens e parâmetros de solicitação. Altere a URL base do SDK e o timeout: ```python import os from openai import OpenAI client = OpenAI( base_url="https://direct.inference.aivax.net/v1", api_key=os.environ["AIVAX_API_KEY"], timeout=300.0, ) response = client.chat.completions.create( model="", messages=[ { "role": "user", "content": "Analyze this case carefully and provide a detailed recommendation.", } ], ) print(response.choices[0].message.content) ``` ## Escolha o próximo produto Depois que a solicitação mínima funcionar, adicione uma capacidade de cada vez: - [AI Gateways](https://docs.aivax.net/pt-br/docs/inference/ai-gateway.md) — torne a configuração do assistente reutilizável entre solicitações e usuários. - [Structured responses](https://docs.aivax.net/pt-br/docs/inference/structured-responses.md) — exija que o JSON gerado siga um esquema de aplicação. - [RAG collections](https://docs.aivax.net/pt-br/docs/rag/collections.md) — indexe seus documentos, teste recuperação e anexe conhecimento fundamentado a um gateway. - [Built-in tools](https://docs.aivax.net/pt-br/docs/tools/builtin-tools.md), [MCP](https://docs.aivax.net/pt-br/docs/tools/mcp.md) ou [Protocol functions](https://docs.aivax.net/pt-br/docs/tools/protocol-functions.md) — permita que o assistente recupere informações ao vivo ou execute ações. - [Chat clients](https://docs.aivax.net/pt-br/docs/features/chat-clients.md) — entregue um gateway via chat web ou canais de mensagem suportados. - [Text and media products](https://docs.aivax.net/pt-br/docs/overview.md#process-text-documents-and-media) — classifique ou segmente documentos, gere imagens ou fala, transcreva áudio e descreva mídia. - [Batch](https://docs.aivax.net/pt-br/docs/features/batch.md) — aplique o mesmo fluxo de trabalho a muitos registros independentes de forma assíncrona. - [Agentic Tests](https://docs.aivax.net/pt-br/docs/inference/agentic-tests.md) — avalie uma conversa completa de gateway antes e depois de alterações de configuração. Antes de aumentar o tráfego ou processar entradas grandes, revise [Preços](https://docs.aivax.net/pt-br/docs/pricing.md) e [Planos e limites](https://docs.aivax.net/pt-br/docs/limits.md). --- Source: https://docs.aivax.net/pt-br/docs/authentication.html # Autenticação AIVAX autentica solicitações de API com chaves de API da conta. AIVAX aceita chaves de API através de: - `Authorization: Bearer ` - `Authorization: Basic ` - `?api-key=` Prefira o cabeçalho `Authorization` para chamadas servidor‑para‑servidor. Use o parâmetro de consulta apenas quando um cliente ou integração não puder enviar cabeçalhos, pois URLs podem ser registradas por proxies, navegadores e ferramentas de monitoramento. ## Tipos de chave de API AIVAX tem duas famílias de chaves porque casos de uso de navegador e de servidor têm perfis de risco diferentes. Se seu código roda no seu servidor, use uma chave privada e mantenha‑a fora de bundles de cliente, logs e repositórios públicos. Se seu código roda em um navegador ou outro ambiente onde a chave pode ser inspecionada pelo usuário final, use uma chave pública e limite o fluxo a rotas projetadas para acesso público. | Tipo | Prefixo | Uso pretendido | Acesso | | --- | --- | --- | --- | | Chave privada | `sk-aiv-acc` | Integrações do lado do servidor e chamadas de API administrativas. | APIs de conta autenticadas e inferência compatível com OpenAI. | | Chave pública | `pk-aiv-` | Chamadas restritas do lado do cliente para rotas explicitamente públicas. | Rotas públicas de consulta/resposta RAG e chamadas restritas de conclusão de chat. | Chaves públicas podem ser usadas para busca semântica RAG, geração de respostas RAG, geração de fala, descrições de mídia, geração de imagens e conclusões de chat. Quando uma chave pública chama conclusões de chat: - O `model` deve ser um UUID completo do AI Gateway; chamadas de modelo integrado direto e busca de slug de gateway são desativadas. - Fontes MCP, funções de protocolo, ferramentas embutidas, Bash, habilidades e opções de sentinela são removidas da solicitação. - Apenas esses parâmetros de solicitação são aceitos: `model`, `messages`, `prompt`, `temperature`, `top_p`, `top_k`, `seed`, `tools`, `reasoning_effort`, `max_completion_tokens`, `idempotency_key` e `stream`. - Limites de taxa de solicitações e tokens são aplicados globalmente por chave e por endereço remoto. Veja [Public API keys](https://docs.aivax.net/pt-br/docs/limits.md#public-api-keys) para os valores atuais. Use chaves privadas para serviços de backend, gerenciamento de contas, listagem de modelos, gerenciamento de coleções, operações em lote e qualquer fluxo de trabalho que precise da superfície completa de ferramentas do gateway. Para a primeira solicitação do lado do servidor, continue com [Getting Started](https://docs.aivax.net/pt-br/docs/getting-started.md). Se você estiver expondo uma experiência de navegador ou widget para usuários finais, revise [Chat Clients](https://docs.aivax.net/pt-br/docs/features/chat-clients.md) antes de decidir se uma chave pública é o limite adequado. ## Criar e listar chaves Chaves de API pertencem a uma conta e podem ter um rótulo, validade e tipo. Uma chave com duração negativa não expira; chaves expiradas são rejeitadas pela autenticação e posteriormente removidas por jobs de limpeza. Crie chaves separadas para aplicações separadas. Isso torna a rotação mais segura: se uma integração for comprometida, você pode revogar apenas essa chave em vez de quebrar todos os serviços vinculados à conta. Use rótulos para identificar o proprietário e a aplicação de cada chave, e datas de validade para planejar quando renovar ou substituir. Reference: [API endpoint reference](https://inference.aivax.net/apidocs?embed=iframe&embed-endpoint=Create%20API%20Key) [API endpoint reference](https://inference.aivax.net/apidocs?embed=iframe&embed-endpoint=List%20API%20Keys) ## Enviar uma chave com autenticação Bearer Para SDKs compatíveis com OpenAI, passe a chave AIVAX como a chave API do SDK e defina a URL base como `https://inference.aivax.net/v1`. ```python from openai import OpenAI client = OpenAI( base_url="https://inference.aivax.net/v1", api_key="" ) ``` ## Autenticação de hook AIVAX pode autenticar solicitações de saída para seus serviços, como workers do AI Gateway e funções de protocolo do lado do servidor. Esta é a direção inversa da autenticação de API normal. Em uma chamada de API normal, sua aplicação prova que tem permissão para chamar AIVAX enviando uma chave de API. Em um callback de worker ou função de protocolo, AIVAX está chamando seu serviço, então seu serviço precisa de uma forma de verificar que a solicitação realmente veio da configuração de conta que você controla. É para isso que serve `X-Request-Nonce`. Se sua conta tem uma chave de hook, AIVAX envia: ```text X-Request-Nonce: ``` O nonce é um hash BCrypt derivado da chave de hook da conta. Valide o cabeçalho verificando a chave de hook em texto plano armazenada contra o hash. Se a conta não tem chave de hook, o cabeçalho não é enviado. Rotacionar a chave de hook invalida os segredos de validação de worker e integração existentes. ### Exemplo C# ```csharp using BCrypt.Net; var nonce = request.Headers["X-Request-Nonce"]; var hookKey = Environment.GetEnvironmentVariable("AIVAX_HOOK_SECRET"); if (nonce is null || hookKey is null) { return Results.Unauthorized(); } if (!BCrypt.Net.BCrypt.Verify(hookKey, nonce, enhancedEntropy: false)) { return Results.Forbid(); } ``` ### Exemplo Python ```python import os import bcrypt from flask import abort, request nonce = request.headers.get("X-Request-Nonce") hook_key = os.getenv("AIVAX_HOOK_SECRET") if nonce is None or hook_key is None: abort(401) if not bcrypt.checkpw(hook_key.encode("utf-8"), nonce.encode("utf-8")): abort(403) ``` ### Exemplo JavaScript ```javascript import bcrypt from "bcrypt"; const nonce = req.header("X-Request-Nonce"); const hookKey = process.env.AIVAX_HOOK_SECRET; if (!nonce || !hookKey) { return res.sendStatus(401); } if (!(await bcrypt.compare(hookKey, nonce))) { return res.sendStatus(403); } ``` --- Source: https://docs.aivax.net/pt-br/docs/pricing.html # Preços Os preços de uso do serviço estão listados abaixo em USD. **M** significa um milhão de tokens; **1k** significa mil unidades. Preços aproximados (`~`) variam conforme o modelo usado e o trabalho realizado. Consulte [subscription pricing](https://aivax.net/pricing) para preços dos planos mensais e [Plans and limits](https://docs.aivax.net/pt-br/docs/limits.md) para cotas. As taxas de uso estão sujeitas ao multiplicador do plano: - Free: **+25%** nos impostos de inferência; - Pro: **+5%** nos impostos de inferência; - Max: **0%** nos impostos de inferência. BYOK não são afetados pelos impostos de inferência. Free, Pro e Max incluem cotas diárias separadas para embeddings RAG elegíveis, reranking Reflex, decisões semânticas Julia-1 e extração Fetch/OCR. As taxas abaixo se aplicam quando um item medido não está coberto. A cobertura é tudo ou nada por item, não necessariamente por solicitação completa: um item que não pode caber na cota restante e sua margem permitida é cobrado integralmente. Compare as cotas e verifique as exclusões em [Plans and limits](https://docs.aivax.net/pt-br/docs/limits.md#included-daily-subscription-allowances). A cobertura de assinatura de LLM está atualmente desativada. ## Inferência e Moderação As taxas de inferência dependem do modelo selecionado, provedor, tamanho da entrada e tipo de mídia. A moderação é cobrada separadamente em Unidades de Processamento (PUs), cobrindo uso de entrada, entrada em cache e saída; seu preço por PU varia conforme o modelo e provedor usados. | Descrição | Preço | | --- | ---: | | Inferência de modelo de IA e AI Gateway | Tarifas do modelo e provedor selecionados | | Moderação de entrada | Preço variável por PU; separado da taxa principal de inferência | ## Decisões semânticas As taxas de modelo de decisão abaixo são preços base em USD por milhão de tokens de entrada, antes dos ajustes de conta e plano. Tokens de saída não têm custo no catálogo atual de modelos de decisão. Julia-1 é elegível à cota diária descrita em [Plans and limits](https://docs.aivax.net/pt-br/docs/limits.md#included-daily-subscription-allowances); outros modelos de decisão são cobrados normalmente. | Modelo | Preço de entrada por milhão de tokens | | --- | ---: | | `@supersonic-labs/julia-1` | **$0.008** | | `@typesafe/jev-1.13` | **$0.042** | | `@respan/span-01` | **$0.020** | | `@respan/span-01-lite` | **$0.000** | | `@jaredpalmer/kev-4b` | **$0.042** | | `@upstage/solar-decide` | **$0.050** | | `@cloudflare/clef` | **$0.240** | | `@cloudflare/clef-flash` | **$0.090** | | `@liquid/d1` | **$0.040** | | `@perplexity/pplx-decider-v1-27b` | **$0.040** | | `@openai/gpt-6-luna-decisions` | **$0.100** | Consulte [Semantic decisions](https://docs.aivax.net/pt-br/docs/generations/decisions.md) para seleção de modelo e como o uso de entrada é medido. ## Testes Agentes Cada teste inclui as cobranças de inferência do modelo selecionado ou AI Gateway, além do uso de usuário simulado e juiz nas taxas do perfil selecionado. | Descrição | Preço | | --- | ---: | | Modelo ou AI Gateway em teste | Tarifas de inferência regulares | | Perfil baixo - usuário simulado | Entrada **$0.25/M tokens**; cache **$0.025/M tokens**; saída **$1.50/M tokens** | | Perfil baixo - juiz | Entrada **$0.30/M tokens**; cache **$0.03/M tokens**; saída **$2.50/M tokens** | | Perfil médio - usuário simulado | Entrada **$0.75/M tokens**; cache **$0.075/M tokens**; saída **$3.75/M tokens** | | Perfil médio - juiz | Entrada **$0.75/M tokens**; cache **$0.075/M tokens**; saída **$3.75/M tokens** | | Perfil alto - usuário simulado | Entrada **$0.75/M tokens**; cache **$0.075/M tokens**; saída **$3.75/M tokens** | | Perfil alto - juiz | Entrada **$1.25/M tokens**; cache **$0.15/M tokens**; saída **$4.25/M tokens** | ## RAG e Coleções Indexação e busca são cobradas por uso de tokens. Respostas RAG geradas são cobradas separadamente da incorporação de consulta, e seu preço varia conforme o modelo de sumarização. | Descrição | Preço | | --- | ---: | | Incorporação de texto da coleção | **$0.10/M tokens** | | Busca semântica - falha de cache de consulta | **$0.10/M tokens** | | Busca semântica - acerto de cache de consulta | Zero | | Geração de resposta RAG | **~$0.50/M tokens**, excluindo taxas de consulta | | Reflex - falha de cache | **$0.015/M tokens** | | Reflex - acerto de cache | **$0.003/M tokens** | ## Injetor de Mídia Converter mídia em documentos RAG é cobrado por entrada, entrada em cache, saída e uso de mídia. O arquivo fonte, contexto opcional e conteúdo gerado afetam o total. As taxas dependem do tipo de mídia e volume de tokens de entrada. | Descrição | Preço | | --- | ---: | | PDFs e imagens - até 272K tokens de entrada | Entrada **$0.30/M tokens**; cache **$0.03/M tokens**; saída **$1.80/M tokens** | | PDFs e imagens - acima de 272K tokens de entrada | Entrada **$0.60/M tokens**; cache **$0.06/M tokens**; saída **$3.60/M tokens** | | Áudio - até 256K tokens de entrada | Entrada/mídia **$0.60/M tokens**; cache **$0.12/M tokens**; saída **$3.00/M tokens** | | Áudio - acima de 256K tokens de entrada | Entrada/mídia **$1.20/M tokens**; cache **$0.24/M tokens**; saída **$6.00/M tokens** | | Vídeo | Entrada/mídia **$0.45/M tokens**; cache **$0.045/M tokens**; saída **$3.75/M tokens** | ## Ferramentas de Texto Segmentação e classificação de texto são cobradas por uso de tokens. | Descrição | Preço | | --- | ---: | | Segmentação de texto | **$0.30/M tokens** | | Classificação de texto | **$0.10/M tokens** | ## Voz e Mídia As taxas de geração e transcrição dependem do modelo selecionado. O preço de descrições de mídia é aproximado e depende do modelo de processamento disponível. | Descrição | Preço | | --- | ---: | | Sessões de voz | Tarifas do modelo em tempo real selecionado | | Conversão de fala para texto | Varia conforme o modelo | | Conversão de texto para fala | Varia conforme o modelo | | Geração de imagens | Tarifas fixas de saída e imagem de referência por modelo | | Descrições de mídia | **~$1.50/M tokens** | A geração de imagens cobra cada saída entregue ao preço de saída fixo do modelo selecionado, mais seu preço por referência para cada referência enviada com aquela saída. O processamento do prompt está incluído. Provedores com preços por token ou megapixel utilizam estimativas arredondadas, não repasse exato de custo do provedor. Não há markup adicional de geração de imagens AIVAX nem multiplicador de conta e plano. As tarifas atuais estão listadas no catálogo de Modelos; veja [Image generation](https://docs.aivax.net/pt-br/docs/generations/images.md). ## Busca na Web, OCR e Fetch Buscas na Web e X são cobradas por busca. Busca avançada na Web é cobrada por uso de tokens e varia com o modelo e número de interações. Extração Fetch e OCR usam Unidades de Processamento (PUs), com uma cota diária gratuita por plano. Conversão opcional de JSON guiada por esquema é cobrada separadamente. As cotas de extração e taxas de PU não se aplicam à conversão de JSON ou moderação. | Descrição | Preço | | --- | ---: | | Busca na Web | **$5/1k buscas** | | Busca X (Twitter) | **$5/1k buscas** | | Busca avançada na Web | **~$0.75/M tokens** | | Extração Fetch e OCR - Gratuita | Cota diária base; itens não cobertos **$0.15/1k PUs** | | Extração Fetch e OCR - Pro | **10× Gratuita** cota diária; itens não cobertos **$0.05/1k PUs** | | Extração Fetch e OCR - Max | **5× Pro** cota diária; itens não cobertos **$0.02/1k PUs** | | Conversão JSON Fetch (`responseSchema`) | Preço variável baseado em inferência por PU; cobrado separadamente, sem cota diária de extração | Para a [Fetch API](https://docs.aivax.net/pt-br/docs/web-foundation/fetch-and-ocr.md), `processingUnits` relata uso de extração de texto/OCR e `jsonProcessingUnits` relata o uso adicional de conversão de JSON guiada por esquema. As PUs de JSON contabilizam uso de tokens de entrada, entrada em cache e saída nas taxas do modelo e provedor de processamento; elas não são precificadas à taxa de OCR do plano. O multiplicador de inferência do plano aplica‑se à conversão de JSON. Omitir `responseSchema` ou defini‑lo como `null` desativa a conversão, relata `jsonProcessingUnits: 0` e não gera cobrança de conversão de JSON. ## Armazenamento Cada plano inclui armazenamento. Excedentes de Pro e Max são cobrados por hora nas tarifas mensais abaixo; o armazenamento gratuito não pode ser expandido. | Descrição | Preço | | --- | ---: | | Armazenamento gratuito | **30 MB incluídos**; sem expansão | | Armazenamento Pro | **2 GB incluídos**; excedente **$0.50/GB/mês** | | Armazenamento Max | **20 GB incluídos**; excedente **$0.20/GB/mês** | ## Desconto por Coleta de Dados Contas que habilitam [Data collecting](https://docs.aivax.net/pt-br/docs/data-collecting.md) recebem um desconto de 10% no uso elegível de incorporação de consulta RAG e nas operações de reranking elegíveis realizadas enquanto a coleta está habilitada. Outros serviços mantêm seus preços regulares. ## Outras Ferramentas As ferramentas a seguir não têm cobrança separada. A inferência de modelo usada para invocá‑las ainda é cobrada à sua taxa regular. | Descrição | Preço | | --- | ---: | | Memória e calendário | Sem cobrança separada | | Solicitações avançadas | Sem cobrança separada | | Geração de documentos | Sem cobrança separada | | Geração de página web | Sem cobrança separada --- Source: https://docs.aivax.net/pt-br/docs/limits.html # Planos e Limites AIVAX tem três planos de conta: **Free**, **Pro** e **Max**. O plano atual é armazenado na conta e controla o acesso ao modelo, comissões, limites de taxa, cotas de RAG, limites de ferramentas, cota de armazenamento, retenção de conversas e as alocações diárias de serviço incluídas. Para preços de assinatura comercial e embalagem dos planos, use a [página de preços da AIVAX](https://aivax.net/pricing). Esta página documenta os limites técnicos da API. ## Como os limites são aplicados - A autenticação rejeita chaves de API ausentes, expiradas ou desconhecidas. - Chaves de API públicas são restritas a rotas públicas e têm limites de solicitação e token por chave e por IP. - O middleware de saldo rejeita solicitações pagas quando o saldo da conta está abaixo do mínimo necessário. - O middleware de armazenamento rejeita solicitações quando o armazenamento da conta excede a cota do plano. - A inferência verifica o acesso ao modelo, taxa de solicitações, taxa de tokens de entrada, taxa BYOK e tamanho de contexto do plano Free. - RAG verifica contagem de coleções, taxa de busca, taxa de inserção e tamanho de importação JSONL. - Ferramentas integradas verificam limites diários de serviço. - Processamento em lote verifica quantos itens de fluxo de trabalho podem ser processados por dia. [API endpoint reference](https://inference.aivax.net/apidocs?embed=iframe&embed-endpoint=Get%20Account%20Balance) ## Limites do Plano Um travessão (`—`) indica que o plano não impõe um limite. Limites específicos de modelo, gateway, provedor ou endpoint ainda podem ser aplicados. | Recurso | Free | Pro | Max | | --- | --- | --- | --- | | **Inferência** | | | | | Acesso ao modelo | Modelos de baixo custo | Todos os modelos | Todos os modelos | | Multiplicador de comissão de inferência | 1.25x | 1.05x | 1.00x | | Solicitações de modelo integrado | 20/min and 500/day | 200/min | — | | Tokens de entrada de modelo integrado | 1,000,000/min | 20,000,000/min | — | | Solicitações BYOK | 30/min | 200/min | — | | Contexto máximo | 65,536 input tokens | — | — | | Cobertura de assinatura LLM | Atualmente desativado | Atualmente desativado | Atualmente desativado | | Solicitações autônomas de texto‑fala | 3/min and 40/hour | 30/min | 300/min | | Solicitações autônomas de transcrição de áudio | 3/min and 40/hour | 30/min | 300/min | | Solicitações de decisão semântica | 10/min | 50/min | — | | **RAG e coleções** | | | | | Coleções | 5 | — | — | | Buscas semânticas | 20/min | 500/min | 3,000/min | | Documentos de classificação de texto | 30/min and 300/day | 1,000/min | 10,000/min | | Documentos de segmentação de texto | 10/min and 100/day | 300/min | 2,500/min | | Buscas de reclassificação | 30/min | 1,000/min | — | | Tempo de processamento Reflex | 30 minutes/day | 6 hours/day | — | | Inserções de documentos | 500/day | 10,000/day | — | | Documentos JSONL por solicitação de importação | 1,000 | 10,000 | 1,000,000 | | Injetor de mídia | 2 files/day | 30 files/day | 1,000 files/day | | **Ferramentas integradas** | | | | | Busca na web | 15/day | 1,000/day | 10,000/day | | Busca X/Twitter | Não disponível | 1,000/day | 10,000/day | | Busca avançada na web | Não disponível | 100/day | 1,000/day | | Geração de documentos e páginas da web | 5/day | 1,000/day | 50,000/day | | Geração e edição de imagens | 5/day | 500/day | 5,000/day | | Ações gerais de serviço | 30/day | 5,000/day | 100,000/day | | Comandos Bash | 300/hour | 30,000/hour | — | | **Testes de agente** | | | | | Novas execuções por conta | 5/min | 30/min | — | | Execuções concorrentes por conta | 1 | 4 | 8 | | **Processamento em lote** | | | | | Itens de fluxo de trabalho processados | 500/day | 100,000/day | — | | Arquivos por solicitação de importação | 1,000 | 1,000 | 1,000 | | Tamanho total de importação | 100 MiB/request | 100 MiB/request | 100 MiB/request | | Tamanho de arquivo importado único | 10 MiB | 10 MiB | 10 MiB | | **Conta e suporte** | | | | | Cota de armazenamento | 30 MB | 2 GB | 20 GB | | Custo por GB excedente | — | $0.50/GB/month | $0.20/GB/month | | Retenção de conversas | 2 horas | 2 dias | 30 dias | | Nível de suporte | E‑mail | Prioridade | Dedicado | ### Limites de taxa de decisão semântica e Testes de agente Esses limites por minuto são compartilhados entre chaves de API pertencentes à mesma conta. Eles são independentes das alocações de assinatura e da cobrança: o uso incluído ainda consome a cota de solicitação ou execução aplicável. - **Decisões semânticas:** cada solicitação consome uma unidade, independentemente de quantas perguntas contém ou qual modelo de decisão é selecionado. Uma solicitação que excede o limite da conta retorna `429 Too Many Requests` antes da avaliação. Veja [Semantic decisions](https://docs.aivax.net/pt-br/docs/generations/decisions.md). - **Testes de agente:** execuções manuais, execuções agendadas e avaliações diretas compartilham uma cota de novas execuções. Uma execução persistente consome sua unidade quando é enfileirada, não novamente quando a execução começa; turnos individuais de conversação não consomem unidades de execução adicionais. Solicitações de execuções manuais excessivas e avaliações diretas retornam `429 Too Many Requests`. Um teste agendado sem cota disponível aguarda uma verificação de agendamento posterior em vez de criar uma execução extra. Execuções existentes permanecem sujeitas aos seus limites separados de simultaneidade e inferência. Veja [Agentic Tests](https://docs.aivax.net/pt-br/docs/inference/agentic-tests.md). Distribua as solicitações pela conta e use tentativas limitadas com backoff após um 429. Uma tentativa imediata ainda encontra a janela de limite de taxa ativa. Max não tem limite imposto pelo plano para essas duas cotas, mas outros limites aplicáveis permanecem em vigor. ### Limites de modelo de decisão semântica Esses limites específicos de modelo se aplicam além das cotas de solicitação ao nível da conta acima. Um limite de contexto não especificado não implica entrada ilimitada. | Modelo | Contexto | | --- | --- | | `@supersonic-labs/julia-1` | 1.024 tokens por pergunta | | `@typesafe/jev-1.13` | 32.768 tokens | | `@respan/span-01` | Não especificado no catálogo atual | | `@respan/span-01-lite` | Não especificado no catálogo atual | | `@jaredpalmer/kev-4b` | 8.192 tokens | | `@upstage/solar-decide` | 524.288 tokens | | `@cloudflare/clef` | 65.536 tokens | | `@cloudflare/clef-flash` | 65.536 tokens | | `@liquid/d1` | 65.536 tokens | | `@perplexity/pplx-decider-v1-27b` | 262.144 tokens | | `@openai/gpt-6-luna-decisions` | 1.050.000 tokens | Julia-1 tem limites de serviço adicionais: | Limite | Valor | | --- | --- | | Perguntas por solicitação | 1–32 | | Opções ou níveis de pontuação por pergunta | 2–20 | | Opções booleanas | Exatamente duas: false e true | | Contexto combinado por pergunta | 1.024 tokens, incluindo estado, pergunta, opções e tokens especiais | | Orçamento de pergunta e opções | 256 tokens dentro do contexto combinado | | Descrição de uma opção individual | No máximo 48 tokens | | Limite de payload de decisão | 256 KiB | Esses limites interagem: vinte opções podem exceder o orçamento combinado de pergunta/opções mesmo que cada descrição se encaixe em seu limite individual. Os atuais limites de serviço Julia-1 da AIVAX se aplicam mesmo que um cartão de modelo upstream liste um contexto maior. Veja [Semantic decisions](https://docs.aivax.net/pt-br/docs/generations/decisions.md) para orientações de uso e erros. ### Limites de solicitação e payload Esses limites se aplicam a todos os planos e são independentes dos limites de plano acima. | Serviço | Limite | | --- | --- | | [Reflex](https://docs.aivax.net/pt-br/docs/rag/reflex.md) reranking | 10.000 documentos candidatos por solicitação; no máximo 200 resultados classificados retornados | | [Audio transcription](https://docs.aivax.net/pt-br/docs/generations/audio-transcriptions.md) | 75 MB de áudio decodificado por solicitação | | [Media descriptions](https://docs.aivax.net/pt-br/docs/generations/media-descriptions.md) | Arquivos remotos são baixados pela AIVAX até 5 MB cada sob o preset `auto` | | [Fetch and OCR](https://docs.aivax.net/pt-br/docs/web-foundation/fetch-and-ocr.md) | 10 MB por item | | [Web search](https://docs.aivax.net/pt-br/docs/web-foundation/web-search.md) | 1–25 resultados por solicitação direta de API (`topn`) | | [Remote instruction sources](https://docs.aivax.net/pt-br/docs/inference/pipelines.md) | Tamanho máximo de resposta 10 MB | | [Agentic Tests](https://docs.aivax.net/pt-br/docs/inference/agentic-tests.md) | Até 16 `resources` e 16 `hooks` por teste | ### Alocações diárias de assinatura incluídas Free, Pro e Max incluem alocações diárias separadas para os serviços abaixo. Cada comparação refere‑se ao mesmo serviço no plano indicado, não a um saldo de crédito compartilhado ou a um número garantido de solicitações. Alocação não utilizada de um serviço não pode cobrir outro. Contas personalizadas não recebem alocações de assinatura. | Serviço incluído | Free | Pro | Max | | --- | --- | --- | --- | | Incorporações de busca e inserção RAG | Alocação base | 25× Free | 4× Pro | | Reclassificação com Reflex | Alocação base | 5× Free | 10× Pro | | Decisões semânticas com Julia-1 | Alocação base | 2.5× Free | 2× Pro | | Extração de buscar e OCR | Alocação base | 10× Free | 5× Pro | Buscas RAG e inserções de documentos compartilham a alocação de incorporação. Ela não cobre geração de respostas, processamento de mídia, classificação de texto ou segmentação. Uma incorporação de consulta servida a partir do cache não a consome. Reflex usa uma alocação de reclassificação separada que inclui entradas em cache e sem cache. Julia-1 é atualmente o único modelo de decisão coberto pela alocação de decisão semântica; outros modelos de decisão são cobrados normalmente. A conversão opcional de JSON Fetch é separada da alocação de extração. A cobertura é avaliada para cada item de serviço medido: a incorporação de um documento, uma incorporação de termo de consulta individual, uma chamada de reclassificação, o uso de entrada de uma chamada de decisão ou uma operação de extração. Cada item é totalmente incluído ou cobrado integralmente nas tarifas normais. Itens incluídos são rastreados no consumo da assinatura, não como entradas de custo zero no histórico de faturamento. As alocações atuais permitem uma margem de 10% acima de sua capacidade base. Um item que excederia essa margem deixa a alocação inalterada e é cobrado normalmente. Uma solicitação pode conter vários itens, de modo que alguns podem ser incluídos enquanto outros são cobrados. As alocações diárias são redefinidas à meia‑noite no horário local do servidor. Verifique os indicadores de uso da assinatura da conta para consumo e status de redefinição; o uso pode exceder 100% enquanto estiver dentro da margem. A cobertura de assinatura LLM está atualmente desativada, portanto a inferência de modelo de texto e a geração de respostas RAG permanecem tarifadas separadamente. As alocações não contornam requisitos de saldo, limites de taxa ou o limite de tempo de processamento separado do Reflex. Veja [Pricing](https://docs.aivax.net/pt-br/docs/pricing.md) para cobranças quando um item não está coberto. Contas personalizadas suportam 8 execuções de testes de agente simultâneas por conta. Seus limites de taxa são os limites do plano Pro multiplicados por um fator acordado para a conta, ou não têm limites de taxa do plano quando nenhum fator é definido. Solicitações de modelo integrado são limitadas tanto pelo número de solicitações quanto pelos tokens de entrada. Grupos de limite de taxa de modelo ajustam os limites de contagem de solicitações: | Grupo de limite de taxa | Multiplicador de limite | | --- | --- | | Comum | 1.0x | | Descontado | 0.5x | | Baixo | 0.3x | | Gratuito | 0.1x | Por exemplo, uma conta Pro normalmente tem 200 solicitações de modelo integrado por minuto. Com um grupo de modelo `Discounted`, o limite ajustado é 100 solicitações por minuto. BYOK usa uma chave de provedor configurada no gateway em vez de um modelo AIVAX integrado, mas as solicitações ainda passam pela infraestrutura da AIVAX e utilizam o limite BYOK do plano. As cotas de classificação de texto e segmentação de texto contam cada item no array `documents` da solicitação, não cada solicitação HTTP. Uma solicitação que excederia qualquer janela ativa retorna `429 Too Many Requests`. A classificação de texto usa o modelo de incorporação padrão e é cobrada pelo trabalho de incorporação realizado. As solicitações autônomas de texto‑fala e transcrição de áudio cada uma usa sua própria cota de solicitações do plano. As sessões de voz usam o modelo em tempo real selecionado e estão sujeitas aos limites aplicáveis de acesso ao modelo, saldo e inferência, em vez dessas cotas de solicitação autônomas. A transcrição de entrada não é suportada atualmente dentro das sessões de voz. O endpoint de importação JSONL rejeita uma solicitação quando atinge o limite de documentos por solicitação do plano. O limite de reclassificação aplica‑se ao endpoint de reclassificação autônomo e às buscas RAG que utilizam um reclassificador, incluindo buscas realizadas através de AI Gateways e ferramentas MCP. O limite Reflex conta o tempo gasto processando solicitações Reflex. Aplica‑se ao endpoint de reclassificação autônomo e às buscas RAG que usam Reflex; entrada em cache não consome a cota separadamente. Solicitações que excedem o limite do plano retornam `429 Too Many Requests`. Veja [Reflex](https://docs.aivax.net/pt-br/docs/rag/reflex.md) para limites de solicitação, comportamento de cache e preços. Ações gerais de serviço compartilham a cota de ação de serviço mostrada acima. O processamento em lote é assíncrono; se o processamento for pausado ou falhar por causa da cota, tente novamente após a janela de cota ser redefinida ou faça upgrade da conta. Para saber como a admissão em lote lida com pausas de cota e resultados parciais, veja [running thousands of LLM requests in batch](https://aivax.net/blog/batch-is-an-admission-control-problem-not-a-queue/). ## Chaves de API públicas Chaves públicas têm limites adicionais independentes do plano da conta. | Escopo | Limites de solicitação | | --- | --- | | Por endereço remoto | 3/5s, 20/min, 300/h, 1.000/dia | | Global por chave | 10/5s, 60/min, 1.500/h, 10.000/dia | | Escopo | Limites de token | | --- | --- | | Por endereço remoto | 100.000/5min, 500.000/30min, 2.000.000/6h, 5.000.000/dia | | Global por chave | 500.000/5min, 2.000.000/30min, 10.000.000/6h, 25.000.000/dia | Chaves públicas podem ser usadas para busca semântica RAG, geração de respostas RAG, geração de fala, descrições de mídia, geração de imagens e complementos de chat. Para complementos de chat, chaves públicas também requerem um UUID completo do AI Gateway, restringem parâmetros de solicitação e omitem superfícies de ferramentas do lado do servidor. Veja [Authentication](https://docs.aivax.net/pt-br/docs/authentication.md). --- Source: https://docs.aivax.net/pt-br/docs/data-collecting.html # Coleta de Dados AIVAX oferece um programa opcional de coleta semântica de dados para contas que optam por contribuir com dados elegíveis de RAG e reranking para o desenvolvimento de modelos. Indexação e armazenamento de documentos estão fora deste programa. Todos os registros de RAG e reranking coletados são anonimizados antes de serem escritos no conjunto de dados de treinamento. A configuração está desativada por padrão e deve ser ativada por um Gerente de Conta autorizado — a pessoa que usa a conta AIVAX, não um papel na API. ## O que muda quando a coleta é ativada Enquanto a configuração estiver ativada: - o uso elegível de incorporação de consulta RAG recebe um desconto (veja [Pricing](https://docs.aivax.net/pt-br/docs/pricing.md#data-collection-discount)); - as operações elegíveis de reranking recebem o mesmo desconto; e - indexação de documentos, armazenamento, inferência não relacionada, ferramentas e outros serviços mantêm seus preços regulares. O desconto se aplica apenas às operações elegíveis realizadas enquanto a coleta está ativada. Desativar a coleta remove o desconto das operações futuras. ## Dados incluídos Dependendo da operação, a IVAX pode coletar: | Operação | Dados coletados | | --- | --- | | Busca semântica RAG | Termos de consulta, reranker selecionado e o conteúdo e pontuações de relevância dos documentos retornados. | | Reranking | Consulta, documentos enviados, reranker selecionado e resultados de classificação. Metadados de resposta desconhecidos e informações de uso ou faturamento não são incluídos. | O conjunto de dados anonimizado não armazena o ID da conta, chave de API, ID da solicitação, IDs de coleção ou documento, nomes de documentos, dados de faturamento ou timestamp da coleta. A conta é consultada de forma transitória apenas para verificar se a coleta está ativada e aplicar o desconto da operação elegível. Indexação de documentos e coleções armazenadas nunca são copiadas para o conjunto de dados de treinamento por este programa; o conteúdo do documento é incluído apenas quando enviado para reranking ou retornado por uma busca RAG. Ativar esta configuração não inclui por si só complementos de chat não relacionados, conversas, chamadas de ferramentas ou outros recursos da conta no conjunto de dados de treinamento. ## Propósito e uso AIVAX pode usar os dados coletados para desenvolver, treinar, ajustar fino, avaliar, testar e melhorar modelos e sistemas relacionados a incorporações, recuperação, classificação, reranking e outros processamentos semânticos. Isso pode incluir a preparação de conjuntos de dados, anotação ou transformação de registros, medição de qualidade e produção de artefatos agregados ou derivados. O acesso é limitado a pessoal autorizado e provedores de serviço que suportam esses propósitos sob obrigações aplicáveis de confidencialidade e proteção de dados. AIVAX não vende dados semânticos coletados nem mantém um mapeamento conta‑para‑registro para este conjunto de dados. ## Responsabilidades do Gerente de Conta Nos termos legais da AIVAX, o Gerente de Conta é a pessoa que usa a conta AIVAX. Antes de ativar a coleta, o Gerente de Conta deve: - ter autoridade para aceitar essas condições para a conta; - possuir uma base legal adequada para que a AIVAX use os dados enviados para os propósitos acima; - fornecer quaisquer avisos e obter quaisquer permissões ou consentimentos necessários dos usuários finais ou de outros titulares de dados; e - evitar o envio de credenciais, segredos, dados regulados ou dados pessoais sensíveis, a menos que sua coleta e uso sejam legalmente permitidos e necessários. ## Ativação, desativação e exclusão O Gerente de Conta pode controlar a coleta em **Dashboard > My account > Semantic data collection**. - A configuração está desativada por padrão. - Ativá‑la autoriza a coleta anonimizada de futuras operações elegíveis de RAG e reranking. - Desativá‑la interrompe a coleta nova e encerra o desconto para operações futuras. - Desativá‑la não exclui automaticamente os registros coletados enquanto o consentimento estava ativo nem reverte o treinamento já concluído. Como os identificadores de conta e os mapeamentos conta‑para‑registro não são armazenados, a AIVAX não pode recuperar ou excluir registros de treinamento apenas a partir de um ID de conta. Solicitações referentes a dados pessoais presentes no conteúdo semântico enviado podem ser enviadas para **privacy@aivax.net** ou **wm@aivax.net** e devem incluir informações suficientes para localizar o conteúdo, quando aplicável. Os registros de origem são retidos apenas pelo tempo razoavelmente necessário para os propósitos documentados, obrigações legais, segurança e requisitos de auditoria, e podem então ser excluídos. A exclusão de registros de origem não exige que a AIVAX re‑treine ou destrua modelos ou artefatos agregados que não identificam mais uma pessoa, exceto quando exigido por lei aplicável. Consulte a [Privacy Policy](https://docs.aivax.net/pt-br/docs/legal/privacy-policy.md) e os [Terms of Use](https://docs.aivax.net/pt-br/docs/legal/terms-of-service.md) para os termos legais vigentes. --- Source: https://docs.aivax.net/pt-br/docs/changelogs.html # Logs de alterações Alterações técnicas que afetam produtos, serviços ou a API pública da AIVAX. As datas indicam quando as entradas foram adicionadas ou atualizadas, não datas confirmadas de implantação em produção. Cada item identifica o produto ou serviço afetado; manutenção sem efeito visível ao usuário é omitida. ## Quinta-feira, 8 de outubro de 2026 Alterações: - **Documentation — New Learn section.** O site de documentação agora inclui [Learn](https://docs.aivax.net/pt-br/learn/index.md), um conjunto de 11 módulos e 63 unidades curtas que explicam agentes de IA desde os primeiros conceitos até a produção para leitores sem formação em computação: o que é um agente, modelos de linguagem, prompts e contexto, seleção e parâmetros de modelo, ferramentas e integrações, conhecimento e RAG, fluxos avançados, avaliação e observabilidade, segurança e conformidade, custo e escala, e estudos de caso práticos. As unidades incluem exemplos interativos, tutoriais passo a passo, tabelas comparativas, gráficos e quizzes curtos, e cada uma pode ser marcada como concluída no navegador. Três caminhos de aprendizado sugeridos (Iniciante, Desenvolvedor, Negócio) agrupam os módulos por objetivo. Learn está disponível em inglês e português e está incluído na busca do site. - **Models — Claude Haiku 5.5 added.** Adiciona `@anthropic/claude-5.5-haiku` (Claude Haiku 5.5), sucessor direto do Claude Haiku 4.5, ao catálogo de modelos de texto. Suporta entrada de imagem e arquivo e chamada de ferramentas, com janela de contexto de 1 M de tokens. O alias `@model-router/claude:budget` agora seleciona Claude Haiku 5.5, substituindo Claude Haiku 4.5. Aplicações que usam esse alias podem observar mudanças na qualidade da resposta, latência e custo. Identificadores de modelo explícitos existentes permanecem inalterados. - **Inference — Provider selection with `routing_options`.** As conclusões de chat aceitam `routing_options` com `preset` (`Balanced`, `Cheapest`, `Fastest` ou `Quality`) e `allowed_providers`, uma lista ordenada de tags de provedores como `["azure-us", "azure-eu", "*"]`. A AIVAX tenta cada tag na ordem e passa para a próxima somente quando nenhum provedor correspondente está disponível; `"*"` corresponde a qualquer provedor. `allowed_providers` tem padrão `["*"]`, e uma lista vazia é rejeitada. Sem `"*"`, a requisição falha quando nenhum dos provedores listados está disponível. `routing_preset` está obsoleto: ainda funciona, mas use `routing_options.preset`. Gateways de IA aceitam a mesma lista ordenada em `parameters.allowedProviders` (padrão `["*"]`), editável no editor de gateway sob **Allowed providers** para modelos integrados; valores de requisição substituem isso apenas para a requisição. Veja [Provider routing](https://docs.aivax.net/pt-br/docs/inference/inference.md#provider-routing). - **Inference — Serving provider in responses.** Respostas de conclusão de chat e cada bloco transmitido incluem um campo `provider` ao lado de `model` com a tag do provedor que atendeu ao modelo integrado. É `null` para gateways que usam suas próprias credenciais de provedor. - **Models — `filter` on `GET /v1/models`.** A lista de modelos aceita um parâmetro de consulta opcional `filter` com um nome de modelo e retorna apenas as entradas correspondentes: o nome exato ou seus snapshots datados, ordenados da correspondência mais próxima. Sem ele, a lista permanece inalterada. - **Models — Provider tags.** Os detalhes do provedor na página de Modelos do painel mostram a tag de cada provedor com um botão de copiar, e `GET /v1/models` a devolve como `tag` em cada entrada de provedor. Endpoints de provedor em diferentes regiões ou variantes têm tags distintas, como `azure-us` e `azure-eu`. ## Quarta-feira, 7 de outubro de 2026 Alterações críticas: - **Inference — `File` and `OtherFiles` pre-processing now cover every file.** Gateways e requisições que habilitam apenas a flag multimodal `OtherFiles` agora convertem arquivos PDF com OCR ao invés de enviá‑los ao modelo principal sem alterações. Aqueles que habilitam apenas a flag `File` agora convertem arquivos não‑PDF com OCR também, sendo cobrados em Unidades de Processamento. Gateways e requisições com ambas as flags ou `All` não são afetados. Para deixar arquivos inalterados, defina `multimodal_resolver` (ou `multimodalResolverParameters` do gateway) sem um `fileEngine`; nenhum tipo de arquivo será pré‑processado. Alterações: - **Inference — Per-media multimodal resolver engines.** As conclusões de chat aceitam `multimodal_resolver`, e gateways de IA aceitam `multimodalResolverParameters`, com campos `imageEngine`, `audioEngine`, `videoEngine` e `fileEngine`. Cada um seleciona como aquele tipo de conteúdo é convertido em texto antes da inferência: `InferenceLow` (modelo multimodal menor; `Inference` é um alias), `InferenceHigh` (modelo multimodal maior e mais preciso, com custo maior), `Ocr` para imagens e arquivos (cobrado em Unidades de Processamento, como Fetch e OCR), ou `Stt` para áudio (speech‑to‑text, cobrado por segundo). OCR aceita URIs de dados base64 e URLs públicas. Resultados de cada motor são armazenados em cache por conteúdo e motor, de modo que mídia repetida não é cobrada novamente. As flags `multimodal_preprocess` e a configuração `enabledMultimodalFeatures` do gateway estão obsoletas, mas continuam funcionando com os motores equivalentes; as novas configurações prevalecem quando presentes. O editor de gateway agora configura um motor por tipo de conteúdo. Veja [Multimodal pre-processing](https://docs.aivax.net/pt-br/docs/inference/inference.md#multimodal-pre-processing). - **RAG — Document filters in the Collections MCP and the gateway query tool.** A ferramenta de busca do Collections MCP e a ferramenta `query` dos gateways de IA que usam a estratégia de consulta `QueryFunction` aceitam um argumento opcional `filter` com a mesma sintaxe do campo `filter` da busca semântica, como `tags has "faq" and updatedAt >= now-30d`. Filtros são aplicados antes que os termos de busca sejam incorporados; quando nenhum documento corresponde, a ferramenta retorna nenhum resultado sem cobranças de incorporação ou busca. Um filtro inválido é retornado ao modelo como erro de ferramenta. O RAG automático de gateway ainda não aplica filtros. Veja [Document Filters](https://docs.aivax.net/pt-br/docs/filters/document-filters.md). ## Terça-feira, 6 de outubro de 2026 Alterações: - **RAG — Faster text segmentation without sanitization.** Requisições `POST /api/v1/generations/segment` com `sanitize` omitido ou `false` não usam mais um modelo de linguagem. Os limites agora são escolhidos a partir da estrutura do documento (títulos, listas, tabelas, blocos de código, parágrafos e finais de frase) e da similaridade semântica de trechos vizinhos, visando segmentos de aproximadamente 300 tokens. Os segmentos cobrem todo o documento na ordem de origem sem sobreposição e mantêm quebras de linha originais; um limite pode cair no final de uma frase dentro de uma linha. Documentos de cerca de 300 tokens ou menos são retornados como um único segmento. O formato da resposta, cotas e preço por token permanecem inalterados; `usage.processing_units` agora relata os tokens dos documentos submetidos. Requisições com `sanitize: true` mantêm o comportamento anterior. Veja [Text segmentation](https://docs.aivax.net/pt-br/docs/rag/text-segmentation.md). - **Models — Six new semantic decision models.** Adiciona `@upstage/solar-decide` (Upstage Solar Decide), `@cloudflare/clef` (Cloudflare Clef), `@cloudflare/clef-flash` (Cloudflare Clef Flash), `@liquid/d1` (LiquidAI d1), `@perplexity/pplx-decider-v1-27b` (Perplexity Decider V1 27B) e `@openai/gpt-6-luna-decisions` (OpenAI GPT-6 Luna Decisions) ao catálogo de decisões semânticas. Todos seis suportam perguntas `noul`, `choice` e `score` via `POST /api/v1/generations/decisions` e são cobrados por token de entrada nas tarifas publicadas, sem cobrança de token de saída, com ajustes de conta e plano existentes ainda aplicáveis. Eles não são cobertos pela cota diária de decisões semânticas, que permanece limitada ao Julia‑1. Identificadores de modelo existentes permanecem inalterados. Veja [Semantic decisions](https://docs.aivax.net/pt-br/docs/generations/decisions.md) e [Pricing](https://docs.aivax.net/pt-br/docs/pricing.md#semantic-decisions). ## Segunda-feira, 5 de outubro de 2026 Alterações críticas: - **Chat clients — Current date and time are no longer added to the instructions.** Integrações de Telegram e WhatsApp, incluindo mensagens agendadas, não adicionam mais a data e hora do servidor às instruções do modelo. Modelos devem obter a hora atual de uma ferramenta. Para manter comportamento dependente de data, como lembretes, habilite a função embutida de data e hora ou o shell (`date`) no gateway de IA usado pelo cliente de chat. - **Account — Reseller plan renamed to Custom.** Contas no plano Reseller agora reportam o plano como `Custom` ao invés de `Reseller` nas respostas da API, como no endpoint de saldo, e no cabeçalho de resposta `X-Authenticated-Account-Plan`. Integrações que comam o nome do plano com `Reseller` devem aceitar `Custom`. Contas Custom podem ter limites de taxa definidos como múltiplo dos limites do plano Pro; contas sem múltiplo configurado permanecem sem limites de taxa de plano. Veja [Plans and Limits](https://docs.aivax.net/pt-br/docs/limits.md). Correções: - **AI gateways — Shell tool commands without parameters now run.** No shell do gateway, chamar uma ferramenta que não tem parâmetros, como `list_scheduled_jobs`, agora a executa ao invés de imprimir sua ajuda. Use `--help` para visualizar a ajuda. - **Collections — De-duplication no longer stops before removing documents.** Uma tarefa de desduplicação que encontrou documentos duplicados podia parar com zero documentos removidos e sem arquivos de backup, porque a gravação do backup dos documentos removidos falhava. Essas tarefas agora salvam os arquivos de backup, removem os duplicados e incluem os links de download na notificação de conclusão. Tarefas que pararam dessa forma não removeram nenhum documento; inicie uma nova tarefa para tentar novamente. Alterações: - **Conversations — Provider and routing details.** Conversas agora registram o provedor que atendeu à resposta mais recente, sua política de coleta de dados, a variante do modelo (`fast`, `flex` ou `priority`) quando usada, e a opção de roteamento usada para selecionar o provedor. O endpoint View Conversation os devolve nos campos `providerName`, `providerDataCollection`, `modelVariant` e `routingOption`, e o endpoint List Conversations devolve `providerName`, `modelVariant` e `routingOption`. Esses campos são `null` para gateways que usam suas próprias credenciais de provedor e para conversas armazenadas antes desta mudança. A lista de conversas no painel mostra colunas Provider, Routing e Variant; Provider mostra BYOK quando nenhum provedor foi registrado. A tabela tem rolagem horizontal, e as ações da linha permanecem visíveis. - **AI gateways — Time zone and culture for the shell.** As opções do shell do gateway aceitam `timeZone`, um fuso horário IANA como `America/Sao_Paulo`, e `culture`, como `pt-BR`. O comando `date` usa o fuso horário para sua saída e para datas sem deslocamento explícito, e usa a cultura para nomes de dias e meses. Os padrões permanecem UTC e cultura invariável; `date -u` sempre imprime UTC. - **RAG — Document filters for semantic search and answer generation.** Os endpoints de busca semântica e geração de respostas aceitam um campo opcional `filter` que restringe a busca a documentos que correspondam a condições sobre nome, conteúdo, tags, datas de criação e atualização ou metadados, como `tags has "finance" and createdAt >= now-30d`. O campo aceita uma string ou um array de strings combinadas com `and`. Filtros são aplicados antes que os termos de busca sejam incorporados; quando nenhum documento corresponde, a requisição retorna um resultado vazio sem cobranças de incorporação ou busca. Filtros inválidos retornam `400 Bad Request` com a posição do erro. Filtros ainda não estão disponíveis no RAG de gateway de IA ou no Collections MCP. Veja [Document Filters](https://docs.aivax.net/pt-br/docs/filters/document-filters.md). - **RAG — Filters and visual results in the collection playground.** O playground de coleção tem uma seção Filters onde cada linha é um filtro de documento; todas as linhas devem corresponder e são enviadas como o array `filter`. Resultados podem ser visualizados como Visual, mostrando a resposta gerada e cada documento com sua pontuação, metadados e documentos referenciados, ou como JSON bruto. O playground agora usa o reranker `rrf` por padrão; ainda é possível escolher outro reranker. ## Sábado, 3 de outubro de 2026 Alterações: - **Documentation — Updated reading and search experience.** A documentação adiciona busca específica por idioma, temas claro e escuro, navegação móvel e um menu de página para visualizar ou copiar Markdown. Agentes de IA podem usar o índice de documentação e arquivos de texto completo. URLs de documentação existentes continuam resolvendo; alguns guias antigos redirecionam para a documentação atual do produto. ## Sexta-feira, 2 de outubro de 2026 Alterações: - **Models — Claude Sonnet 5.5 and GPT-6.1 Sol added.** Adiciona `@anthropic/claude-5.5-sonnet` (Claude Sonnet 5.5), sucessor direto do Claude Sonnet 5, e `@openai/gpt-6.1-sol` (GPT‑6.1 Sol), uma atualização do GPT‑6 Sol, ao catálogo de modelos de texto. Ambos suportam pensamento, entrada de imagem e arquivo e chamada de ferramentas; GPT‑6.1 Sol também suporta saída estruturada. Os aliases `@model-router/claude:mid` e `@model-router/openai:mid` agora selecionam Claude Sonnet 5.5 e GPT‑6.1 Sol, substituindo Claude Sonnet 5 e GPT‑6 Sol, respectivamente. Aplicações que usam esses aliases podem observar mudanças na qualidade da resposta, latência e custo. Identificadores de modelo explícitos existentes permanecem inalterados. ## Quinta-feira, 1 de outubro de 2026 Alterações críticas: - **API — Error status codes reflect the failure source.** Falhas não são mais retornadas todas como `400 Bad Request` pelos endpoints de conta, RAG, web e geração. Requisições inválidas ainda retornam `400`, e falhas de autenticação, saldo e permissão que antes apareciam como `400` agora retornam `401`, `402` ou `403`. Falhas inesperadas da AIVAX retornam `500 Internal Server Error` com mensagem genérica, e serviços externos indisponíveis, incluindo provedores de modelo, retornam `503 Service Unavailable` com cabeçalho `Retry-After`. Em endpoints compatíveis com OpenAI, o código de erro agora é `invalid_request_error`, `service_unavailable` ou `server_error` ao invés de sempre `server_error`. Clientes que tratam toda resposta não‑2xx como erro de requisição devem tentar novamente em respostas `500` e `503`, obedecendo ao `Retry-After`. Veja [Troubleshoot the first request](https://docs.aivax.net/pt-br/docs/getting-started.md#troubleshoot-the-first-request). Correções: - **Chat completions — Malformed tool declarations rejected as invalid requests.** Requisições cujas entradas `tools` têm campos ausentes ou com tipo errado agora retornam `400 Bad Request` ao invés de erro de servidor. - **Gateways — Bash tool reports invalid options to the model.** Opções desconhecidas ou valores que não correspondem aos parâmetros de uma ferramenta agora retornam um erro de comando que o modelo pode corrigir, ao invés de falhar a chamada da ferramenta. Alterações: - **MCP utilities — Media generation MCP.** Um novo servidor MCP hospedado em `https://inference.aivax.net/v1/mcp/media-generation` expõe `list_models`, `generate_image` e `generate_speech` para clientes compatíveis com MCP. `list_models` aceita um `type` de `image` ou `audio`; imagens geradas e fala em MP3 são retornadas como URLs públicas. Use o cabeçalho opcional `X-Mcp-Enabled-Tools` para escolher quais ferramentas o cliente vê. Gerações usam a mesma precificação e limites das APIs de Geração de Imagem e Geração de Fala e exigem saldo positivo. Veja [Media generation MCP](https://docs.aivax.net/pt-br/docs/mcp-utilities/media-generation-mcp.md). ## Segunda-feira, 28 de setembro de 2026 Correções: - **Gateways — Bash tool help accepts nullable parameters.** Solicitar ajuda para ferramentas cujos parâmetros aceitam múltiplos tipos, incluindo `null`, não falha mais ao listar seus argumentos. A ajuda preserva os tipos aceitos e caminhos de parâmetros aninhados. Nenhuma mudança no esquema da ferramenta é necessária. - **Chat integrations — Failure notifications restored.** Conversas em streaming e não‑streaming novamente tentam enviar “System: something went wrong. Please, try again later.” após uma falha de geração irrecuperável, tentativas de recuperação esgotadas ou um turno que não envia mensagem. Uma falha final é relatada mesmo se uma resposta parcial anterior foi entregue. A entrega de notificações ainda depende da disponibilidade do serviço de mensagens. Alterações: - **Gateways / MCP — Server instructions and remote skills.** Fontes MCP podem incluir instruções de servidor e documentos de skill raiz junto com ferramentas, incluindo fontes adicionadas por workers. Ambas as opções têm padrão habilitado; defina `allowClientInstructions` ou `allowRemoteSkills` como `false` para excluir esse conteúdo. Descoberta de skill requer que o servidor remoto anuncie capacidades compatíveis; skills de conta permanecem disponíveis. O conteúdo de skill remoto é verificado contra seu tamanho, digest e frontmatter anunciados. Skills dinâmicos, que suportam arquivos, scripts e servidores que requerem o protocolo de descoberta mais recente, não são suportados. Veja [MCP functions](https://docs.aivax.net/pt-br/docs/tools/mcp.md#server-instructions-and-remote-skills) para compatibilidade e limites de confiança. - **Gateways — Time zone selection.** A configuração de data e hora atual agora oferece um dropdown de fusos horários agrupados por região, incluindo UTC. Fusos horários salvos existentes são preservados ao reabrir a configuração. - **Models — Seven new text models.** Adiciona `@cohere/command-a-plus`, `@upstage/solar-mini4`, `@aion-labs/aion-3.5`, `@aion-labs/aion-3.5-mini`, `@qwen/qwen3.8-max-prime`, `@z-ai/glm-5.3-prime` e `@fireworks/ember-1` como modelos de texto selecionáveis, cobrados por provedor nas tarifas de token publicadas, com ajustes de conta e plano existentes ainda aplicáveis. Modelos Upstage e Fireworks agora exibem seus ícones de provedor ao invés do fallback genérico. Identificadores de modelo existentes permanecem inalterados. ## Domingo, 27 de setembro de 2026 Alterações: - **Telegram — Compact tool progress.** Respostas transmitidas mostram apenas o último preâmbulo de ferramenta no indicador de pensamento quando a visibilidade de chamada de ferramenta está habilitada, ao invés de acumular blocos de nomes de ferramenta na resposta. A resposta final não contém blocos de progresso de ferramenta. Outros canais de mensagem e respostas não transmitidas permanecem inalterados. - **Gateways — Bash tool selection.** A lista de ferramentas Bash agora inclui um atalho para `get_date_time` (Data e hora atuais). Listas de inclusão e exclusão aceitam padrões curinga sem distinção entre maiúsculas e minúsculas: `*` corresponde a qualquer número de caracteres, como em `something_*`, e `?` corresponde a um caractere. Nomes de ferramentas exatos permanecem suportados. - **Semantic decisions and Agentic Tests — Account rate limits.** Limites de conta por minuto aplicam‑se a requisições de decisão semântica e novas execuções de Testes Agenticos; avaliações manuais, agendadas e diretas compartilham o limite de execuções de teste. Requisições acima do limite retornam HTTP 429, enquanto testes agendados aguardam uma verificação de agendamento posterior. Clientes devem espaçar requisições e tentar novamente após o limite de taxa limpar. Limites de inferência existentes ainda se aplicam. Veja [Plans and Limits](https://docs.aivax.net/pt-br/docs/limits.md#semantic-decision-and-agentic-test-rate-limits), [Semantic decisions](https://docs.aivax.net/pt-br/docs/generations/decisions.md#account-rate-limits) e [Agentic Tests](https://docs.aivax.net/pt-br/docs/inference/agentic-tests.md#run-and-inspect-a-test). - **Models — Consistent speech synthesis prices.** Preços do catálogo de texto‑para‑fala agora derivam das mesmas tarifas por caractere usadas para calcular uso de síntese, exibidos por 1 000 caracteres. Identificadores de modelo e tarifas de cobrança permanecem inalterados. - **Models — Comparable transcription prices.** Preços de modelos de fala‑para‑texto são exibidos de forma consistente em USD por minuto, convertendo tarifas horárias e por segundo para comparação sem mudar tarifas de cobrança ou medição de duração. - **Image generation — Fixed output and reference prices.** Geração de imagem usa preço fixo por saída entregue mais preço por referência para cada saída. Modelos cujos provedores cobram por tokens ou megapixels agora usam estimativas arredondadas ao invés de cobranças de token medido. O processamento de prompt está incluído na estimativa de saída; modelos sem cobrança de referência separada listam taxa de referência zero. Estes são tarifas fixas, não recibos pelo consumo real do provedor. Cobranças de imagem não incluem mais a margem de geração de imagem da AIVAX nem multiplicadores de preço de conta e plano. Veja [Image generation](https://docs.aivax.net/pt-br/docs/generations/images.md). - **Models — Subscription coverage.** A página de Modelos agora inclui uma coluna “Subscription Usage” para rerankers e modelos de decisão semântica. “Included” identifica modelos elegíveis às cotas diárias do plano; “Excluded” identifica modelos sem cobertura. Elegibilidade não indica a cota restante da conta. Ambos os catálogos de serviço expõem essa elegibilidade como `subscriptionUsage`. - **Subscriptions — Included daily usage allowances.** Assinaturas Free, Pro e Max incluem cotas diárias separadas para busca RAG e inserção de embeddings, entrada Reflex (incluindo entrada em cache) e decisões semânticas Julia‑1. Cada item medido é totalmente incluído ou cobrado nas tarifas normais; uma requisição com múltiplos itens pode combinar uso incluído e pago. Isso também se aplica à extração OCR, substituindo cobertura parcial. Itens incluídos aparecem no consumo da assinatura sem entradas de histórico de cobrança de custo zero; indicadores de uso podem exceder a cota base dentro da margem permitida. Itens não cobertos mantêm registros de cobrança normais. `includesSubscriptionModels` é falso enquanto assinaturas de inferência estão desativadas; cobertura de assinatura LLM permanece desativada. O limite diário de tempo de processamento do Reflex permanece separado, e contas de revendedor não recebem cotas de assinatura. Veja [Plans and Limits](https://docs.aivax.net/pt-br/docs/limits.md#included-daily-subscription-allowances) e [Pricing](https://docs.aivax.net/pt-br/docs/pricing.md). ## Sábado, 26 de setembro de 2026 Alterações críticas: - **Image generation — Deprecated models removed.** Remove `majicMIX-realistic`, `AbsoluteReality`, `CyberRealistic`, `CyberRealistic-Pony`, `RealCartoon-Realistic`, `Hassaku-XL` e `Meina-Mix` dos modelos disponíveis. Requisições de API diretas usando esses identificadores agora falham; selecione um modelo ativo. Geração de imagem embutida usa `flux-schnell` quando nenhum modelo válido está configurado, substituindo o padrão `AbsoluteReality` obsoleto. Revise configurações salvas; estilo de saída e preços diferem. Alterações: - **Image generation — Additional Pollinations models.** Adiciona 16 modelos oficiais de imagem raster, incluindo variantes FLUX 1.1 Pro e FLUX 2, variantes MAI Image, GPT Image 2.5 Flare e Sunburst, Qwen Image 2.1 e 3, Grok Imagine Image 2.0, Recraft V4.1 Flash, Krea 2 Medium, DreamShaper 8 LCM e Seedream 5 Pro, com pré‑visualizações geradas por modelo no seletor de imagens. Modelos da comunidade e SVG são excluídos. O catálogo exibe as unidades de cobrança. Veja a entrada de 27 de setembro para a mudança subsequente de cobrança de preço fixo. Gerações falhas não são contadas como imagens entregues. Veja [Image generation](https://docs.aivax.net/pt-br/docs/generations/images.md). - **Models — Service model catalogs.** A página de Modelos agora inclui tabelas para geração de imagem, fala‑para‑texto, texto‑para‑fala, reranking e decisões semânticas, com descrições fornecidas pelo backend, datas de lançamento, preço base em USD com unidades de cobrança e um menu de Ações em cada tabela de serviço‑modelo para copiar nomes de modelo e abrir documentação de integração. Nomes de modelo mostram um rótulo amigável quando disponível enquanto copiam o identificador aceito pela API. A precificação usa unidades compactas de entrada, entrada em cache, saída, imagem, caractere e duração separadas por setas quando aplicável, com tarifas completas e unidades disponíveis na tooltip. Catálogos são ordenados do mais recente ao mais antigo. Datas de catálogo OpenRouter e nomes amigáveis suplementam metadados de lançamento ausentes; datas de catálogo são rotuladas explicitamente ao invés de apresentadas como datas de lançamento do fabricante. Modelos sem nenhuma data permanecem ao final. Falhas de requisição de catálogo podem ser tentadas novamente de forma independente. Catálogos de informação pública expõem esses detalhes, incluindo o novo catálogo `GET /api/v1/information/speech-models.json`. Ajustes de preço de conta e plano ainda se aplicam. Veja [Pricing](https://docs.aivax.net/pt-br/docs/pricing.md) e [Semantic decisions](https://docs.aivax.net/pt-br/docs/generations/decisions.md). - **Privacy — Judicial disclosure and retention clarified.** A [Privacy Policy](https://docs.aivax.net/pt-br/docs/legal/privacy-policy.md) e os [Terms of Use](https://docs.aivax.net/pt-br/docs/legal/terms-of-service.md) especificam ordens judiciais brasileiras para divulgação, solicitações estrangeiras para preservar logs existentes por até 1 ano, e até 1 ano de logs técnicos e metadados. Clarificam que o conteúdo da conversa é coletado somente quando Conversas está habilitado para a requisição ou conta, e que recursos de conta disponíveis e backups de até 3 meses podem ser divulgados sob ordem judicial brasileira. A licença de conteúdo nos Termos está expressamente sujeita a esses limites. - **Generations — Additional decision models.** O guia de [Semantic decisions](https://docs.aivax.net/pt-br/docs/generations/decisions.md) explica tipos de perguntas e interpretação de respostas. O endpoint público `GET /api/v1/information/decisions-models.json` lista nomes canônicos, aliases, tipos de perguntas suportados, comprimentos de contexto, datas de lançamento e preços base por token. Adiciona `@respan/span-01`, `@respan/span-01-lite`, `@jaredpalmer/kev-4b` e `@supersonic-labs/julia-1` como opções de modelo para decisões semânticas. Julia‑1 suporta `choice`, `score` e `noul`; seu uso de entrada inclui o estado repetido para cada pergunta. Ajustes de preço de conta e plano existentes se aplicam, e identificadores de modelo e formatos de requisição permanecem inalterados. Veja [Plans and Limits](https://docs.aivax.net/pt-br/docs/limits.md#semantic-decision-model-limits) e [Pricing](https://docs.aivax.net/pt-br/docs/pricing.md#semantic-decisions) para limites e tarifas atuais. ## Terça-feira, 22 de setembro de 2026 Alterações: - **Models — GPT-6 Sol and Luna added.** Adiciona `@openai/gpt-6-sol` e `@openai/gpt-6-luna`, incluindo suas variantes de raciocínio `:pro`. Os aliases `@model-router/openai:mid` e `@model-router/openai:budget` agora selecionam GPT‑6 Sol e GPT‑6 Luna, respectivamente. Aplicações que usam esses aliases podem observar mudanças na qualidade da resposta, latência e custo. Identificadores de modelo explícitos permanecem inalterados. ## Segunda-feira, 21 de setembro de 2026 Alterações críticas: - **Gateways — Off-topic moderation is being removed.** O limiar dedicado a tópicos fora do escopo não bloqueará mais requisições que se desviem do propósito da conversa. Se sua aplicação depende dessa verificação, revise suas restrições de tópico antes de adotar a mudança; as categorias de moderação restantes não são um substituto equivalente. - **Built-in tools — Advanced web research is being disabled.** A ferramenta `AdvancedWebUsage` retornará uma resposta indisponível ao invés de realizar a pesquisa. Remova a dependência dessa ferramenta das instruções e fluxos do gateway. A [Web Search](https://docs.aivax.net/pt-br/docs/web-foundation/web-search.md) padrão e a extração de URL permanecem alternativas separadas, não substitutos equivalentes para pesquisas de múltiplas etapas. - **Models — Mercury 2.5 model identifier changed.** Substitua `@inception/mercury-2.5-preview` por `@inception/mercury-2.5` em requisições e configurações de gateway. O identificador de pré‑visualização não está mais listado, e o substituto não está mais marcado como pré‑visualização. - **Gateways / MCP — MCP tool names are source-qualified.** Ferramentas de diferentes fontes MCP não compartilham mais um nome não qualificado no gateway. Revise instruções de gateway, regras de seleção de ferramenta e workers que correspondem a nomes exatos de ferramenta. O nome original da ferramenta no servidor MCP conectado permanece inalterado. Veja [MCP functions](https://docs.aivax.net/pt-br/docs/tools/mcp.md). Correções: - **Collections, Gateways, and Generations — Service model availability.** Geração de resposta de coleção, roteamento de gateway, utilitários de chat e serviços de processamento de mídia evitam selecionar modelos temporariamente indisponíveis. O Teach Skill e pré‑processamento multimodal podem tentar outro modelo disponível após uma falha recuperável; o sucesso ainda depende da disponibilidade do serviço. - **Teach Skill — Usage calculation.** Cobranças de processamento do Teach Skill usam a precificação do modelo associada à requisição concluída, inclusive quando uma tentativa altera o modelo usado. Veja [Teach Skill](https://docs.aivax.net/pt-br/docs/generations/teach-skill.md) e [Pricing](https://docs.aivax.net/pt-br/docs/pricing.md). - **Fetch and OCR — More reliable page extraction.** Requisições de conteúdo de página canceladas ou expiradas não deixam a extração de página em execução indefinidamente. Isso resolve casos em que a extração de conteúdo web poderia travar. - **Chat clients — Final reply and message history.** `completionText` agora seleciona a resposta final gerada pelo assistente ao invés de combiná‑la com texto assistente anterior durante o uso de ferramenta. O campo de resposta `createdMessages` adicionado preserva mensagens recém‑geradas em ordem, incluindo interações de ferramenta; mensagens submetidas não são repetidas. Use esse campo quando precisar do turno completo gerado. - **Gateways / MCP — Structured MCP results are retained.** Assistentes recebem conteúdo de resultado estruturado além dos blocos de conteúdo suportados, evitando perda de informação quando uma ferramenta MCP retorna saída estruturada. - **Fetch and OCR — X post extraction.** Melhorada a extração de texto legível de links de postagens públicas do X. Disponibilidade de conteúdo e restrições de acesso ainda se aplicam. - **Fetch and OCR — Plain-text normalization changed.** Conversão para texto plano não colapsa mais espaços internos nem normaliza caracteres Unicode. Espaços circundantes ainda podem ser aparados nos resultados de extração. Aplicações que comparam texto extraído exatamente ou exigem espaçamento normalizado devem fazer essa normalização por conta própria. Alterações: - **Fetch and OCR — Optional structured extraction.** Forneça `responseSchema` para converter conteúdo extraído em JSON. Resultados adicionam `extractedObject` e `jsonProcessingUnits` mantendo `extractedText` em caso de sucesso. Sem esquema, os novos campos são nulos e zero respectivamente. Conversão JSON é cobrada separadamente da extração e não está coberta pela cota diária de extração. Veja [Fetch and OCR](https://docs.aivax.net/pt-br/docs/web-foundation/fetch-and-ocr.md). - **Generations — Semantic decisions.** Avalie múltiplas perguntas nomeadas contra um estado JSON compartilhado usando `noul` (critérios verdadeiro/falso), `choice` ou `score`. Respostas incluem respostas nomeadas, uso de tokens e custo. O serviço requer saldo positivo, e seu uso de tokens contribui para os totais de uso da conta. - **Built-in tools — Current date and time.** A opção `DateTime` permite que assistentes solicitem a data, hora, dia da semana, fuso horário e deslocamento UTC atuais. Defina `dateTimeTimeZone` para o fuso horário desejado; o padrão é `America/Los_Angeles`, com ajustes de horário de verão, independente do fuso horário do navegador. Fusos horários inválidos são rejeitados. - **Models — Additional model choices.** Adiciona GLM-5.3-FlashX, Fugu Max, Pareto, Ling 3.0 Flash VL, MiMo‑V2.6‑Pro, MiMo‑V2.6‑Flash, MiMo‑V2.6‑Pro‑UltraSpeed e Grok 4.7 ao catálogo de inferência. Os aliases frontier, mid e budget da Xiaomi agora selecionam modelos MiMo V2.6, enquanto `@model-router/grok:latest` seleciona Grok 4.7. Usuários de alias podem observar diferentes qualidade de resposta, latência e custo; disponibilidade e capacidades suportadas dependem do modelo selecionado e do plano da conta. - **Inference — Transient-failure recovery.** Requisições de inferência podem fazer tentativas de recuperação adicionais quando um provedor está temporariamente indisponível. Isso pode evitar algumas requisições falhas, mas também pode aumentar o tempo de resposta antes de um erro ser retornado. - **Avi Assistant — Updated default model.** O assistente do console AIVAX altera seu modelo padrão, o que pode mudar o estilo de resposta, latência e custo de uso. Isso não altera o modelo selecionado nos seus próprios gateways. - **Documentation — Updated service guidance.** A visão geral da documentação da API e a orientação do Avi Assistant cobrem sessões de voz, testes agenticos, classificação, segmentação, reranking e extração web, com links de documentação atuais e orientações de cobrança específicas por serviço. Esta é uma atualização de orientação, não a introdução desses serviços. - **Models — DeepSeek V4.1 Flash added.** O catálogo de inferência inclui `@deepseek/deepseek-v4.1-flash` com suporte a chamada de ferramentas. Verifique disponibilidade do modelo e elegibilidade do plano antes de selecioná‑lo. - **Models — Router selections updated.** `@model-router/deepseek:latest` e `@model-router/deepseek:budget` agora selecionam DeepSeek V4.1 Flash. Aplicações que usam esses aliases podem observar diferentes qualidade de resposta, latência e custo sem mudar o alias. Adiciona `@model-router/claude:frontier-mythos` e `@model-router/mercury:latest` como opções adicionais. - **Chat clients — Structured prompt input.** Prompts síncronos de cliente de chat aceitam texto simples, uma única mensagem ou um array ordenado de mensagens, incluindo chamadas de ferramenta do assistente e resultados de ferramenta correspondentes. Entrada de mensagem única existente permanece suportada. `instructions` opcional adiciona contexto para aquela requisição sem substituir o contexto da sessão salvo. Veja [Chat clients](https://docs.aivax.net/pt-br/docs/features/chat-clients.md). - **Chat clients — Turns without session persistence.** Defina `commit` como falso para gerar uma resposta sem salvar as mensagens submetidas e geradas no histórico da sessão. O padrão permanece verdadeiro. Isto não é uma pré‑visualização gratuita: inferência e ações de ferramenta ainda são executadas. Para continuar uma interação de ferramenta não confirmada, envie a mensagem de chamada de ferramenta do assistente junto com seus resultados de ferramenta. - **Agentic Tests — Optional testing notifications.** Preferências de notificação de conta podem habilitar resumos semanais de testes e alertas quando um teste atinge três falhas consecutivas. Estes complementam notificações de falha e recuperação existentes. Veja [Agentic Tests](https://docs.aivax.net/pt-br/docs/inference/agentic-tests.md). - **Fetch and OCR — Rendered web content.** Extração de HTML suporta conteúdo de página renderizado, melhorando a cobertura de páginas cujo texto legível depende de scripts. Renderização é cobrada em unidades de processamento; isso não garante acesso a todo site ou página restrita. Veja [Fetch and OCR](https://docs.aivax.net/pt-br/docs/web-foundation/fetch-and-ocr.md). --- Source: https://docs.aivax.net/pt-br/docs/rag/collections.html # Coleções e Documentos AIVAX fornece um serviço RAG (Retrieval‑Augmented Generation) para armazenar documentos e recuperá‑los posteriormente por meio de busca semântica. Uma coleção é um grupo de documentos pertencente a uma conta. Cada documento armazena texto, tags opcionais, uma referência opcional, metadados opcionais e os vetores gerados pelo trabalho de indexação. Coleções podem ser pesquisadas diretamente através da API RAG ou vinculadas a um AI Gateway para que documentos recuperados sejam injetados no contexto do modelo. Compare o armazenamento de vetores com o pipeline de ingestão e recuperação em [RAG vs vector database](https://aivax.net/blog/a-vector-database-is-not-a-rag-system/). ## Coleções Use coleções para agrupar documentos que pertencem à mesma base de conhecimento, produto, locatário, idioma ou finalidade operacional. Crie uma coleção antes de adicionar conhecimento pesquisável. Por exemplo, uma coleção de suporte pode conter respostas do centro de ajuda, uma coleção jurídica pode conter cláusulas de contrato e uma coleção de produto pode conter descrições, políticas e notas de solução de problemas. Após adicionar e indexar documentos, pesquise a coleção diretamente com a API [Semantic Search](https://docs.aivax.net/pt-br/docs/rag/semantic-search.md), exponha‑a através de [Collections MCP](https://docs.aivax.net/pt-br/docs/mcp-utilities/collections-mcp.md) ou anexe‑a a um [AI Gateway](https://docs.aivax.net/pt-br/docs/inference/ai-gateway.md) para que documentos recuperados sejam colocados automaticamente no contexto do modelo. Cada coleção possui: - Um ID de coleção único. - Um nome. - Contexto opcional e tags contextuais. - Um conjunto de documentos. - Estatísticas de uso baseadas em transações RAG. A disponibilidade da coleção e os limites da conta dependem da configuração atual da conta. Consulte [Plans and limits](https://docs.aivax.net/pt-br/docs/limits.md) antes de criar coleções para uso em produção. ## Documentos Um documento é a unidade que é indexada e recuperada. Ele deve ser pequeno o suficiente para corresponder a uma pergunta específica e suficientemente completo para ser útil por si só. Esta é a parte que mais afeta a qualidade do RAG. Um documento não deve ser “tudo o que você sabe” sobre uma fonte; ele deve ser um pedaço de conhecimento que possa ficar sozinho quando o modelo o lê mais tarde. Se um usuário perguntar sobre taxas de cancelamento, o documento recuperado já deve conter a regra, produto, condição e exceção relevantes. Se a resposta só fizer sentido quando o modelo também vir a página anterior, o documento provavelmente depende demais do contexto circundante. Um bom documento geralmente tem: - Um nome estável. - Texto focado. - Tags opcionais para filtragem ou manutenção. - Metadados opcionais para dados específicos da aplicação. - Um ID de referência opcional quando o documento é um fragmento de um item lógico maior. Por exemplo, um manual de carro não deve ser indexado como um único documento. Indexe documentos separados para tópicos como ligar o veículo, verificar a pressão dos pneus, emparelhar Bluetooth e substituir um farol. Cada documento deve incluir contexto suficiente para ser lido de forma independente. Para orientações mais amplas de fragmentação, veja [Best Practices for RAG](https://docs.aivax.net/pt-br/docs/rag/best-practices.md); para comportamento de consulta após indexação, veja [Semantic Search](https://docs.aivax.net/pt-br/docs/rag/semantic-search.md). ## Campos do Documento Ao importar documentos em JSONL, cada linha representa um documento que pode ser criado ou atualizado. Use um `docid` estável para que AIVAX reconheça o mesmo documento em importações futuras. Enviar o mesmo `docid` com texto diferente atualiza e reindexa o documento existente. Para dados de aplicação extras que não pertencem ao texto pesquisável, use `__meta`. O endpoint de importação JSONL aceita um objeto JSON por linha: | Propriedade | Tipo | Obrigatório | Descrição | | --- | --- | --- | --- | | `docid` | `string` | Sim | Nome estável do documento. Documentos existentes são correspondidos por este valor. | | `text` | `string` | Sim | Conteúdo de texto a ser indexado semanticamente. | | `__ref` | `string` | Não | ID de referência usado para agrupar fragmentos relacionados. Comprimento máximo armazenado é 64 caracteres. | | `__tags` | `string[]` | Não | Tags para filtragem, navegação e manutenção. | | `__meta` | `object` | Não | Metadados retornados com detalhes do documento e resultados de busca. Metadados não são o texto semântico usado para embeddings. | O nome do documento deve ser não vazio e é limitado pela API a 256 caracteres. O conteúdo armazenado do documento é obrigatório e não pode estar vazio. ## Inserções e Reindexação Documentos são correspondidos pelo nome (`docid` em JSONL, `Name` na API de documento único). Quando um documento é criado, ele é enfileirado para indexação. Quando o texto de um documento existente muda, ele é enfileirado novamente e seus vetores são regenerados pelo indexador em segundo plano. Quando apenas `__meta` muda, os metadados são atualizados sem reindexar o texto do documento. Valores de referência e tags são armazenados com o documento. Na API de documento único, referência, tags ou metadados alterados podem atualizar um documento existente sem reindexar quando o texto permanece inalterado. No endpoint de importação JSONL, texto alterado enfileira reindexação, alterações apenas de metadados atualizam metadados sem reindexar, e texto alterado também pode atualizar referência, tags e metadados. Uma entrada JSONL que altera apenas a referência ou tags é ignorada. ## Referências Use `__ref` quando múltiplos documentos representam partes da mesma fonte lógica, como: - Seções do mesmo contrato. - Cláusulas da mesma política. - Fragmentos do mesmo PDF. - Fragmentos de produto que devem ser exibidos juntos. Quando a expansão de referência de busca está habilitada, se um fragmento corresponder, outros documentos na mesma coleção com a mesma referência podem ser incluídos na resposta. ## Importação de Arquivo de Mídia O painel AIVAX pode fazer upload de um arquivo fonte e processá‑lo em documentos RAG com o [Media Injector](https://docs.aivax.net/pt-br/docs/rag/media-injector.md). Use‑o quando você tem um arquivo fonte mas ainda não possui texto de documento focado e autocontido preparado para importação direta ou JSONL. O nome original do arquivo é normalizado para Unicode NFC e preservado durante o upload, incluindo letras acentuadas, scripts não latinos, pontuação tipográfica e outros caracteres Unicode. Você não precisa renomear o arquivo para um nome somente ASCII antes de importá‑lo. Um trabalho do Media Injector é criado somente depois que cada fragmento do arquivo foi enviado e o painel conclui o upload com sucesso. Você pode então acompanhá‑lo em **Batch > Media Processing**. Se nenhum trabalho aparecer, o upload não chegou à etapa de conclusão; tente novamente e verifique o erro exibido pelo painel. ## Limites de Importação em Lote A importação em lote é enviada como um arquivo JSONL no campo multipart `documents`. Use importação em lote quando você já tem muitos documentos preparados fora do AIVAX, como fragmentos gerados a partir de PDFs, catálogos de produtos, políticas ou artigos do centro de ajuda. Se você está criando ou atualizando um documento a partir de um fluxo de aplicação, o endpoint de documento único abaixo costuma ser mais fácil. Se estiver preparando uma grande base de conhecimento, importe em lotes, aguarde a indexação e depois teste a recuperação através de [Semantic Search](https://docs.aivax.net/pt-br/docs/rag/semantic-search.md) antes de anexar a coleção a um gateway de produção. Os limites de linhas JSONL por requisição e os limites diários de inserção RAG variam conforme o plano; veja [Plans and limits](https://docs.aivax.net/pt-br/docs/limits.md#plan-limits). Se sua importação exceder o limite de requisição, divida em vários arquivos. Se sua conta atingir o limite diário de inserção, aguarde o intervalo de taxa reiniciar ou faça upgrade do plano. > [!WARNING] > A indexação gera custo baseado nos tokens de texto do documento quando documentos são criados ou quando seu texto muda. A referência de API incorporada é a fonte de verdade para o contrato de requisição e resposta de importação. [API endpoint reference](https://inference.aivax.net/apidocs?embed=iframe&embed-endpoint=Index%20Documents%20(JSONL)) ## Gerenciamento de Documentos ### Criar ou atualizar documento Este endpoint é útil quando sua aplicação gerencia documentos um de cada vez. Por exemplo, uma tela de admin pode salvar uma entrada de FAQ, uma cláusula de política ou uma nota de produto diretamente em uma coleção. AIVAX corresponde o documento pelo nome: texto alterado enfileira reindexação, enquanto alterações apenas de metadados atualizam os metadados sem reindexar o conteúdo. [API endpoint reference](https://inference.aivax.net/apidocs?embed=iframe&embed-endpoint=Create%20or%20Update%20Document) ### Listar documentos O endpoint de navegação ajuda a inspecionar o que já está dentro de uma coleção. Use‑o quando precisar verificar uma importação, encontrar um documento pelo nome, revisar documentos enfileirados versus indexados, ou filtrar conteúdo antes de decidir atualizar, excluir ou reimportar parte da base de conhecimento. Filtros suportados: - `-t "tag"`: documentos que contêm a tag. - `-r "reference"`: documentos com o ID de referência exato. - `-c "content"`: documentos cujo conteúdo contém o trecho de texto. - `-n "name"`: documentos cujo nome contém o trecho de texto. - `-i "id"`: documentos cujo ID contém o texto fornecido. Estados suportados: - `queued`: documentos aguardando indexação. - `indexed`: documentos já indexados. Valores de ordenação suportados: - `created_at_asce` - `created_at_desc` - `updated_at_asce` - `updated_at_desc` - `indexed_at_asce` - `indexed_at_desc` [API endpoint reference](https://inference.aivax.net/apidocs?embed=iframe&embed-endpoint=Browse%20Documents) --- Source: https://docs.aivax.net/pt-br/docs/rag/media-injector.html # Injetor de Mídia Media Injector transforma um arquivo fonte em documentos focados e autônomos dentro de uma coleção RAG da AIVAX. Ele examina a origem, identifica conhecimento materialmente útil, escreve documentos factuais concisos na língua predominante da origem e coloca esses documentos em fila para indexação semântica. Use o Media Injector quando você tem um arquivo cujo conhecimento útil ainda não foi dividido em texto pronto para recuperação. Se você já possui strings de documentos limpos, use [Create or Update Document or JSONL import](https://docs.aivax.net/pt-br/docs/rag/collections.md#document-fields) em vez disso; esses caminhos são mais previsíveis e evitam o processamento adicional necessário para interpretar um arquivo fonte. ## Quando usar Media Injector é útil para: - PDFs como relatórios, manuais e políticas que contêm vários tópicos independentes. - Imagens ou páginas escaneadas cujo conteúdo visível deve se tornar conhecimento pesquisável. - Áudio e vídeo cujos fatos materiais devem estar disponíveis via RAG. Não é um recurso geral de armazenamento de arquivos e não preserva a origem como um único documento pesquisável. A saída é um conjunto de documentos RAG gerados. Revise esses documentos após o processamento quando a formulação, cobertura, fidelidade legal ou o tratamento de dados sensíveis for importante. Use importação direta de documentos quando você precisar da formulação exata da origem, limites determinísticos, nomes de documentos estáveis ou metadados controlados pela aplicação. Use [Text Segmentation](https://docs.aivax.net/pt-br/docs/rag/text-segmentation.md) quando precisar apenas de segmentos de texto-fonte coesos retornados à sua aplicação sem criar documentos de coleção. Use esta [RAG responsibility checklist](https://aivax.net/blog/a-vector-database-is-not-a-rag-system/) para decidir quais etapas de preparação gerenciar. ## Como a ingestão funciona No painel da AIVAX: 1. Abrir a coleção alvo e escolher **Import from files**. 2. Selecionar um ou mais arquivos fonte. 3. Opcionalmente, fornecer contexto de processamento. O mesmo contexto é aplicado a cada arquivo selecionado. 4. Confirmar a importação. O painel envia os arquivos sequencialmente e um trabalho separado é criado para cada arquivo após todos os seus blocos alcançarem o AIVAX. 5. Acompanhar os trabalhos em **Batch > Media Processing**. 6. Após a conclusão de cada trabalho, revise os documentos gerados e aguarde o estado de indexação antes de testar [Semantic Search](https://docs.aivax.net/pt-br/docs/rag/semantic-search.md). Um trabalho pode estar `queued`, `processing`, `completed`, `failed` ou `cancelled`. O painel informa o arquivo fonte, tempo decorrido, número de documentos produzidos e custo atual. Trabalhos falhados ou cancelados podem ser reexecutados quando seus dados enviados recuperáveis ainda estiverem disponíveis. Áudio e vídeo podem ser divididos em segmentos baseados no tempo para processamento. A segmentação é automática e não altera o nome original do arquivo exibido no trabalho. Consulte [Plans and limits](https://docs.aivax.net/pt-br/docs/limits.md) para limites de upload atuais. ## Definir contexto de processamento O contexto de processamento é uma instrução opcional que ajuda o Media Injector a decidir quais fatos são mais valiosos para sua base de conhecimento. Ele é considerado juntamente com a origem, mas não é tratado como uma fonte factual e não pode adicionar fatos que estejam ausentes do arquivo. Um bom contexto descreve: - A identidade e o propósito da origem. - O público que buscará na coleção. - Os tópicos, produtos, jurisdições, períodos ou áreas que importam. - Rótulos ambíguos ou terminologia interna que a própria origem estabelece. - Conteúdo que deve ser despriorizado, como cabeçalhos repetidos ou boilerplate administrativo. ```text Esta é a política de suporte de 2026 para clientes da Acme Cloud no Brasil. Priorize regras de elegibilidade, prazos, diferenças de plano, exceções e os passos que um agente de suporte deve comunicar. Ignore cabeçalhos de página repetidos e blocos de assinatura. ``` Evite pedir ao mecanismo que infira conclusões, forneça informações ausentes ou use conhecimento externo. Por exemplo, não instrua‑o a decidir se um contrato é legalmente executável ou a calcular valores que a origem não relata. O contexto de processamento é diferente do contexto de uma coleção. O contexto de processamento orienta apenas esta importação. O contexto da coleção descreve a base de conhecimento para um AI Gateway quando a coleção for usada posteriormente. Coloque aqui orientações de ingestão específicas da origem; mantenha orientações duráveis de toda a coleção nas configurações da coleção. ## Tipos de fonte aceitos O painel aceita quatro grupos de fonte para o Media Injector: | Grupo de fonte | Comportamento de processamento | | --- | --- | | Documentos PDF | Lê a estrutura do documento, texto e conteúdo visual relevante. | | Imagens | Interpreta texto visível e conteúdo para produzir documentos RAG textuais. | | Áudio | Interpreta fala e outro conteúdo auditivo relevante; arquivos grandes são segmentados automaticamente. | | Vídeo | Interpreta conteúdo visual e auditivo relevante; arquivos grandes são segmentados automaticamente. | Use a extensão de arquivo original e precisa porque a AIVAX a usa para identificar o tipo de mídia. Uma extensão rotulada incorretamente pode selecionar o caminho de processamento errado ou fazer o trabalho falhar. O suporte a contêineres e codecs pode variar; se um arquivo de áudio ou vídeo falhar, converta‑o para um formato comum e tente novamente. ## Documentos gerados Cada item gerado é projetado para ser uma unidade de conhecimento útil, em vez de uma transcrição página a página. Media Injector: - Prioriza a identidade da origem, escopo, fatos principais, relacionamentos, exceções e distinções materiais. - Combina fatos estreitamente relacionados em vez de criar um documento por rótulo, célula de tabela ou valor repetido. - Ignora texto decorativo, paginação, resumos repetidos e metadados incidentais, a menos que alterem o significado. - Preserva a linguagem, terminologia, datas exibidas e formatos numéricos da origem. - Interrompe quando a origem não tem conhecimento materialmente novo para acrescentar. Os documentos gerados são marcados para que possam ser identificados como conteúdo produzido automaticamente. Eles são então indexados como outros documentos da coleção e incidem o custo normal de incorporação de texto da coleção, além do processamento do Media Injector. Para orientações de qualidade de recuperação após a ingestão, veja [Best Practices for RAG](https://docs.aivax.net/pt-br/docs/rag/best-practices.md). Em particular, inspecione documentos gerados a partir de tabelas, digitalizações e fontes com layouts repetidos antes de confiar neles em produção. ## Uso, preços e limites O uso do Media Injector depende da origem, contexto opcional, perguntas e respostas geradas, reutilização de cache e tokens de mídia quando aplicável. A cobrança agrega entrada, entrada em cache, saída e uso de mídia para o trabalho de processamento sem expor o modelo de processamento subjacente. Consulte [Pricing](https://docs.aivax.net/pt-br/docs/pricing.md#media-injector) para as taxas finais. A disponibilidade e os limites operacionais do Media Injector dependem da configuração da conta. Consulte [Pricing](https://docs.aivax.net/pt-br/docs/pricing.md) e [Plans and limits](https://docs.aivax.net/pt-br/docs/limits.md) antes de enviar arquivos em produção. --- Source: https://docs.aivax.net/pt-br/docs/rag/semantic-search.html # Busca Semântica A API de busca semântica procura uma ou mais coleções e devolve os documentos indexados mais relevantes para os termos de busca fornecidos. Se sua aplicação já possui as strings dos documentos candidatos, considere [Reflex](https://docs.aivax.net/pt-br/docs/rag/reflex.md): uma busca RAG sem coleção que classifica documentos fornecidos sem indexação ou armazenamento. Use a busca semântica gerenciada quando a AIVAX deve armazenar e buscar um corpus persistente ou quando o corpus é grande demais para ser enviado como candidatos em cada requisição. Compare [busca vetorial com o pipeline completo de RAG](https://aivax.net/blog/a-vector-database-is-not-a-rag-system/) antes de decidir o que construir. Antes de buscar, adicione documentos a uma [coleção](https://docs.aivax.net/pt-br/docs/rag/collections.md) e aguarde a indexação. Busque com perguntas completas ou frases que reflitam o que um usuário perguntaria. A resposta pode incluir os documentos correspondentes e seus dados de coleção associados para uso em sua aplicação ou fluxo do AI Gateway. Para o contrato suportado de requisição, resposta, autenticação e erros, use a Referência da API: [API endpoint reference](https://inference.aivax.net/apidocs?embed=iframe&embed-endpoint=Semantic%20search) ## Filtrando Documentos Use o campo `filter` para buscar apenas documentos que correspondam a tags, metadados, nomes ou datas, como `tags has "finance" and createdAt >= now-30d`. Consulte [Filtros de Documento](https://docs.aivax.net/pt-br/docs/filters/document-filters.md) para a sintaxe e exemplos. ## Reclassificação Um reclassificador pode ajustar a ordem dos candidatos retornados pela busca semântica. Ele não busca documentos adicionais nem recupera texto que a etapa de recuperação não selecionou. Consulte [Reclassificadores](https://docs.aivax.net/pt-br/docs/rag/reranking.md) para orientações de seleção. ## Múltiplos Termos Múltiplos termos cobrem caminhos de recuperação alternativos ao invés de exigir que cada termo corresponda ao mesmo documento. Use-os para sinônimos, formulações alternativas ou várias maneiras aceitáveis de encontrar uma resposta. Se a pergunta do usuário combina várias condições relacionadas, mantenha-as juntas em um único termo de busca. Por exemplo, prefira: ```text How do I cancel an annual subscription without a penalty? ``` Em vez de palavras‑chave desconectadas: ```text cancellation annual subscription penalty ``` ## Qualidade da Busca Uma consulta completa costuma ter melhor desempenho do que uma lista de palavras‑chave desconectadas porque preserva o relacionamento entre os conceitos. Se a busca retornar resultados pobres: 1. Confirme que os documentos foram indexados. 2. Consulte a coleção diretamente antes de testar através de um AI Gateway. 3. Compare perguntas completas com formulações alternativas. 4. Verifique se o documento relevante é muito curto, muito longo ou não auto‑contido. 5. Verifique se o idioma da consulta corresponde ao idioma do documento. 6. Se o gateway reescrever perguntas antes de buscar, teste com o caminho de consulta simples para isolar problemas de reescrita. ## MCP de Coleções Para expor coleções da AIVAX como ferramentas para um cliente MCP externo, veja [MCP de Coleções](https://docs.aivax.net/pt-br/docs/mcp-utilities/collections-mcp.md). Para a disponibilidade atual do serviço e limites de conta, veja [Planos e Limites](https://docs.aivax.net/pt-br/docs/limits.md). --- Source: https://docs.aivax.net/pt-br/docs/rag/text-segmentation.html # Segmentação de Texto A segmentação de texto divide documentos de origem em sequências semanticamente coesas que podem ser incorporadas ou indexadas em uma coleção RAG. Ela devolve segmentos para sua aplicação; não cria embeddings nem armazena documentos enviados. Use-a quando um documento de origem precisa de limites revisáveis e prontos para recuperação antes de criar ou atualizar documentos da coleção. Se você já tem texto focado e autocontido, pode importá‑lo diretamente. Se quiser que o AIVAX processe arquivos de origem em documentos da coleção, veja [Media Injector](https://docs.aivax.net/pt-br/docs/rag/media-injector.md). Consulte [onde a segmentação se encaixa em um pipeline RAG](https://aivax.net/blog/a-vector-database-is-not-a-rag-system/), ao lado de armazenamento, atualizações e recuperação. ## Ignorar a segmentação quando o texto já está focado A segmentação justifica‑se em fontes longas e com múltiplos tópicos — manuais, artigos, transcrições — onde um embedding por página borraria assuntos distintos. Não segmente texto que já contém uma ideia por unidade: respostas de FAQ, descrições de produtos, políticas curtas ou trechos já divididos podem ir direto para a coleção. Cada divisão desnecessária adiciona trabalho de indexação e corre o separar declarações que só fazem sentido juntas. ## O que faz um bom segmento Um bom segmento é o menor trecho que ainda responde a uma pergunta por si só: uma declaração completa ou um grupo compacto de declarações sobre um sub‑tópico, tipicamente um parágrafo ou uma seção curta. Segmentos são mais úteis quando a fonte possui títulos claros, parágrafos e declarações completas — o segmentador preserva esses limites ao invés de cortar no meio de um pensamento. Observe os modos de falha de fontes desordenadas. Tabelas perdem seus cabeçalhos, OCR elimina a estrutura de linhas, transcrições divagam entre tópicos e documentos exportados repetem cabeçalhos em cada página. Revise os resultados dessas fontes antes da indexação e prefira limpar a fonte (corrigir títulos, remover conteúdo padronizado) ao invés de pedir ao segmentador que adivinhe ao redor dela. ## Preparar o texto da fonte Forneça o texto completo da fonte sempre que possível. Segmentos são mais úteis quando a fonte tem títulos claros, parágrafos e declarações completas. Revise os resultados de tabelas, OCR, transcrições ou documentos com cabeçalhos repetidos antes de indexá‑los. Sem sanitização, os segmentos têm cerca de 300 tokens e cobrem todo o documento na ordem original, sem sobreposição. Os limites seguem a estrutura do documento e a similaridade semântica dos trechos vizinhos; documentos desse tamanho ou menores são retornados como um único segmento. Use sanitização apenas quando o conteúdo omitido for realmente irrelevante para a recuperação. Solicitações sanitizadas são processadas por um modelo de linguagem e demoram mais. Quando a formulação exata da fonte, a fidelidade legal ou a rastreabilidade completa são importantes, retenha e revise o texto da fonte ao invés de sanitizá‑lo. Para o contrato de solicitação, resposta, autenticação e erro suportado, use a Referência da API: [API endpoint reference](https://inference.aivax.net/apidocs?embed=iframe&embed-endpoint=Segment%20text) Para disponibilidade atual do serviço e limites de conta, veja [Plans and Limits](https://docs.aivax.net/pt-br/docs/limits.md). --- Source: https://docs.aivax.net/pt-br/docs/rag/classification.html # Classificação de Texto Use a classificação de texto para classificar um conjunto fixo de rótulos para um ou mais documentos sem treinar um classificador personalizado. AIVAX incorpora cada documento e rótulo com o modelo de incorporação padrão, compara seus vetores usando similaridade cossena e devolve cada rótulo, do mais similar ao menos similar para cada documento. Antes de chamar este endpoint, [crie uma chave de API](https://docs.aivax.net/pt-br/docs/authentication.md) e certifique‑se de que a conta tem saldo positivo. ## Endpoint
POST /api/v1/generations/classify
## Comportamento da requisição | Propriedade | Tipo | Obrigatório | Descrição | | --- | --- | --- | --- | | `documents` | `string[]` | Sim | Um ou mais documentos não vazios para classificar. Os resultados preservam esta ordem e o índice baseado em zero de cada documento. | | `labels` | `string[]` | Sim | Um ou mais rótulos não vazios. Cada rótulo recebe uma pontuação para cada documento. | Documentos e rótulos duplicados são preservados. O endpoint sempre usa o modelo de incorporação padrão atual e não aceita um parâmetro de modelo, limite de pontuação ou limite de resultados. Exemplo de requisição: ```json { "documents": [ "Compare the total cost of two loans for a principal of $10,000 over 5 years at different annual rates", "Erklären Sie die Unterschiede zwischen Merge-Sort und Quicksort-Algorithmen in Bezug auf Zeitkomplexität, Platzkomplexität und Leistung in der Praxis.", "Write a poem about the beauty of nature and its healing power on the human soul" ], "labels": [ "Creative writing", "Complex problem", "Simple task" ] } ``` ## Leia a resposta `results` contém um item para cada documento de entrada. Cada array `scores` contém todos os rótulos fornecidos, ordenados por similaridade cossena decrescente. Rótulos com pontuações iguais preservam sua ordem original. ```json { "results": [ { "index": 0, "document": "Compare the total cost of two loans for a principal of $10,000 over 5 years at different annual rates", "scores": [ { "label": "Complex problem", "score": 0.98828 }, { "label": "Simple task", "score": 0.45272 }, { "label": "Creative writing", "score": 0.06823 } ] } ] } ``` Uma pontuação mede a similaridade de vetores, não uma probabilidade calibrada. Compare pontuações dentro da mesma requisição e modelo de incorporação, em vez de interpretar um valor como porcentagem de confiança. Pontuações negativas são válidas e permanecem na resposta porque o endpoint não filtra rótulos. O uso de incorporação é cobrado para textos que exigem inferência e está associado à chave de API autenticada. Textos repetidos podem ser servidos a partir de um cache interno, reduzindo latência e custos. Como o endpoint devolve cada par documento‑rótulo, o tamanho da resposta e o trabalho de comparação crescem com `documents × labels`. A referência de API incorporada contém os detalhes de requisição, resposta, autenticação e erro mantidos pelo servidor: [API endpoint reference](https://inference.aivax.net/apidocs?embed=iframe&embed-endpoint=Classify%20documents) --- Source: https://docs.aivax.net/pt-br/docs/rag/reranking.html # Classificadores Classificadores reordenam um conjunto existente de documentos candidatos para uma consulta. Eles não pesquisam uma coleção nem recuperam texto que esteja ausente da entrada. Use a API de reordenação autônoma quando sua aplicação já possui os candidatos, ou use a [Pesquisa Semântica](https://docs.aivax.net/pt-br/docs/rag/semantic-search.md) para recuperar candidatos de uma coleção AIVAX antes de reordená‑los. [Reflex](https://docs.aivax.net/pt-br/docs/rag/reflex.md) é a experiência de pesquisa sem coleção construída neste mesmo endpoint com o classificador padrão — veja essa página quando quiser classificação no estilo de recuperação sem gerenciar uma coleção. ## Reordenar documentos diretamente Autentique‑se com uma chave de API AIVAX e envie uma consulta com as strings dos documentos candidatos. A API devolve os candidatos em ordem de relevância, com a posição de entrada necessária para associar cada resultado aos dados da sua aplicação. Use a reordenação direta quando os candidatos são dinâmicos, vêm de outro sistema de pesquisa ou não precisam ser armazenados em uma coleção AIVAX. Use a pesquisa semântica gerenciada quando o AIVAX deve recuperar candidatos de um corpus persistente. Para a solicitação, resposta, autenticação e contrato de erro suportados, use a Referência da API: [API endpoint reference](https://inference.aivax.net/apidocs?embed=iframe&embed-endpoint=Rerank%20documents) ## Construa candidatos que valham a pena classificar A reordenação apenas reordena o que recebe, portanto a qualidade dos candidatos determina o teto. Mantenha cada string de candidato focada em uma ideia — um parágrafo ou uma seção curta, em vez de uma página inteira — para que a pontuação de relevância reflita um único tópico ao invés de uma média de vários. Quando os candidatos vêm de fragmentação, prefira limites que preservem declarações completas; veja a [Segmentação de Texto](https://docs.aivax.net/pt-br/docs/rag/text-segmentation.md). Use a [lista de verificação do pipeline RAG](https://aivax.net/blog/a-vector-database-is-not-a-rag-system/) para distinguir falhas de preparação, recuperação e ordenação. Envie candidatos suficientes para cobrir respostas plausíveis (primeiro super‑recuperação, depois classificação precisa) e use `top_n` para manter apenas o início da lista classificada. Use `min_score` para descartar resultados de cauda de baixa relevância, mas calibre o limiar nas suas próprias consultas: as escalas de pontuação diferem entre classificadores e um ponto de corte ajustado para uma carga de trabalho raramente se transfere para outra. ## Escolhendo um classificador Comece com o classificador padrão a menos que tenha um motivo mensurado para selecionar outra opção disponível. O padrão é Reflex; as alternativas incluem correspondência lexical, fusão de ranking recíproco de vários sinais e cross‑encoders de terceiros. Observe que a fusão (`rrf`) é apenas de recuperação e é rejeitada por este endpoint — ela existe para combinar sinais dentro da pesquisa de coleção, não para classificação autônoma. Para comparar opções, defina um conjunto de consultas representativas com documentos relevantes conhecidos a partir da sua própria carga de trabalho — cobrindo seus idiomas, comprimentos de documentos e jargão — e meça se trocar de classificadores eleva o documento correto. Se o documento relevante estiver ausente dos candidatos, melhore a recuperação de candidatos, a fragmentação, a formulação da consulta ou a quantidade de candidatos antes de comparar classificadores: nenhum classificador recupera o que nunca foi enviado. Para separar falhas de candidato ausente de falhas de ordenação ruim antes de adicionar um classificador, veja [Preciso de um classificador para RAG?](https://aivax.net/blog/semantic-search-vs-reranking/). Para avaliar quando o Reflex é suficiente em comparação a um cross‑encoder, veja [reordenar resultados RAG sem um cross‑encoder](https://aivax.net/blog/reflex-retrieval-built-for-recurring-documents/). Para disponibilidade atual, opções suportadas e limites de conta, veja a Referência da API e [Planos e Limites](https://docs.aivax.net/pt-br/docs/limits.md). --- Source: https://docs.aivax.net/pt-br/docs/rag/reflex.html # Reflex Reflex é a busca sem coleção da AIVAX para RAG. Envie uma consulta junto com strings de documentos candidatos e receba os itens mais relevantes em ordem classificada — sem indexação, armazenamento ou manutenção de uma coleção RAG primeiro. Reflex é o ranqueador padrão do endpoint autônomo de [reranking endpoint](https://docs.aivax.net/pt-br/docs/rag/reranking.md): chamar esse endpoint sem um `model` seleciona o Reflex. Esta página cobre quando usar o Reflex; aquela página cobre a preparação de candidatos e a comparação de ranqueadores em profundidade. Use o Reflex quando sua aplicação já possui os documentos candidatos, o conjunto de candidatos muda com frequência ou você deseja uma etapa de recuperação sem indexação e armazenamento de coleção. Use a [Semantic Search](https://docs.aivax.net/pt-br/docs/rag/semantic-search.md) quando a AIVAX deve armazenar, indexar e pesquisar uma base de conhecimento persistente ou reduzir um corpus que é grande demais para ser enviado como candidatos em cada requisição. ## Reflex ou Semantic Search? | Escolha Reflex quando... | Escolha Semantic Search quando... | | --- | --- | | Sua aplicação já possui as strings dos documentos candidatos. | Os documentos devem estar em coleções gerenciadas da AIVAX. | | Você precisa de recuperação imediatamente, sem uma etapa de indexação. | A base de conhecimento é persistente e pesquisada repetidamente. | | O conjunto de candidatos é dinâmico ou específico a cada requisição. | O corpus é grande demais para ser enviado como candidatos em cada requisição. | | Você deseja ranqueamento sem coleção. | Você deseja filtragem de coleção, metadados armazenados, referências de documentos e recuperação gerenciada. | Reflex retorna candidatos de texto classificados; ele não gera uma resposta. Passe os documentos selecionados para seu modelo de linguagem ou AI Gateway como contexto RAG. Para decidir entre o Reflex e um reranker de cross-encoder, veja [reranking RAG results without a cross-encoder](https://aivax.net/blog/reflex-retrieval-built-for-recurring-documents/). ## Use Reflex Chame a API de reranking com uma consulta e os documentos candidatos que sua aplicação deseja comparar. Os resultados são retornados em ordem de relevância e mantêm a posição de entrada necessária para associá-los aos dados da sua aplicação. Use documentos candidatos concisos e focados. O reranking pode melhorar a ordem deles, mas não pode recuperar informações que não foram incluídas nos candidatos. Se o documento esperado estiver consistentemente ausente, melhore a seleção de candidatos, a fragmentação ou a formulação da consulta antes de ajustar o ranqueador. Reflex limita o número de documentos candidatos por requisição e o número de resultados classificados retornados; veja [Request and payload limits](https://docs.aivax.net/pt-br/docs/limits.md#request-and-payload-limits). Se seu pool de candidatos exceder o limite, reduza‑o primeiro — com pré‑filtragem lexical, um ranqueamento de primeira passagem barato ou recuperação de coleção — e deixe o Reflex ordenar a lista curta. Para o contrato suportado de requisição, resposta, autenticação e erro, use a API Reference: [API endpoint reference](https://inference.aivax.net/apidocs?embed=iframe&embed-endpoint=Rerank%20documents) ## Use Reflex with RAG Reflex também é o reranker padrão após a AIVAX recuperar candidatos de coleções RAG. Nesse fluxo, ele pode melhorar a ordem dos candidatos recuperados, mas não pode recuperar um documento que a etapa de recuperação não selecionou. Se documentos relevantes estiverem consistentemente ausentes, ajuste a recuperação, a fragmentação, a formulação da consulta ou a quantidade de candidatos antes de ajustar o reranking. Free, Pro e Max incluem uma cota diária de reranking para o Reflex, compartilhada entre chamadas autônomas e reranking de RAG. Entradas em cache e sem cache consomem essa cota. Ela é separada da cota de incorporação RAG e do limite de tempo de processamento; outros rerankers são cobrados normalmente. Para capacidade e regras de cobertura relativas ao plano, veja [Plans and Limits](https://docs.aivax.net/pt-br/docs/limits.md#included-daily-subscription-allowances). --- Source: https://docs.aivax.net/pt-br/docs/rag/best-practices.html # Melhores Práticas para RAG Use este guia ao preparar documentos para coleções AIVAX e busca semântica. O pipeline de busca indexa o texto dos documentos como embeddings, armazena os vetores resultantes e, posteriormente, compara as consultas do usuário com esses vetores indexados. A qualidade da busca depende fortemente de quão claro, focado e autocontido cada documento está. ## Tamanho do Documento Um documento deve representar um pedaço limitado de conhecimento. Como meta prática, mantenha a maioria dos documentos entre 20 e 700 palavras. Esse intervalo não é uma regra rígida da API, mas geralmente fornece ao modelo de embedding contexto suficiente sem misturar tópicos não relacionados. O indexador atual também registra avisos para documentos incomumente pequenos ou grandes: - Documentos com menos de cerca de 10 tokens são aceitos, mas podem ser pequenos demais para serem recuperados de forma confiável. - Documentos com mais de cerca de 1.562 tokens são aceitos, mas o indexador trunca o texto usado para embedding para cerca de 5.000 caracteres e registra um aviso. Se um documento for maior que isso, divida‑o antes de indexar. Use parágrafos, seções, cláusulas de política, entradas de FAQ, descrições de produtos ou outras unidades lógicas. ## O que Evitar - Documentos vazios, minúsculos ou apenas com título. - PDFs inteiros, capítulos, logs ou manuais como um único documento. - Vários assuntos não relacionados em um documento. - Texto que depende de páginas adjacentes para fazer sentido. - Idiomas misturados dentro do mesmo documento, a menos que o usuário deva buscar dessa forma. - JSON bruto, código, tabelas ou logs sem uma breve explicação em linguagem natural. - Pronomes e referências genéricos como “ele”, “este processo” ou “o produto” quando o documento não identifica o assunto. ## O que Fazer - Dê a cada documento um nome claro e um texto focado. - Coloque o assunto próximo ao início do documento. - Use linguagem natural semelhante à forma como os usuários fazem perguntas. - Repita identificadores importantes, nomes de produtos, nomes de políticas, siglas e termos quando forem relevantes. - Mantenha um documento focado em um único tópico respondível. - Use `__tags` para organizar documentos operacionalmente. - Use `__ref` para agrupar trechos que pertencem à mesma fonte lógica. - Use `__meta` para dados estruturados que sua aplicação precisa manter, como URL de origem, versão, autor ou data de publicação. Por exemplo, identifique o veículo e o registro da frota para que o texto faça sentido por si só. Preferir: ```text The color of the 2015 Honda Civic registered in fleet record CAR-123 is yellow. ``` Evitar: ```text The car is yellow. ``` A primeira versão pode ser recuperada e compreendida sem contexto externo. ## Metadados, Tags e Referências Apenas o texto do documento é incorporado para correspondência semântica. Metadados são retornados com os resultados e podem ser úteis para aplicações, auditorias, links de origem, versionamento ou exibição, mas não devem substituir o texto pesquisável. Use tags para manutenção e filtragem, não como o único local onde o significado importante aparece. Se um usuário pode buscar por “política de reembolso”, essas palavras devem aparecer no texto do documento, não apenas em uma tag. Use referências quando vários trechos representam o mesmo item de origem. Quando a expansão de referência está habilitada, um trecho correspondente pode retornar outros documentos que compartilham a mesma referência. ## Dividindo Fontes Maiores Ao importar PDFs, planilhas, páginas da web ou manuais, inspecione os trechos gerados antes de confiar na coleção. Remova cabeçalhos, rodapés, menus de navegação, tabelas quebradas, textos padrão e isenções irrelevantes quando possível. Veja [what a vector database leaves to the application](https://aivax.net/blog/a-vector-database-is-not-a-rag-system/) antes de escolher um fluxo de ingestão. Trechos bons geralmente incluem: - Um título ou cabeçalho de origem. - O contexto imediato da seção. - A regra completa, resposta, instrução ou explicação. - Texto circundante suficiente para responder a uma pergunta sem precisar de páginas vizinhas. Trechos ruins costumam conter: - Metade de uma linha de tabela. - Uma frase que depende da página anterior. - Várias políticas misturadas em um bloco. - Texto de layout repetido do arquivo original. ## Qualidade da Consulta A busca semântica funciona melhor quando documentos e consultas usam linguagem compatível. Se os usuários fizerem perguntas completas, prepare documentos que contenham explicações completas. Se os usuários buscarem por códigos de produto, IDs de política, nomes de plano ou nomes de procedimento, inclua esses identificadores no texto. Quando os resultados da busca são ruins, verifique o básico primeiro: - Confirme que os documentos estão indexados. - Teste a coleção com [Semantic Search](https://docs.aivax.net/pt-br/docs/rag/semantic-search.md) antes de testar através de um AI Gateway. - Experimente uma pergunta completa em vez de palavras‑chave isoladas. - Compare a linguagem da consulta com a linguagem do documento. - Revise se a resposta relevante está dividida em muitos trechos pequenos ou enterrada em um muito grande. Documentos bem preparados tornam o RAG previsível: o modelo recebe material fonte mais claro, a busca retorna menos correspondências irrelevantes e as respostas se tornam mais fáceis de auditar. --- Source: https://docs.aivax.net/pt-br/docs/filters/document-filters.html # Filtros de Documento Um filtro de documento restringe uma busca RAG aos documentos que correspondem a uma condição, como uma tag, um valor de metadado ou um intervalo de datas. Apenas documentos que passam pelo filtro são classificados por similaridade semântica, portanto os resultados nunca incluem documentos fora do filtro. Os filtros são avaliados **antes** de os termos de busca serem incorporados. Quando nenhum documento nas coleções solicitadas corresponde ao filtro, a requisição devolve um resultado vazio sem gerar embeddings ou cobrar pela busca. ```text tags has "finance" and createdAt >= now-30d ``` ## Onde os Filtros São Suportados Envie o filtro no campo `filter` desses endpoints: - [Busca semântica](https://docs.aivax.net/pt-br/docs/rag/semantic-search.md) - Geração de respostas O campo aceita uma string ou um array de strings. It itens do array são combinados com `and`: ```json { "term": "How do I request a refund?", "collections": [ "" ], "filter": [ "tags has \"billing\"", "metadata.region = \"latam\"" ] } ``` Um campo ausente ou `null` significa sem filtro. O nome do campo é `filter`; outros nomes, como `filters`, são ignorados e a busca é executada sem filtro. Modelos também podem enviar uma string de filtro no argumento opcional `filter` dessas ferramentas: - A ferramenta de busca do [Collections MCP](https://docs.aivax.net/pt-br/docs/mcp-utilities/collections-mcp.md#generated-tools). - A ferramenta `query` de gateways de IA que utilizam a [estratégia de consulta](https://docs.aivax.net/pt-br/docs/inference/pipelines.md). RAG de gateway automático, que busca antes da chamada ao modelo, não aplica filtros. Um filtro inválido em uma chamada de ferramenta é retornado ao modelo como um erro de ferramenta com a mesma mensagem da API. [API endpoint reference](https://inference.aivax.net/apidocs?embed=iframe&embed-endpoint=Semantic%20search) [API endpoint reference](https://inference.aivax.net/apidocs?embed=iframe&embed-endpoint=Answer%20generation) ## Sintaxe Um filtro é uma ou mais condições unidas por `and`, `or` e `not`. Cada condição tem a forma `field operator value`: ```text name startswith "contract-" metadata.pages > 10 not tags has "draft" (tags has "finance" or tags has "legal") and updatedAt >= "2026-01-01" ``` - `not` tem precedência maior que `and`, e `and` tem precedência maior que `or`. Use parênteses para agrupar explicitamente. - Palavras‑chave, operadores e nomes de campos não diferenciam maiúsculas de minúsculas: `AND`, `And` e `and` são equivalentes. - Strings usam aspas duplas ou simples. Dentro de uma string, escape a mesma aspa com barra invertida: `"say \"hi\""`, `'it\'s'`. Os escapes suportados são `\"`, `\'`, `\\`, `\/`, `\n`, `\r`, `\t` e `\uXXXX`. - Números usam ponto como separador decimal e podem usar expoente: `10`, `-2.5`, `1e3`. - Os outros literais são `true`, `false`, `null` e `now` (somente em condições de data). Um valor deve ser literal. Funções, aritmética, conversões de tipo e comparações entre dois campos não são suportadas. ## Campos | Campo | Tipo | Fonte | | --- | --- | --- | | `name` | texto | O nome do documento (`docid` em importações JSONL). | | `content` | texto | O texto indexado do documento. | | `tags` | lista de texto | As tags do documento (`__tags`). | | `createdAt` | data e hora | Quando o documento foi criado. | | `updatedAt` | data e hora | Quando o documento foi atualizado pela última vez. | | `metadata.` | valor JSON | Um valor dentro dos metadados do documento (`__meta`). | Veja [Coleções](https://docs.aivax.net/pt-br/docs/rag/collections.md#document-fields) para como esses campos são definidos. ## Operadores | Campo | `=` `!=` | `>` `>=` `<` `<=` | `contains` `startswith` `endswith` | `in` | `has` | `exists` | | --- | --- | --- | --- | --- | --- | --- | | `name`, `content` | texto | — | texto | lista de texto | — | — | | `tags` | — | — | — | lista de texto | texto | — | | `createdAt`, `updatedAt` | data | data | — | — | — | — | | `metadata.` | texto, número, booleano, `null` | número | texto | lista qualquer | qualquer valor | ✓ | - `field in (a, b, c)` equivale a `field = a or field = b or field = c`. Para `tags`, corresponde a documentos que possuam ao menos uma das tags listadas. - `has` verifica se uma lista contém um valor: `tags has "x"` ou `metadata. has value` quando o valor do metadado é um array JSON. - `exists` verifica se um caminho de metadado está presente, inclusive quando seu valor é `null`. - `x != v` é exatamente `not x = v`. - Qualquer outra combinação, como `tags = "x"` ou `name > "a"`, é rejeitada. ## Comparação de Texto Comparações de texto ignoram maiúsculas/minúsculas e acentos: `name = "relatorio"` corresponde a um documento chamado `Relatório`. - `=` e `in` ignoram espaços finais: `"report "` corresponde a `"report"`. - `contains`, `startswith` e `endswith` correspondem literalmente, sem curingas. Os caracteres `%` e `_` correspondem apenas a si mesmos. - `contains` requer pelo menos 3 caracteres. Comparações de texto não dividem palavras nem correspondem a sinônimos. Use os termos de busca para significado e o filtro para restrições exatas. ## Metadados Use um ponto para ler metadados aninhados. Chaves que não são identificadores simples vão entre aspas: ```text metadata.author.name = "Ana" metadata."file-path" startswith "/contracts/2026/" metadata."a.b" = 1 ``` O último exemplo lê uma chave chamada `a.b`, não um caminho aninhado. Índices de array não são suportados; use `has` para verificar se um array contém um valor. O tipo literal seleciona a comparação, e **tipos nunca são convertidos**: | Literal | Correspondência com valores armazenados do tipo | | --- | --- | | texto | string JSON | | número | número JSON | | `true` / `false` | boolean JSON | | `null` | `null` JSON | Portanto, `metadata.year = 2026` não corresponde a `{"year": "2026"}`, e `metadata.public = true` não corresponde a `{"public": "true"}`. Se seus dados misturam tipos, liste ambos: `metadata.year in (2026, "2026")`. Operadores de ordenação (`>`, `>=`, `<`, `<=`) funcionam apenas em números nos metadados. Datas armazenadas nos metadados não podem ser comparadas como datas; use `createdAt` e `updatedAt`, ou armazene um número ordenável como timestamp Unix ou `20260915`. Uma chave ausente nunca corresponde a uma condição positiva, portanto `metadata.lang != "en"` também corresponde a documentos sem `lang`. Para excluí‑los, adicione `metadata.lang exists`. Armazene metadados com tipos consistentes por chave e prefira chaves compostas apenas por letras ASCII, dígitos, `-` e `_`. ## Datas `createdAt` e `updatedAt` aceitam datas absolutas e tempos relativos. **Datas absolutas** usam ISO 8601: ```text createdAt >= "2026-09-01" updatedAt < "2026-09-01T18:30" createdAt >= "2026-09-01T00:00:00-03:00" createdAt >= "2026-09-01T03:00:00Z" ``` - Uma data sem hora significa meia‑noite. - Um valor sem `Z` ou deslocamento é interpretado no fuso horário do serviço AIVAX, America/Sao_Paulo (UTC−03:00). Adicione `Z` ou deslocamento quando precisar de um instante exato. - Outros formatos, como `15/06/2025`, são rejeitados. **Tempos relativos** usam `now`, opcionalmente seguidos por `+` ou `-` e uma quantidade com unidade: | Unidade | Significado | | --- | --- | | `m` | minutos | | `h` | horas | | `d` | dias | | `w` | semanas | | `mo` | meses calendário | | `y` | anos calendário | ```text createdAt >= now-7d updatedAt >= now-12h and updatedAt < now ``` ## Limites | Limite | Valor | | --- | --- | | Comprimento do filtro | 2.048 caracteres por string | | Condições | 32 por string | | Aninhamento de parênteses e `not` | 8 níveis | | Valores em uma lista `in` | 100 | | Comprimento de um valor de texto ou chave de metadado | 256 caracteres | | Chaves em um caminho de metadado | 8 | | Comprimento mínimo de `contains` | 3 caracteres | Um filtro deve terminar em até 10 segundos. Condições em `content`, `endswith`, tags e metadados examinam cada documento nas coleções solicitadas, portanto demoram mais em coleções grandes. Se um filtro ultrapassar o limite de tempo, a requisição falha e pede condições mais seletivas. Prefira condições em `name` (`=`, `in`, `startswith`), divida corpora muito grandes em coleções menores e reserve `content contains` para coleções onde ele permanece rápido. ## Erros Um filtro inválido devolve `400 Bad Request` com uma mensagem que indica o problema e a posição do caractere onde foi encontrado: ```json { "error": "Invalid filter: Unknown field 'author'. Expected name, content, tags, createdAt, updatedAt or metadata.. (at 0)" } ``` Para um array, a mensagem inclui o índice do item inválido, como `Invalid filter at index 1: ...`. Um `filter` que não seja uma string ou um array de strings também é rejeitado. ## Exemplos | Objetivo | Filtro | | --- | --- | | Documentos com uma tag | `tags has "finance"` | | Qualquer uma de várias tags | `tags in ("finance", "legal")` | | Excluir rascunhos | `not tags has "draft"` | | Documento específico | `name = "refund-policy"` | | Documentos de uma família | `name startswith "manual-v2-"` | | Conteúdo mencionando um termo | `content contains "late fee"` | | Criado nos últimos 30 dias | `createdAt >= now-30d` | | Atualizado em setembro de 2026 | `updatedAt >= "2026-09-01" and updatedAt < "2026-10-01"` | | Um valor de metadado | `metadata.department = "finance"` | | Vários valores de metadado | `metadata.author.name in ("Ana", "Bruno")` | | Intervalo numérico | `metadata.pages > 10 and metadata.pages <= 200` | | Bandeira booleana | `metadata.public = true` | | Array de metadado contém | `metadata.languages has "pt-BR"` | | Chave presente e não nula | `metadata.reviewer exists and metadata.reviewer != null` | | Chave ausente | `not metadata.archived exists` | | Combinado | `(tags has "finance" or metadata.department = "finance") and createdAt >= now-1mo` | ## Erros Comuns | Em vez de | Escreva | | --- | --- | | `name == "x"` | `name = "x"` | | `lower(name) = "x"` | `name = "x"` (já insensível a maiúsculas) | | `tags = "x"` | `tags has "x"` | | `metadata.price > "100"` | `metadata.price > 100`, com o preço armazenado como número | | `createdAt >= "15/06/2025"` | `createdAt >= "2025-06-15"` | | `metadata.date >= "2025-06-15"` | `createdAt >= "2025-06-15"`, ou um valor numérico de metadado | | `content contains "ai"` | Um termo com pelo menos 3 caracteres | | `"filters": [ ... ]` | `"filter": [ ... ]` | --- Source: https://docs.aivax.net/pt-br/docs/inference/ai-gateway.html # Gateway de IA Um Gateway de IA armazena uma configuração de inferência reutilizável. Passe o ID ou slug do gateway no campo `model` da solicitação, e o AIVAX aplica suas configurações de modelo, instruções, coleções RAG, ferramentas, habilidades, workers, moderação e controles de contexto. Use um gateway quando o mesmo comportamento precisa ser reutilizado por vários clientes ou alterado sem reimplantar a aplicação chamadora. ## Como pensar em um gateway Uma chamada direta para `/v1/chat/completions` pode chamar um modelo AIVAX integrado diretamente, por exemplo `@openai/gpt-5-mini`. Um gateway armazena as decisões que você não quer repetir a cada solicitação: - Provedor de modelo e nome do modelo. - Instruções do sistema, fontes remotas de instruções, modelo de prompt do usuário e preenchimento prévio do assistente. - Coleções RAG, limites de resultados, limiar de pontuação, reordenador, comportamento de referência e estratégia de consulta. - Ferramentas compatíveis com OpenAI, ferramentas integradas do AIVAX, ferramentas MCP, funções de protocolo, habilidades e o ambiente bash opcional. - Comportamento da janela de contexto, truncamento de mensagens de ferramenta, moderação, workers, roteamento de modelo e tratamento de chamadas de ferramenta. Isso cria uma fronteira de responsabilidade. A aplicação cliente envia mensagens e substituições opcionais de solicitação. O administrador do gateway controla a política operacional. Na produção, comece com uma configuração conservadora: instruções claras do sistema, um modelo que suporte as modalidades e ferramentas necessárias, uma coleção RAG bem preparada e somente as ferramentas realmente necessárias. Adicionar muitas ferramentas, habilidades ou coleções aumenta os tokens de entrada, o custo e a chance de o modelo escolher o caminho errado. ## Modelos e nomes de gateway Existem três formas comuns de escolher o que `/v1/chat/completions` usa: - Use uma tag de modelo AIVAX integrado, geralmente começando com `@`. - Use o ID completo do gateway. - Use um slug de gateway no formato `name:final-id`, como `support:50c3`. Chaves de API privadas podem resolver um gateway por ID completo ou por slug. Chaves de API públicas são mais restritas: podem usar gateways de IA apenas por ID completo, e apenas um conjunto limitado de parâmetros de solicitação de conclusão de chat é aceito. Ao escolher um modelo, valide três pontos antes de colocá-lo em produção: - O modelo suporta as modalidades de entrada que você pretende enviar, como imagem, áudio, vídeo ou arquivo. - O modelo suporta chamadas de função se o gateway usar ferramentas, RAG via `QueryFunction`, MCP, funções de protocolo, habilidades ou funções internas. - O modelo aceita os parâmetros que você configura. Alguns modelos integrados rejeitam preenchimento prévio do assistente, temperatura, sequências de parada ou esforço de raciocínio. Planeje também a aposentadoria: um gateway permite que você altere o modelo por trás de um nome estável, mas ainda é necessário qualificar o substituto. Consulte [pinning a model ID versus using an alias](https://aivax.net/blog/pin-llm-model-id-or-use-alias-model-deprecations/) para uma lista de verificação de substituição. Gateways também podem usar roteamento de modelo. Para o roteador de complexidade, o AIVAX classifica a última solicitação do usuário como baixa, média ou alta complexidade, seleciona o modelo configurado para esse nível e emite `X-Model-Routed-Complexity` na resposta HTTP quando disponível. ## Usando um Gateway de IA AIVAX fornece um endpoint de conclusões de chat compatível com OpenAI: [API endpoint reference](https://inference.aivax.net/apidocs?embed=iframe&embed-endpoint=Inference%20(chat%20completions)) Valores do gateway podem ser sobrescritos pela solicitação para parâmetros suportados, como `temperature`, `top_p`, `seed`, `reasoning_effort`, `max_completion_tokens`, `stop`, `tools`, `response_schema`, `response_format`, `builtin_tools`, `multimodal_resolver`, o depreciado `multimodal_preprocess` e `tool_invocation_explanations`. Para comportamento de inferência direta, incluindo opções de renderização de resposta, veja [Inference](https://docs.aivax.net/pt-br/docs/inference/inference.md). ## Usando SDKs Como o endpoint segue o formato de conclusões de chat do OpenAI, você pode usar SDKs compatíveis existentes. No exemplo abaixo, substitua `my-gateway:50c3` pelo ID completo ou slug do seu gateway e carregue sua chave de API privada a partir da configuração segura. Consulte [Getting Started](https://docs.aivax.net/pt-br/docs/getting-started.md) para um exemplo de variável de ambiente. ```python from openai import OpenAI client = OpenAI( base_url="https://inference.aivax.net/v1", api_key="" ) response = client.chat.completions.create( model="my-gateway:50c3", messages=[ {"role": "user", "content": "Explain why AI gateways are useful."} ] ) print(response.choices[0].message.content) ``` Inferência compatível com OpenAI usa `/v1/chat/completions`. O endpoint `/v1/responses` não é suportado. ## Configuração recomendada para produção Escreva as instruções do sistema para que o modelo entenda seu papel, público, fontes de verdade e limites. Inclua quando usar RAG, quando usar ferramentas e como responder quando a informação não está disponível. Evite repetir configurações operacionais que já existem no gateway, como limites de truncamento ou listas de ferramentas. Para RAG, vincule coleções com documentos curtos, autônomos e bem nomeados. Escolha a estratégia de consulta com base no tipo de conversa: - `Plain`: Usa a última mensagem do usuário como termo de busca. - `Concatenate`: Junta o último número configurado de mensagens do usuário linha por linha. - `UserRewrite`: Reescreve mensagens recentes do usuário em uma ou mais consultas de busca usando um modelo resolvedor. - `FullRewrite`: Reescreve mensagens recentes do usuário e do assistente usando um modelo resolvedor. - `QueryFunction`: Exponha uma função de busca ao modelo em vez de injetar um resultado de busca antes da inferência. Para ferramentas, habilite apenas aquelas com um papel claro. Ferramentas internas cobrem capacidades comuns como data e hora atuais, busca na web, abertura de URLs, execução de código, geração de imagens, geração de documentos, geração de páginas, ações de calendário, memória, requisições HTTP e busca de post X. MCP externo é melhor quando você já tem um servidor MCP com ferramentas de negócio. Funções de protocolo são úteis quando você deseja expor callbacks HTTP específicos ao modelo sem instalar um servidor MCP completo. Ao habilitar memória, defina o que o assistente pode reter e como sua aplicação revisará e removerá registros armazenados. O [memory-poisoning guide](https://aivax.net/blog/persistent-memory-is-a-write-path/) descreve esses controles. Use um manipulador de ferramenta apenas quando o modelo selecionado precisar de ajuda para produzir chamadas de ferramenta. O manipulador disponível é `react.v1.selfcall`; `native` ou nenhum valor usa a chamada de ferramenta nativa do modelo. Use workers quando um sistema externo precisar decidir algo durante o fluxo de inferência. Um worker pode bloquear uma mensagem, reescrever o contexto, adicionar ferramentas ou substituir um resultado de ferramenta do lado do servidor. Como o worker é chamado no caminho crítico, mantenha-o rápido e determinístico. Valide sua configuração de gateway com um cenário de [simulated-user and LLM-judge](https://aivax.net/blog/introducing-agentic-tests/) antes de confiar nela em produção. Quando habilitar moderação, veja [LLM input moderation: system prompt or separate moderation step?](https://aivax.net/blog/aivax-gateway-moderation/) para o que cobre, seu comportamento em falha e o que ainda precisa de verificações ao nível da aplicação. ## Inference MCP Para expor um modelo integrado ou Gateway de IA como ferramenta para um cliente MCP externo, veja [Inference MCP](https://docs.aivax.net/pt-br/docs/mcp-utilities/inference-mcp.md). --- Source: https://docs.aivax.net/pt-br/docs/inference/inference.html # Inferência AIVAX expõe uma API `chat/completions` compatível com OpenAI com parâmetros adicionais da AIVAX. As adições são opcionais e foram projetadas para suportar gateways, RAG, ferramentas integradas, respostas estruturadas, pré-processamento multimodal, roteamento de modelo e metadados de faturamento. Use esta página para chamadas diretas de inferência. Use [AI Gateway](https://docs.aivax.net/pt-br/docs/inference/ai-gateway.md) quando a mesma configuração precisar ser reutilizada ou gerenciada centralmente. ## Endpoint
POST /v1/chat/completions
O endpoint também tem o alias de API `/api/v1/chat/completions`. Reference: [API endpoint reference](https://inference.aivax.net/apidocs?embed=iframe&embed-endpoint=Inference%20(chat%20completions)) ## Roteamento de provedor Alguns modelos integrados estão disponíveis por mais de um provedor. O roteamento de provedor permite que a AIVAX escolha entre esses provedores sem alterar o modelo solicitado pela sua aplicação. Isso difere do roteamento de modelo, que pode selecionar um modelo diferente com base na complexidade da requisição. AIVAX considera provedores que estão atualmente disponíveis e compatíveis com a requisição. Se apenas um provedor for elegível, a preferência de roteamento não altera o resultado. O roteamento de provedor aplica‑se apenas a modelos integrados da AIVAX; um gateway de bring-your-own-key usa o endpoint do provedor configurado nesse gateway. As preferências de roteamento disponíveis são: | Preferência | Comportamento | |---|---| | `Balanced` | Equilibra preço, velocidade e qualidade. Este é o padrão. | | `Cheapest` | Seleciona o provedor com o menor preço aplicável de tokens de entrada e saída. | | `Fastest` | Prioriza o provedor com a maior taxa de transferência disponível. | | `Quality` | Seleciona o provedor que a AIVAX classifica como o de melhor qualidade, sem otimizar para preço ou velocidade. | ### Configurar roteamento em um AI Gateway Use um AI Gateway quando o mesmo roteamento deve ser aplicado a cada requisição. No editor do gateway, selecione um modelo integrado, escolha a estratégia em **Routing preference**, liste as tags dos provedores em ordem em **Allowed providers**, e salve o gateway. A configuração equivalente do gateway usa `parameters.routingOption` e `parameters.allowedProviders`: ```json { "name": "Cost-optimized assistant", "parameters": { "baseAddress": "@integrated", "modelName": "YOUR_INTEGRATED_MODEL", "routingOption": "Cheapest", "allowedProviders": [ "azure-us", "azure-eu", "*" ] } } ``` `allowedProviders` segue as mesmas regras de `routing_options.allowed_providers` abaixo. O padrão é `["*"]`, e uma lista vazia é rejeitada ao salvar o gateway. Após salvar, chame o gateway normalmente usando seu ID ou slug como `model`. AIVAX aplica a preferência de roteamento armazenada enquanto preserva as instruções, ferramentas, configuração RAG e outras configurações do gateway. Veja [AI Gateway](https://docs.aivax.net/pt-br/docs/inference/ai-gateway.md) para o fluxo completo do gateway. ### Substituir roteamento em `chat/completions` Use `routing_options` para escolher como os provedores são selecionados para uma requisição. A sobrescrição funciona com um modelo integrado direto ou um AI Gateway que usa um modelo integrado: ```json { "model": "YOUR_INTEGRATED_MODEL_OR_GATEWAY_ID", "messages": [ { "role": "user", "content": "Summarize this incident report." } ], "routing_options": { "preset": "Balanced", "allowed_providers": [ "azure-us", "azure-eu", "*" ] } } ``` | Campo | Descrição | |---|---| | `preset` | Preferência de roteamento: `Balanced`, `Cheapest`, `Fastest` ou `Quality`. Quando omitido, o `routingOption` salvo no gateway é usado. | | `allowed_providers` | Lista ordenada de tags de provedores. A AIVAX tenta a primeira tag e passa para a próxima somente quando nenhum provedor correspondente está disponível ou compatível com a requisição. `"*"` corresponde a qualquer provedor. Quando omitido, o `allowedProviders` salvo no gateway é usado, cujo padrão é `["*"]`. | Em cada etapa, `preset` escolhe entre os provedores correspondentes. Sem `"*"` no final, a requisição falha quando nenhum dos provedores listados está disponível. Uma lista vazia de `allowed_providers` é rejeitada. A correspondência de tags não diferencia maiúsculas de minúsculas. A tag de cada provedor é exibida nos detalhes do provedor na página **Models** do painel, onde pode ser copiada, e retornada como `tag` na lista de provedores de `GET /v1/models`. Uma tag identifica um endpoint de provedor, incluindo sua região ou variante quando existir, como `azure-us` ou `azure-eu`. `GET /v1/models` aceita um parâmetro de consulta opcional `filter` com um nome de modelo, como `?filter=@openai/gpt-4o`. A resposta então contém apenas entradas cujo nome é igual a ele ou é um instantâneo datado (um sufixo numérico de pelo menos quatro dígitos), ordenadas do mais próximo, com o instantâneo mais recente primeiro. Sem `filter`, a lista completa é retornada. Os valores da requisição substituem o roteamento salvo no gateway apenas para essa requisição; eles não atualizam o gateway. Como `routing_options` é uma extensão da AIVAX, envie‑o como um campo extra no corpo da requisição ao usar um SDK compatível com OpenAI. O campo anterior `routing_preset` está depreciado, mas ainda é aceito. Substitua `"routing_preset": "Fastest"` por `"routing_options": { "preset": "Fastest" }`. Quando ambos são enviados, `routing_options.preset` tem precedência. ### Provedor nas respostas As respostas para modelos integrados incluem um campo `provider` ao lado de `model` com a tag do provedor que atendeu à requisição. Em respostas em streaming, cada fragmento o inclui. O campo é `null` para gateways que usam suas próprias credenciais de provedor. ```json { "object": "chat.completion.chunk", "model": "@openai/gpt-5-mini", "provider": "azure-us", "choices": [ ... ] } ``` Se um provedor falhar e a AIVAX reenviar a requisição para outro provedor, `provider` reflete o provedor que produziu a resposta. ## Entrada e multimodalidade AIVAX aceita partes de conteúdo de mensagem compatíveis com OpenAI para texto, imagens, áudio, vídeos e arquivos. O modelo selecionado deve suportar a modalidade, a menos que você peça à AIVAX para pré-processar a mídia em texto. ```json { "model": "@google/gemini-3-flash", "messages": [ { "role": "user", "content": [ { "type": "text", "text": "Describe these inputs briefly." }, { "type": "image_url", "image_url": { "url": "data:image/png;base64,", "detail": "auto" } }, { "type": "input_audio", "input_audio": { "data": "base64-encoded-audio", "format": "wav" } }, { "type": "file", "file": { "filename": "document.pdf", "file_data": "data:application/pdf;base64," } } ] } ] } ``` Mapeamentos de partes de conteúdo suportados: - `text`: Texto simples. - `image_url`: Conteúdo de imagem. `image_url.url` pode ser uma URL externa ou uma URL de dados base64. `image_url.detail` pode ser `low`, `high` ou `auto` quando o modelo suporta. - `video_url`: Conteúdo de vídeo. `video_url.url` pode ser uma URL externa ou uma URL de dados base64. Prefira URLs para vídeos grandes. - `input_audio`: Conteúdo de áudio. `input_audio.data` é áudio em base64, e `input_audio.format` indica o formato. - `file`: Conteúdo de arquivo. `file.filename` nomeia o arquivo, e `file.file_data` pode ser uma URL externa ou uma URL de dados base64. Para entrada de vídeo, envie uma parte de conteúdo `video_url`. O exemplo a usa uma URL de Dados base64; prefira uma URL publicamente acessível para vídeos grandes: ```json { "model": "@google/gemini-3-flash", "messages": [ { "role": "user", "content": [ { "type": "text", "text": "Summarize the main actions in this video and identify any visible safety risks." }, { "type": "video_url", "video_url": { "url": "data:video/mp4;base64," } } ] } ] } ``` Links externos devem ser acessíveis à AIVAX sem autenticação, restrições de firewall ou renderização apenas em JavaScript. Downloads falhados, redirecionamentos, URLs bloqueadas, formatos não suportados ou limites de tamanho específicos do provedor podem fazer a inferência falhar. Você também pode enviar uma requisição de texto simples com `prompt`: ```json { "model": "@google/gemini-3-flash", "prompt": "Say hello" } ``` ## Idempotência da requisição Defina `idempotency_key` quando sua integração precisar de chamadas repetidas para atualizar o mesmo registro de conversa armazenado em vez de criar um novo token de conversa. AIVAX usa esse valor para correlacionar o contexto do AI Gateway e o registro da conversa. ```json { "model": "your-model-or-gateway-id", "messages": [ { "role": "user", "content": "Summarize order 123." } ], "idempotency_key": "order-123-summary" } ``` O valor deve ser uma string não vazia com no máximo 128 caracteres. Quando omitido, AIVAX gera um token de conversa automaticamente. Para manter o estado da conversa em sua aplicação e a configuração do gateway na AIVAX, veja [migrating Assistants threads to Responses](https://aivax.net/blog/migrating-from-openai-assistants-without-rebuilding-the-same-coupling/). ## Metadados da requisição Defina `metadata` para anexar informações de chave/valor em forma de string à requisição de inferência. AIVAX armazena esse objeto com a conversa registrada e o expõe aos eventos do gateway, portanto é útil para correlação operacional, como ID de pedido, locatário, fluxo de trabalho ou chave de rastreamento interna. ```json { "model": "your-model-or-gateway-id", "messages": [ { "role": "user", "content": "Summarize this support ticket." } ], "metadata": { "ticket_id": "SUP-1042", "workflow": "support-triage" } } ``` `metadata` deve ser um objeto JSON cujos nomes de propriedade e valores são strings. Não coloque segredos, credenciais, dados de pagamento ou cargas úteis grandes neste campo. ## Resposta e registros de conversa O envelope de resposta padrão `/v1/chat/completions` inclui `generation_context`. Suas entradas `generated_usage` contêm `sku`, `amount`, `unit_price`, `quantity` e `description`. Defina `json_only: true` para retornar apenas o JSON final sem esse envelope. Quando o registro de conversa está habilitado, o registro armazenado inclui seu ID, origem, nome do modelo, ID da requisição, esquema de resposta, ferramentas e esquemas de entrada de ferramentas, uso, recursos vinculados, timestamps de criação e atualização, contagem de tokens, ID de usuário externo, mensagem de erro, mensagens e metadados. O contexto de gateway e chave de API está disponível através dos recursos vinculados. Use `idempotency_key` e `metadata` para correlacionar esses registros com seu próprio fluxo de trabalho. ## Pré-processamento multimodal Use `multimodal_resolver` quando o modelo principal deve receber uma descrição textual da mídia em vez do objeto de mídia original. Isso é útil para modelos focados em texto ou quando você quer que a AIVAX normalize arquivos antes da inferência principal. O objeto escolhe um mecanismo para cada tipo de conteúdo; tipos omitidos ou `null` são enviados ao modelo principal sem alterações. ```json { "model": "@metaai/llama-3.3-70b", "messages": [ { "role": "user", "content": [ { "type": "text", "text": "Describe this file briefly." }, { "type": "file", "file": { "filename": "document.pdf", "file_data": "data:application/pdf;base64,BASE64_PDF_CONTENT" } } ] } ], "multimodal_resolver": { "imageEngine": "InferenceLow", "audioEngine": "Stt", "fileEngine": "InferenceHigh" } } ``` | Campo | Mecanismos aceitos | | --- | --- | | `imageEngine` | `InferenceLow`, `InferenceHigh`, `Ocr` | | `audioEngine` | `InferenceLow`, `InferenceHigh`, `Stt` | | `videoEngine` | `InferenceLow`, `InferenceHigh` | | `fileEngine` | `InferenceLow`, `InferenceHigh`, `Ocr` | `Inference` é aceito como um alias de `InferenceLow`. Os mecanismos funcionam da seguinte forma: - `InferenceLow` descreve o conteúdo com um modelo multimodal menor e de menor custo. - `InferenceHigh` descreve o conteúdo com um modelo multimodal maior que é mais preciso e custa mais. - `Ocr` extrai o texto de imagens e arquivos com o mesmo serviço de extração de [Fetch and OCR](https://docs.aivax.net/pt-br/docs/web-foundation/fetch-and-ocr.md), cobrado em Unidades de Processamento. Aceita URIs de dados base64 e URLs públicas. - `Stt` transcreve a fala no áudio com o modelo padrão de [speech-to-text](https://docs.aivax.net/pt-br/docs/pricing.md) e é cobrado por segundo de áudio. Música e sons ambientes não são descritos. Com `InferenceLow` ou `InferenceHigh`, `fileEngine` envia PDFs ao modelo multimodal e converte outros tipos de arquivo com OCR. Com `Ocr`, todo arquivo, incluindo PDFs, é convertido com OCR. Os resultados são armazenados em cache por conteúdo e mecanismo para reutilização, então a mesma mídia resolvida com o mesmo mecanismo não é cobrada novamente. Alterar o mecanismo processa e cobra o conteúdo novamente. ### `multimodal_preprocess` depreciado Os sinalizadores `multimodal_preprocess` ainda são aceitos por compatibilidade, mas estão depreciados. Use `multimodal_resolver` em vez disso; quando ambos são enviados, `multimodal_resolver` é usado. Os sinalizadores são mapeados para os novos mecanismos da seguinte forma: | Sinalizador legado | Equivalente | | --- | --- | | `Image` | `imageEngine: "InferenceLow"` | | `Audio` | `audioEngine: "InferenceLow"` | | `Video` | `videoEngine: "InferenceLow"` | | `File` | `fileEngine: "InferenceLow"` | | `OtherFiles` | `fileEngine: "Ocr"` | | `All` | Todos os anteriores, com `fileEngine: "InferenceLow"` | Como um mecanismo agora cobre todos os tipos de arquivo, `OtherFiles` sozinho também converte PDFs com OCR, e `File` sozinho também converte arquivos não-PDF com OCR. Anteriormente, os tipos de arquivo fora do sinalizador selecionado eram enviados ao modelo principal sem alterações. Entradas multimodais podem ter requisitos de conta. Revise [Pricing](https://docs.aivax.net/pt-br/docs/pricing.md) e [Plans and limits](https://docs.aivax.net/pt-br/docs/limits.md) antes de usá-las em produção. Quando uma inferência multimodal falha, reduza o problema: 1. Teste uma mensagem de texto simples com o mesmo modelo. 2. Teste um anexo pequeno. 3. Teste o mesmo anexo com `multimodal_resolver`. 4. Revise a URL, formato, tamanho e suporte de modalidade do modelo. ## Respostas estruturadas AIVAX suporta respostas estruturadas através de `response_schema`, `response_format` e `json_only`. ```json { "model": "@google/gemini-2.5-flash", "prompt": "Search for recent news about electric vehicles.", "stream": true, "builtin_tools": { "tools": [ "WebSearch" ], "options": { "web_search_mode": "full" } }, "response_schema": { "type": "object", "properties": { "news": { "type": "array", "items": { "type": "object", "properties": { "title": { "type": "string", "description": "News title" }, "summary": { "type": "string", "description": "News summary" } }, "required": ["title", "summary"] } } }, "required": ["news"] } } ``` `response_schema` habilita JSON Healing. AIVAX pede ao modelo JSON, extrai JSON do texto gerado ou blocos de markdown, valida contra o esquema e tenta novamente com feedback de validação até que a saída seja válida ou o limite de tentativas seja atingido. Leia mais sobre [Structured responses](https://docs.aivax.net/pt-br/docs/inference/structured-responses.md). Se sua aplicação não conseguir analisar ou validar o resultado, siga o [invalid JSON troubleshooting guide](https://aivax.net/blog/structured-output-healing-boundary/) antes de aumentar o orçamento de tentativas. ## Funções sob demanda Use `builtin_tools` para habilitar ferramentas integradas da AIVAX para uma requisição direta sem criar um gateway: ```json { "model": "@google/gemini-2.5-flash", "prompt": "Search for recent news about electric vehicles.", "stream": true, "builtin_tools": { "tools": [ "WebSearch" ], "options": { "web_search_mode": "full", "web_search_max_results": 5 } } } ``` Ferramentas integradas incluem `DateTime`, `WebSearch`, `AdvancedWebUsage` (desativado; retorna uma resposta indisponível; veja [Changelogs](https://docs.aivax.net/pt-br/docs/changelogs.md)), `OpenUrl`, `Code`, `Request`, `Calendar`, `Remember`, `GenerateWebPage`, `GenerateDocument`, `XPostsSearch` e `ImageGeneration`. `DateTime` expõe `get_date_time`, uma ferramenta sem argumentos que retorna a data atual, hora, dia da semana em inglês, fuso horário, deslocamento UTC e timestamp ISO 8601. Defina `builtin_tools.options.dateTimeTimeZone` para um identificador IANA; o padrão é `America/Los_Angeles` (Horário do Pacífico), com ajustes automáticos de horário de verão. Essa configuração é independente do fuso horário do navegador do usuário. Veja [Current Date and Time](https://docs.aivax.net/pt-br/docs/tools/builtin-tools.md#current-date-and-time) para exemplos de configuração e saída. Ferramentas sob demanda são adequadas para chamadas ocasionais, protótipos e integrações que não precisam de um gateway persistente. Se a mesma aplicação sempre usar as mesmas ferramentas, prefira configurá-las em um AI Gateway para que a política seja centralizada. ## Corpo de requisição de provedor personalizado Quando um gateway usa uma chave de API fornecida e um endpoint de provedor compatível com OpenAI, `extra_body` pode mesclar JSON customizado no corpo da requisição ao provedor: ```json { "model": "my-custom-model:abc4", "messages": [ { "role": "user", "content": "Explain the tradeoff." } ], "extra_body": { "reasoning": { "enabled": true } } } ``` `extra_body` não é permitido com modelos integrados da AIVAX. Parâmetros de raciocínio diferem por provedor e modelo. Veja [how to set reasoning effort across providers](https://aivax.net/blog/reasoning-is-a-protocol-not-just-a-model-setting/) antes de escolher opções específicas do provedor. ## Explicações de ferramentas Defina `tool_invocation_explanations: true` para solicitar à AIVAX que inclua campos de explicação nos argumentos de ferramentas do lado do servidor. Quando o modelo fornece `_tool_reason` e `_tool_goal`, `servertool.explanation` contém uma cópia amigável ao cliente: ```json { "model": "@x-ai/grok-4.3", "messages": [ { "role": "user", "content": "What's the weather forecast for today?" } ], "stream": true, "builtin_tools": { "tools": ["WebSearch"] }, "tool_invocation_explanations": true } ``` Exemplo de evento de stream: ```json { "choices": [], "servertool": { "name": "web_search", "id": "call-example-id-0", "contents": "{\"query\":\"weather forecast today\",\"_tool_reason\":\"Searching for today's weather forecast online\",\"_tool_goal\":\"I need current weather information to answer accurately.\"}", "state": "Created", "explanation": { "reason": "Searching for today's weather forecast online", "goal": "I need current weather information to answer accurately." } }, "usage": null } ``` ## Modo de renderização de resposta Defina `rendering_mode: "textual_blocks"` quando seu cliente deseja que a AIVAX coloque o raciocínio e a atividade de ferramentas do lado do servidor no mesmo fluxo de resposta textual que a UI de chat já renderiza. Isso é útil para clientes que constroem uma única linha do tempo de resposta e querem transformar o raciocínio e a atividade de ferramentas em componentes visíveis sem manter caminhos de manipulação de eventos separados para cada tipo de marcador. ```json { "model": "@openai/gpt-5-mini", "messages": [ { "role": "user", "content": "Search for recent product updates and summarize the important changes." } ], "stream": true, "builtin_tools": { "tools": ["WebSearch"] }, "rendering_mode": "textual_blocks" } ``` Nesse modo, o raciocínio pode ser emitido como blocos `` e ``, o texto voltado ao assistente pode ser emitido como blocos ``, e marcadores de ferramentas do lado do servidor podem aparecer como elementos de resultado de ferramenta, como `
`. Trate esses blocos como marcadores de apresentação dentro do stream de resposta: analise-os em componentes da linha do tempo de chat, seções de raciocínio recolhíveis, fragmentos de resposta do assistente ou linhas de status de ferramenta, mas não concatene cegamente todos os marcadores na resposta final do assistente. Clientes que não entendem essa marcação devem manter o modo de renderização padrão e lidar diretamente com os eventos de stream estruturados. No modo padrão, o raciocínio chega através de `delta.reasoning`, e a atividade de ferramentas do lado do servidor chega através de eventos `servertool`. Preserve a ordem em que os eventos de stream chegam para que o raciocínio, a atividade de ferramentas, o conteúdo parcial e a resposta final permaneçam na mesma linha do tempo de resposta. ### Exemplo bruto de múltiplas trocas O exemplo abaixo mostra a estrutura de uma resposta em stream quando o raciocínio do lado do servidor está visível ao cliente, `tool_invocation_explanations` está habilitado e `textual_blocks` é usado para manter a linha do tempo da resposta textual. Os atributos exatos do resultado da ferramenta podem variar conforme o renderizador, mas o comportamento importante é a ordem: raciocínio, fragmentos de resposta do assistente, atividade de ferramenta, mais raciocínio e a resposta final podem todos pertencer à mesma troca do assistente. ```json { "model": "my-custom-model:abc4", "messages": [ { "role": "user", "content": "Which cheap and fast multimodal models should I use for security camera analysis?" } ], "stream": true, "builtin_tools": { "tools": ["WebSearch"] }, "tool_invocation_explanations": true, "rendering_mode": "textual_blocks", "extra_body": { "reasoning": { "enabled": true } } } ``` Linha do tempo do assistente em stream bruto: ```text The user is asking for cheap, fast multimodal models for security camera analysis. I should list available AIVAX models and search the documentation before recommending options. I will check the available multimodal models and identify the best options for security camera analysis.
aivax_list_modelsListing the available models in AIVAX
aivax_search_contextSearching documentation about multimodal models and image analysis in AIVAX
The relevant models should support VideoInput or ImageInput, have low input cost, and be fast enough for camera workflows. I found several candidates and should rank them by cost, speed, and modality support.
For security camera analysis, prioritize models with VideoInput, low input pricing, and high speed. Model availability and prices change over time; the picks below are example output — see [Pricing](https://docs.aivax.net/pt-br/docs/pricing.md) for current values. Top picks: 1. @google/gemini-2.5-flash-lite: fast, inexpensive, and supports video. 2. @qwen/qwen3.5-9b: low input cost in this example output with video support. 3. @amazon/nova-lite: low input cost and a large context window. Use VideoInput for clips when possible. If a model only supports ImageInput, extract frames from the camera stream before sending them. ``` Quando o usuário responde, mantenha o histórico da conversa focado no resultado do assistente visível ao usuário. Armazene o raciocínio e os detalhes da ferramenta como metadados de linha do tempo ou auditoria se seu produto precisar deles, mas não os transforme em uma nova mensagem de usuário. A mensagem do assistente deve usar o conteúdo do bloco `` final, não a transcrição completa do raciocínio. ```json { "model": "my-custom-model:abc4", "messages": [ { "role": "user", "content": "Which cheap and fast multimodal models should I use for security camera analysis?" }, { "role": "assistant", "content": "For security camera analysis, prioritize models with VideoInput, low input pricing, and high speed.\n\nModel availability and prices change over time; the picks below are example output — see [Pricing](https://docs.aivax.net/pt-br/docs/pricing.md) for current values.\n\nTop picks:\n\n1. @google/gemini-2.5-flash-lite: fast, inexpensive, and supports video.\n2. @qwen/qwen3.5-9b: low input cost in this example output with video support.\n3. @amazon/nova-lite: low input cost and a large context window.\n\nUse VideoInput for clips when possible. If a model only supports ImageInput, extract frames from the camera stream before sending them." }, { "role": "user", "content": "Now recommend one model for real-time alerts and one for deeper review." } ], "stream": true, "builtin_tools": { "tools": ["WebSearch"] }, "tool_invocation_explanations": true, "rendering_mode": "textual_blocks", "extra_body": { "reasoning": { "enabled": true } } } ``` ### Orientação de apresentação Durante a geração, o raciocínio é útil porque permite que o usuário acompanhe o que o modelo está fazendo antes que a resposta final exista. O assistente pode "falar" enquanto raciocina emitindo atualizações de processo voltadas ao usuário ou fragmentos de resposta provisórios. Essas atualizações podem ser intercaladas com blocos de raciocínio, chamadas de ferramentas e conteúdo parcial de resposta à medida que a resposta se desenvolve. Uma vez que a resposta final do assistente é gerada, essa resposta se torna o principal produto da inferência. O raciocínio intermediário ainda é útil para auditoria, orientação e depuração, mas geralmente deixa de ser o objetivo principal do usuário. Colapse ou minimize o raciocínio por padrão após a conclusão para que a resposta final receba a mais forte ênfase visual, mantendo o processo disponível para usuários que desejam inspecioná-lo. Use divulgação progressiva ao longo desse ciclo de vida. O raciocínio pode ser visível enquanto o modelo ainda está trabalhando, depois tornar‑se um elemento secundário mais discreto após a aparição da resposta final. A atividade de ferramentas deve ser lida como status, não como fala: use rótulos concisos como "Searching", "Opening source", "Running tool", "Finished" ou "Failed", e mantenha cada invocação de ferramenta agrupada como um item da linha do tempo mesmo que seu estado mude ao longo do tempo. Uma boa hierarquia visual é: - Resposta do assistente: maior destaque, tipografia de leitura normal, parte da conversa principal. - Raciocínio em progresso: visível o suficiente para mostrar o que o modelo está fazendo enquanto a resposta está sendo gerada. - Raciocínio concluído: menor destaque, cor ou contêiner atenuado, colapsado ou minimizado por padrão. - Blocos de ferramentas: linhas de status compactas com estados claros de carregamento, sucesso e erro. - Detalhes brutos: ocultos por padrão, a menos que o cliente seja desenvolvedor, auditoria ou superfície de depuração. Evite expor internamente ruído diretamente aos usuários finais. Mostre nomes de ferramentas, estados, rótulos de origem ou resumos curtos quando ajudarem o usuário a entender o que aconteceu. Oculte argumentos brutos, cargas úteis grandes e detalhes de implementação, a menos que o usuário peça explicitamente por detalhes ou a interface do produto seja projetada para inspeção técnica. Para acessibilidade, torne cada bloco colapsado alternável por teclado, dê a cada linha de status um rótulo legível, evite depender apenas da cor para o estado e mantenha o movimento sutil. Uma resposta em stream deve parecer estável enquanto atualiza: novos raciocínios ou linhas de ferramenta podem aparecer em ordem, mas o conteúdo existente não deve pular ou forçar o usuário a perder a posição de leitura. ## Chamada direta ou gateway Use uma chamada direta para tarefas simples, testes, rotinas internas e integrações onde a aplicação controla o modelo, prompt, ferramentas e contexto para cada requisição. Use um AI Gateway quando o comportamento precisar ser estável, auditável e reutilizável. Gateways são melhores para assistentes de suporte, bots de chat, agentes RAG, ferramentas permanentes, trabalhadores, habilidades e configurações compartilhadas por múltiplos clientes. --- Source: https://docs.aivax.net/pt-br/docs/inference/agentic-tests.html # Testes Agentes Testes Agentes avaliam como um AI Gateway se comporta ao longo de uma conversa completa orientada a objetivo, em vez de pontuar uma resposta isolada. O AIVAX simula a próxima mensagem do usuário, envia cada turno ao gateway selecionado e usa um juiz independente para determinar se a conversa alcançou seu objetivo, permanece recuperável ou se afastou persistentemente do resultado esperado. Use Testes Agentes para criar verificações de regressão repetíveis para suporte, vendas, integração, uso de ferramentas, RAG e outros fluxos de agente de múltiplas trocas. Como um teste roda através do AI Gateway configurado, ele exercita o modelo, instruções, ferramentas, habilidades, conhecimento e configurações de inferência do gateway em conjunto. ## Testes persistentes no painel Abra **Testes Agentes** no painel do AIVAX para criar e gerenciar casos de teste reutilizáveis. Um teste armazena: - o AI Gateway sob teste; - um objetivo que descreve o resultado conversacional esperado e é compartilhado com o usuário simulado e o juiz; - critérios de validação opcionais usados apenas pelo juiz; - mensagens iniciais opcionais, recursos externos e um identificador de usuário externo; - amostragem do usuário simulado, limites de turnos, comportamento de saída e limites de avaliação; - um cronograma recorrente opcional; - configurações de notificação de falha e recuperação. A definição do teste é reutilizável. Cada execução cria uma corrida separada, de modo que alterar um teste posteriormente não substitui o histórico já coletado para execuções anteriores. ### Crie um teste útil Escreva o objetivo a partir da perspectiva do usuário simulado: descreva quem ele é, o que ele quer e como ele deve progredir na conversa. Não o escreva como instruções para o assistente. O objetivo é compartilhado tanto com o usuário simulado, que o persegue, quanto com o juiz, que o avalia. Por exemplo: > Você está escolhendo um plano para sua equipe. Explique o tamanho e as necessidades da sua equipe quando solicitado, pergunte qual plano se encaixa e continue até entender a recomendação e como se inscrever. Use **Critérios de validação** para requisitos opcionais que devem afetar apenas a avaliação do juiz, não o comportamento do usuário simulado. Por exemplo: > A recomendação deve nomear o plano selecionado e conectá‑lo ao tamanho de equipe declarado. A resposta final deve incluir um passo direto de inscrição. Manter esses critérios separados impede que o usuário simulado direcione a conversa de forma artificial para os checagens que o juiz aplicará. Use **Mensagens iniciais** quando o cenário exigir um contexto estabelecido, como uma objeção do cliente, uma resposta anterior do assistente ou um ponto específico em um fluxo existente. Use `external_user_id` quando o comportamento do gateway depender de uma identidade da sua própria aplicação. O valor é repassado para a inferência do gateway em cada execução desse teste. Use `resources` para fornecer ao usuário simulado e ao juiz um contexto compartilhado que não pertence à conversa inicial. Forneça objetos com um `type` e um valor `data` não vazio; o número de recursos por teste é limitado (veja [Planos e limites](https://docs.aivax.net/pt-br/docs/limits.md#request-and-payload-limits)). `Text` usa `data` como contexto literal; `RemoteResource` recupera o conteúdo da URL em `data`. Por exemplo: ```json { "resources": [ { "type": "Text", "data": "O cliente tem uma janela de reembolso de 14 dias." }, { "type": "RemoteResource", "data": "https://example.com/refund-policy" } ] } ``` Os recursos são visíveis ao usuário simulado e ao juiz; eles não são enviados ao gateway sob teste como histórico de conversa. Eles não adicionam conhecimento ao gateway. Se o assistente precisar recuperar o mesmo material, disponibilize‑o por meio do próprio conhecimento ou ferramentas do gateway. O usuário simulado ainda pode revelar naturalmente informações do recurso em suas mensagens, portanto não trate recursos como critérios ocultos apenas para o juiz. O conteúdo remoto pode mudar entre execuções de teste e contribui para o uso. Use apenas URLs públicas e confiáveis cujo conteúdo seja adequado para o teste. Um teste focado costuma gerar resultados mais acionáveis do que um cenário amplo. Separe objetivos não relacionados em testes diferentes para que uma falha identifique o comportamento que regrediu. Siga o [tutorial de teste de conversas de múltiplas trocas](https://aivax.net/blog/introducing-agentic-tests/) para definir objetivos observáveis, executar uma conversa simulada e inspecionar a recuperação. ### Ganchos de validação Testes Agentes persistentes podem chamar ganchos de validação externos durante uma execução. Configure o array `hooks` ao criar ou atualizar um teste: ```json { "hooks": [ { "event": "before-test", "url": "https://validator.example/hooks/agentic-tests" }, { "event": "after-test", "url": "https://validator.example/hooks/agentic-tests" }, { "event": "before-inference", "url": "https://validator.example/hooks/gateway" }, { "event": "after-inference", "url": "https://validator.example/hooks/gateway" }, { "event": "context-changed", "url": "https://validator.example/hooks/agentic-tests" } ] } ``` Os eventos suportados são: | Evento | Quando é enviado | Dados do evento | |---|---|---| | `before-test` | Antes do primeiro turno simulado. | `gateway`, `goal` e `metadata`. | | `after-test` | Depois que o teste atinge um resultado terminal normal e antes de o evento final ser emitido. | O resultado final, motivo, estado, número do turno, pontuação, delta da conversa e sequência de perdas. | | `before-inference` | Uma vez antes da inferência principal do gateway em cada turno. | `turn_number` e o array atual `messages`. | | `after-inference` | Uma vez após a inferência principal do gateway em cada turno. | `turn_number` e o array atual `messages`. | | `context-changed` | Uma vez por turno após a resposta do gateway ser concluída. | `turn_number` e o array atual `messages`. | `before-inference` e `after-inference` estão disponíveis apenas quando o teste tem como alvo um AI Gateway. Ganchos são suportados para testes persistentes no painel e execuções agendadas; o endpoint direto de validação SSE não aceita `hooks`. Cada gancho recebe um envelope JSON compatível com worker: ```json { "testId": "", "runId": "", "gatewayId": "", "moment": "2026-08-16T03:00:00Z", "event": { "name": "before-inference", "data": { "turn_number": 1, "messages": [] } } } ``` A URL do gancho deve ser um HTTP ou HTTPS absoluto sem credenciais embutidas e não pode resolver para localhost, loopback, endereços privados, link‑local ou outros endereços locais bloqueados. Quando a conta possui uma chave de gancho, o AIVAX também envia `X-Request-Nonce`; valide antes de confiar no payload. As solicitações de gancho usam `POST` com `Content-Type: application/json`. As respostas do gancho seguem a convenção de worker: qualquer resposta `2xx` continua a execução; uma resposta não `2xx` ou falha na requisição HTTP a interrompe imediatamente. O corpo da resposta não seleciona outra ação. A execução interrompida é armazenada como `failed`, emite um resultado terminal com `reason: "validation_hook_interrupted"` e inclui entradas de auditoria da chamada ao gancho no array `result.hooks` da execução. As entradas de auditoria contêm o evento, URL, timestamp, status ou erro, se a execução continuou e até 4 000 caracteres do corpo da resposta. ### Executar e inspecionar um teste Selecione **Run test** para enfileirar uma execução. As execuções podem estar `pending`, `running`, `succeeded`, `failed` ou `cancelled`. Tanto a taxa de novas execuções quanto a concorrência a nível de conta dependem do plano atual. Veja [Planos e limites](https://docs.aivax.net/pt-br/docs/limits.md#plan-limits) para valores atuais. Execuções manuais, execuções agendadas e avaliações diretas via API compartilham uma cota de nova execução entre as chaves da API da conta. Uma execução persistente conta quando é enfileirada e não conta novamente quando a execução começa. Turnos de conversa não consomem unidades de execução adicionais, embora limites de inferência ainda se apliquem. Uma solicitação de execução manual acima da cota devolve HTTP 429 sem criar uma execução; aguarde a janela de limite de taxa limpar antes de tentar novamente. Uma execução processa sua conversa sequencialmente, enquanto execuções elegíveis da mesma conta podem ser executadas simultaneamente. Cada turno verifica se a conta pode continuar operando. Uma execução pode falhar se o saldo for esgotado ou a inferência não puder continuar, e uma execução pendente ou em andamento pode ser cancelada pelo painel. O inspetor de execução retém: - mensagens do usuário simulado, assistente e juiz em ordem cronológica; - timestamp preciso para cada mensagem retida; - uso de tokens de prompt, prompt em cache e conclusão por mensagem; - cada opinião do juiz, incluindo seu raciocínio, pontuação, estado e valores de trajetória; - o resultado final da avaliação, informações de falha e custo total cobrado na execução. Use as opiniões do juiz para identificar o turno em que a conversa melhorou, ficou em risco, teve sucesso ou entrou em perda persistente. O detalhe da execução também pode ser exportado como JSON para revisão offline. ### Agendar testes recorrentes Um teste pode ser executado automaticamente a partir de uma expressão cron padrão de cinco campos. O intervalo mínimo suportado é de cinco minutos. Por exemplo, `*/15 * * * *` roda a cada 15 minutos. Se a cota de novas execuções da conta estiver esgotada, um teste agendado pendente aguarda a próxima verificação de agendamento sem criar uma execução. O agendamento não contorna a cota nem reserva capacidade separadamente de execuções manuais e avaliações diretas. Desative o agendamento quando quiser preservar a definição do teste sem criar novas execuções agendadas. Execuções manuais permanecem disponíveis a partir da página do teste. ### Notificações de falha e recuperação Habilite notificações de falha quando execuções repetidas falharem e devem alertar o proprietário da conta. O **Notification threshold** controla quantas execuções consecutivas no estado `failed` são necessárias antes que o AIVAX envie um alerta. O padrão é `1`. Essas notificações rastreiam erros de execução, não falhas comportamentais do teste. Uma execução no estado `succeeded` terminou sem erro de execução, mas seu resultado comportamental ainda pode ser `loss` ou `incomplete`. Esses resultados não contam para o limite de notificação de falha. Quando a **Recovery notification** está habilitada, o AIVAX também notifica a conta após uma execução concluir com sucesso depois de falhas de execução consecutivas suficientes para atingir o limite configurado. Uma execução concluída com sucesso redefine o contador de falhas consecutivas, mesmo que seu resultado comportamental seja `loss` ou `incomplete`. Portanto, recuperação significa que a execução se recuperou, não que o assistente passou nos testes comportamentais. ### Retenção Execuções bem‑sucedidas e falhas são retidas por um mês. Execuções canceladas são retidas por um dia. Exporte qualquer resultado que deva permanecer disponível além desses períodos. ## Configurações de avaliação | Configuração | Padrão | Valores aceitos | Descrição | | --- | --- | --- | --- | | `validation_criteria` | `null` | String, parte de mensagem ou lista de partes de mensagem | Requisitos opcionais fornecidos apenas ao juiz. Eles não orientam o usuário simulado nem o gateway sob teste. | | `resources` | `[]` | objetos `{ "type", "data" }` | Contexto adicional fornecido ao usuário simulado e ao juiz. Use `Text` para `data` literal ou `RemoteResource` para conteúdo recuperado da URL em `data`. | | `hooks` | `[]` | objetos `{ "event", "url" }` | Callbacks externos para execuções persistentes. Eventos suportados: `before-test`, `after-test`, `before-inference`, `after-inference` e `context-changed`; `before-inference` e `after-inference` requerem um AI Gateway. | | `profile` | `medium` | `low`, `medium`, `high` | Seleciona o nível de capacidade e preço usado pelo usuário simulado e pelo juiz. Não substitui o modelo configurado no gateway sob teste. | | `max_turns` | `10` | `2`–`64` | Número máximo de turnos do usuário simulado antes que a execução termine. | | `minimum_turns` | `1` | `1`–`63`, menor que `max_turns` | Primeiro turno em que o usuário simulado pode receber a opção de encerrar a conversa. | | `allow_user_exit` | `true` | Boolean | Quando habilitado, o prompt do usuário simulado expõe o token de saída da conversa a partir de `minimum_turns`. Quando desabilitado, essa opção é omitida de todo prompt do usuário simulado. | | `judge_start_turn` | `1` | `1`–`63`, menor que `max_turns` | Primeiro turno avaliado pelo juiz. O último turno é sempre avaliado. | | `loss_threshold` | `0.2` | `0.01`–`0.99` | Limite usado para identificar uma trajetória persistentemente malsucedida. | | `base_threshold` | `0.9` | `0.01`–`0.99` | Pontuação em ou acima da qual o objetivo é considerado alcançado. Deve ser maior que `loss_threshold`, com pelo menos `0.1` entre eles. | | `user_sampling.top_k` | `0.4` | `0`–`2` | Controla quantas características de comunicação amostradas guiam o usuário simulado. Valores maiores aumentam a variação. | | `user_sampling.max_decay` | `0.02` | `0`–`1` | Controla o quanto as características amostradas do usuário podem mudar entre turnos. | Reduza `max_turns` para verificações de regressão rápidas e limitadas. Aumente‑o para fluxos que naturalmente exigem descoberta ou várias chamadas de ferramenta. `minimum_turns` e `judge_start_turn` devem ser menores que `max_turns`; eles são independentes. Atrase `judge_start_turn` quando se esperam esclarecimentos iniciais e pontuações intermediárias não são úteis. Desative `allow_user_exit` quando apenas o juiz ou o orçamento de turnos deve encerrar o teste; `minimum_turns` controla apenas quando o usuário simulado vê sua opção de saída e não atrasa decisões do juiz. Mantenha uma grande diferença entre os limites de perda e sucesso, a menos que a política tenha sido calibrada contra conversas representativas. Testes Agentes cobram a inferência do gateway selecionado mais o uso do usuário simulado e do juiz nas taxas do perfil selecionado. Consulte [Preços](https://docs.aivax.net/pt-br/docs/pricing.md#agentic-tests) para as tarifas atuais. ## Execução direta via API Cada avaliação direta consome uma unidade da mesma cota de conta que execuções persistentes. Se essa cota for excedida, a solicitação devolve HTTP 429 antes de o fluxo SSE abrir. Verifique o status HTTP antes de processar eventos e use tentativas limitadas com backoff. Veja [Planos e limites](https://docs.aivax.net/pt-br/docs/limits.md#semantic-decision-and-agentic-test-rate-limits). Use o endpoint de geração direta quando uma aplicação precisar rodar um teste efêmero e consumir seus eventos imediatamente. Uma execução direta **não** cria um caso de teste persistente nem uma execução no painel. Autentique‑se com uma chave privada da API AIVAX, envie `Accept: text/event-stream` e mantenha a chave em um backend confiável. Não exponha uma chave privada em código de navegador ou pacote de aplicação distribuída. [API endpoint reference](https://inference.aivax.net/apidocs?embed=iframe&embed-endpoint=Evaluate%20Agentic%20Test) A solicitação aceita as mesmas configurações de avaliação principais de um teste persistente. Use `model` para o slug do AI Gateway, `goal` para o resultado desejado compartilhado com o usuário simulado e o juiz, `validation_criteria` para requisitos opcionais apenas do juiz, `minimum_turns` e `allow_user_exit` para controlar quando o usuário simulado vê sua opção de saída, `judge_start_turn` para agendar a avaliação do juiz, `start` para mensagens iniciais opcionais, `resources` para contexto adicional `Text` ou `RemoteResource`, e `external_user_id` para uma identidade repassada à inferência do gateway. Todo evento Server‑Sent Events contém este envelope: ```json { "timestamp": 1786329000000, "event": { "type": "chat.start", "data": { "turn_number": 1, "max_remaining_turns": 10 } } } ``` Roteie mensagens por `event.type` e concatene blocos de conteúdo transmitidos em ordem. Os exemplos abaixo mostram o objeto `event` dentro do envelope SSE. Marcadores de ciclo de vida (`start_generation`, `end_generation`, `turn_analysis_start`, `turn_analysis_end`) carregam um objeto vazio (`data: {}`); blocos de raciocínio compartilham a forma `{ "reasoning_content": "..." }`. Apenas eventos que carregam conteúdo são mostrados integralmente. - **`chat.start`** — Inicia um turno e relata seu número e o orçamento de turnos restante. ```json { "type": "chat.start", "data": { "turn_number": 1, "max_remaining_turns": 10 } } ``` - **`chat.user_message.start_generation`** — Marca o início da geração da mensagem do usuário simulado (`data: {}`). - **`chat.user_message.reasoning`** — Transmite um bloco de raciocínio exposto pelo modelo do usuário simulado. Use apenas para depuração. - **`chat.user_message.content`** — Transmite um bloco de conteúdo da mensagem do usuário simulado. Concatene blocos consecutivos na ordem de chegada. ```json { "type": "chat.user_message.content", "data": { "content": "Você pode explicar a política de reembolso?" } } ``` - **`chat.user_message.end_generation`** — Marca o fim da geração da mensagem do usuário simulado (`data: {}`). - **`chat.user_message.end_conversation`** — Relata uma saída permitida do usuário simulado após `minimum_turns`. Este evento não é emitido quando `allow_user_exit` está desativado. ```json { "type": "chat.user_message.end_conversation", "data": { "reason": "simulated_user_ended_conversation" } } ``` - **`chat.assistant_message.start_generation`** — Marca o início da resposta do gateway selecionado (`data: {}`). - **`chat.assistant_message.reasoning`** — Transmite um bloco de raciocínio exposto pelo modelo do gateway (mesma forma `reasoning_content`). - **`chat.assistant_message.refusal`** — Relata uma recusa retornada pelo modelo do gateway. - **`chat.assistant_message.tool_call`** — Relata uma chamada de ferramenta do assistente, incluindo seu ID, nome e argumentos. - **`chat.assistant_message.tool_result`** — Relata o resultado de uma ferramenta, incluindo o ID da chamada associada, nome e conteúdo. - **`chat.assistant_message.content`** — Transmite um bloco de conteúdo da resposta do assistente. Concatene blocos consecutivos na ordem de chegada. ```json { "type": "chat.assistant_message.content", "data": { "content": "Reembolsos estão disponíveis dentro de 30 dias." } } ``` - **`chat.assistant_message.end_generation`** — Marca o fim da resposta do gateway selecionado (`data: {}`). - **`chat.judge.turn_analysis_start`** — Marca o início de uma avaliação contra o objetivo e quaisquer critérios de validação apenas do juiz (`data: {}`). - **`chat.judge.turn_analysis_result_ready`** — Retorna o raciocínio do juiz, pontuação normalizada, estado atual, medições de trajetória e decisão de continuação. `score` varia de `0.001` a `0.999`; `pass` é falso apenas após uma perda persistente ser estabelecida. ```json { "type": "chat.judge.turn_analysis_result_ready", "data": { "result": { "reasoning": "A resposta atendeu ao resultado solicitado e aos critérios de validação.", "score": 0.92, "pass": true, "should_continue": false, "state": "success", "turn_delta": 0.84, "conversation_delta": 1.0, "loss_streak": 0, "required_loss_streak": 2 } } } ``` - **`chat.judge.turn_analysis_end`** — Marca o fim da avaliação do turno atual (`data: {}`). - **`usage_updated`** — Relata uso de tokens de prompt, prompt em cache e conclusão. `role` é `user`, `assistant` ou `judge` dependendo da inferência que gerou o uso. ```json { "type": "usage_updated", "data": { "role": "judge", "usage": { "prompt_tokens": 1240, "cached_prompt_tokens": 320, "completion_tokens": 180 } } } ``` - **`unhandled_error`** — Relata um erro de inferência, seu escopo e se a operação será tentada novamente. `scope` é `user_inference`, `gateway_inference` ou `judge_analysis`. ```json { "type": "unhandled_error", "data": { "error": "O provedor de inferência está temporariamente indisponível.", "scope": "gateway_inference", "will_retry": true } } ``` - **`chat.validation.end`** — Relata o resultado final e encerra a avaliação. O nome legado do evento é preservado por compatibilidade. `score` é incluído quando o resultado final segue uma avaliação do juiz, mas pode estar ausente quando o orçamento de turnos se esgota. ```json { "type": "chat.validation.end", "data": { "outcome": "success", "reason": "baseline_reached", "state": "success", "turn_number": 3, "score": 0.92, "conversation_delta": 1.0, "loss_streak": 0 } } ``` O estado do juiz pode ser `active`, `at_risk`, `success` ou `loss`. Um turno fraco não falha imediatamente uma conversa recuperável: a pontuação baixa e a trajetória cumulativa devem permanecer iguais ou abaixo do limite de perda configurado para as avaliações consecutivas necessárias. Os resultados finais são: | Resultado | Significado | | --- | --- | | `success` | O juiz alcançou `base_threshold`. Uma saída permitida do usuário simulado aciona a avaliação, mas não passa o teste por si só; sem o limite o resultado é `incomplete`. | | `loss` | A pontuação e a trajetória cumulativa permaneceram iguais ou abaixo de `loss_threshold` nas avaliações consecutivas necessárias. | | `incomplete` | A conversa esgotou `max_turns` sem alcançar sucesso ou uma perda persistente. | | `interrupted` | Uma regra de validação interrompeu a avaliação antes de completá‑la. | Uma chave ausente ou inválida devolve `401 Unauthorized`; uma chave de API pública devolve `403 Forbidden`; saldo insuficiente devolve `402 Payment Required`; campos malformados, slugs de gateway indisponíveis ou combinações de limites inválidas devolvem `400 Bad Request`. Uma falha de inferência pode chegar como um evento SSE após o início da transmissão. Para investigar uma falha de inferência, revise a [configuração do AI Gateway](https://docs.aivax.net/pt-br/docs/inference/ai-gateway.md) usada pelo teste. --- Source: https://docs.aivax.net/pt-br/docs/inference/voice-session.html # Sessão de Voz Sessão de Voz é a API de voz com baixa latência e com estado da AIVAX. Ela mantém o endpoint WebSocket autenticado da AIVAX ao conectar-se a um serviço de inferência em tempo real. Os eventos seguem o protocolo JSON GA Realtime compatível com OpenAI após a conexão ser atualizada. Use a Sessão de Voz para conversas faladas naturais com áudio em streaming, transcrições de fala do assistente, detecção de atividade de voz (VAD) no servidor, interrupções e chamadas de ferramentas. Use [Audio Transcriptions](https://docs.aivax.net/pt-br/docs/generations/audio-transcriptions.md) para cargas de trabalho apenas de transcrição ou [Speech Generation](https://docs.aivax.net/pt-br/docs/generations/speech.md) quando o texto a ser sintetizado já for conhecido. ## Conectar com segurança Abra uma solicitação de upgrade de WebSocket para: ```text wss://inference.aivax.net/api/v1/voice-session ``` Autentique o upgrade com uma **chave de API privada** da conta: ```http Authorization: Bearer ``` O parâmetro de consulta `?api-key=` também é aceito quando o cliente WebSocket não pode definir cabeçalhos, mas os cabeçalhos são preferidos porque as URLs são comumente registradas em logs e sistemas de monitoramento. Chaves de API públicas não podem abrir Sessões de Voz. > [!WARNING] > Nunca coloque uma chave de API privada em JavaScript de navegador, em um pacote de aplicativo móvel ou em uma URL de WebSocket visível ao navegador. Navegadores também não podem adicionar um cabeçalho `Authorization` através do construtor nativo `WebSocket`. Termine a conexão do usuário final em seu backend e, em seguida, deixe esse backend confiável abrir e retransmitir o WebSocket autenticado da AIVAX. [API endpoint reference](https://inference.aivax.net/apidocs?embed=iframe&embed-endpoint=Open%20voice%20session) ## Migrar para eventos GA Realtime Após o upgrade do WebSocket, troque eventos JSON GA Realtime compatíveis com OpenAI diretamente. Não envie o envelope legado `session_start` nem dependa dos antigos eventos específicos da AIVAX de STT, TTS, segmento WAV ou confirmação de reprodução. As principais mudanças de migração são: | Integração legada | Integração GA Realtime | | --- | --- | | Mensagem de início de sessão personalizada | `session.update` | | Eventos personalizados de STT e VAD | Eventos nativos `input_audio_buffer.speech_*`; a transcrição do chamador está atualmente indisponível | | Segmentos de resposta WAV | PCM Base64 em `response.output_audio.delta` | | Confirmação de reprodução personalizada | Eventos nativos de cancelamento e truncamento de item de conversa | | Envelopes de chamada de ferramenta personalizados | Itens de chamada de função nativos e saídas de chamada de função | | Cobrança fixa por minuto | Taxas de token de texto, áudio e imagem do modelo selecionado | Use a propriedade `type` para rotear cada evento. O áudio permanece codificado em base64 dentro das mensagens JSON de texto; não envie quadros binários de WebSocket. ## Configurar a sessão Envie `session.update` como o primeiro evento do cliente. AIVAX suporta os campos de sessão GA Realtime e adiciona dois seletores opcionais: - `gateway`: um slug de AI Gateway disponível para a conta autenticada; - `model`: `gpt-realtime-2.1` ou `gpt-realtime-2.1-mini`. O seletor fornecido no evento determina a configuração da AIVAX usada para a sessão. Configure a voz de saída em `session.audio.output.voice` e o esforço de raciocínio em `session.reasoning.effort`. ```json { "type": "session.update", "session": { "type": "realtime", "gateway": "", "model": "gpt-realtime-2.1", "instructions": "Ajude o chamador a concluir a tarefa solicitada.", "audio": { "input": { "format": { "type": "audio/pcm", "rate": 24000 }, "turn_detection": { "type": "server_vad" } }, "output": { "format": { "type": "audio/pcm", "rate": 24000 }, "voice": "marin" } }, "reasoning": { "effort": "low" } } } ``` Escolha o modelo com base na experiência que você precisa: - `gpt-realtime-2.1` para conversas em tempo real da mais alta qualidade; - `gpt-realtime-2.1-mini` para cargas de trabalho em tempo real de menor custo e mais leves. Você também pode fornecer instruções padrão GA Realtime, ferramentas e configurações de detecção de turno na mesma atualização. Sessões de transcrição de entrada não são suportadas atualmente, portanto não configure `audio.input.transcription` nem dependa de eventos `conversation.item.input_audio_transcription.*`. Aguarde o evento de confirmação de sessão do servidor antes de considerar a configuração como ativa. Uma voz não pode ser alterada após a sessão já ter produzido áudio; reconecte‑se para selecionar uma voz diferente. ## Transmitir áudio do microfone Capture PCM mono assinado de 16 bits little‑endian (`s16le`) em 24 000 Hz, codifique cada fragmento em base64 na ordem cronológica de bytes e anexe ao buffer de entrada: ```json { "type": "input_audio_buffer.append", "audio": "" } ``` Envie fragmentos pequenos continuamente para baixa latência. Não adicione cabeçalhos WAV, RIFF ou de outros contêineres a cada fragmento. Se a detecção automática de turno estiver habilitada, o VAD do servidor determina quando o usuário começa e para de falar e cria respostas de acordo com a configuração da sessão. Se a detecção de turno estiver desativada, controle o turno explicitamente com os eventos nativos do buffer: 1. Envie um ou mais eventos `input_audio_buffer.append`. 2. Envie `input_audio_buffer.commit` quando a fala estiver completa. 3. Envie `response.create` para solicitar a resposta do assistente. Use `input_audio_buffer.clear` para descartar áudio armazenado que não deve se tornar um turno de conversa. ## Receber transcrições e áudio Manipule o fluxo de eventos nativo GA Realtime em vez de assumir uma sequência fixa. Em particular: - `input_audio_buffer.speech_started` e `input_audio_buffer.speech_stopped` relatam limites do VAD do servidor; - Eventos `conversation.item.input_audio_transcription.*` não são emitidos atualmente porque sessões de transcrição de entrada não são suportadas; - `response.output_audio_transcript.delta` e `response.output_audio_transcript.done` fornecem a transcrição falada do assistente; - `response.output_audio.delta` transporta um fragmento de áudio PCM em base64; - `response.output_audio.done` marca o fim de um fluxo de áudio de saída; - `response.done` relata o status final da resposta e o uso; - `error` relata um erro de solicitação ou de sessão. Decodifique cada valor `response.output_audio.delta` como PCM mono assinado de 16 bits little‑endian em 24 000 Hz e enfileire as amostras para reprodução sem lacunas: ```json { "type": "response.output_audio.delta", "response_id": "", "item_id": "", "output_index": 0, "content_index": 0, "delta": "" } ``` Os campos dos eventos podem evoluir com o protocolo GA Realtime. Roteie por `type`, mantenha os identificadores necessários para correlacionar respostas e itens e ignore tipos ou campos de evento desconhecidos que seu cliente não utiliza. ## Tratar interrupções Quando o chamador fala sobre o assistente: 1. Interrompa ou diminua a reprodução local quando o evento confirmado `input_audio_buffer.speech_started` chegar. 2. Envie `response.cancel` se uma resposta ainda estiver sendo gerada. 3. Envie o evento nativo de truncamento de item de conversa com o identificador do item do assistente e a quantidade de áudio que foi realmente reproduzida. O cancelamento interrompe a geração; o truncamento mantém a conversa do servidor alinhada com o que o chamador ouviu. Acompanhe a duração do áudio reproduzido no cliente em vez de supor que cada fragmento recebido chegou ao alto-falante. Trate corridas de resposta já finalizadas como normais e torne o tratamento de cancelamento idempotente. ## Usar ferramentas Declare ferramentas do cliente através do campo de sessão padrão GA Realtime `tools`. Manipule `response.function_call_arguments.done` usando seu `response_id`, `call_id`, `name` e `arguments` codificado em JSON. Execute cada função solicitada, adicione um item de conversa nativo `function_call_output` por `call_id` e, em seguida, envie um único `response.create` após o `response.done` originário e depois que cada chamada dessa resposta tiver uma saída. Ferramentas configuradas como `InternalFunctions` do servidor AIVAX são executadas dentro da AIVAX e não requerem ação do cliente. Ferramentas definidas pelo cliente continuam a ser retornadas normalmente e permanecem sob responsabilidade do cliente. Seu manipulador de ferramentas deve validar argumentos, preservar identificadores de chamada, aplicar limites de tempo e retornar um erro útil quando a execução falhar. Não aguarde um resultado de ferramenta do cliente que está sendo executado como função do servidor AIVAX. ## Faturamento e limites Para preços, disponibilidade e limites de conta atuais, veja [Pricing](https://docs.aivax.net/pt-br/docs/pricing.md) e [Plans and Limits](https://docs.aivax.net/pt-br/docs/limits.md). ## Desconectar graciosamente Uma Sessão de Voz dura apenas enquanto o WebSocket está ativo. Não é possível retomar após a desconexão. Para um encerramento normal: 1. Interrompa a captura do microfone e pare de enviar áudio. 2. Deixe que qualquer troca de resposta ou resultado de ferramenta necessária termine, ou cancele-a explicitamente. 3. Interrompa e esvazie a reprodução local conforme adequado para a experiência do produto. 4. Feche o WebSocket com um código de encerramento normal. 5. Libere dispositivos de áudio, filas de reprodução, chamadas pendentes e o estado da sessão. Manipule fechamento de peer, perda de rede, falha de autenticação, erros de modelo e encerramento do servidor como resultados terminais da sessão. Reconectar inicia uma nova sessão: abra um novo WebSocket autenticado, envie um novo `session.update` e reconstrua qualquer contexto de aplicação que sua experiência exija. Use tentativa limitada com backoff para falhas transitórias, mas não repita automaticamente autenticação ou erros de configuração. --- Source: https://docs.aivax.net/pt-br/docs/inference/pipelines.html # Pipelines de IA Os pipelines do AI Gateway são as etapas de processamento que a AIVAX aplica antes e durante a inferência. Eles podem adicionar contexto, reescrever consultas, expor ferramentas, moderar entradas, roteir modelos, truncar conversas e chamar workers externos. A maioria dos pipelines é configurada nos parâmetros do gateway. Opções ao nível da requisição podem sobrescrever alguns parâmetros de inferência em chamadas diretas `chat/completions`. ## RAG RAG vincula [collections](https://docs.aivax.net/pt-br/docs/rag/collections.md) a um AI Gateway. O gateway controla: - Coleções incluídas na recuperação. - Número máximo de documentos recuperados. - Pontuação mínima. - Nome do reranker. - Se referências de fragmentos são incluídas. - Estratégia de consulta. Quando um gateway possui coleções de conhecimento e a última mensagem do usuário contém texto, a AIVAX pode recuperar documentos correspondentes antes da chamada ao modelo. Para estratégias de injeção, o contexto recuperado é inserido no início da última mensagem do usuário. Se uma coleção vinculada tem seu próprio texto de contexto, esse contexto de coleção é adicionado às instruções do sistema. Estratégias de consulta: - `Plain`: Usa a última mensagem do usuário como consulta de busca. - `Concatenate`: Junta o número configurado mais recente de mensagens do usuário linha a linha e busca com o texto combinado. - `UserRewrite`: Reescreve mensagens recentes do usuário em uma ou mais consultas de busca usando um modelo resolvedor. - `FullRewrite`: Reescreve mensagens recentes do usuário e do assistente em uma ou mais consultas de busca usando um modelo resolvedor. - `QueryFunction`: Adiciona uma função de consulta ao modelo. O modelo decide quando buscar nas coleções vinculadas, e os resultados da busca são retornados como respostas de ferramenta. O modelo pode restringir uma busca com um [document filter](https://docs.aivax.net/pt-br/docs/filters/document-filters.md) opcional. Estratégias de reescrita adicionam custo de modelo resolvedor (veja [Pricing](https://docs.aivax.net/pt-br/docs/pricing.md)) e latência. Elas são úteis quando usuários fazem perguntas de acompanhamento, como “e sobre este caso?”, pois o resolvedor pode transformar a conversa recente em uma consulta de busca mais clara. Definir muitos resultados de RAG aumenta o uso de tokens de entrada e pode elevar o custo final da inferência (veja [Pricing](https://docs.aivax.net/pt-br/docs/pricing.md)). Comece com um número pequeno de resultados e aumente apenas quando o modelo não tiver evidência suficiente. ## Instruções Configurações de instrução moldam o prompt exposto ao provedor: - **Instruções do sistema**: adicionadas ao conjunto de instruções do sistema. - **Fontes remotas de instruções do sistema**: obtidas de URLs configuradas e adicionadas ao conjunto de instruções do sistema. - **Modelo de prompt do usuário**: substitui `{prompt}` pelo texto de cada mensagem do usuário antes de enviá‑la ao modelo. - **Pré‑preenchimento do assistente**: adiciona conteúdo inicial do assistente antes da geração quando o modelo oferece pré‑preenchimento. Fontes remotas de instrução são obtidas como texto, dentro de um limite de tamanho de resposta (veja [Request and payload limits](https://docs.aivax.net/pt-br/docs/limits.md#request-and-payload-limits)). Sua duração de cache é configurável; o padrão é 600 segundos. Alguns modelos não suportam pré‑preenchimento do assistente, temperatura, sequências de parada ou esforço de raciocínio. A validação integrada de modelo rejeita configurações incompatíveis do gateway quando essas limitações são conhecidas. ## Habilidades Habilidades são pacotes de instruções sob demanda disponíveis para o modelo. Quando um gateway habilita habilidades, a AIVAX carrega as habilidades da conta configuradas no gateway e pode expor funções internas relacionadas a habilidades. Leia mais sobre [skills](https://docs.aivax.net/pt-br/docs/features/skills.md). ## Pré‑processamento multimodal O pré‑processamento multimodal converte conteúdo de mídia selecionado em texto antes da chamada principal ao modelo. Cada tipo de conteúdo (imagens, áudio, vídeo e arquivos) usa seu próprio mecanismo: um modelo multimodal menor (`InferenceLow`) ou maior (`InferenceHigh`), OCR para imagens e arquivos, ou reconhecimento de fala para áudio. Consulte [Multimodal pre-processing](https://docs.aivax.net/pt-br/docs/inference/inference.md#multimodal-pre-processing) para os mecanismos aceitos. A configuração do gateway `multimodalResolverParameters` substitui as flags obsoletas `enabledMultimodalFeatures`. Gateways que ainda usam as flags continuam funcionando com os mecanismos equivalentes até que `multimodalResolverParameters` seja definido. Use pré‑processamento quando o modelo principal for texto‑primeiro ou quando quiser que a AIVAX normalize a mídia em contexto textual. Para modelos multimodais diretos, envie a mídia original sem pré‑processamento para que o modelo possa inspecioná‑la diretamente. Os resultados são armazenados em cache por conteúdo e mecanismo para reutilização. ## Parametrização O pipeline de parametrização configura opções de requisição ao modelo, como: - `temperature` - `top_p` - `presence_penalty` - `frequency_penalty` - `stop` - `max_completion_tokens` - `reasoning_effort` - `verbosity` - `seed` Valores ao nível da requisição podem sobrescrever valores do gateway quando o endpoint suporta o parâmetro. Alguns modelos integrados rejeitam parâmetros específicos, e provedores BYOK podem ter suas próprias restrições. ## Truncamento de contexto O pipeline de truncamento de contexto usa uma contagem aproximada de tokens. Quando `ContextMaximumSize` está definido e a conversa ultrapassa o limite, o gateway segue `ContextOverflowAction`: - `Throw`: Retorna um erro em vez de chamar o modelo. - `Truncate`: Remove mensagens não‑sistêmicas mais antigas até que a conversa caiba. O truncamento preserva mensagens do sistema e mantém pelo menos uma mensagem do usuário quando possível. Se a mensagem do usuário restante ainda ultrapassar o limite, a requisição falha com um erro de tamanho de mensagem. Em planos mais baixos, o contexto de entrada efetivo pode ser limitado mesmo quando um contexto maior está configurado; veja [Plans and limits](https://docs.aivax.net/pt-br/docs/limits.md#plan-limits). ## Truncamento de mensagens de ferramenta `ToolContextCount` controla quantas mensagens de resposta de ferramenta recentes mantêm seu conteúdo original. Quando definido como um valor maior que zero, mensagens de ferramenta mais antigas permanecem na conversa, mas seu conteúdo é substituído por: ```text [tool response truncated - call this tool again] ``` Isso pode reduzir o uso de contexto em longas conversas agenteicas. Também pode prejudicar cadeias onde um resultado antigo de ferramenta continua importante, portanto use apenas quando o modelo puder chamar a ferramenta novamente com segurança. Reescrever mensagens antigas de ferramenta também altera o prefixo da requisição, o que pode reduzir a taxa de acerto do cache de prompt; para verificar isso no seu uso, veja [why a prompt cache hit rate is low](https://aivax.net/blog/low-prompt-cache-hit-rate-prefix-breakers-compaction/). ## Ferramentas do lado do servidor Ferramentas do lado do servidor são funções internas executadas pela AIVAX durante a inferência. Elas podem provir de: - Ferramentas internas. - Funções de protocolo. - Fontes remotas de funções de protocolo. - Fontes MCP. - QueryFunction RAG. - Habilidades. - Ambiente bash opcional. Eventos de ferramenta do lado do servidor podem ser transmitidos aos clientes como atualizações `servertool`. ## Ferramentas internas Ferramentas internas podem ser configuradas em um gateway ou fornecidas por requisição com `builtin_tools`. Flags de ferramentas internas disponíveis incluem: - `DateTime` — data e hora atuais via `get_date_time`; configure `dateTimeTimeZone` nas opções de ferramenta interna (padrão: `America/Los_Angeles`, Horário do Pacífico). - `WebSearch` - `AdvancedWebUsage` (desativado; retorna uma resposta indisponível. Veja [Changelogs](https://docs.aivax.net/pt-br/docs/changelogs.md).) - `OpenUrl` - `Code` - `Request` - `Calendar` - `Remember` - `GenerateWebPage` - `GenerateDocument` - `XPostsSearch` - `ImageGeneration` Consulte [Built-in tools](https://docs.aivax.net/pt-br/docs/tools/builtin-tools.md). ## MCP e funções de protocolo Ferramentas listadas por uma fonte MCP tornam‑se disponíveis ao modelo com seus esquemas declarados. Resultados de ferramentas MCP podem incluir texto, imagens e áudio; resultados de mídia são anexados à conversa como mensagens adicionais quando suportado. Funções de protocolo expõem callbacks HTTP ou URLs de callback da AIVAX como ferramentas chamáveis pelo modelo. Fontes remotas de funções de protocolo são obtidas e armazenadas em cache antes que suas ferramentas fiquem disponíveis ao modelo. Veja [Protocol functions](https://docs.aivax.net/pt-br/docs/tools/protocol-functions.md) e [MCP](https://docs.aivax.net/pt-br/docs/tools/mcp.md). ## Interpretador de funções Um manipulador de ferramenta pode adicionar comportamento de chamada de ferramenta para modelos que não produzem chamadas nativas de forma confiável. Valores suportados são: - `native` ou `null`: Usa chamada nativa de ferramenta do modelo. - `react.v1.selfcall`: Usa o manipulador de auto‑chamada estilo ReAct. Se um nome de manipulador não for reconhecido, a configuração do gateway falha no momento da inferência. ## Moderação A moderação é um filtro de entrada que roda antes do modelo principal. Quando ao menos uma categoria de moderação está habilitada, a AIVAX envia a conversa textual disponível para um modelo de proteção. O modelo de proteção avalia a última solicitação do usuário no contexto estabelecido pela conversa e retorna uma pontuação de 0 a 10 para cada categoria. | Categoria | Propriedade do gateway | O que o modelo de proteção avalia | | --- | --- | --- | | **Violência e discurso de ódio** | `violenceThreshold` | Violência, ódio, extremismo, ameaças ou incentivo a danos físicos. | | **Conteúdo sexual e explícito** | `sexualExplicitThreshold` | Conteúdo sexualmente explícito ou adulto. | | **Tópicos políticos** | `politicalThreshold` | Persuasão política, campanha, manipulação ou conteúdo altamente político. | | **Conteúdo perigoso** | `dangerousContentThreshold` | Armas, explosivos, abuso cibernético, auto‑dano ou outros atos e instruções perigosas. | | **Tentativas de jailbreak** | `jailbreakThreshold` | Tentativas de sobrescrever instruções, revelar instruções protegidas, extrair dados ou injetar prompts. | ### Entendendo os níveis de sensibilidade O valor configurado no gateway é um **nível de sensibilidade**, não a pontuação do modelo de proteção. Um nível mais alto diminui a pontuação necessária para bloquear a entrada. | Nível de sensibilidade | Pontuações do modelo de proteção que bloqueiam | | ---: | --- | | `0` | Categoria desativada | | `1` | `10` | | `3` | `8`–`10` | | `5` | `6`–`10` | | `8` | `3`–`10` | | `10` | `1`–`10` | Para categorias habilitadas, o corte de bloqueio é `11 - nível de sensibilidade`. Uma pontuação de `0` nunca bloqueia. Configure cada categoria de forma independente; a requisição é bloqueada quando qualquer categoria habilitada atinge seu corte. ### Adicionar regras específicas do gateway **Regras de moderação adicionais** permitem que um administrador de gateway descreva políticas que não são totalmente expressas pelas descrições das categorias internas. O modelo de proteção lê essas regras junto com a política interna e as usa para calibrar as cinco pontuações. Exemplo: ```text Allow users to describe accidents and injuries when asking for insurance coverage or assistance. Treat requests for instructions to cause an accident or harm someone as dangerous content. ``` Regras adicionais orientam a classificação; elas não criam uma pontuação separada nem bloqueiam uma entrada diretamente. Pelo menos uma categoria deve ter nível de sensibilidade acima de `0` para que a moderação seja executada. No exemplo acima, habilite **Conteúdo perigoso** para que a pontuação do modelo de proteção possa gerar uma decisão de bloqueio. Escreva regras como declarações curtas de política com casos explicitamente permitidos e proibidos. Não inclua segredos, credenciais ou dados operacionais privados, pois as regras são armazenadas na configuração do gateway e enviadas ao modelo de proteção durante a moderação. O fragmento de gateway a seguir habilita diferentes níveis de sensibilidade e fornece orientações específicas ao domínio para o modelo de proteção. Os valores são apenas um exemplo, não uma baseline recomendada para produção: ```json { "moderationParameters": { "violenceThreshold": 4, "sexualExplicitThreshold": 4, "politicalThreshold": 2, "dangerousContentThreshold": 6, "jailbreakThreshold": 7, "additionalRules": "Allow descriptions of accidents and injuries for insurance support. Treat instructions to cause accidents or harm someone as dangerous content." } } ``` ### O que acontece quando uma entrada é bloqueada Quando qualquer categoria habilitada atinge seu corte: 1. A AIVAX marca as mensagens originais da conversa como indisponíveis para a requisição principal de inferência. 2. A AIVAX as substitui por uma instrução identificando as categorias que causaram o bloqueio. 3. O modelo principal gera uma recusa em vez de responder à solicitação original. A recusa é gerada pelo modelo; a moderação não devolve um corpo de resposta fixo. Se todos os modelos de moderação falharem em produzir um resultado válido, a requisição não é rejeitada. O modelo principal recebe então instruções estritas derivadas das categorias configuradas, níveis de sensibilidade e regras adicionais, e aplica a política por conta própria. Se sua aplicação deve falhar de forma fechada quando a moderação estiver indisponível, imponha isso na sua aplicação ou em um worker. ### Contexto e limitações atuais O modelo de proteção recebe o histórico completo da conversa, não apenas a última mensagem. Papéis de mensagem e texto são preservados como dados de conversa serializados não confiáveis para reduzir a chance de que instruções dentro da conversa sobrescrevam a política de proteção. Se a conversa exceder a janela de contexto da proteção, o contexto mais antigo pode ser truncado. A moderação atualmente se aplica apenas ao texto de entrada: - Saída gerada não é moderada. - Imagens, áudio, vídeo e conteúdo de arquivos não são analisados. O modelo de proteção recebe apenas um marcador indicando que mídia estava presente. - Autorização de ferramenta ou worker ainda requer política ao nível da aplicação; a moderação não é um mecanismo de autorização. - A moderação adiciona uma inferência de proteção antes da inferência principal, o que acrescenta latência e uso de moderação cobrável. Use a moderação para políticas de segurança amplas. Use workers quando a decisão depender de identidade externa, estado de conta ou política de negócio específica. Para um guia de decisão sobre prompts de sistema, etapa de moderação separada e autorização, veja [LLM input moderation: system prompt or separate moderation step?](https://aivax.net/blog/aivax-gateway-moderation/). ## Workers Configure eventos de worker e detalhes de endpoint nos parâmetros do gateway; implemente o comportamento do evento no seu endpoint externo. Veja [AI Workers](https://docs.aivax.net/pt-br/docs/inference/workers.md). --- Source: https://docs.aivax.net/pt-br/docs/inference/structured-responses.html # Respostas Estruturadas AIVAX pode produzir JSON estruturado por duas vias: - `response_schema`: AIVAX valida a saída final do modelo contra um JSON Schema e tenta novamente com feedback de validação quando a saída está inválida. Este é o caminho de reparo de JSON. - `response_format`: AIVAX passa um formato de resposta nativo compatível com OpenAI para o provedor, ou aplica reparo quando `healing_options` está presente ou o reparo automático de JSON está habilitado na conta. Use respostas estruturadas quando outro sistema consumirá a saída e texto livre seria frágil. ## Como o reparo de JSON funciona Quando `response_schema` está presente, AIVAX adiciona instruções de esquema à requisição do modelo. Depois que o modelo gera uma resposta, AIVAX tenta extrair JSON de: - O texto completo gerado. - Variantes reparadas comuns, como chaves de abertura ou fechamento ausentes. - Blocos de código JSON encontrados no texto gerado. Se o JSON extraído não validar contra o esquema, AIVAX adiciona uma mensagem de feedback com os erros de validação e pede ao modelo que gere o JSON novamente. Isso continua até que um valor JSON válido seja gerado ou o limite de tentativas configurado seja alcançado. O reparo de JSON melhora a confiabilidade, mas não é uma garantia absoluta. Se o modelo falhar repetidamente ao esquema, a requisição pode falhar após o limite de tentativas. ## Escolhendo um modo Use `response_schema` quando AIVAX deve ser responsável pela validação e reparo. Este é o modo mais seguro para modelos que não suportam nativamente saída estruturada, para respostas que usam ferramentas antes de produzir JSON e para sistemas que não podem tolerar JSON malformado. Use `response_format` com `type: "json_schema"` quando o modelo do provedor deve lidar nativamente com a saída estruturada. AIVAX ainda usará o esquema internamente, e o reparo será aplicado quando `response_format.json_schema.healing_options` for fornecido ou a conta tiver o reparo automático de JSON habilitado. Use `json_only: true` quando o corpo da resposta HTTP deve conter apenas o JSON final. Isso remove o envelope normal de conclusão de chat, opções, uso e metadados de geração do corpo da resposta. Para uma lista de verificação de solução de problemas cobrindo recusas, fluxos incompletos e aplicação nativa versus reparo, leia [How to fix invalid JSON from an LLM API with structured outputs](https://aivax.net/blog/structured-output-healing-boundary/). ## Exemplo básico Referência: [API endpoint reference](https://inference.aivax.net/apidocs?embed=iframe&embed-endpoint=Inference%20(chat%20completions))
POST /v1/chat/completions
```json { "model": "@google/gemini-2.5-flash", "prompt": "Search for recent news about electric vehicles.", "stream": true, "builtin_tools": { "tools": [ "WebSearch" ], "options": { "web_search_mode": "full" } }, "response_schema": { "type": "object", "properties": { "news": { "type": "array", "items": { "type": "object", "properties": { "title": { "type": "string", "description": "News title" }, "summary": { "type": "string", "description": "News summary" } }, "required": ["title", "summary"] } } }, "required": ["news"] } } ``` `builtin_tools` é opcional. Se você habilitar ferramentas, o modelo selecionado deve suportar chamadas de ferramenta ou o gateway deve fornecer um manipulador de ferramentas. ## Saída estruturada nativa Use `response_format` quando quiser usar o suporte nativo de JSON Schema do provedor: ```json { "model": "@openai/gpt-4o", "messages": [ { "role": "user", "content": "List 3 European capitals." } ], "response_format": { "type": "json_schema", "json_schema": { "schema": { "type": "object", "properties": { "capitals": { "type": "array", "items": { "type": "object", "properties": { "city": { "type": "string" }, "country": { "type": "string" } }, "required": ["city", "country"] } } }, "required": ["capitals"] } } } } ``` Se o modelo integrado selecionado tem suporte estrito a JSON, AIVAX pode encaminhar o esquema usando o formato de resposta JSON Schema do provedor. ## Habilitando reparo em `response_format` Você pode habilitar explicitamente o reparo de JSON dentro de `response_format.json_schema`: ```json { "model": "@openai/gpt-4o", "messages": [ { "role": "user", "content": "Return a short status object." } ], "response_format": { "type": "json_schema", "json_schema": { "schema": { "type": "object", "properties": { "status": { "type": "string" }, "message": { "type": "string" } }, "required": ["status", "message"] }, "healing_options": { "max_attempts": 5 } } } } ``` `max_attempts` deve estar entre 1 e 10. Cada nova tentativa é outra geração do modelo e pode aumentar custo e latência. Se o reparo frequentemente atinge o limite de tentativas, ajuste a instrução e o esquema antes de aumentar o limite. Causas comuns são esquemas excessivamente rígidos, campos `required` ausentes, prompts vagos, resultados de ferramenta ruidosos ou um modelo muito pequeno para a tarefa. ## Modo `json_only` Defina `json_only: true` quando o cliente deve receber apenas o JSON gerado: ```json { "model": "@openai/gpt-4o", "messages": [ { "role": "user", "content": "List 3 European capitals." } ], "response_schema": { "type": "object", "properties": { "capitals": { "type": "array", "items": { "type": "object", "properties": { "city": { "type": "string" }, "country": { "type": "string" } }, "required": ["city", "country"] } } }, "required": ["capitals"] }, "json_only": true } ``` Com `stream: false`, o corpo da resposta HTTP é o JSON final com `Content-Type: application/json`. Com `stream: true`, AIVAX envia o JSON completo como um único evento de dados SSE e depois envia `[DONE]`. ## Recursos de esquema suportados AIVAX valida o JSON gerado com JSON Schema. Os recursos suportados documentados são: - `string`: `minLength`, `maxLength`, `pattern`, `format` e `enum`. - `number` e `integer`: `minimum`, `maximum`, `exclusiveMinimum`, `exclusiveMaximum` e `multipleOf`. - `array`: `items`, `uniqueItems`, `minItems` e `maxItems`. - `object`: `properties` e `required`. - `boolean` e `bool`. - `null`. - Tipos múltiplos, por exemplo `"type": ["string", "number"]`. Use `required` para campos que sua aplicação deve receber. Use `items` explícito para arrays. Use `enum`, `format` e restrições de comprimento ou padrão quando os valores aceitos são conhecidos. ## Padrões práticos Para extração, informe ao modelo quais campos devem ser inferidos, quais campos devem ser `null` quando ausentes e quais campos não devem ser inventados. Para classificação, use `enum` para o r final e adicione um campo curto `reason` quando humanos precisarem auditar a decisão. Para JSON com suporte a ferramentas, permita que o modelo use ferramentas antes de produzir o JSON e inclua campos de origem quando a aplicação precisar de procedência. Para gravações em banco de dados ou chamadas de API externas, valide o JSON novamente em sua aplicação. AIVAX valida a estrutura do JSON, mas sua aplicação continua responsável por regras de negócio como permissões, IDs válidos, intervalos de datas e restrições específicas da conta. --- Source: https://docs.aivax.net/pt-br/docs/inference/workers.html # Trabalhadores de IA Os trabalhadores do AI Gateway são hooks HTTP que permitem que um serviço externo controle a execução do gateway em tempo de execução. Um trabalhador pode permitir um evento, interrompê-lo, reescrever o contexto, adicionar instruções ou ferramentas, ou substituir o resultado de uma ferramenta do lado do servidor. Use trabalhadores quando uma regra precisar ser decidida fora do prompt. Casos comuns incluem verificações de assinatura, enriquecimento de CRM, política específica de locatário, registro de auditoria, bloqueio dinâmico de ferramentas e substituição de um resultado de ferramenta visível ao modelo por dados de um sistema interno. Os trabalhadores executam no caminho crítico da inferência. Cada evento de trabalhador adiciona uma requisição HTTP antes que o gateway possa continuar, portanto o endpoint deve responder de forma rápida e previsível. ## Formato da solicitação Quando um evento de trabalhador configurado dispara, o AIVAX envia uma requisição `POST` para a URL do trabalhador do gateway. ```json { "gatewayId": "your-gateway-id", "moment": "2025-12-29T17:04:39", "event": { "name": "message.received", "data": { "messages": [ { "role": "system", "content": "User local date is Monday, December 29, 2025 (timezone is America/Sao_Paulo)" }, { "role": "user", "content": "Good morning" } ], "origin": "ChatCompletionsApi", "externalUserId": "customer-123", "metadata": {} } } } ``` A forma exata de `event.data` depende do evento. Sempre valide `gatewayId` quando um endpoint atende a mais de um gateway. ## Autenticação Quando a conta possui uma chave de hook, o AIVAX envia `X-Request-Nonce`. O nonce é um hash BCrypt derivado da chave de hook da conta. Valide esse cabeçalho antes de confiar no corpo, especialmente quando o trabalhador libera dados privados, altera o contexto ou autoriza o uso de ferramentas. Trate `externalUserId`, `metadata`, mensagens e argumentos de ferramentas como entrada não confiável. ## Comportamento da resposta Após enviar a requisição, o AIVAX trata a resposta do trabalhador da seguinte forma: | Resposta | Comportamento | |---|---| | `Content-Type: application/json+worker-action` | Executa a ação descrita no corpo JSON. | | `2xx` sem `application/json+worker-action` | Continua normalmente. | | Resposta não‑OK sem `application/json+worker-action` | Interrompe o evento. | Se a requisição ao trabalhador falhar com uma exceção de requisição HTTP, o AIVAX registra a falha e interrompe o evento. Escolha intencionalmente o comportamento fail‑open ou fail‑closed. Retorne `2xx` quando o enriquecimento for opcional. Retorne uma resposta não‑OK quando autorização, conformidade ou política de negócio não puder falhar aberto. ## `message.received` O evento `message.received` dispara após o gateway preparar o contexto da mensagem de entrada e antes da chamada ao modelo. ```json { "name": "message.received", "data": { "messages": [], "origin": "ChatCompletionsApi", "externalUserId": "customer-123", "metadata": {} } } ``` Para modificar o contexto, retorne `Content-Type: application/json+worker-action` com `type: "message.received.response"`: ```json { "type": "message.received.response", "data": { "rewrites": [ { "type": "add-system", "message": "Answer in formal English." } ] } } ``` Ações de reescrita disponíveis: | Ação | Descrição | Parâmetros | |---|---|---| | `clear` | Remove elementos do contexto. | `argument`: `messages`, `meta`, `system`, `tools`, `skills`, `all`, ou omitido. | | `add-message` | Adiciona uma mensagem à conversa. | `message`: objeto de mensagem compatível com OpenAI. | | `remove-message` | Remove uma mensagem por índice. | `index`: índice da mensagem (baseado em zero). | | `add-system` | Adiciona uma instrução de sistema. | `message`: texto da instrução. | | `add-tool` | Adiciona uma definição de ferramenta compatível com OpenAI. | `tool`: objeto JSON da ferramenta. | | `add-protocol-tool` | Adiciona uma [função de protocolo](https://docs.aivax.net/pt-br/docs/tools/protocol-functions.md). | `tool`: definição da função de protocolo. | | `add-mcp-source` | Adiciona as ferramentas descobertas de uma fonte [MCP](https://docs.aivax.net/pt-br/docs/tools/mcp.md) ao contexto. | `source`: objeto de fonte MCP com `url`, `headers`, `name` e/ou `cacheDuration`. | ### Substituir o contexto do usuário ```json { "type": "message.received.response", "data": { "rewrites": [ { "type": "clear" }, { "type": "add-message", "message": { "role": "user", "content": "The original message was removed by an external policy check. Tell the user they need an active subscription to continue." } } ] } } ``` ### Remover uma mensagem ```json { "type": "message.received.response", "data": { "rewrites": [ { "type": "remove-message", "index": 0 } ] } } ``` ### Adicionar uma fonte MCP temporária ```json { "type": "message.received.response", "data": { "rewrites": [ { "type": "add-mcp-source", "source": { "name": "Internal CRM", "url": "https://crm.example.com/mcp", "headers": { "Authorization": "Bearer " }, "cacheDuration": 600 } } ] } } ``` Use `add-mcp-source` quando a lista de ferramentas precisar depender da mensagem, usuário, canal ou de uma política externa. O AIVAX lista as ferramentas do servidor MCP, converte cada esquema em uma função chamável pelo modelo e disponibiliza essas ferramentas apenas para aquela inferência. Para fontes permanentes, configure o MCP diretamente no AI Gateway. ## `tool.called` O evento `tool.called` dispara antes do AIVAX executar uma ferramenta interna do lado do servidor. ```json { "name": "tool.called", "data": { "toolName": "check_order", "toolArguments": { "order_id": "A123" }, "origin": "ChatCompletionsApi", "externalUserId": "customer-123", "metadata": {} } } ``` Retorne uma resposta não‑OK para bloquear a chamada da ferramenta. Retorne `2xx` para permitir que o AIVAX execute a ferramenta normalmente. Para substituir o resultado da ferramenta, retorne `Content-Type: application/json+worker-action` com `type: "tool.called.response"`: ```json { "type": "tool.called.response", "data": { "result": "Order A123 is paid and scheduled for delivery tomorrow.", "messages": [] } } ``` Campos de `data`: | Campo | Descrição | |---|---| | `result` | Conteúdo textual injetado como resultado da ferramenta. | | `messages` | Mensagens adicionais em formato OpenAI opcionais anexadas ao contexto da conversa. | Quando `tool.called.response` é retornado, o AIVAX usa o resultado fornecido pelo trabalhador em vez de executar o manipulador padrão da ferramenta. ## Exemplo: bloqueando usuários não autorizados O exemplo abaixo mostra um Cloudflare Worker que bloqueia uma chamada ao gateway quando o usuário externo não tem permissão. ```js export default { async fetch(request, env) { if (request.method !== "POST") { return new Response("Method not allowed", { status: 405 }); } const body = await request.json(); if (body.gatewayId !== env.CHECKING_GATEWAY_ID) { return new Response(); } if (body.event?.name !== "message.received") { return new Response(); } const externalUserId = body.event.data.externalUserId; const allowedUsers = new Set((env.ALLOWED_USERS || "").split(",")); if (!allowedUsers.has(externalUserId)) { return new Response("User is not authorized", { status: 403 }); } return new Response(); } }; ``` ## Exemplo: substituindo uma ferramenta por um sistema interno Use `tool.called` quando o modelo deve ver um resultado de ferramenta, mas os dados reais devem vir do seu sistema. ```js export default { async fetch(request, env) { const body = await request.json(); if (body.event?.name !== "tool.called") { return new Response(); } const { toolName, toolArguments, externalUserId } = body.event.data; if (toolName !== "check_order") { return new Response(); } const orderId = toolArguments?.order_id; const orderResponse = await fetch(`${env.INTERNAL_API}/orders/${orderId}`, { headers: { "Authorization": `Bearer ${env.INTERNAL_API_TOKEN}` } }); if (!orderResponse.ok) { return new Response(JSON.stringify({ type: "tool.called.response", data: { result: `The order ${orderId} could not be retrieved for user ${externalUserId}. Ask the user to confirm the order number.` } }), { headers: { "Content-Type": "application/json+worker-action" } }); } const order = await orderResponse.json(); return new Response(JSON.stringify({ type: "tool.called.response", data: { result: `Order ${order.id}: status ${order.status}, estimated delivery ${order.eta}.` } }), { headers: { "Content-Type": "application/json+worker-action" } }); } }; ``` Esse padrão impede a exposição direta da API interna ao modelo. O trabalhador continua responsável por autenticar a requisição, validar o usuário, chamar o sistema interno e decidir quanta informação pode ser retornada ao contexto do modelo. Para entender como os trabalhadores se encaixam na execução do gateway, veja [Pipelines](https://docs.aivax.net/pt-br/docs/inference/pipelines.md). --- Source: https://docs.aivax.net/pt-br/docs/web-foundation/web-search.html # Pesquisa na Web A Pesquisa na Web recupera informações atuais da internet para pesquisa, verificação de fatos e respostas que precisam de fontes além dos dados de treinamento do modelo. Use-a para descobrir páginas relevantes; use [Fetch and OCR](https://docs.aivax.net/pt-br/docs/web-foundation/fetch-and-ocr.md) quando já tiver um URL ou precisar ler uma fonte com mais detalhes. ## Escolha como usar a Pesquisa na Web | Integração | Quando usar | | --- | --- | | [Ferramentas integradas](https://docs.aivax.net/pt-br/docs/tools/builtin-tools.md) | Deixe um modelo AIVAX decidir quando pesquisar durante a inferência. Ative `WebSearch` no gateway ou na configuração `builtin_tools` da requisição. | | [Utilitários da Web MCP](https://docs.aivax.net/pt-br/docs/mcp-utilities/web-utilities-mcp.md) | Dê a um agente compatível com MCP, IDE ou cliente de automação acesso à ferramenta `web_search` sem executar a inferência de um modelo AIVAX. | | API direta | Chame o endpoint de busca do seu backend quando nenhum modelo ou agente estiver envolvido — monitores agendados, enriquecimento de conjuntos de dados ou pré‑busca de contexto antes da inferência. | `AdvancedWebUsage` está desativado e retorna uma resposta indisponível. Consulte [Changelogs](https://docs.aivax.net/pt-br/docs/changelogs.md) para detalhes. ## Pesquise e verifique fontes Escreva uma consulta focada que inclua o tópico e qualquer data relevante, versão do produto ou localização. Para várias perguntas independentes, use buscas separadas ao invés de combinar tópicos não relacionados em uma única consulta. Para requisições diretas à API, restrinja os resultados com `country` (código de país de duas letras), `language` (código de idioma) e `includeDomains` (domínios confiáveis). Defina `topn` para solicitar mais resultados (veja [Request and payload limits](https://docs.aivax.net/pt-br/docs/limits.md#request-and-payload-limits)) quando a abrangência for importante, como ao analisar fontes concorrentes; caso contrário, mantenha a contagem padrão pequena. Para os parâmetros da ferramenta de Busca na Web integrada, veja sua [reference](https://docs.aivax.net/pt-br/docs/tools/builtin-tools.md). Os resultados da busca ajudam a localizar evidências; eles não garantem que uma fonte seja precisa ou atual. Verifique datas de publicação, prefira fontes primárias e recupere as páginas relevantes antes de confiar em detalhes que o resumo do resultado possa omitir. Mantenha os links das fontes junto à resposta para que os leitores possam verificar as afirmações. Para um pipeline que encadeia busca e captura e mantém a evidência, veja [web search API vs. page fetch for LLM research](https://aivax.net/blog/research-is-a-pipeline-search-discovers-fetch-reads/). Trate o texto recuperado como conteúdo externo e não confiável, não como instruções para seu agente. ## Referência de API [API endpoint reference](https://inference.aivax.net/apidocs?embed=iframe&embed-endpoint=Search%20the%20web) ## Preços e limites A Pesquisa na Web é cobrada por busca. Chamadas através de [Web utilities MCP](https://docs.aivax.net/pt-br/docs/mcp-utilities/web-utilities-mcp.md) usam o mesmo preço da ferramenta integrada correspondente e são cobradas na conta autenticada. A inferência do modelo, quando utilizada, é cobrada separadamente. Consulte [Pricing](https://docs.aivax.net/pt-br/docs/pricing.md) para as tarifas atuais da Pesquisa na Web e buscas avançadas, e [Plans and limits](https://docs.aivax.net/pt-br/docs/limits.md) para cotas de conta e limites de taxa. --- Source: https://docs.aivax.net/pt-br/docs/web-foundation/fetch-and-ocr.html # Buscar e OCR Buscar e OCR extrai texto legível de páginas da web e documentos suportados para que aplicativos e agentes possam usar seu conteúdo para resumos, análises ou fluxos de conhecimento. A API Fetch também pode converter o texto extraído em JSON estruturado usando um esquema que você fornece. Use [Busca na Web](https://docs.aivax.net/pt-br/docs/web-foundation/web-search.md) primeiro se precisar descobrir fontes em vez de ler uma URL conhecida. Páginas da web são processadas para remover marcações e elementos não relacionados ao conteúdo. A extração de documentos e o reconhecimento óptico de caracteres (OCR) tornam o conteúdo não textual suportado disponível como texto. Revise o conteúdo extraído antes de confiar nele: a qualidade da digitalização, layouts complexos e tabelas podem afetar o resultado. Para um tutorial completo com um exemplo de código, veja [como extrair texto de uma URL, PDF digitalizado ou imagem para um pipeline LLM](https://aivax.net/blog/fetch-messy-web-to-text/). ## O que você pode extrair | Conteúdo | Formatos suportados | Conteúdo extraído | | --- | --- | --- | | Páginas da web | HTML, XHTML | Conteúdo legível da página, como artigos, documentação e informações de produtos, com marcações e elementos não relacionados ao conteúdo removidos. JavaScript e CSS são renderizados antes da extração. | | Texto simples e Markdown | TXT, Markdown | Texto do documento, incluindo formatação Markdown existente. | | PDFs | PDF | Texto de documentos digitais e texto OCR de páginas digitalizadas. PDFs mistos podem combinar extração direta de texto com OCR quando necessário. | | Imagens contendo texto | PNG, JPEG, WebP, TIFF, BMP | Texto reconhecido de capturas de tela, documentos digitalizados, recibos e outras imagens com escrita legível. | | Documentos de processamento de texto | DOC, DOCX, ODT, RTF | Texto do documento convertido em uma representação textual legível. | | Apresentações | PPT, PPTX, ODP | Conteúdo textual dos slides. | | Planilhas e arquivos tabulares | XLSX, ODS, CSV | Conteúdo de células e linhas como texto, para leitura ou análise subsequente. | | E-books | EPUB | Texto da publicação. | Por exemplo, você pode buscar um artigo online, ler um manual em PDF, extrair texto de uma imagem de recibo ou transformar uma planilha em texto para que um agente analise. Forneça uma URL que retorne a página ou arquivo real, não uma página de compartilhamento que exija login. Ao enviar um URI de dados através da API, declare o tipo MIME correto do conteúdo. O resultado é texto extraído, não uma cópia pixel aificada do documento original. Não presuma que o layout, a estrutura de tabelas, gráficos ou imagens incorporadas serão reproduzidos exatamente. A extração de planilhas não executa fórmulas ou macros. ## API Fetch vs. Descrições de Mídia Use a **API Fetch para extrair texto existente**. Use [Media Descriptions](https://docs.aivax.net/pt-br/docs/generations/media-descriptions.md) para **interpretar mídia com IA**, opcionalmente guiado pelo que sua aplicação precisa aprender a partir dela. | | API Fetch | Descrições de Mídia | | --- | --- | --- | | Objetivo principal | Recuperar texto legível de páginas e documentos, usando OCR para imagens e PDFs digitalizados suportados. | Gerar descrições ou extrair informações de imagens, PDFs, áudio e vídeo usando IA. | | Saída | Texto extraído, JSON opcional guiado por esquema gerado a partir desse texto, uso de unidades de processamento e erros por item. | Conteúdo gerado por modelo focado na sua orientação, que pode descrever informações visuais ou audiovisuais além do texto presente na fonte. | | Imagens e PDFs | Ler texto, como as palavras em um recibo ou os parágrafos de um manual. | Descrever conteúdo visual ou interpretar um documento, como explicar um diagrama ou identificar informações relevantes para uma pergunta. | | Áudio e vídeo | Não é uma API de compreensão ou transcrição de áudio/vídeo. | Analisar conteúdo de áudio e vídeo. Para um fluxo de trabalho dedicado de fala para texto, use [Audio Transcriptions](https://docs.aivax.net/pt-br/docs/generations/audio-transcriptions.md). | | Cobrança | Unidades de processamento de extração (PUs), com limites e tarifas dependentes do plano. Conversão JSON opcional é cobrada separadamente e não está coberta pelo limite de extração. | Taxas de uso de IA sob a precificação de Descrições de Mídia; os limites de PU de Fetch não substituem essas cobranças. | Para um relatório em PDF, escolha Fetch quando precisar do texto para indexação ou análise posterior. Escolha Descrições de Mídia quando precisar de uma explicação de seus gráficos ou de uma interpretação guiada do conteúdo. Para uma imagem de recibo, Fetch lê o texto impresso; Descrições de Mídia podem interpretar o recibo de acordo com sua orientação de extração. Nenhum garante resultados perfeitos. Fetch pode perder texto ou estrutura devido a limitações de OCR e layout. Descrições de Mídia podem omitir detalhes ou introduzir interpretações incorretas porque sua saída é gerada por modelo. Verifique detalhes consequentes contra a fonte original e compare os caminhos de cobrança na seção de preços abaixo. ## Escolha uma integração | Integração | Quando usar | | --- | --- | | API Fetch | Sua aplicação controla quais URLs ou URIs de dados base64 embutidos processar e precisa de resultados estruturados, uso de unidades de processamento e erros por item. | | [Web utilities MCP](https://docs.aivax.net/pt-br/docs/mcp-utilities/web-utilities-mcp.md) | Um cliente compatível com MCP precisa ler URLs públicas através de `fetch_url`. Esta ferramenta aceita de uma a cinco URLs por chamada. | | [Built-in tools](https://docs.aivax.net/pt-br/docs/tools/builtin-tools.md) | Um modelo AIVAX precisa ler uma URL durante a inferência. Habilite `OpenUrl` e siga o guia de configuração de Contexto de URL. | As integrações têm contratos de entrada diferentes. Em particular, a ferramenta MCP aceita URLs públicas; use a API Fetch para URIs de dados base64 embutidos. ## Buscar conteúdo com a API Autentique-se com uma chave de API AIVAX; veja [Authentication](https://docs.aivax.net/pt-br/docs/authentication.md). Forneça um array `contents` não vazio contendo URLs ou URIs de dados base64. Cada item está sujeito a um limite de tamanho; veja [Request and payload limits](https://docs.aivax.net/pt-br/docs/limits.md#request-and-payload-limits). A operação `system.v1.web.fetch` aceita estes campos de requisição JSON: | Campo | Tipo | Obrigatório | Comportamento | | --- | --- | --- | --- | | `contents` | Array de strings | Sim | Lista não vazia de URLs ou URIs de dados base64 para extrair. | | `returnErrors` | Booleano | Não | Padrão `true`: inclui um resultado para cada item que falhar. Quando `false`, itens que falharem são omitidos. | | `responseSchema` | Objeto JSON Schema | Não | Converte o texto extraído de cada item em JSON guiado por este esquema. Omitir ou usar `null` para extração apenas de texto. O mesmo esquema se aplica a cada item no lote. | | `responseSchema.instructions` | String | Não | Orientação opcional de extração dentro do esquema, como quais detalhes selecionar ou como lidar com informações ausentes. Esta é uma extensão AIVAX, não uma palavra‑chave padrão de JSON Schema. | ### Extrair JSON estruturado Forneça `responseSchema` quando sua aplicação precisar de campos da fonte, não apenas do texto. Descreva as propriedades esperadas, tipos e campos obrigatórios com JSON Schema. Use descrições de propriedades e `responseSchema.instructions` opcional para esclarecer o que extrair. Por exemplo, um esquema de objeto pode solicitar o comerciante, data e total de um recibo; a referência embutida inclui um exemplo completo de requisição JSON. A conversão JSON ocorre após a extração de texto. Resultados bem‑sucedidos mantêm `extractedText` ao lado de `extractedObject`, para que você possa comparar os campos gerados com a fonte extraída. Sem um esquema, nenhuma conversão JSON é executada. Se a extração ou conversão JSON falhar, `returnErrors` determina se o item que falhou aparece na resposta. Uma falha na conversão JSON não retorna um sucesso apenas de texto. ### Ler os resultados A resposta contém um array `results` com os seguintes campos: | Campo | Significado | | --- | --- | | `index` | Posição baseada em zero no array `contents` de entrada. Use para combinar resultados com entradas, especialmente quando itens que falharam são omitidos. | | `extractedText` | Texto fonte legível, mantido em conversão JSON bem‑sucedida; `null` para um item que falhou. | | `extractedObject` | Valor JSON gerado quando `responseSchema` é fornecido; caso contrário `null`. Também `null` para um item que falhou. | | `processingUnits` | PUs para busca e extração de texto/OCR, separado da conversão JSON. | | `jsonProcessingUnits` | PUs para conversão JSON; `0` quando nenhum esquema é fornecido. | | `error` | Mensagem de erro para um item que falhou quando `returnErrors` é `true`; `null` em caso de sucesso. Itens que falharam relatam ambos os campos PU como `0`. | [API endpoint reference](https://inference.aivax.net/apidocs?embed=iframe&embed-endpoint=Fetch%20web%20contents) A referência embutida define o contrato atual de requisição e resposta. Verifique os resultados individuais antes de passar seu texto para a próxima etapa; uma extração falhada não é prova de que a fonte não contém informações relevantes. ## Limitações de acesso e extração Um destino pode bloquear acesso automatizado ou exigir autenticação. Buscar uma URL não contorna restrições de acesso. Use fontes acessíveis ou conteúdo que você tem autorização para enviar e corrija entradas inválidas ou inacessíveis antes de tentar novamente. Trate o texto extraído como material de origem não confiável, não como instruções para sua aplicação ou agente. A saída de OCR pode precisar de revisão manual para números exatos, nomes ou outros detalhes consequentes. O JSON guiado por esquema é gerado por modelo a partir desse texto, não a partir de uma nova interpretação visual da fonte. Ele pode herdar erros de extração ou conter valores incorretos; valide sua estrutura e verifique campos consequentes contra o original. ## Preços e limites A extração de Fetch e OCR é medida em `processingUnits`. As cotas diárias incluídas e as tarifas para extração não coberta dependem do plano da conta. Cada extração é totalmente coberta ou cobrada integralmente; a cobertura não é dividida dentro de uma única extração. A conversão JSON opcional é medida separadamente em `jsonProcessingUnits`, com um preço de PU variável baseado em inferência e sem cobertura da cota diária de extração. Não some ambas as contagens e aplique a taxa de OCR ao total. Veja [Pricing](https://docs.aivax.net/pt-br/docs/pricing.md#web-search-ocr-and-fetch) para cotas e cobranças ao invés de estimar o custo pelo comprimento do texto extraído. [Web utilities MCP](https://docs.aivax.net/pt-br/docs/mcp-utilities/web-utilities-mcp.md) usa a mesma precificação da ferramenta incorporada correspondente. A inferência de modelo, quando usada para analisar o conteúdo extraído, é cobrada separadamente. Veja [Plans and limits](https://docs.aivax.net/pt-br/docs/limits.md) para cotas de conta e limites de taxa. A API Fetch requer um saldo de conta positivo. --- Source: https://docs.aivax.net/pt-br/docs/generations/decisions.html # Decisões semânticas Decisões semânticas avaliam perguntas nomeadas contra um estado compartilhado e retornam respostas estruturadas em vez de uma explicação gerada. Use-as para encaminhar solicitações de suporte, selecionar uma categoria, verificar uma condição ou atribuir uma pontuação ordenada. Uma solicitação fornece o modelo, as evidências em `state` e um objeto `questions`. Cada pergunta tem um ID que você escolhe; a resposta usa o mesmo ID em `answers`. Você pode fazer diferentes tipos de pergunta em uma única solicitação sem precisar de chamadas de API separadas. Use [structured responses](https://docs.aivax.net/pt-br/docs/inference/structured-responses.md) quando precisar de um objeto gerado maior ou de uma explicação escrita. Para similaridade baseada em embeddings entre documentos e rótulos, veja [Text classification](https://docs.aivax.net/pt-br/docs/rag/classification.md). ## Escolha um modelo Todos os modelos abaixo suportam `choice`, `noul` e `score`. Consulte [Pricing](https://docs.aivax.net/pt-br/docs/pricing.md#semantic-decisions) para as tarifas dos modelos e [Plans and limits](https://docs.aivax.net/pt-br/docs/limits.md#semantic-decision-model-limits) para limites específicos de cada modelo. | Modelo | | --- | | `@supersonic-labs/julia-1` | | `@typesafe/jev-1.13` | | `@respan/span-01` | | `@respan/span-01-lite` | | `@jaredpalmer/kev-4b` | | `@upstage/solar-decide` | | `@cloudflare/clef` | | `@cloudflare/clef-flash` | | `@liquid/d1` | | `@perplexity/pplx-decider-v1-27b` | | `@openai/gpt-6-luna-decisions` | `@typesafe/jev` também é aceito e atualmente resolve para `@typesafe/jev-1.13`. Um limite de contexto não especificado não significa entrada ilimitada. Limites específicos de modelo e interpretação de pontuações podem diferir; valide um modelo em exemplos representativos antes de mudar o tráfego de produção. É necessária uma chave de API autenticada e um saldo de conta positivo, inclusive ao selecionar um modelo com preço base de token zero. Consulte [Authentication](https://docs.aivax.net/pt-br/docs/authentication.md), [Pricing](https://docs.aivax.net/pt-br/docs/pricing.md) e [Plans and limits](https://docs.aivax.net/pt-br/docs/limits.md). ### Descobrir modelos programaticamente `GET /api/v1/information/decisions-models.json` lista o catálogo atual de modelos de decisão sem autenticação. O array `data` da resposta contém: - `name`: o identificador canônico a ser usado em uma solicitação de decisão. - `aliases`: outros identificadores aceitos para esse modelo. - `contextLength`: o contexto anunciado em tokens, ou `null` quando não especificado. - `releaseDate`: a data de lançamento do catálogo no formato `yyyy-MM-dd`. - `capabilities`: tipos de pergunta suportados (`noul`, `choice` e/ou `score`). - `inputPricePerMillionTokens` e `outputPricePerMillionTokens`: preços base em USD, antes de ajustes de conta e plano. Use esta lista para preencher seletores de modelo em vez de manter um catálogo codificado separado. Ela descreve os modelos configurados, não um verificação de saúde do provedor em tempo real. Limites de opções e perguntas específicas de modelo não estão incluídos nesta lista. ## Escreva as perguntas | Tipo | formato `criteria` | Use para | | --- | --- | --- | | `choice` | Objeto que mapeia IDs de escolha para descrições | Selecionar um destino ou categoria | | `noul` | Objeto com descrições não vazias de `false` e `true` | Avaliar uma condição booleana | | `score` | Array ordenado de descrições de níveis | Avaliar uma condição graduada | Toda pergunta requer `instructions` não vazias. Use descrições que distingam as opções, não apenas IDs opacos. Por exemplo, `"billing": "Charges, payments, and refunds"` fornece mais evidência do que `"billing": "B"`. Para `noul`, ambos os critérios são necessários. Descreva o que conta como falso com tanto cuidado quanto o que conta como verdadeiro, especialmente quando o estado pode omitir a informação relevante. Para `score`, mantenha a ordem dos níveis consistente entre as solicitações. ## Avaliar uma solicitação de suporte Envie o seguinte corpo JSON para `POST /api/v1/generations/decisions`. O exemplo usa Julia-1; seu estado pode ser texto, um objeto ou um array. ```json { "model": "@supersonic-labs/julia-1", "state": { "message": "I was charged twice. Please return the extra payment." }, "questions": { "department": { "type": "choice", "instructions": "Which team should handle this request?", "criteria": { "billing": "Charges, payments, and refunds", "technical": "Software errors and service outages", "sales": "Plans, pricing, and purchases" } }, "refund_requested": { "type": "noul", "instructions": "Does the customer explicitly ask for money back?", "criteria": { "false": "The customer does not ask for money to be returned", "true": "The customer asks for a refund or return of a payment" } }, "urgency": { "type": "score", "instructions": "How urgent is the request based on the stated deadline?", "criteria": [ "No deadline stated", "A deadline is stated, but it is not today", "The customer explicitly needs resolution today" ] } } } ``` Mantenha apenas as evidências relevantes no estado. As instruções devem explicar a decisão, não solicitar uma cadeia de raciocínio ou texto adicional. Evite descrições de escolha sobrepostas, a menos que a ambiguidade seja intencional. ### Ler a resposta A resposta de sucesso é um objeto JSON direto, **sem um envelope `data`**. Ele contém: - `id`: o identificador da decisão. - `model`: o identificador canônico do modelo usado na solicitação. - `provider`: o provedor relatado para o resultado. - `answers`: um objeto indexado pelos IDs das suas perguntas. - `usage`: `input_tokens`, `output_tokens` e o `cost` faturado. Para Julia-1, um objeto `answers` ilustrativo para o exemplo acima é mostrado abaixo. Esses números explicam o formato; eles não são uma resposta registrada nem uma garantia de qualidade. ```json { "department": { "type": "choice", "choice": "billing", "probabilities": { "billing": 0.90, "technical": 0.06, "sales": 0.04 } }, "refund_requested": { "type": "noul", "noul": 0.95, "probabilities": { "false": 0.05, "true": 0.95 } }, "urgency": { "type": "score", "score": 0.3, "legend": { "0": "No deadline stated", "1": "A deadline is stated, but it is not today", "2": "The customer explicitly needs resolution today" }, "probabilities": { "0": 0.8, "1": 0.1, "2": 0.1 } } } ``` Para Julia-1: - `choice` é o ID definido pelo chamador selecionado, não a descrição da opção. - `noul` é a probabilidade atribuída ao critério verdadeiro, não um Boolean JSON. Seu aplicativo escolhe o limiar e como lidar com casos incertos. - `score` é o **índice de nível baseado em zero** esperado. No exemplo, `0 × 0.8 + 1 × 0.1 + 2 × 0.1 = 0.3`. Não é necessariamente um inteiro e não é uma pontuação normalizada de 0–1 quando há mais de dois níveis. - `probabilities` são indexadas por IDs de escolha, `false`/`true`, ou índices de nível de pontuação. `legend` descreve os níveis de pontuação. Outros modelos podem omitir campos opcionais como `probabilities`, `legend` ou `confidence`. Não presuma que todo provedor use a mesma escala de pontuação ou definição de confiança. Uma alta probabilidade não prova que a decisão está correta; valide limiares e regras de escalonamento com exemplos rotulados do seu próprio domínio. ## Limites de taxa da conta Solicitações de decisão semântica compartilham um limite de taxa a nível de conta entre modelos e chaves de API. Cada solicitação conta uma vez, mesmo contendo múltiplas perguntas. Essa cota é separada da alocação diária de assinatura e se aplica tanto ao uso incluído quanto ao pago. Consulte [Plans and Limits](https://docs.aivax.net/pt-br/docs/limits.md#plan-limits) para os limites do Free, Pro e Max. Solicitações acima do limite retornam `429 Too Many Requests` antes da avaliação. Distribua as chamadas ao longo da conta e tente novamente com backoff após a janela de limite de taxa ser liberada; mudar chaves de API dentro da mesma conta não fornece uma cota separada. ## Limites específicos de modelo Consulte [Semantic decision model limits](https://docs.aivax.net/pt-br/docs/limits.md#semantic-decision-model-limits) para os limites atuais de contexto, pergunta, opção e payload. Os limites interagem: encurte descrições ou reduza a contagem de opções ao invés de assumir que todo máximo pode ser usado simultaneamente. Entradas que excedem o orçamento de contexto ou de perguntas/opções são rejeitadas, não truncadas silenciosamente. O literal `` é reservado e não pode aparecer no estado, instruções ou descrições de opção do Julia-1. ## Uso e custo Para Julia-1, o uso de entrada soma a sequência codificada para cada pergunta, excluindo preenchimento. O estado compartilhado, portanto, é contado novamente para cada pergunta. Múltiplas perguntas sobre um estado não têm o mesmo uso de entrada que uma única pergunta sobre esse estado. Julia-1 não gera texto, portanto seu valor `output_tokens` é zero. Julia-1 está atualmente elegível para a alocação diária de decisões semânticas nos planos Free, Pro e Max. Outros modelos de decisão são cobrados normalmente. A alocação é compartilhada entre chamadas de decisão elegíveis, não reservada para cada pergunta ou chave de API. Consulte [Plans and Limits](https://docs.aivax.net/pt-br/docs/limits.md#included-daily-subscription-allowances) para a capacidade relativa do plano e regras de cobertura. Quando não coberto, a entrada do Julia-1 é cobrada à [tarifa listada](https://docs.aivax.net/pt-br/docs/pricing.md#semantic-decisions), sujeita a ajustes de conta e plano. Use o `usage.cost` retornado para o valor efetivamente cobrado; ele é zero quando a entrada está totalmente coberta pela alocação. ## Erros e uso confiável - **Modelo ou pergunta inválido:** verifique o identificador exato do modelo, o tipo de pergunta, as instruções e a forma dos critérios. IDs de perguntas e de escolha devem ser não vazios. - **Limite de contexto ou opção excedido:** encurte o estado ou as descrições, reduza a contagem de opções ou selecione um modelo com limites adequados. Repetir a mesma entrada inválida não a resolverá. - **Erro de autenticação ou saldo:** verifique a chave de API e o saldo da conta antes de tentar novamente. Um modelo com preço zero ainda requer saldo positivo. - **Limite de taxa (429):** reduza a taxa de requisições da conta e tente novamente com backoff. Múltiplas perguntas em uma única solicitação ainda contam como uma requisição, mas limites de payload específicos do modelo e uso por pergunta permanecem aplicáveis. - **Capacidade temporária ou indisponibilidade do provedor:** evite uma tempestade de tentativas paralelas imediatas. Reduza a concorrência e use tentativas limitadas com backoff para falhas transitórias. Avalie `choice`, `noul` e `score` separadamente ao validar um modelo: sucesso no roteamento não garante pontuação ou comportamento booleano confiáveis. Inclua estados ambíguos e incompletos no seu conjunto de testes e use revisão humana onde uma decisão errada tem consequências materiais. Uma nova tentativa é uma nova solicitação; não presuma deduplicação automática ou saídas idênticas do modelo. ## Referência da API [API endpoint reference](https://inference.aivax.net/apidocs?embed=iframe&embed-endpoint=Evaluate%20semantic%20decisions) --- Source: https://docs.aivax.net/pt-br/docs/generations/speech.html # Geração de Voz Use a Geração de Voz quando seu aplicativo já tem o texto final e precisa de áudio reproduzível sem executar uma conclusão de chat. Os usos típicos incluem narrar um artigo ou notificação, dar voz a um prompt de IVR, produzir um rascunho de locução para revisão ou gerar arquivos de áudio para reprodução offline. Autentique solicitações com uma chave de API AIVAX. Consulte [Autenticação](https://docs.aivax.net/pt-br/docs/authentication.md) para orientações de autorização. ## Escolha a forma de entrega O endpoint pode retornar áudio em duas formas, e a escolha correta depende do consumidor: - **Áudio binário (`raw: true`)** — o corpo da resposta é o próprio arquivo de áudio, servido inline com seu tipo MIME. Use isso quando um player, elemento `