QualityPilot
QualityPilot AI
Assistant documentaire local basé sur une architecture RAG, conçu pour interroger des procédures qualité fournisseur en langage naturel et produire des réponses sourcées.
Le projet utilise des modèles exécutés localement avec Ollama, une base PostgreSQL enrichie par pgvector, une API FastAPI et un serveur MCP exposant les fonctionnalités du RAG sous forme d’outils standardisés.
Statut : MVP fonctionnel et démontrable.
Fonctionnalités
Ingestion de documents texte
Découpage automatique en chunks avec chevauchement
Génération d’embeddings de 768 dimensions
Stockage des vecteurs dans PostgreSQL avec pgvector
Index vectoriel HNSW utilisant la distance cosinus
Recherche sémantique des passages pertinents
Génération locale de réponses avec Qwen3
Réponses accompagnées des passages sources
Refus des questions dont la réponse n’est pas présente
API REST documentée automatiquement avec FastAPI
Serveur MCP utilisant le transport Streamable HTTP
Exécution des modèles sur GPU NVIDIA
Déploiement multi-conteneurs avec Docker Compose
Related MCP server: Industrial MCP Agent Platform
Architecture
flowchart TD
Client["Client MCP"] --> MCP["Serveur MCP :8001"]
User["Utilisateur / Swagger"] --> API["API FastAPI :8000"]
MCP --> API
API --> DB["PostgreSQL + pgvector"]
API --> Ollama["Ollama :11434"]
Ollama --> Models["EmbeddingGemma + Qwen3"]Le serveur MCP agit comme un adaptateur. Il ne duplique pas la logique du RAG : il appelle les routes de l’API FastAPI.
Pipeline RAG
Un document texte est envoyé à l’API.
Le texte est découpé en chunks qui se chevauchent.
EmbeddingGemma transforme chaque chunk en vecteur.
Les chunks et leurs vecteurs sont enregistrés dans PostgreSQL.
La question de l’utilisateur est transformée en vecteur.
pgvector compare le vecteur de la question aux vecteurs stockés.
Les passages les plus similaires sont récupérés.
Ces passages sont ajoutés au contexte envoyé à Qwen3.
Qwen3 génère une réponse en citant les sources utilisées.
Le score retourné est un score de similarité cosinus, pas une probabilité.
Technologies
Composant | Technologie |
API | Python 3.12, FastAPI, Uvicorn |
LLM | Qwen3 4B |
Embeddings | EmbeddingGemma |
Base de données | PostgreSQL 17 |
Recherche vectorielle | pgvector, index HNSW |
Exécution locale des modèles | Ollama |
Protocole d’outils IA | MCP Python SDK |
Conteneurisation | Docker, Docker Compose |
Versionnement | Git, GitHub, Pull Requests |
Accélération | GPU NVIDIA via Docker Desktop et WSL2 |
Structure du projet
qualitypilot-ai/
├── app/
│ ├── chunking.py
│ ├── config.py
│ ├── database.py
│ ├── embeddings.py
│ ├── llm.py
│ ├── main.py
│ ├── schema.sql
│ └── schemas.py
├── mcp_server/
│ ├── __init__.py
│ ├── server.py
│ └── smoke_test.py
├── data/
│ └── documents/
│ └── procedure_qualite_fournisseur.txt
├── scripts/
│ └── init-db.sql
├── Dockerfile
├── Dockerfile.mcp
├── compose.yaml
├── requirements.txt
├── mcp-requirements.txt
├── .env.example
└── README.mdPrérequis
La configuration utilisée pour développer le projet comprend :
Windows avec WSL2
Docker Desktop
Docker Compose
Git
GPU NVIDIA compatible avec Docker
Au moins 8 Go de mémoire GPU recommandés
Le projet peut être adapté pour fonctionner uniquement sur CPU, avec des performances plus faibles.
Installation
1. Cloner le dépôt
git clone https://github.com/benjik50/qualitypilot-ai.git
cd qualitypilot-ai2. Créer la configuration locale
Copy-Item .env.example .envOuvrir ensuite .env et vérifier les valeurs.
Le fichier .env contient la configuration locale et ne doit pas être ajouté à Git.
3. Construire et démarrer les services
docker compose up -d --build4. Télécharger les modèles Ollama
docker compose exec ollama ollama pull embeddinggemma
docker compose exec ollama ollama pull qwen3:4b5. Vérifier les conteneurs
docker compose psLes services suivants doivent être disponibles :
qualitypilot-dbqualitypilot-ollamaqualitypilot-apiqualitypilot-mcp
Utilisation de l’API
La documentation Swagger est disponible à l’adresse :
http://localhost:8000/docsSous Windows :
Start-Process "http://localhost:8000/docs"Ingestion du document de démonstration
$documentPath = ".\data\documents\procedure_qualite_fournisseur.txt"
$resolvedPath = (Resolve-Path $documentPath).Path
$documentText = [System.IO.File]::ReadAllText(
$resolvedPath,
[System.Text.Encoding]::UTF8
)
$ingestObject = [ordered]@{
document_name = "procedure_qualite_fournisseur.txt"
text = $documentText
}
$ingestJson = $ingestObject | ConvertTo-Json -Compress
$ingestBody = [System.Text.Encoding]::UTF8.GetBytes(
$ingestJson
)
$ingestResponse = Invoke-RestMethod `
-Uri "http://localhost:8000/documents/ingest" `
-Method Post `
-ContentType "application/json; charset=utf-8" `
-Body $ingestBody
$ingestResponse | ConvertTo-JsonPoser une question
Exemple de requête pour POST /ask :
{
"question": "Sous quel délai un fournisseur doit-il accuser réception d'une anomalie critique ?",
"top_k": 3
}Exemple de réponse :
{
"answer": "Un fournisseur doit accuser réception d'une anomalie critique sous vingt-quatre heures [Source 1].",
"chat_model": "qwen3:4b"
}Routes principales
Méthode | Route | Fonction |
GET |
| Vérifier l’état de l’API |
GET |
| Lister les documents indexés |
POST |
| Découper et indexer un document |
POST |
| Rechercher les passages et générer une réponse |
GET |
| Vérifier l’état du serveur MCP |
MCP |
| Endpoint Streamable HTTP MCP |
Serveur MCP
Le serveur MCP expose deux outils.
list_documents
Liste les documents actuellement indexés dans QualityPilot AI.
ask_qualitypilot
Pose une question au pipeline RAG et retourne :
la réponse générée ;
le modèle utilisé ;
les passages sources ;
les indices des chunks ;
les scores de similarité.
Tester le serveur MCP
docker compose exec mcp python -m mcp_server.smoke_testLe client de test :
se connecte à
http://localhost:8001/mcp;découvre automatiquement les outils ;
appelle
list_documents;appelle
ask_qualitypilot;affiche la réponse RAG et les sources.
Validation réalisée
Les vérifications suivantes ont été effectuées :
Conteneur PostgreSQL healthy
Extension pgvector disponible
Vecteurs de 768 dimensions enregistrés
Ingestion idempotente : un document et quatre chunks
Recherche sémantique cohérente
Réponse correcte sur le délai de vingt-quatre heures
Réponse correcte sur les cinq pourquoi et Ishikawa
Refus d’inventer un chiffre d’affaires absent
Réponses accompagnées de sources
EmbeddingGemma exécuté à 100 % sur GPU
Qwen3 exécuté à 100 % sur GPU
Serveur MCP healthy
Découverte automatique des outils MCP
Appel du pipeline RAG via MCP
Concepts mis en œuvre
RAG
Le Retrieval-Augmented Generation enrichit le contexte du LLM avec des passages récupérés dans une base documentaire.
Embeddings
Les embeddings représentent les textes sous forme de vecteurs numériques. Des textes sémantiquement proches possèdent généralement des vecteurs proches.
LLM
Qwen3 génère la réponse finale à partir de la question et des passages sélectionnés. Le LLM ne consulte pas directement PostgreSQL.
MCP
Le Model Context Protocol standardise la découverte et l’appel d’outils par les applications d’intelligence artificielle.
Machine Learning et Deep Learning
Qwen3 et EmbeddingGemma sont des modèles de Deep Learning préentraînés. Le projet réalise de l’inférence et non de l’entraînement.
Limites du MVP
Ingestion limitée aux fichiers texte
Document de démonstration entièrement fictif
Pas d’authentification
Pas d’interface graphique
Pas d’évaluation sur un grand corpus
Pas d’agent autonome ReAct
Pas de traitement d’image avec un VLM
Améliorations possibles
Ajouter l’import de fichiers PDF
Ajouter une interface Streamlit ou React
Ajouter des tests automatisés
Ajouter une évaluation RAG avec un jeu de questions
Ajouter une authentification
Ajouter un agent ReAct utilisant les outils MCP
Ajouter un VLM pour analyser des photographies de défauts
Ajouter une stratégie de reranking
Déployer le projet sur une infrastructure cloud
Workflow Git
Le projet a été développé avec un workflow par fonctionnalités :
main
├── feature/docker-infra
├── feature/api-foundation
├── feature/rag-ingestion
├── feature/rag-query
└── feature/mcp-serverChaque fonctionnalité a été développée dans une branche séparée, validée, poussée sur GitHub puis fusionnée dans main par Pull Request.
Données
Le document qualité fournisseur présent dans ce dépôt est entièrement synthétique. Il ne contient aucune donnée confidentielle provenant d’une entreprise réelle.
Auteur
Benjamin Malhiaire
Projet personnel d’ingénierie IA.
This server cannot be deployed
Maintenance
Related MCP Connectors
One governed MCP endpoint for 40+ business systems. Read-only, source-cited answers.
MCP-Native LLM Orchestration Agent
Query your own PDFs and documents from any MCP client. Every answer cites the page it came from.
MCP server unifying ERPs, CRMs, APIs and knowledge base for Claude, ChatGPT and Gemini.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables natural language queries on technical specifications and automated code compliance checks using local RAG with vector search, integrated via MCP.-
- AlicenseNot gradedqualityDmaintenanceMCP server for integrating manufacturing systems (MES/ERP/quality/maintenance) with LLM agents, enabling event ingestion, incident triage, approval workflows, and RAG-based knowledge retrieval.MIT
- FlicenseNot gradedqualityDmaintenanceEnables AI assistants to retrieve, search, and compare procurement documents using hybrid retrieval and MCP integration.-
- AlicenseNot gradedqualityBmaintenanceEnables document-based Q&A with multi-modal RAG, hybrid retrieval, knowledge graph reasoning, and multi-agent orchestration via MCP tools.4MIT