Externo
Este tutorial é uma contribuição da comunidade e não é suportado pela equipe Open WebUI. Ele serve apenas como uma demonstração de como personalizar o Open WebUI para seu caso de uso específico. Quer contribuir? Confira o tutorial de contribuição.
API de Busca Web Externa
Esta opção permite conectar o Open WebUI ao seu próprio endpoint de API de busca web autohospedado. Isso é útil se você deseja:
- Integrar um mecanismo de busca que não é suportado nativamente pelo Open WebUI.
- Implementar lógica de busca personalizada, filtragem ou processamento de resultados.
- Usar um índice de busca privado ou interno.
Configuração do Open WebUI
- Navegue até o
Painel de Administração
do Open WebUI. - Vá para a aba
Configurações
e selecioneBusca Web
. - Ative a opção
Habilitar Busca Web
. - Selecione
Busca Web
no menu suspenso e escolhaexterno
. - Preencha o campo
URL de Busca Externa
com a URL completa do endpoint da sua API de busca personalizada (por exemplo,http://localhost:8000/search
ouhttps://minha-api-de-busca.exemplo.com/api/search
). - Preencha
Chave da API de Busca Externa
com a chave secreta da API necessária para autenticar com seu endpoint de busca personalizado. Deixe em branco se o endpoint não exigir autenticação (não recomendado para endpoints públicos). - Clique em
Salvar
.
Especificação da API
O Open WebUI interagirá com o seu URL de Busca Externa
da seguinte forma:
-
Método:
POST
-
Cabeçalhos:
Content-Type: application/json
Authorization: Bearer <SUA_CHAVE_DE_API_DE_BUSCA_EXTERNA>
-
Corpo da Solicitação (JSON):
{
"query": "A string de consulta inserida pelo usuário",
"count": 5 // O número máximo de resultados de busca solicitados
}query
(string): O termo de busca inserido pelo usuário.count
(inteiro): O número máximo de resultados sugeridos que o Open WebUI espera. Sua API pode retornar menos resultados, se necessário.
-
Corpo da Resposta Esperada (JSON): Seu endpoint da API deve retornar um array JSON de objetos de resultado de busca. Cada objeto deve ter a seguinte estrutura:
[
{
"link": "URL do resultado da busca",
"title": "Título da página de resultado da busca",
"snippet": "Uma breve descrição ou trecho da página do resultado da busca"
},
{
"link": "...",
"title": "...",
"snippet": "..."
}
// ... mais resultados, potencialmente até o limite solicitado
]link
(string): A URL direta para o resultado da busca.title
(string): O título da página web.snippet
(string): Um trecho descritivo do conteúdo da página relevante para a consulta.
Se ocorrer um erro ou nenhum resultado for encontrado, seu endpoint deve idealmente retornar um array JSON vazio
[]
.
Exemplo de Implementação (Python/FastAPI)
Aqui está um exemplo simples de uma API de busca autohospedada usando Python com FastAPI e a biblioteca duckduckgo-search
.
import uvicorn
from fastapi import FastAPI, Header, Body, HTTPException
from pydantic import BaseModel
from duckduckgo_search import DDGS
EXPECTED_BEARER_TOKEN = "sua_chave_secreta_aqui"
app = FastAPI()
class SearchRequest(BaseModel):
query: str
count: int
class SearchResult(BaseModel):
link: str
title: str | None
snippet: str | None
@app.post("/search")
async def external_search(
search_request: SearchRequest = Body(...),
authorization: str | None = Header(None),
):
expected_auth_header = f"Bearer {EXPECTED_BEARER_TOKEN}"
if authorization != expected_auth_header:
raise HTTPException(status_code=401, detail="Não autorizado")
query, count = search_request.query, search_request.count
results = []
try:
with DDGS() as ddgs:
search_results = ddgs.text(
query, safesearch="moderate", max_results=count, backend="lite"
)
results = [
SearchResult(
link=result["href"],
title=result.get("title"),
snippet=result.get("body"),
)
for result in search_results
]
except Exception as e:
print(f"Erro durante a busca no DuckDuckGo: {e}")
return results
if __name__ == "__main__":
uvicorn.run("main:app", host="0.0.0.0", port=8888)