Mise en œuvre de ChatGLM3-6B-128K sous Ollama pour l'analyse décisionnelle (BI)

Optimisation de la Business Intelligence avec les LLM à contexte étendu

L'analyse décisionnelle (BI) en entreprise se heurte souvent à la complexité des structures de données et à la nécessité de maîtriser des langages de requête comme le SQL. Traditionnellement, un utilisateur métier doit soit manipuler des tableaux de bord rigides, soit solliciter une équipe de Data Analysts, ce qui crée des goulots d'étranglement.

L'arrivée du modèle ChatGLM3-6B-128K change la donne. Grâce à sa fenêtre de contexte de 128 000 jetons, il est capable d'ingérer simultanément des dictionnaires de données, des rapports trimestriels complets et des schémas de base de données complexes. Contrairement aux modèles limités à 8K ou 16K, cette version permet une analyse holistique sans perte d'information cruciale lors de sessions de questions-réponses prolongées.

Déploiement de l'infrastructure avec Ollama

Ollama simplifie radicalement la gestion locale des modèles de langage. Pour transformer un serveur d'entreprise en moteur d'intelligence BI, la configuration est directe.

Installation de l'environnement

Assurez-vous de disposer d'une machine avec au moins 16 Go de RAM (32 Go recommandés pour exploiter pleinement le contexte de 128K) et un GPU compatible.

# Installation rapide sous Linux ou macOS
curl -fsSL https://ollama.ai/install.sh | sh

Initialisation du modèle ChatGLM3

Une fois Ollama installé, le téléchargement et l'exécution du modèle spécifique s'effectuent via une commande unique :

ollama run entropyyue/chatglm3

Ce processus récupère les poids du modèle et expose une API locale prête à l'emploi sur le port 11434 par défaut.

Construction d'un moteur de réponse BI en Python

Pour intégrer ce modèle dans un flux de travail professionnel, nous allons concevoir une classe spécialisée qui gère le contexte métier et les interactions avec l'API d'Ollama.

import requests
import json

class BusinessIntelligenceEngine:
   def __init__(self, host="http://localhost:11434"):
       self.api_url = f"{host}/api/generate"
       self.knowledge_base = self._import_corporate_data()

   def _import_corporate_data(self):
       """Chargement des métadonnées et schémas de l'entreprise"""
       try:
           with open('metadata_bi.txt', 'r', encoding='utf-8') as file:
               return file.read()
       except FileNotFoundError:
           return "Aucune donnée contextuelle disponible."

   def execute_query(self, user_query):
       """Soumission d'une requête au modèle avec enrichissement du contexte"""
       formatted_prompt = (
           f"En vous basant sur les informations suivantes :\n{self.knowledge_base}\n\n"
           f"Question : {user_query}\n"
           f"Réponse structurée :"
       )

       payload = {
           "model": "entropyyue/chatglm3",
           "prompt": formatted_prompt,
           "stream": False,
           "options": {
               "num_ctx": 128000
           }
       }

       response = requests.post(self.api_url, json=payload)
       if response.status_code == 200:
           return response.json().get('response', '')
       else:
           return f"Erreur de communication : {response.status_code}"

# Exemple d'utilisation
engine = BusinessIntelligenceEngine()
result = engine.execute_query("Compare les performances de vente entre la région Nord et Sud sur le dernier semestre.")
print(result)

Cas d'usage concrets en entreprise

Analyse comparative et tendances

L'assistant peut croiser des données provenant de sources disparates. Par exemple, en lui fournissant les rapports de stock et les prévisions météo, il peut identifier des corrélations entre les ruptures de stock et les événements climatiques imprévus.

Interprétation de métriques complexes

Plutôt que de chercher la définition d'un KPI (Indicateur Clé de Performance) dans un wiki interne, l'utilisateur demande directement : "Comment est calculé notre taux de désabonnement net et quel a été son impact sur le MRR ce mois-ci ?". Le modèle, ayant accès au dictionnaire de données, fournit une explication technique et mathématique précise.

Optimisation pour la production

Pour garantir des performances optimales dans un environnement multi-utilisateurs, plusieurs stratégies sont recommandées :

  • Gestion du cache : Implémenter une couche de mise en cache (type Redis) pour les questions récurrentes sur les indicateurs de performance hebdomadaires.
  • Découpage sémantique (Chunking) : Même si le modèle supporte 128K, la précision augmente si les documents sont structurés logiquement par sections (Finances, Logistique, RH).
  • Appels de fonctions (Function Calling) : Utiliser les capacités de ChatGLM3 pour traduire une question naturelle en un appel d'API vers une base de données SQL réelle, permettant d'obtenir des chiffres en temps réel plutôt que des données statiques.

Exemple de structure pour l'appel de fonction

# Structure de définition d'outil pour ChatGLM3
tools_definition = [
   {
       "name": "get_sales_statistics",
       "description": "Récupère les chiffres de vente par période et catégorie",
       "parameters": {
           "type": "object",
           "properties": {
               "period": {"type": "string", "description": "ex: Q1, 2023"},
               "category": {"type": "string"}
           }
       }
   }
]

Le déploiement local via Ollama garantit par ailleurs la confidentialité des données sensibles, aucune information ne quittant l'infrastructure de l'entreprise pour être traitée sur des serveurs tiers.

Étiquettes: ChatGLM3 Ollama Business Intelligence LLM Python

Publié le 3 septembre à 19h44