tutorial/installer-environnement-local.md

Installer un environnement de développement local (stack RAG)

Ce tutoriel vous fait monter, de zéro, un environnement de dev pour une application web accompagnée d'un cœur RAG (recherche sémantique par vecteurs). À la fin, vous aurez indexé un petit corpus et obtenu une réponse à une recherche. On avance par petites étapes, chacune vérifiable.

Public : vous savez ouvrir un terminal et lancer quelques commandes. Aucune connaissance préalable du RAG n'est requise.

Ce que vous allez construire

Trois briques qui coopèrent, comme en production :

Brique RĂ´le
L'application (framework PHP) sert l'UI et embarque la logique RAG
Un microservice d'embeddings (Python) transforme le texte en vecteurs
Un index vectoriel (SQLite + extension) stocke et recherche par similarité

L'index et les vecteurs sont des artefacts dérivés : on ne les versionne pas, on les régénère avec une commande d'ingestion.

Pourquoi un environnement Linux (mĂŞme sous Windows)

Le cœur RAG charge une extension SQLite au moment de l'exécution PHP. Ce chargement d'extension est fiable sous Linux et fragile en Windows natif. Pour éviter un environnement de dev qui diverge de la production, on travaille dans un Linux : soit une machine/VM Linux, soit un sous-système Linux sous Windows. Toute la suite se déroule dans un terminal Linux.


Étape 1 — Préparer le système

Dans votre terminal Linux, mettez le système à jour :

sudo apt update && sudo apt upgrade -y

Sous Windows, installez au préalable le sous-système Linux via votre méthode habituelle, puis ouvrez son terminal.


Étape 2 — Installer PHP et les extensions SQLite

Visez une version de PHP alignée sur celle de votre production. Installez PHP et les extensions nécessaires (dont SQLite), plus les outils de base :

sudo apt install -y php-cli php-sqlite3 php-mbstring php-xml \
  php-curl php-intl php-zip unzip git

Si votre distribution ne propose pas la version PHP cible, ajoutez un dépôt PHP tiers reconnu avant d'installer, en précisant explicitement la version voulue.

Vérifiez que les extensions SQLite indispensables au RAG sont bien chargées :

php -m | grep -E 'pdo_sqlite|sqlite3'
php --version

Vous devez voir pdo_sqlite et sqlite3 listés. Installez enfin le gestionnaire de dépendances PHP (Composer) :

sudo apt install -y composer

Étape 3 — Installer l'extension vectorielle SQLite

La recherche kNN (plus proches voisins) exige une extension vectorielle chargeable dans SQLite. Elle ne s'installe pas via le gestionnaire de paquets : on récupère la release « loadable » correspondant à votre OS/architecture, puis on dépose la bibliothèque partagée à un emplacement stable.

sudo mkdir -p <REPERTOIRE_EXTENSIONS>
cd /tmp
# récupérer l'archive « loadable » adaptée à votre OS/arch depuis le dépôt officiel de l'extension
tar xzf <ARCHIVE_TELECHARGEE>.tar.gz
sudo cp <FICHIER_.so> <REPERTOIRE_EXTENSIONS>/

Retenez le chemin complet de cette bibliothèque : vous le pointerez dans la configuration (Étape 6). Sa validité réelle sera confirmée à l'ingestion (Étape 7).

Point clé : la recherche kNN exige l'extension chargée dans PHP. Il n'y a pas de repli hors extension.


Étape 4 — Lancer le microservice d'embeddings

Le microservice reçoit du texte et renvoie des vecteurs. Le plus simple est de le lancer via conteneur.

docker compose up -d embeddings
curl http://127.0.0.1:<PORT_EMBEDDINGS>/health

Une réponse type {"status":"ok", ...} indique que le service est prêt.

Premier démarrage lent : le service télécharge un modèle (plusieurs centaines de Mo à ~1 Go). Montez un volume de cache pour ne pas re-télécharger à chaque redémarrage.

Alternative sans conteneur : créer un environnement virtuel Python, installer les dépendances, puis lancer le serviceur.

python3 -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
uvicorn app:app --host 127.0.0.1 --port <PORT_EMBEDDINGS>

Dans tous les cas, le service écoute en local uniquement — jamais exposé publiquement.


