# Projet ARC ## Contexte du Projet ARC est une plateforme d'automatisation du développement logiciel basée sur un workflow multi-agents (IA). Le système orchestre plusieurs modèles d'IA spécialisés pour transformer un besoin utilisateur en un code source validé, testé et stocké. ___ ### Étape 0 : Préparation de l'environnement du projet Tâches : - Créer backend minimal - Créer modèle de données simple - langGraph ___ ### Étape 1 : Analyse du Besoin & Qualification (Agent PM / Business Analyst) - L'utilisateur entre une demande en langage naturel. - **Agent 1 (PM)** analyse la demande. Si des informations manquent pour coder, il pose des questions clarificatrices à l'utilisateur jusqu'à obtenir un cahier des charges complet. - **Vérification BDD :** Avant de coder, le système cherche dans une base de données vectorielle si un projet similaire existe déjà. - *Si oui :* On propose le lien à l'utilisateur. Si l'utilisateur valide, le workflow s'arrête ici. - *Si non (ou si l'utilisateur rejette l'existant) :* On passe à l'étape 2. Outils : - LangGraph -> LangGraph est adapté aux workflows multi‑agents avec états, transitions conditionnelles, persistance et human‑in‑the‑loop - Python -> backend, les agents, les appels LLM, les tests, les embeddings et les intégrations + compatible avec autres tools - Pydantic AI / Pydantic -> forcer l’Agent PM à produire un cahier des charges structuré - Chainlit -> adapté aux interfaces conversationnelles BDD : - Qdrant -> adapté à la recherche sémantique + stocker les embeddings de projets/scripts - Snowflake Arctic Embed 2.0 -> modèle d’embedding - Redis (optionnel) -> cache de recherche ;sessions utilisateur ;état temporaire ;verrouillage d’un workflow ;file d’attente simple ___ ### Étape 2 : Génération de Code (Agent Développeur) - **Agent 2 (Dev)** reçoit le cahier des charges validé et génère l'arborescence et le code source du projet. Outils : - LangGraph -> LangGraph est adapté aux workflows multi‑agents avec états, transitions conditionnelles, persistance et human‑in‑the‑loop - Mistral ou Gemma (modèle trop généraliste/léger->tache simple) -> DeepSeek Coder/Qwen2.5 - vLLM -> meilleur choix qu’Ollama pour une plateforme plus industrialisée. Llama.cpp modèles quantifiés sur CPU ou machines modestes + moins adapté à une plateforme multi‑utilisateur - Pydantic ___ ### Étape 3 : Tests et Assurance Qualité (Agent QA / Testeur) - **Agent 3 (QA)** récupère le code de l'Agent 2. Il doit exécuter le code (via une sandbox sécurisée) ou générer/exécuter des tests unitaires pour vérifier la qualité, la sécurité et le fonctionnement. - **Boucle de correction automatique (Loop 1) :** Si les tests échouent, l'Agent 3 renvoie les erreurs à l'Agent 2 avec les logs. L'Agent 2 corrige et renvoie à l'Agent 3. Cette boucle tourne au maximum 3 fois jusqu'à ce que le code soit "vert". - **EXTENSION FUTURE** si les tests échouent 3 fois, envoyé à une IA plus puissante. Outils : - Docker - Ruff -> qualité de code - Bandit -> sécurité - Semgrep (optionnel) -> règles de sécurité et qualité plus larges Boucle correction : - LangGraph - Pydantic ___ ### Étape 4 : Livraison & Feedback Utilisateur (Boucle Humaine) - Une fois le code validé par l'Agent 3, il est présenté à l'utilisateur. - L'utilisateur teste et valide. - *Si Validé :* Le projet est sauvegardé dans la base de données (pour la recherche de l'Étape 1) et livré (ex: zip ou dépôt GitHub). - *Si Refusé :* L'utilisateur indique ce qui ne va pas. Tout le contexte (code actuel + retours) est renvoyé à l'**Étape 1** pour réanalyse, et le cycle recommence. Outils : - Chainlit - Git ___ ### Étape finale : Tâches : - Tests fonctionnels de bout en bout - Sécurité minimale - Documentation finale - Présentation ## Structure du projet ```bash backend/ │ ├── app/ │ ├── api/ │ │ ├── routes/ │ │ │ ├── health.py │ │ │ └── workflow.py │ │ └── deps.py │ │ │ ├── core/ │ │ ├── config.py │ │ ├── logging.py │ │ └── security.py │ │ │ ├── graph/ # LangGraph │ │ ├── state.py │ │ ├── nodes.py │ │ └── workflow.py │ │ │ ├── agents/ # Gestion agents IA │ │ ├── pm_agent.py │ │ ├── dev_agent.py │ │ └── qa_agent.py │ │ │ ├── schemas/ # Pydantic │ │ ├── api.py │ │ ├── spec.py │ │ └── project.py │ │ │ ├── models/ # modèles métier / persistance (métadonnées d’un projet/version/statut/lien Git/hash/tags) │ │ └── project.py │ │ │ ├── services/ │ │ ├── workflow_service.py │ │ ├── embedding_service.py │ │ ├── retrieval_service.py │ │ └── delivery_service.py │ │ │ ├── repositories/ # accès externes, Qdrant / Redis / stockage │ │ ├── qdrant_repository.py │ │ ├── redis_repository.py │ │ └── project_repository.py │ │ │ ├── llm/ # appels modèles │ │ ├── client.py # wrapper d’appel │ │ ├── prompts.py # prompts centralisés │ │ └── providers.py # Gemma/llama.cpp.... │ │ │ ├── sandbox/ │ │ └── docker_runner.py │ │ │ ├── main.py │ └── __init__.py │ ├── chainlit_app.py ├── tests/ │ ├── test_health.py │ ├── test_workflow.py │ └── test_agents.py │ ├── .env ├── requirements.txt ├── Dockerfile └── README.md ```