# ⚙️ Architecture enrichie – Prétraitement PDF + Agents LLM personnalisables pour Ragflow ## 🎯 Objectif Structurer un programme complet de prétraitement de documents PDF techniques (type normes), intégrant : - Affichage interactif du PDF - Sélection visuelle de zones à analyser - Choix dynamique des LLMs à chaque étape - Personnalisation des paramètres de génération - Export structuré en Markdown pour Ragflow --- ## 🧠 LLMs disponibles via Ollama (http://217.182.105.173:11434) | Rôle | Nom du modèle | Taille | Notes | |------------------|---------------------------------------------|----------|------------------------------------------------| | Texte rapide | `mistral:latest` | 4.1 GB | Idéal pour traduction courte ou génération FR | | Traduction fine | `cline_deepseek`, `qwen2.5`, `mistral` | 64–77 GB | Meilleur raisonnement logique | | Résumé avancé | `deepseek-r1:70b-llama-distill-q8_0` | 74 GB | Long documents, résumés normés | | Vision complète | `llama3.2-vision:90b-instruct-q8_0` | 95 GB | Le plus puissant pour schémas annotés | | Vision rapide | `llava:34b-v1.6-fp16` | 69 GB | Prototypage ou analyse légère | | Embedding | `nomic-embed-text:137m-v1.5-fp16` | 274 MB | Pour vectorisation RAG | | Reranker | `bge-reranker-v2-m3` | 1.2 GB | Classement de pertinence | --- ## 🧩 Profils de configuration LLM ### 🔁 Modes prédéfinis | Mode | Vision | Traduction | Résumé | |----------------|----------------------|------------------|------------------| | Test rapide | `llava` | `mistral` | `mistral` | | Standard | `llava` | `qwen2.5` | `deepseek` | | Avancé | `llama3.2-vision` | `deepseek` | `deepseek` | --- ## 🧠 Architecture des agents LLM ### 📦 Base : `LLMBaseAgent` ```python class LLMBaseAgent: def __init__(self, model_name, endpoint, **generation_config): self.model_name = model_name self.endpoint = endpoint self.config = generation_config def generate(self, prompt, images=None): # Requête HTTP vers Ollama API pass ``` ### 🧱 Spécialisations : - `VisionAgent` : Interprétation de schémas - `TranslationAgent` : Traduction FR ↔ EN - `SummaryAgent` : Résumé / Réécriture --- ## ⚙️ Paramètres de génération à exposer | Paramètre | Description | Exemple par défaut | |------------------|--------------------------------------------------|---------------------| | `temperature` | Contrôle de la créativité | 0.2 (factuel) | | `top_p` | Nucleus sampling (proportion cumulée) | 0.9 | | `top_k` | Nombre de tokens candidats | 40 | | `num_predict` | Nombre max de tokens générés | 512 ou 1024 | | `repeat_penalty` | Réduction des répétitions | 1.1 | | `stop` | Liste de tokens d'arrêt | `["\n\n"]` | --- ## 🧩 UI – Interface utilisateur LLM Dans l’interface graphique : - 🔘 Menus déroulants pour **choisir le modèle par tâche** - 🧪 Champs sliders ou numériques pour : - temperature - top_k - top_p - max_tokens - 💾 Bouton « Sauvegarder profil personnalisé » - 📂 Fichier `llm_config.json` utilisé à l’exécution --- ## ✅ Exemple de bloc `.md` généré ```md ## Figure 4 – Répartition granulométrique **Contexte** : Ce schéma illustre la classification... **Analyse par modèle Vision** (llama3.2-vision): - The diagram shows a distribution curve... - Key terms: grain size, density... **Paramètres utilisés** : temperature=0.3, top_p=0.95, modèle=llama3.2-vision ``` --- ## 📦 Fichiers suggérés - `config/llm_profiles.json` : profils prédéfinis - `config/llm_custom.json` : dernier profil personnalisé utilisé - `agents/vision.py`, `agents/translation.py`, etc. : agents spécifiques - `utils/api_ollama.py` : centralise les appels aux modèles --- ## 🧠 Conclusion > Cette structuration permet une flexibilité complète : - pour le développement rapide - pour les expérimentations - pour la production normée de chunks optimisés pour Ragflow --- ## 🧑‍💻 Rôles d’agents spécialisés avec langues et prompts adaptés ### 🎭 Objectif Chaque agent doit : - Avoir un rôle explicite (vision, résumé, reformulation, etc.) - Être lié à un modèle spécifique (optimisé pour la tâche) - Suggérer ou imposer une **langue de prompt adaptée** - Fournir des **préréglages de génération** par défaut --- ### 🔁 Exemples d’agents spécialisés | Rôle | Classe agent | Modèle recommandé | Langue du prompt | Température | Notes | |-----------------------|----------------------|-------------------------------|------------------|-------------|-------| | 🔍 Interprétation | `VisionAgent` | `llama3.2-vision` | 🇬🇧 Anglais | 0.2 | Précision, analyse d’image | | ✍️ Résumé normatif | `SummaryAgent` | `deepseek-r1` | 🇫🇷 Français | 0.3 | Résumé technique long | | 🔄 Traduction | `TranslationAgent` | `mistral`, `qwen2.5` | 🇫🇷↔🇬🇧 Auto | 0.1 | Traduction fidèle | | 🧱 Reformulation | `RewriterAgent` | `mistral` ou `deepseek` | 🇫🇷 Français | 0.3 | Clarification technique | | 🧩 Markdown Formatter | `MarkdownAgent` | `cline_qwen_fp16`, `mistral` | 🇫🇷 | 0.25 | Structuration finale | --- ### ⚙️ Intégration dans le système de profils Chaque profil (`test`, `standard`, `avancé`) peut : - Charger automatiquement les **agents recommandés** - Définir pour chaque rôle : - `modèle` - `langue` - `params` : temperature, top_p, top_k, etc. - prompt_template (optionnel) --- ### 🗂️ Exemple de configuration dans `llm_profiles.json` ```json { "standard": { "translation": { "model": "mistral", "language": "fr", "temperature": 0.1 }, "vision": { "model": "llava", "language": "en", "temperature": 0.2, "top_p": 0.95 }, "summary": { "model": "deepseek-r1", "language": "fr", "temperature": 0.3 } } } ``` --- ### 💬 Exemple d’utilisation (interface ou ligne de commande) - Sélectionner un **rôle** : "interpréter un schéma" - L’outil : - Affiche le modèle recommandé (`llama3.2-vision`) - Définit la langue du prompt : 🇬🇧 - Pré-remplit température / top_p - Permet l’édition ou l’override --- Cette stratégie permet d’adapter finement les prompts, la langue et les paramètres à chaque rôle métier dans ton flux RAG/Ragflow.