Les modèles de langage ouverts (open-access models) offrent une transparence totale sur les poids et l'architecture, mais ils restent limités par leur date de fin d'entraînement. Face à des articles scientifiques récents, des documentations logicielles en évolution ou des événements en cours, ils risquent d'engendrer des hallucinations factuelles. HuggingChat — l'écosystème conversationnel open source développé par Hugging Face à partir de chat-ui — comble cette lacune grâce à deux mécanismes natifs d'ancrage factuel (grounding) : la recherche web intégrée (Web Search) et les outils communautaires (Community Tools).
Ce guide technique détaille comment les chercheurs et développeurs peuvent activer la recherche web, déployer et déclarer des outils personnalisés basés sur des Spaces Gradio, et structurer des assistants d'investigation rigoureux avec des modèles tels que Command R+, Llama 3.1 et Qwen 2.5.
1. Ancrage immédiat : La recherche web intégrée de HuggingChat
Pour l'exploration documentaire courante et la vérification factuelle rapide, HuggingChat intègre un pipeline complet de génération augmentée par récupération (RAG).
Activation dans l'interface
- Rendez-vous sur HuggingChat (
https://huggingface.co/chat). - Sélectionnez un modèle de base performant en raisonnement factuel (par exemple Meta Llama 3.1 70B, Cohere Command R+ ou Qwen 2.5 72B).
- Dans la zone de saisie en bas de page, activez le bouton à bascule Search web (représenté par une icône de globe).
- Soumettez votre requête (par exemple : « Quels sont les principaux résultats d'évaluation rapportés dans le rapport technique de DeepSeek-V3 publié cette semaine ? »).
Fonctionnement du pipeline RAG sous-jacent
HuggingChat ne se contente pas d'injecter des extraits bruts renvoyés par un moteur de recherche. Le serveur chat-ui applique une séquence structurée en six étapes :
- Optimisation de la requête : Un modèle interne déduit l'intention centrale et convertit la question en une série de mots-clés optimisés.
- Récupération web : Le serveur interroge des services de recherche tiers (comme Serper ou une instance SearXNG) pour obtenir les liens les plus pertinents.
- Extraction par Playwright : Des navigateurs sans interface (headless) explorent les pages et nettoient le code HTML pour produire du texte Markdown épuré.
- Découpage et vectorisation : Le contenu extrait est découpé en passages sémantiques puis converti en vecteurs grâce à un modèle d'embedding léger (tel que
gte-small). - Classement par similarité vectorielle : Le système calcule la proximité sémantique avec la question de départ et retient les passages les plus pertinents (dans une limite d'environ 8 000 caractères) pour les injecter dans le contexte.
- Génération et citation des sources : Le modèle formule sa réponse finale en s'appuyant sur ces données et génère des badges de citation cliquables renvoyant directement aux pages sources.
2. Cas d'usage avancés : Créer et enregistrer des Community Tools personnalisés
Les moteurs de recherche généralistes peinent parfois à interroger des dépôts scientifiques spécialisés comme ArXiv ou des bases de connaissances internes. Le dispositif des Community Tools de HuggingChat permet de transformer n'importe quel Hugging Face Space public fonctionnant sous Gradio en un outil exécutable par le modèle.
Étape 1 : Mettre en place un Space Gradio
Tout Space public exposant une interface d'entrée/sortie standard peut servir d'outil.
- Modèles prêts à l'emploi : Hugging Face propose des modèles comme
nsarrazin/rag-tool-template. En dupliquant ce Space et en déposant vos fichiers PDF ou Markdown dans le répertoiresources/, vous disposez immédiatement d'un outil RAG sur mesure. - Développement Python personnalisé : Sur un Space gratuit disposant de ressources CPU Basic, concevez un fichier
app.py. Voici un exemple d'outil de recherche d'articles sur 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()
Étape 2 : Déclarer l'outil dans HuggingChat
- Allez sur
https://huggingface.co/chat/toolset cliquez sur Create New Tool (ou ouvrezhttps://huggingface.co/chat/tools/new). - Dans le champ Hugging Face Space URL, collez l'URL de votre Space (ex.
https://huggingface.co/spaces/votre-compte/arxiv-search). - HuggingChat analyse automatiquement le schéma Gradio et identifie les paramètres.
- Renseignez les paramètres obligatoires :
- Tool Description : Rédigez une description claire et concise en anglais (ex. "Searches ArXiv for the latest AI and computer science preprints based on query keywords"). Le LLM se base sur ce texte pour décider de l'appel à la fonction.
- AI Function Name : Définissez un nom unique en snake_case (ex.
search_arxiv_preprints). - Paramétrage des arguments (Arguments) :
- Required : Le modèle doit obligatoirement renseigner cette valeur pour déclencher l'outil.
- Optional : Dispose d'une valeur par défaut modifiable par le modèle.
- Fixed : Valeur figée invisible pour le modèle (recommandé pour fixer des filtres ou des identifiants système).
- Enregistrez l'outil pour qu'il rejoigne votre bibliothèque personnelle.
3. Consolidation dans un Assistant de recherche dédié
Afin d'éviter de redéfinir vos outils et consignes à chaque nouvelle session, créez un HuggingChat Assistant permanent :
- Accédez à Settings > Assistants ou ouvrez
https://huggingface.co/chat/settings/assistants/new. - Identification : Donnez un nom explicite à l'assistant (par exemple : « Analyste Recherche IA ») et choisissez une icône.
- Sélection du modèle : Privilégiez un modèle optimisé pour l'appel d'outils. Cohere Command R+ et Llama 3.1 70B offrent une excellente précision dans l'exécution de fonctions et l'attribution des citations.
- Instructions système (System Instructions) : Fixez des consignes strictes de vérification des faits :
Tu es un assistant de recherche scientifique rigoureux. Pour toute affirmation concernant des publications récentes, des métriques d'évaluation ou des annonces techniques, invoque systématiquement la recherche web ou les outils connectés avant de répondre. Ne formule aucune déduction ou hypothèse qui ne soit directement appuyée par les documents extraits. Mentionne obligatoirement le titre et l'URL d'origine de chaque source consultée. - Association des outils :
- Cochez Web search pour garantir un accès continu au web.
- Dans le volet Community Tools, ajoutez jusqu'à 3 outils actifs de votre bibliothèque ou de la communauté.
- Cliquez sur Create. Votre assistant peut être partagé par URL directe ou réservé à un usage d'évaluation interne.
4. Déploiement souverain sur infrastructure privée (chat-ui)
Pour les laboratoires de recherche et entreprises nécessitant une isolation stricte des données et une conformité réglementaire totale, l'ensemble du système est disponible en open source sur le dépôt huggingface/chat-ui.
Variables d'environnement (.env.local)
Configurez l'accès au modèle local et aux moteurs de recherche :
# Base de données MongoDB
MONGODB_URL=mongodb://localhost:27017
MONGODB_DB_NAME=chat-ui
# Point d'inférence compatible OpenAI (vLLM, Ollama, llama.cpp ou Hugging Face Router)
OPENAI_BASE_URL=https://router.huggingface.co/v1
OPENAI_API_KEY=hf_votre_token_huggingface
# Moteur de recherche web
SERPER_API_KEY=votre_cle_api_serper
# Ou via une instance locale de SearXNG :
# SEARXNG_QUERY_URL=http://localhost:8080/search?q=<query>&format=json
# Contrôles de scraping et sécurité
USE_LOCAL_WEBSEARCH=false
WEBSEARCH_ALLOWLIST=[]
WEBSEARCH_BLOCKLIST=[]
En exécutant npm install puis npm run dev, vous obtenez une infrastructure autonome de RAG sur modèles ouverts, opérant directement sur vos serveurs.
Arbitrages techniques et retours d'expérience
- Taille du modèle et fiabilité d'exécution : Les modèles de 8B paramètres et inférieurs présentent plus de risques d'erreurs de syntaxe lors de l'appel aux outils et tendent à forger des URL fictives lorsque la recherche ne renvoie aucun résultat. Pour les travaux d'analyse sérieux, optez pour des modèles de taille 70B ou des architectures dédiées comme Command R+.
- Compromis entre latence et fraîcheur : Si une génération textuelle simple dure 1 à 3 secondes, le cycle complet de recherche RAG (requête, navigation Playwright, vectorisation) ajoute généralement 3 à 6 secondes. Pour des corpus documentaires stables, indexez au préalable vos documents dans un Space RAG persistant plutôt que d'explorer le web à chaque question.
- Contrôle direct des citations : La valeur fondamentale du RAG ouvert réside dans la vérifiabilité. Prenez l'habitude de cliquer sur les badges de citation générés pour vérifier que l'extrait original confirme fidèlement l'affirmation formulée par le modèle.
En combinant la recherche web native et les Community Tools, HuggingChat transforme des modèles ouverts statiques en plateformes d'analyse vivantes, capables d'explorer, de vérifier et de citer les sources du web en temps réel.