search_provider como "exa" e a Venice executa a busca com o Exa sob retenção zero de dados. Você se autentica com sua chave de API da Venice, a Venice cobra pela busca e você não precisa de uma conta Exa.
Os resultados chegam no mesmo formato para todos os provedores, então o Exa se encaixa em qualquer coisa que você já tenha construído sobre a busca padrão do Brave na Venice, e trocar de provedor exige a mudança de um único campo. Este guia mostra como chamar o endpoint, como oferecer a busca do Exa como ferramenta a um modelo Venice, como fundamentar um prompt em resultados do Exa por conta própria e quando chamar a API do próprio Exa.
Pré-requisitos
- Uma chave de API da Venice
- Python 3.10 ou posterior, ou Node.js 22 ou posterior
- Para o exemplo de agente, um modelo Venice com suporte a function calling. Os exemplos usam
z-ai-glm-5-3-flash.
Configuração
Instale o SDK da OpenAI e também orequests para Python. O Node.js já tem fetch integrado:
Pesquisar com o Exa
Envie uma consulta para/augment/search com search_provider definido como "exa":
limit tem padrão 10 e aceita de 1 a 20, e query aceita de 1 a 400 caracteres. Valores fora desses intervalos retornam 400 em vez de serem ajustados. Trate date como opcional, já que muitas páginas não publicam uma data.
Oferecer a busca do Exa a um modelo Venice
Para deixar o modelo decidir quando e o que pesquisar, descreva uma funçãoweb_search no array tools de uma requisição de chat e execute a busca você mesmo sempre que o modelo a chamar. Este programa encapsula a requisição acima em uma função auxiliar de busca, devolve os resultados ao modelo como uma mensagem tool e repete o ciclo até o modelo responder em texto:
- Trunque as consultas escritas pelo modelo. O endpoint rejeita consultas com mais de 400 caracteres em vez de encurtá-las, e os modelos às vezes escrevem consultas longas.
- Retorne erros como resultados de ferramenta. Uma busca que falha vira uma mensagem de ferramenta começando com
Error:, para que o modelo possa tentar outra consulta ou explicar a falha em vez de o loop travar. - Adicione a mensagem do assistente antes dos resultados das ferramentas. Toda mensagem
toolprecisa vir depois do turno do assistente que a solicitou. Adicionar o próprio objeto da mensagem também preserva oreasoning_content, retornado por modelos de raciocínio como o GLM 5.3 Flash, para que o modelo mantenha seu raciocínio entre as rodadas.
content de cada resultado é o texto da página, com até cerca de 10.000 caracteres, então o modelo geralmente consegue responder apenas com os resultados da busca. Quando ele precisar de uma página inteira, adicione uma segunda ferramenta que chame /augment/scrape, que retorna a página em Markdown.
Pesquisar primeiro, depois gerar
O function calling deixa o modelo decidir quando e o que pesquisar. Quando seu código já sabe o que pesquisar, você pode dispensar o loop de ferramentas: execute uma busca no Exa, numere os resultados e peça à Venice que responda com base neles. Isso funciona com qualquer modelo de texto da Venice e, como você mantém a lista de fontes que entraram no prompt, cada citação na resposta pode ser associada a uma URL. Usando a função auxiliar de busca, o cliente e o modelo do exemplo anterior:"exa" para executá-la no Exa.
Usar a API do Exa diretamente
O endpoint de busca da Venice recebe uma consulta e um número de resultados. A API do próprio Exa tem mais controles: categorias para notícias, artigos científicos, empresas, pessoas e relatórios financeiros, filtros de domínio e data, destaques focados na consulta e texto completo da página, além de busca profunda em várias etapas. Para usá-los, chame o Exa diretamente com uma chave de API do painel do Exa. Essas requisições vão da sua aplicação para o Exa, ficam sujeitas aos termos do Exa e não aos da Venice, e são cobradas na sua conta Exa. O Exa oferece Zero Data Retention nos planos Enterprise. Os SDKs do Exa,exa-py e exa-js 2.24.0 ou posterior, incluem ferramentas no formato Chat Completions que se encaixam no loop acima. Substitua a lista de ferramentas pelas ferramentas do Exa:
messages += exa.openai.handle_tool_calls(message) em Python, ou messages.push(...(await exa.openai.handleToolCalls(message))) em Node.js. Ele executa cada chamada ao Exa e retorna as mensagens tool correspondentes, com as falhas informadas como resultados Error:. Mantenha o limite de texto da página, porque o exa-js retorna páginas inteiras sem limite. Argumentos nomeados como category, include_domains e start_published_date são repassados para a busca do Exa. Consulte o guia de tool calling do Exa para ver todas as opções.
Modelos recomendados
Os IDs de modelo mudam com o tempo. Descubra o padrão atual de function calling em tempo de execução com
GET /models/traits, ou navegue pelos modelos de texto para encontrar outros com suporte a function calling.
Privacidade
Comsearch_provider: "exa", sua aplicação se comunica apenas com a Venice, e a Venice executa cada busca com o Exa sob retenção zero de dados. A Venice não armazena o conteúdo de prompts ou respostas, e o nível de privacidade do modelo define o que acontece na camada de inferência. Os modelos privados rodam em infraestrutura com retenção zero de dados.
Um ponto fácil de passar despercebido é que o modelo escreve as consultas de busca a partir da conversa, então detalhes de um prompt podem acabar em uma consulta enviada ao Exa. Se os prompts puderem conter informações pessoais ou confidenciais, instrua o modelo no seu system prompt a deixar esses detalhes fora das buscas, ou use o padrão de pesquisar primeiro para que seu próprio código escreva todas as consultas.
Se você chamar a API do Exa diretamente, essas requisições vão para o Exa sob os termos do Exa.
Custos
Cada busca custa US 10 a cada 1.000, o mesmo que uma busca no Brave ou no Google. A Venice cobra na sua conta Venice junto com os tokens usados pelas suas requisições de chat, então não há uma fatura separada do Exa. Buscas que falham com erro não são cobradas, mas uma busca que retorna vazia ainda é. Os resultados da busca voltam ao modelo como entrada na rodada seguinte e, como trazem o texto das páginas, uma busca com cinco resultados costuma adicionar de 5.000 a 10.000 tokens de entrada. Alguns hábitos mantêm os dois custos baixos:- Reduza
limitquando poucas fontes forem suficientes. Uma busca custa o mesmo com qualquerlimit, mas menos resultados significam menos tokens de entrada na rodada seguinte. - Mantenha
max_roundsbaixo. Cada rodada extra pode adicionar buscas, além de tokens. - Use o padrão de pesquisar primeiro quando seu código souber o que pesquisar. Ele executa exatamente uma busca e uma requisição de chat.
Solução de problemas
400 do endpoint de busca
400 do endpoint de busca
query deve ter de 1 a 400 caracteres, limit deve estar entre 1 e 20, e search_provider deve ser brave, google ou exa. Valores fora desses intervalos são rejeitados em vez de ajustados. No loop de ferramentas, uma busca rejeitada chega ao modelo como um resultado de ferramenta Error: em vez de lançar uma exceção.402 Payment Required
402 Payment Required
Seu saldo na Venice não cobre a requisição. Requisições feitas com uma chave de API retornam
INSUFFICIENT_BALANCE, então recarregue seu saldo na Venice. Requisições feitas com autenticação por carteira x402 retornam instruções de recarga na resposta.400 da Venice após uma rodada de ferramentas
400 da Venice após uma rodada de ferramentas
Alguns modelos, incluindo os modelos Claude e GPT, retornam
400 quando uma chamada de ferramenta não é seguida por uma mensagem tool com seu tool_call_id. Os modelos GLM aceitam a conversa mesmo assim, então isso pode aparecer pela primeira vez quando você troca de modelo. O loop responde a cada chamada logo após a mensagem do assistente que a fez, então mantenha essa estrutura se adicionar ferramentas.O modelo responde sem pesquisar
O modelo responde sem pesquisar
Verifique se o modelo tem suporte a function calling e diga no system prompt quando pesquisar. Os modelos costumam ignorar a ferramenta quando acham que conseguem responder de memória, a menos que você peça que pesquisem fatos recentes ou específicos.
Recursos
API Web Search
Parâmetros, provedores de busca e o esquema da resposta
Respostas com Citações
Um pipeline completo de busca, extração e citação na Venice
Function Calling
Como as chamadas de ferramenta funcionam na Venice
Documentação do Exa
A API do próprio Exa, SDKs e opções de busca