mirror of
https://github.com/Ladebeze66/coffreobsidian.git
synced 2025-12-16 21:37:47 +01:00
200 lines
7.2 KiB
Markdown
200 lines
7.2 KiB
Markdown
# ⚙️ 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.
|