mirror of
https://github.com/Ladebeze66/coffreobsidian.git
synced 2025-12-16 23:17:43 +01:00
152 lines
4.2 KiB
Markdown
152 lines
4.2 KiB
Markdown
|
||
---
|
||
|
||
## 🎯 Objectif du document
|
||
|
||
Mettre en place une architecture de classes Python orientées agent pour exploiter tes modèles locaux avec **Ollama**, accessibles facilement depuis **Cursor**, tout en permettant :
|
||
|
||
- Une configuration précise des modèles (température, top-k, top-p, prompt system).
|
||
- Une gestion unifiée des LLM installés sur plusieurs machines.
|
||
- Une structure extensible pour ajouter ou spécialiser des agents par tâche.
|
||
|
||
---
|
||
|
||
## 🧠 Vision : Agents = Interfaces contrôlées sur tes LLM
|
||
|
||
n8n + MCP t’offrent une **vision visuelle et événementielle des agents**, mais en Python tu peux :
|
||
|
||
- Instancier des "agents" comme **classes Python**.
|
||
- Utiliser des **paramètres dynamiques**, prompts, fonctions de routage.
|
||
- Contrôler finement l’appel à chaque LLM local via API Ollama.
|
||
|
||
---
|
||
|
||
## 📦 Organisation des fichiers Python
|
||
|
||
```bash
|
||
llm_agents/
|
||
├── base_agent.py # Classe de base commune à tous les agents
|
||
├── ollama_interface.py # Interface API Ollama
|
||
├── agent_mistral.py # Agent général Mistral
|
||
├── agent_code.py # Agent codellama spécialisé
|
||
├── agent_docs.py # Agent lecture & synthèse de documents
|
||
└── main.py # Exemple d’appel centralisé depuis Cursor
|
||
```
|
||
|
||
---
|
||
|
||
## 🧩 `ollama_interface.py` – Appels API Ollama centralisés
|
||
|
||
```python
|
||
import requests
|
||
|
||
class OllamaInterface:
|
||
def __init__(self, model="mistral", temperature=0.7, top_k=40, top_p=0.9):
|
||
self.model = model
|
||
self.temperature = temperature
|
||
self.top_k = top_k
|
||
self.top_p = top_p
|
||
self.api_url = f"http://localhost:11434/api/generate"
|
||
|
||
def generate(self, prompt):
|
||
payload = {
|
||
"model": self.model,
|
||
"prompt": prompt,
|
||
"temperature": self.temperature,
|
||
"top_k": self.top_k,
|
||
"top_p": self.top_p
|
||
}
|
||
response = requests.post(self.api_url, json=payload)
|
||
return response.json().get("response", "")
|
||
```
|
||
|
||
---
|
||
|
||
## 🧬 `base_agent.py` – Classe de base
|
||
|
||
```python
|
||
from ollama_interface import OllamaInterface
|
||
|
||
class BaseAgent:
|
||
def __init__(self, name, model="mistral", **kwargs):
|
||
self.name = name
|
||
self.llm = OllamaInterface(model=model, **kwargs)
|
||
|
||
def respond(self, prompt):
|
||
raise NotImplementedError("Chaque agent doit définir sa méthode respond.")
|
||
```
|
||
|
||
---
|
||
|
||
## 🤖 `agent_mistral.py` – Agent généraliste
|
||
|
||
```python
|
||
from base_agent import BaseAgent
|
||
|
||
class MistralAgent(BaseAgent):
|
||
def respond(self, prompt):
|
||
system_prompt = "Tu es un assistant personnel expert et structuré."
|
||
full_prompt = f"{system_prompt}\n\n{prompt}"
|
||
return self.llm.generate(full_prompt)
|
||
```
|
||
|
||
---
|
||
|
||
## 💻 `agent_code.py` – Agent spécialisé codellama
|
||
|
||
```python
|
||
from base_agent import BaseAgent
|
||
|
||
class CodeAgent(BaseAgent):
|
||
def respond(self, prompt):
|
||
full_prompt = f"Tu es un assistant Python. Corrige, commente ou optimise ce code :\n{prompt}"
|
||
return self.llm.generate(full_prompt)
|
||
```
|
||
|
||
---
|
||
|
||
## 📚 `agent_docs.py` – Agent pour résumer ou structurer des documents
|
||
|
||
```python
|
||
from base_agent import BaseAgent
|
||
|
||
class DocAgent(BaseAgent):
|
||
def respond(self, content):
|
||
full_prompt = f"Voici un document brut, résume-le de manière claire et concise :\n{content}"
|
||
return self.llm.generate(full_prompt)
|
||
```
|
||
|
||
---
|
||
|
||
## 🚀 `main.py` – Exemple d'utilisation dans Cursor
|
||
|
||
```python
|
||
from agent_code import CodeAgent
|
||
from agent_mistral import MistralAgent
|
||
|
||
code_agent = CodeAgent(name="CodeLLM", model="codellama")
|
||
mistral_agent = MistralAgent(name="Assistant")
|
||
|
||
print(mistral_agent.respond("Organise-moi un plan de projet pour une API REST en FastAPI."))
|
||
print(code_agent.respond("def addition(a, b): return a + b"))
|
||
```
|
||
|
||
---
|
||
|
||
## 🧩 Extensions possibles
|
||
|
||
- Ajouter un système de **profil JSON par agent**.
|
||
- Intégrer la **gestion via n8n** (webhook qui déclenche un agent).
|
||
- Exécuter l’agent depuis une **interface Streamlit locale ou TUI**.
|
||
- Ajout futur : classe `MultiAgentRouter` qui oriente la requête selon le besoin (code, doc, discussion).
|
||
|
||
---
|
||
|
||
## ✅ Avantages
|
||
|
||
- Contrôle total sur les modèles.
|
||
- Usage rapide dans Cursor.
|
||
- Base solide pour agents orchestrables.
|
||
|
||
---
|