Você quer que a API do Perplexity pesquise ou recupere dados apenas de sites específicos, não de toda a internet. Isso é útil para bases de conhecimento internas, fontes de notícias confiáveis ou conjuntos de conteúdo curados. A API do Perplexity não oferece um filtro de lista de permissões de domínio integrado como alguns mecanismos de busca. Este artigo explica como alcançar a restrição de domínio combinando a API com um script Python personalizado que valida as fontes antes de retornar os resultados.
Principais Conclusões: Restrição de Domínio para API do Perplexity
- Script Python com urllib.parse: Extrai o domínio de cada URL de resultado da API e o compara com sua lista de domínios permitidos.
- Lista de domínios permitidos: Uma lista ou conjunto Python simples que você define no início do script com os domínios exatos em que confia.
- Loop de filtragem de resposta: Itera pelos resultados da API, mantém apenas aqueles que correspondem aos seus domínios permitidos e retorna a lista filtrada.
Por que a API do Perplexity Não Tem um Filtro de Domínio Integrado
A API do Perplexity foi projetada como um mecanismo de busca e resposta de uso geral. Ela retorna as fontes mais relevantes de toda a web com base na sua consulta. A API não inclui um parâmetro como site:exemplo.com que você possa passar no corpo da requisição. Esta é uma escolha de design deliberada para manter a simplicidade e a utilidade ampla.
No entanto, muitos casos de uso empresariais exigem restringir os resultados a domínios específicos. Por exemplo, uma ferramenta de pesquisa jurídica pode querer apenas resultados de sites governamentais. Um bot de suporte ao cliente pode querer apenas resultados da central de ajuda da sua empresa. Sem um filtro nativo, você deve implementar a restrição de domínio no lado do cliente. Isso significa que você escreve código que recebe a resposta da API, inspeciona as URLs das fontes e descarta aquelas que não correspondem à sua lista de permitidos.
O Que Você Precisa Antes de Começar
Você precisa de uma chave de API do Perplexity com uma assinatura ativa. Você precisa do Python 3.7 ou superior instalado em sua máquina. Você precisa da biblioteca requests. Instale-a com pip install requests. Você também precisa de uma lista de domínios permitidos. Escreva-os exatamente como aparecem nas URLs, como exemplo.com ou suporte.microsoft.com. Não inclua o protocolo ou a barra final.
Passos para Construir um Script Python que Filtra Resultados da API por Domínio
Os passos a seguir criam um script que envia uma consulta para a API do Perplexity, recebe a resposta e mantém apenas os resultados cujo domínio está na sua lista de permitidos.
- Crie um novo arquivo Python
Abra seu editor de código e crie um arquivo chamadoperplexity_domain_filter.py. - Importe as bibliotecas necessárias
Adicioneimport requestsefrom urllib.parse import urlparseno topo do arquivo. - Defina seus domínios permitidos
Crie um conjunto Python com os domínios exatos que você permite. Exemplo:DOMINIOS_PERMITIDOS = {"wikipedia.org", "bbc.com", "reuters.com"} - Defina sua chave de API e endpoint
DefinaCHAVE_API = "sua-chave-aqui"eURL_API = "https://api.perplexity.ai/search". Substituasua-chave-aquipela sua chave real. - Defina a função de busca
Crie uma função chamadabuscar_perplexity(consulta). Dentro dela, construa os cabeçalhos e o payload da requisição. Os cabeçalhos devem incluir"Authorization": f"Bearer {CHAVE_API}"e"Content-Type": "application/json". O payload deve ser um dicionário Python com pelo menos a chave"query"definida como a string de consulta. - Envie a requisição e analise a resposta
Userequests.post(URL_API, headers=cabecalhos, json=payload). Verifique seresponse.status_code == 200. Analise o JSON comdados = response.json(). - Extraia as fontes da resposta
A resposta da API normalmente contém uma chave como"sources"ou"results". Itere sobre cada item de fonte. Para cada fonte, extraia a URL usandofonte.get("url", ""). - Analise o domínio de cada URL
Useanalisado = urlparse(url)para obter o netloc. Em seguida, extraia o domínio comdominio = analisado.netloc.lower(). Remova qualquer prefixowww.se presente. - Verifique o domínio contra sua lista de permitidos
Escreva uma instrução if:if dominio in DOMINIOS_PERMITIDOS:. Se verdadeiro, adicione a fonte a uma nova lista chamadafontes_filtradas. Se falso, pule a fonte. - Retorne apenas os resultados filtrados
Após o loop, retorne ou imprimafontes_filtradas. Seu script agora retorna apenas resultados dos seus domínios permitidos.
Exemplo de Script Completo
Aqui está o script completo que você pode copiar e adaptar:
import requests
from urllib.parse import urlparse
DOMINIOS_PERMITIDOS = {"wikipedia.org", "bbc.com", "reuters.com"}
CHAVE_API = "sua-chave-de-api-aqui"
URL_API = "https://api.perplexity.ai/search"
def buscar_perplexity(consulta):
cabecalhos = {
"Authorization": f"Bearer {CHAVE_API}",
"Content-Type": "application/json"
}
payload = {
"query": consulta,
"model": "sonar-pro"
}
resposta = requests.post(URL_API, headers=cabecalhos, json=payload)
if resposta.status_code != 200:
return []
dados = resposta.json()
fontes = dados.get("sources", [])
filtradas = []
for fonte in fontes:
url = fonte.get("url", "")
if not url:
continue
analisado = urlparse(url)
dominio = analisado.netloc.lower()
if dominio.startswith("www."):
dominio = dominio[4:]
if dominio in DOMINIOS_PERMITIDOS:
filtradas.append(fonte)
return filtradas
resultados = buscar_perplexity("últimas notícias de tecnologia")
print(resultados)
Problemas Comuns com Filtragem de Domínio e Suas Soluções
A Resposta da API Não Inclui URLs
Alguns endpoints da API do Perplexity retornam apenas um texto de resposta sem uma lista separada de fontes. Verifique a documentação da sua API para confirmar que você está usando um endpoint que retorna URLs de fontes. Caso contrário, mude para o endpoint /search ou o endpoint /chat/completions com citações de fontes habilitadas.
Incompatibilidades de Subdomínio
Se você permitir exemplo.com mas o resultado vier de blog.exemplo.com, a verificação estrita o rejeitará. Para incluir todos os subdomínios, modifique a verificação para ver se o domínio termina com .exemplo.com ou é igual a exemplo.com. Use if dominio == PERMITIDO or dominio.endswith("." + PERMITIDO).
Limites de Taxa e Cotas
A filtragem no lado do cliente não reduz o número de chamadas de API. Você ainda paga por cada consulta, mesmo que a maioria dos resultados seja descartada. Para economizar custos, considere pré-filtrar sua consulta incluindo dicas de domínio no texto da consulta. Por exemplo, inclua site:nature.com na string de consulta. Isso não é garantido de funcionar, mas pode reduzir resultados irrelevantes.
| Item | Filtragem no Lado do Cliente | Dicas no Nível da Consulta |
|---|---|---|
| Confiabilidade | Sempre funciona | Pode ser ignorado pela API |
| Custo | Custo total da chamada de API | Mesmo custo, mas menos resultados descartados |
| Esforço de implementação | Médio, requer código Python | Baixo, apenas modificar a string de consulta |
| Flexibilidade | Alta, suporta qualquer lista de domínios | Baixa, depende do comportamento da API |
Agora você pode restringir os resultados da API do Perplexity a qualquer conjunto de domínios usando um script Python curto. Em seguida, considere adicionar uma camada de cache para evitar chamadas repetidas de API para a mesma consulta. Uma dica avançada é usar um filtro Bloom para listas de permissões de domínio muito grandes para manter o uso de memória baixo.