Étape 5 — Orchestrer en « une commande » (optionnel mais recommandé)

Un fichier compose.yaml à la racine de l'app permet de lever le microservice d'un coup, avec cache de modèle persistant et sonde de santé :

services:
  embeddings:
    image: <IMAGE_MICROSERVICE_EMBEDDINGS>
    ports:
      - "127.0.0.1:<PORT_EMBEDDINGS>:<PORT_EMBEDDINGS>"
    volumes:
      - hf-cache:<CHEMIN_CACHE_MODELE>   # persiste le modèle entre deux démarrages
    healthcheck:
      test: ["CMD", "curl", "-fsS", "http://127.0.0.1:<PORT_EMBEDDINGS>/health"]
      interval: 10s
      timeout: 3s
      retries: 5

volumes:
  hf-cache:
docker compose up -d

Le service est prĂŞt quand la sonde /health passe au vert.


Étape 6 — Configurer l'application

Installez les dépendances et créez votre fichier d'environnement local :

cd <REPERTOIRE_APP>
composer install
cp .env .env.local

Renseignez les variables RAG dans .env.local (mêmes clés qu'en production) :

RAG_EMBEDDING_URL=http://127.0.0.1:<PORT_EMBEDDINGS>
RAG_DB_PATH=%kernel.project_dir%/var/rag/index.sqlite
RAG_SQLITE_VEC_PATH=<CHEMIN_EXTENSION_VECTORIELLE>

Les réglages plus fins (modèle, dimension, taille des chunks, k de récupération, racine du corpus) vivent dans la configuration du bundle RAG. Aucune clé de fournisseur LLM n'est nécessaire en local pour la partie récupération seule.

Fournir un corpus

Le RAG a besoin de documents à indexer. Placez un dépôt/dossier de documentation à l'emplacement attendu comme racine du corpus :

git clone <URL_CORPUS_DOC> docs/

Étape 7 — Amorcer l'index et faire une première recherche

Microservice up (/health OK), lancez le diagnostic, l'ingestion, puis une recherche :

php bin/console app:rag:stats                # diagnostic (index + microservice)
php bin/console app:rag:ingest               # construit l'index vectoriel
php bin/console app:rag:search "votre requête"   # vérifie la recherche kNN

Si la recherche renvoie des résultats pertinents, votre stack fonctionne. L'index vit dans var/rag/ (non versionné). Pour repartir de zéro :

rm -rf var/rag/* && php bin/console app:rag:ingest --full

Étape 8 — Lancer l'application

symfony serve -d          # ou : php -S 127.0.0.1:<PORT_APP> -t public/

Ouvrez l'app sur http://127.0.0.1:<PORT_APP>. Une page d'administration RAG affiche l'état du système ; en cas de microservice indisponible, l'app reste debout en mode dégradé (bannière « index indisponible »).

Base de données : pour la recherche RAG en ligne de commande, aucune base applicative n'est requise. Elle ne devient nécessaire que si vous voulez tester l'UI authentifiée (création d'un admin de dev, migrations). C'est une étape facultative pour ce tutoriel.


Récapitulatif « machine neuve »

# une fois : Linux + PHP (Étapes 1-2), extension vectorielle (Étape 3)
docker compose up -d                       # microservice (Étapes 4-5)
cd <REPERTOIRE_APP> && composer install
cp .env .env.local                         # + variables RAG (Étape 6)
git clone <URL_CORPUS_DOC> docs/
php bin/console app:rag:ingest             # amorçage (Étape 7)
symfony serve -d                           # go (Étape 8)

Dépannage

Symptôme Cause probable Remède
Recherche vide ou en erreur microservice arrêté docker compose ps puis tester /health
Le chargement de l'extension échoue chemin d'extension faux ou fichier absent vérifier RAG_SQLITE_VEC_PATH (Étape 3)
« index indisponible » index pas encore construit relancer l'ingestion
1er démarrage très long téléchargement du modèle normal ; le volume de cache évite la répétition
Extension SQLite introuvable extension PHP manquante réinstaller le paquet SQLite de PHP (Étape 2)

Assistant documentaire

Posez une question sur la documentation. Les réponses citent leurs sources — un clic ouvre le document à gauche.