El problema
SearXNG, el motor de búsqueda web predeterminado para OpenWebUI, es frágil en configuraciones autohospedadas. Infringe los límites de velocidad de los motores de búsqueda anteriores, devuelve resultados inconsistentes y requiere su propio servidor para su mantenimiento. Muchos usuarios de OpenWebUI desactivan por completo la búsqueda web porque SearXNG es demasiado poco confiable.
La solucion de Scavio
Cree una herramienta de función personalizada en OpenWebUI que llame directamente a la API de búsqueda de Scavio. Reemplace la dependencia de SearXNG con una única función de Python que devuelva resultados estructurados y confiables.
Antes
El usuario de OpenWebUI habilita la búsqueda web. SearXNG devuelve resultados vacíos o errores 503 durante las horas pico. El usuario desactiva la búsqueda web porque no es confiable. El modelo local de Llama vuelve a los datos de entrenamiento para preguntas sobre eventos actuales.
Después
La herramienta de función Scavio personalizada está habilitada en OpenWebUI. La búsqueda web funciona de forma fiable en cada solicitud. Los resultados son estructurados y precisos. Local Llama puede responder preguntas sobre eventos actuales con datos en vivo. Sin mantenimiento SearXNG.
Para quien es
Autohospedadores de OpenWebUI que han abandonado SearXNG y desean un reemplazo confiable y directo para la búsqueda web en su configuración LLM local.
Beneficios clave
- Búsqueda confiable frente a los problemas de límite de velocidad ascendente de SearXNG
- Búsqueda multiplataforma (Google, Amazon, Reddit, YouTube) en una sola herramienta
- No hay un servidor SearXNG separado que mantener
- Clave API configurada a través de la interfaz de usuario de configuración de válvula OpenWebUI
Ejemplo en Python
# Paste this into OpenWebUI > Workspace > Functions > New Function (Tool type)
import requests
from pydantic import BaseModel, Field
class Tools:
class Valves(BaseModel):
SCAVIO_API_KEY: str = Field(default="", description="Scavio API key from scavio.dev")
def __init__(self):
self.valves = self.Valves()
def web_search(self, query: str, platform: str = "google") -> str:
"""
Search the web for current information.
:param query: Search query
:param platform: google, amazon, reddit, or youtube
:return: Top 5 search results as formatted text
"""
r = requests.post(
"https://api.scavio.dev/api/v1/search",
json={"query": query, "platform": platform, "num_results": 5},
headers={"x-api-key": self.valves.SCAVIO_API_KEY},
timeout=15
)
r.raise_for_status()
results = r.json().get("organic_results", [])
if not results:
return "No results found."
return "\n\n".join(f"{i+1}. {r.get('title')}\n{r.get('snippet','')}\n{r.get('link')}" for i, r in enumerate(results))Ejemplo en JavaScript
// Test the search call before deploying to OpenWebUI
async function webSearch(query, platform = 'google') {
const res = await fetch('https://api.scavio.dev/api/v1/search', {
method: 'POST',
headers: { 'Content-Type': 'application/json', 'x-api-key': 'your-scavio-api-key' },
body: JSON.stringify({ query, platform, num_results: 5 })
});
const data = await res.json();
return (data.organic_results ?? []).map((r, i) => `${i+1}. ${r.title}\n${r.snippet ?? ''}\n${r.link}`).join('\n\n');
}
console.log(await webSearch('latest AI news'));Plataformas utilizadas
Búsqueda web con grafo de conocimiento, PAA y resúmenes de IA
Amazon
Búsqueda de productos con precios, calificaciones y reseñas
Comunidad, publicaciones y comentarios en hilos de cualquier subreddit
YouTube
Búsqueda de videos con transcripciones y metadatos