--- ## 🎯 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. ---