Skip to content

Latest commit

 

History

5 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Admin des Connaissances (Knowledge Base Admin)

Une application d'administration full-stack (React + Express) conçue pour gérer des bases de connaissances, uploader des documents, et les indexer sur le service Google File Search (via l'API Gemini) afin d'alimenter des requêtes dynamiques (ex: pour un chatbot type TypeBot).

🚀 Structure du Programme

Le programme est construit autour d'une architecture Full-Stack optimisée par Vite et Express :

  • Frontend (React) :
    • Interface d'administration sécurisée par mot de passe.
    • Gestion des sujets (bases de connaissances).
    • Téléchargement et suppression de fichiers.
    • Outil "Sandbox" (bac à sable) pour tester en temps réel les requêtes IA sur les documents uploadés.
    • Journal d'audit (Logs) enregistrant les actions des utilisateurs.
  • Backend (Express / Node.js) : server.ts
    • Fournit une API REST pour interagir avec l'interface React.
    • Gère l'authentification et les sessions.
    • S'occupe du traitement des fichiers (via multer) et de leur distribution entre le stockage à long terme (Firebase/Local) et l'indexation Gemini.
  • Base de Données et Stockage : src/server/storage.ts
    • Utilise Firebase Firestore pour stocker la structure des sujets, l'historique et les fragments (chunks) des fichiers. Un fallback vers le système de fichiers local (/data, /uploads) est inclus.

⚙️ Mécanismes Principaux

1. Gestion des Sujets (Bases de Connaissances)

Les documents sont regroupés par "Sujet". Créer un sujet permet de catégoriser les fichiers. Lorsqu'une requête de recherche (via TypeBot par exemple) est envoyée, elle peut cibler spécifiquement l'un de ces sujets pour limiter le contexte du modèle IA.

2. Le Cycle de Vie d'un Document

Lorsqu'un administrateur charge un document (PDF, TXT, CSV, etc.) :

  1. Upload vers le Backend : Le fichier est envoyé en multipart via l'interface React vers l'API Node.js (/api/subjects/:name/files).
  2. Stockage Permanent : Le fichier est stocké sur Firestore (ou localement en fallback) pour garantir la persistance.
  3. Indexation Gemini (Google File API) : Le fichier est transmis à l'API Gemini (ai.files.upload) qui s'occupe de l'extraction de texte et de son indexation sémantique. Une URI unique (geminiUri) est générée et associée au fichier.
  4. Auto-Réparation : Les fichiers hébergés par Gemini ayant une durée de vie limitée, le backend vérifie régulièrement (lors de requêtes) l'expiration des fichiers. S'ils sont expirés, ils sont automatiquement re-téléchargés depuis le stockage permanent vers Gemini grâce aux routines de server.ts.

3. Test des Requêtes (Sandbox)

La plateforme inclut une "Sandbox" qui permet à l'administrateur de simuler la réponse du chatbot. En sélectionnant un sujet et en tapant un prompt, le backend utilise l'API Gemini en lui fournissant l'ensemble des geminiUri des fichiers appartenant au sujet pour générer une réponse contextuelle.

🧠 Utilisation de l'API Google File Search (Gemini API)

Le projet utilise le SDK officiel @google/genai pour communiquer avec les services d'IA de Google. L'utilisation de l'API se décompose en plusieurs étapes :

  • Téléchargement (Upload) : Le backend transfère le fichier en utilisant la méthode d'upload de Gemini.
    const uploadRes = await ai.files.upload({
      file: tempPath,
      config: { mimeType: file.mimetype }
    });
  • Vérification de l'État : L'API permet de vérifier si un fichier est prêt à être utilisé par le modèle, ou s'il a expiré (file.state === "ACTIVE" ou "FAILED").
  • Génération de Contenu : Lorsqu'une réponse est demandée (dans le bac à sable ou via l'API d'interrogation publique), les fichiers sont attachés à la requête sous forme de ressources :
    const response = await ai.models.generateContent({
      model: "gemini-2.5-flash",
      contents: [
        { role: "user", parts: [ { fileData: { fileUri: file.uri, mimeType: file.mimeType } } ] },
        // ... Autres fichiers et prompt utilisateur ...
      ]
    });

🛠️ Préparation et Paramètres d'Utilisation

Pour déployer et utiliser cette application, vous devez configurer certaines variables d'environnement et préparer l'intégration des services externes.

1. Variables d'Environnement (.env)

Créez un fichier .env à la racine de votre projet en vous basant sur .env.example :

# Clé API Google Gemini (Obligatoire)
# Obtenez-la sur Google AI Studio (aistudio.google.com)
GEMINI_API_KEY="AIzaSyYourGeminiKeyHere..."

# URL de l'Application (Obligatoire en production)
APP_URL="http://localhost:3000"

# (Optionnel) Bucket Google Cloud Storage
GCS_BUCKET_NAME=""

# Mot de Passe Administrateur (Obligatoire pour se connecter à l'interface)
ADMIN_PASSWORD="votre_mot_de_passe_secret"

2. Configuration Firebase (Base de données)

Le projet nécessite Firestore pour la persistance des métadonnées et du système de "chunks" de fichiers (lorsque l'on contourne les limites de taille mémoire). Le backend lit le fichier de configuration firebase-applet-config.json qui contient vos clés Firebase (ID de projet, variables API). Assurez-vous que l'authentification et Firestore sont activés sur votre console Firebase.

3. Exécution en Développement

Installez les dépendances :

npm install

Lancez le serveur de développement (Le serveur tournera sur le port 3000) :

npm run dev

4. Construction et Production

Pour construire l'application pour la production (Compilation React + Backend ESBuild) :

npm run build
npm start

Le système s'exécutera sous forme d'un script Node auto-suffisant (dist/server.cjs) servant l'application frontale depuis le dossier dist/.

🤝 Points d'Intégration Extérieurs (ex: TypeBot)

Pour que TypeBot (ou un autre agent externe) interroge un sujet, il doit effectuer une requête POST vers l'endpoint public (à configurer ou sécuriser selon les besoins) mis à disposition par le server.ts :

  • Endpoint : /api/sandbox (ou un endpoint dédié à créer)
  • Body JSON : { "subjectName": "NomDuSujet", "query": "Question de l'utilisateur" }

L'API s'occupe de valider l'expiration des documents, de remonter le contexte à Gemini et de retourner la réponse générée.

About

Interface de stockage des connaissances de votre Chatbot grâce à l'utilisation de l'API File Search de Google Gemini.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages