mirror of
https://github.com/Ladebeze66/coffreobsidian.git
synced 2025-12-16 13:47:47 +01:00
4.2 KiB
4.2 KiB
🎯 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
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
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
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
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
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
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
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
MultiAgentRouterqui 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.