Los modelos de lenguaje de código y pesos abiertos (open-access models) ofrecen una transparencia e independencia inigualables. Sin embargo, su conocimiento queda congelado en la fecha de corte de su entrenamiento, lo que propicia alucinaciones factuales al consultar literatura científica reciente, especificaciones técnicas cambiantes o eventos en directo. HuggingChat —el entorno de chat de código abierto desarrollado por Hugging Face sobre la arquitectura chat-ui— resuelve este reto mediante dos funciones nativas de fundamentación de datos (grounding): la búsqueda web integrada (Web Search) y las herramientas comunitarias (Community Tools).
En esta guía paso a paso, examinamos cómo investigadores y desarrolladores pueden configurar la recuperación de información web, crear y registrar herramientas personalizadas basadas en Gradio Spaces, y empaquetar asistentes de investigación fundamentados con modelos como Command R+, Llama 3.1 y Qwen 2.5.
1. Fundamentación inmediata: Búsqueda web integrada en HuggingChat
Para la verificación rutinaria de hechos y la exploración bibliográfica general, HuggingChat incorpora un flujo completo de generación aumentada por recuperación (RAG).
Activación en la interfaz de usuario
- Ingrese a HuggingChat (
https://huggingface.co/chat). - Seleccione un modelo base con alta capacidad de razonamiento e instrucción factual (como Meta Llama 3.1 70B, Cohere Command R+ o Qwen 2.5 72B).
- En la barra inferior donde escribe los mensajes, active la opción Search web (identificada con el icono de un globo terráqueo).
- Introduzca su consulta (por ejemplo: "¿Cuáles son los principales resultados de rendimiento y benchmarks reportados en el informe técnico de DeepSeek-V3 publicado esta semana?").
Funcionamiento interno de la canalización RAG
HuggingChat no se limita a pegar fragmentos de texto devueltos por un buscador. El backend chat-ui ejecuta de forma autónoma una secuencia estructurada de seis fases:
- Refinamiento de consulta: Un modelo de tareas especializado interpreta el objetivo del usuario y traduce el prompt conversacional en términos de búsqueda óptimos.
- Recuperación externa: El servidor consulta motores externos (como Serper o instancias de SearXNG) para identificar los enlaces más autorizados.
- Rastreo con Playwright: Navegadores sin interfaz (headless) descargan las páginas de destino y procesan el HTML original para transformarlo en texto Markdown limpio.
- Fragmentación e incrustaciones (Embeddings): El contenido se divide en pasajes semánticos que se vectorizan mediante un modelo de incrustación liviano (como
gte-small). - Reclasificación vectorial: Se calcula la similitud con la pregunta del usuario para seleccionar los fragmentos más pertinentes dentro de una ventana máxima (habitualmente de unos 8.000 caracteres).
- Inyección y citación: Los extractos seleccionados se integran en el contexto del modelo, el cual genera su respuesta final incorporando fichas de citación clicables con los enlaces directos a las páginas fuente.
2. Flujos avanzados: Creación y registro de Community Tools personalizadas
La búsqueda web abierta puede resultar insuficiente cuando se requiere consultar repositorios académicos específicos (como ArXiv) o bases de datos documentales internas. El mecanismo de Community Tools de HuggingChat permite convertir cualquier Hugging Face Space público basado en Gradio en una herramienta invocable por modelos de lenguaje.
Paso 1: Disponer de un Space de Gradio funcional
Cualquier Space público que exponga una interfaz estándar puede operar como herramienta.
- Plantillas preconfiguradas: Hugging Face ofrece plantillas como
nsarrazin/rag-tool-template, que genera un endpoint de RAG sobre documentos PDF o Markdown almacenados en la carpetasources/. - Desarrollo en Python: En un Space gratuito con hardware CPU Basic, cree un archivo
app.py. A continuación se muestra un ejemplo para consultar preprints en ArXiv:
import gradio as gr
import urllib.request
import xml.etree.ElementTree as ET
def search_arxiv(query: str, max_results: int = 3) -> str:
url = f"http://export.arxiv.org/api/query?search_query=all:{urllib.parse.quote(query)}&max_results={max_results}"
response = urllib.request.urlopen(url).read().decode("utf-8")
root = ET.fromstring(response)
results = []
for entry in root.findall("{http://www.w3.org/2005/Atom}entry"):
title = entry.find("{http://www.w3.org/2005/Atom}title").text.strip()
summary = entry.find("{http://www.w3.org/2005/Atom}summary").text.strip()
results.append(f"Title: {title}\nSummary: {summary}\n")
return "\n---\n".join(results) if results else "No papers found."
demo = gr.Interface(
fn=search_arxiv,
inputs=[gr.Textbox(label="Query"), gr.Number(label="Max Results", value=3)],
outputs="text",
title="ArXiv Search Tool"
)
demo.launch()
Paso 2: Registrar la herramienta en HuggingChat
- Diríjase a
https://huggingface.co/chat/toolsy pulse en Create New Tool (o acceda directamente ahttps://huggingface.co/chat/tools/new). - En la casilla Hugging Face Space URL, pegue la dirección de su Space (por ejemplo,
https://huggingface.co/spaces/su-usuario/arxiv-search). - HuggingChat analizará el esquema de Gradio y detectará automáticamente las funciones y argumentos disponibles.
- Complete los campos esenciales:
- Tool Description: Redacte una descripción breve en inglés explicando qué hace la herramienta y cuándo debe utilizarse (ejemplo: "Searches ArXiv for the latest AI and computer science preprints based on query keywords"). El LLM utiliza este texto para decidir si debe ejecutar la función.
- AI Function Name: Asigne un nombre identificador único en formato snake_case (por ejemplo,
search_arxiv_preprints). - Configuración de argumentos (Arguments):
- Required: Argumentos obligatorios que el modelo debe suministrar al llamar a la herramienta.
- Optional: Parámetros con valor predeterminado que el modelo puede modificar si es necesario.
- Fixed: Valores constantes e invisibles para el modelo (ideales para claves de acceso o filtros preestablecidos).
- Guarde la herramienta para que quede disponible en su biblioteca personal.
3. Empaquetado en un Asistente especializado (HuggingChat Assistant)
Para evitar reconfigurar manualmente las herramientas y los parámetros en cada nueva sesión, configure un Assistant dedicado:
- Acceda a Settings > Assistants o abra
https://huggingface.co/chat/settings/assistants/new. - Identificación: Asigne un nombre al asistente (por ejemplo, "Asistente de Investigación Científica") y una imagen de perfil.
- Selección de modelo: Elija un modelo entrenado para la invocación nativa de funciones. Cohere Command R+ y Llama 3.1 70B destacan por su precisión al orquestar llamadas a herramientas complejas y asociar citas.
- Instrucciones del sistema (System Instructions): Establezca normas estrictas de comprobación factual:
Eres un asistente de investigación académica riguroso. Al responder sobre avances recientes, métricas de rendimiento o artículos científicos, invoca siempre la búsqueda web o las herramientas de recuperación antes de responder. No formules hipótesis ni especules más allá de los datos devueltos en las fuentes. Cita siempre los títulos y enlaces originales en tu respuesta. - Vincular capacidades:
- Active la casilla Web search para dotar al asistente de acceso constante a internet.
- En el apartado Community Tools, seleccione hasta 3 herramientas activas de su catálogo o de la comunidad.
- Guarde con el botón Create. El asistente puede compartirse mediante un enlace público o mantenerse en un entorno privado para evaluaciones de equipo.
4. Despliegue en entornos locales y privados (chat-ui)
En laboratorios de investigación y empresas con políticas estrictas de privacidad o gobernanza de datos, el proyecto huggingface/chat-ui permite desplegar una instancia propia con total control de infraestructura.
Configuración del archivo .env.local
Defina los proveedores de búsqueda y los puntos de inferencia locales:
# Base de datos MongoDB
MONGODB_URL=mongodb://localhost:27017
MONGODB_DB_NAME=chat-ui
# Puntos de inferencia compatibles con OpenAI (vLLM, Ollama, llama.cpp o enrutador de Hugging Face)
OPENAI_BASE_URL=https://router.huggingface.co/v1
OPENAI_API_KEY=hf_su_token_de_huggingface
# Proveedor de búsqueda web
SERPER_API_KEY=su_clave_api_serper
# O utilizando una instancia local de SearXNG:
# SEARXNG_QUERY_URL=http://localhost:8080/search?q=<query>&format=json
# Control de rastreo y seguridad
USE_LOCAL_WEBSEARCH=false
WEBSEARCH_ALLOWLIST=[]
WEBSEARCH_BLOCKLIST=[]
Tras ejecutar npm install y npm run dev, dispondrá de un sistema local de chat con navegación web, indexación vectorial y modelos abiertos bajo su propio control.
Consideraciones prácticas y compromisos técnicos
- Tamaño del modelo y fidelidad de llamadas: Los modelos de 8B o menos tienden a presentar desajustes en el formato de los argumentos y pueden inventar URLs ficticias cuando la búsqueda no arroja resultados. Para investigaciones críticas, se recomienda emplear modelos de la escala de 70B o arquitecturas especializadas como Command R+.
- Compromiso entre latencia y frescura: La inferencia simple tarda entre 1 y 3 segundos, mientras que la canalización RAG completa con rastreo mediante Playwright y reclasificación vectorial añade entre 3 y 6 segundos adicionales. Para colecciones de documentos estables, resulta más eficiente indexarlos previamente en un Space de RAG que rastrear la web en cada petición.
- Auditoría de citas: La ventaja primordial del RAG abierto es la auditabilidad. Se recomienda comprobar siempre los fragmentos originales haciendo clic en las fichas de citación generadas para evitar sesgos de confirmación derivados de la síntesis del modelo.
Al combinar la búsqueda web nativa y las herramientas comunitarias, HuggingChat transforma los modelos abiertos en plataformas de investigación activas, capaces de consultar, verificar y respaldar sus conclusiones con fuentes vivas de la web.