coffreobsidian/Serveur perso/Création de classes agents pour LLM locaux avec Cursor et Ollama.md
2025-03-24 22:19:57 +01:00

152 lines
4.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
## 🎯 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 toffrent 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 lappel à 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 dappel 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 lagent 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.
---