Recommended Free Tools
Oui, il est possible de construire un prototype local qui analyse un diff en recherchant d’abord le contexte pertinent dans le dépôt. PHP orchestre l’ingestion, le découpage et les appels HTTP : Ollama transforme les fragments et les requêtes en embeddings et peut générer la réponse, tandis que Qdrant conserve les vecteurs avec leurs métadonnées et renvoie les passages les plus proches.
Cette architecture améliore l’accès au contexte d’une pull request, mais elle ne garantit ni la détection des bogues ni la qualité des commentaires. Il faut traiter les résultats comme des pistes à vérifier, mesurer le système sur des diffs annotés et réindexer le dépôt lorsque le modèle d’embedding ou sa dimension change.
As an Amazon Associate I earn from qualifying purchases.
Le flux complet, du dépôt au commentaire
Un système RAG (Retrieval-Augmented Generation) sépare la recherche de contexte et la génération. Au lieu de transmettre tout le dépôt au modèle, l’application retrouve un sous-ensemble de passages, puis les ajoute à l’instruction envoyée au modèle. Cette séquence est également décrite dans la présentation PHP consacrée aux systèmes RAG et à LLPhant : présentation « Build a Retrieval-Augmented Generation (RAG) System in PHP ».
Outdated Drivers Are Slowing You Down
One free scan finds every outdated or missing driver and matches the right update for your exact hardware.Free scan · exact hardware matchWindows Errors? Fix Them Before They Spread
Repair common Windows errors and clear accumulated junk for a smoother, more stable PC - no reinstall needed.Free scan · no reinstall- Indexer : lire les fichiers suivis par Git, exclure ce qui est sensible ou hors périmètre, découper le code et conserver les métadonnées de chaque passage.
- Vectoriser : demander à Ollama un embedding pour chaque passage avec un modèle choisi pour le projet.
- Stocker : créer dans Qdrant une collection dont la dimension et la métrique correspondent aux vecteurs, puis insérer les points (vecteur et payload).
- Rechercher : convertir le diff, les symboles modifiés et les consignes du projet en requête, puis demander à Qdrant les passages les plus pertinents.
- Générer : fournir au modèle Ollama le diff, les extraits récupérés et une consigne demandant des observations précises, localisées et justifiées.
- Vérifier : présenter les résultats à une personne qui confirme, corrige ou rejette chaque remarque.
Qdrant appelle ses enregistrements des points : chacun contient un vecteur et un payload. Les collections définissent notamment la taille des vecteurs et la distance utilisée. La documentation explique aussi la recherche Top-K et les filtres sur le payload : vue d’ensemble de Qdrant.
#1 Best Overall
Définir le périmètre et le mode de déploiement
Avant d’écrire du PHP, décidez quelles données peuvent quitter la machine et qui administrera la base vectorielle. Qdrant mentionne plusieurs formes de déploiement : logiciel open source auto-hébergé, service Cloud géré, Hybrid Cloud et Private Cloud. Elles offrent des niveaux différents de contrôle opérationnel, d’isolation et de maintenance ; aucune grille de coût ni mesure de performance ne permet de déclarer une option universellement meilleure.
| Mode | Contrôle et confidentialité | Travail d’exploitation | Quand l’envisager |
|---|---|---|---|
| Qdrant open source auto-hébergé | Les fichiers, vecteurs et payload restent dans votre infrastructure si les journaux et sauvegardes sont également maîtrisés. | Vous gérez stockage, mises à jour, sauvegardes, réseau et supervision. | Prototype local ou environnement dont les contraintes de données imposent une maîtrise directe. |
| Qdrant Cloud | La base est administrée par un fournisseur ; vérifiez la région, la conservation et les contrôles contractuels adaptés à votre dépôt. | Moins d’administration de serveurs, mais dépendance au service et à sa configuration. | Équipe qui préfère déléguer l’infrastructure et dispose d’une politique autorisant ce transfert. |
| Hybrid Cloud | Répartition entre composants locaux et gérés ; le chemin exact des diffs doit être documenté. | Exploitation répartie et architecture réseau plus complexe. | Organisation ayant déjà une stratégie hybride. |
| Private Cloud | Environnement réservé avec des contrôles adaptés aux exigences internes. | Administration et coûts d’infrastructure à planifier avec précision. | Besoin d’un environnement isolé sans revenir à un serveur entièrement local. |
Un déploiement « local » ne suffit pas à prouver la confidentialité : une application peut journaliser le diff, exposer ses ports ou envoyer les prompts à un service distant. Définissez donc les journaux autorisés, les sauvegardes, les droits réseau et la politique de conservation avant l’indexation.
Préparer Ollama et Qdrant
Installez Ollama, Qdrant et l’environnement PHP sur la machine ou le réseau retenu. Les noms de modèles disponibles évoluent : choisissez un modèle d’embedding présent dans votre installation et notez sa version ou son identifiant exact. Utilisez le même modèle et la même configuration pour indexer les fragments et pour vectoriser les requêtes.
Free tools Windows power users keep installed
One-click scans. No signup required.
L’exemple officiel d’intégration suppose qu’Ollama est accessible sur le port 11434 et Qdrant sur le port 6333. Ce sont les hypothèses de l’exemple, pas des exigences universelles : adaptez les URL, l’authentification et le TLS à votre déploiement. Voir Using Ollama with Qdrant.
- Testez séparément la génération d’un embedding avec Ollama et la connectivité HTTP vers Qdrant.
- Stockez les URL, les clés éventuelles et le nom du modèle dans des variables d’environnement, jamais dans le dépôt indexé.
- Faites un essai sur quelques fichiers non sensibles avant de lancer une indexation complète.
Indexer le code sans perdre ses références
Filtrer les fichiers
Partez de la liste des fichiers suivis par le dépôt plutôt que d’un parcours aveugle du disque. Excluez explicitement les secrets et fichiers de configuration sensibles, les dépendances générées, les binaires, les caches, les artefacts de compilation et les répertoires qui ne font pas partie du produit examiné. Une règle d’exclusion doit être versionnée et relue comme du code : une erreur ici peut soit exposer une donnée confidentielle, soit priver le moteur du contexte nécessaire.
Choisir une unité de découpage
Le découpage est une décision de conception à mesurer, pas une valeur validée par une source. Une stratégie pratique consiste à privilégier le fichier et le symbole (classe, fonction, méthode), puis à utiliser une fenêtre de lignes lorsque le symbole est trop volumineux ou impossible à analyser. Conservez assez de contexte pour comprendre les appels, les conditions et les types, sans envoyer systématiquement un fichier entier au générateur.
Rank #2
Pour chaque passage, gardez au minimum :
- le chemin relatif du fichier ;
- la révision, le commit ou l’identifiant de version indexé ;
- le langage ;
- les lignes de début et de fin ;
- le nom du symbole lorsqu’il est disponible ;
- le texte original du passage.
Le texte peut être conservé dans le payload Qdrant avec ces champs. Le chemin et les lignes permettent ensuite de produire une référence vérifiable au lieu d’un commentaire impossible à rattacher au code.
Attribuer des identifiants stables
Construisez un identifiant déterministe à partir du chemin, de la révision et des lignes, ou calculez un hash du contenu avec ces métadonnées. Lors d’une nouvelle révision, vous pourrez remplacer les points modifiés et supprimer ceux qui n’existent plus. Conservez aussi l’identifiant de révision dans le payload afin d’interdire une recherche qui mélangerait deux états du dépôt.
Un pseudo-flux PHP peut ressembler à ceci :
$files = gitTrackedFiles($repository);
foreach ($files as $file) {
if (isExcluded($file)) {
continue;
}
foreach (splitIntoSymbolsOrWindows($file) as $part) {
$payload = [
'path' => $part['path'],
'revision' => $revision,
'language' => $part['language'],
'start_line' => $part['start_line'],
'end_line' => $part['end_line'],
'symbol' => $part['symbol'],
'text' => $part['text']
];
// vectoriser puis envoyer le point à Qdrant
}
}
Les fonctions de parcours et de découpage sont volontairement séparées de la couche Qdrant. Vous pourrez ainsi comparer plusieurs stratégies de segmentation sans réécrire le transport HTTP.
Créer les embeddings et la collection Qdrant
Faire correspondre modèle, dimension et métrique
Demandez un embedding à Ollama pour un fragment, mesurez la longueur du vecteur renvoyé, puis créez la collection Qdrant avec cette dimension. La documentation Qdrant/Ollama montre précisément ce motif : la dimension est déterminée à partir du vecteur produit, puis réutilisée dans la configuration de la collection. La métrique (par exemple cosinus) doit rester identique pour tous les points et toutes les requêtes de cette collection.
Ne changez pas de modèle d’embedding dans une collection existante sans plan de migration. Une dimension différente rend les anciens points incompatibles. Créez une nouvelle collection, réindexez les fragments, validez les résultats, puis basculez le nom logique utilisé par l’application.
Quick wins for a faster PC:
Repair Windows errors before they cause bigger problemsFix Now →Scan for outdated or missing drivers - takes under a minuteDriver Scan →Dense, lexical ou hybride
Les embeddings denses rapprochent des textes proches par le sens. Ils peuvent toutefois manquer un identifiant exact, un nom de méthode ou une constante rare. Qdrant documente également les vecteurs clairsemés, utiles pour les correspondances lexicales précises. Une recherche hybride combinant les deux signaux est donc une hypothèse à évaluer sur vos diffs, pas un résultat garanti pour ce projet.
| Approche | Point fort | Risque en code review | Mesure à comparer |
|---|---|---|---|
| Dense | Retrouve des passages exprimant une idée similaire malgré des formulations différentes. | Peut ignorer un identifiant ou une chaîne exacte. | Rappel du fichier et du symbole attendus. |
| Clairsemée/lexicale | Repère efficacement noms de symboles, clés, messages et tokens rares. | Peut privilégier des occurrences textuelles sans relation sémantique. | Précision des passages réellement liés au diff. |
| Hybride | Combine sens et correspondance exacte. | Ajoute une logique de fusion et des paramètres à régler. | Comparaison contrôlée sur le même jeu de diffs annotés. |
Créer la collection et insérer les points
Le code suivant illustre le principe REST. Les noms de modèle, l’URL et les options d’authentification doivent être adaptés à votre version d’Ollama et de Qdrant.
$ollamaUrl = getenv('OLLAMA_URL') ?: 'http://127.0.0.1:11434';
$qdrantUrl = getenv('QDRANT_URL') ?: 'http://127.0.0.1:6333';
$model = getenv('OLLAMA_EMBED_MODEL');
$embedding = postJson($ollamaUrl . '/api/embed', [
'model' => $model,
'input' => $sampleText
]);
$dimension = count($embedding['embeddings'][0]);
putJson($qdrantUrl . '/collections/code_chunks', [
'vectors' => [
'size' => $dimension,
'distance' => 'Cosine'
]
]);
Après la création, envoyez chaque point avec son vecteur et son payload. Utilisez un identifiant stable, attendez la confirmation d’écriture si votre mode d’exploitation l’exige et journalisez le nombre de points acceptés.
$point = [
'id' => $stableId,
'vector' => $vector,
'payload' => $payload
];
postJson($qdrantUrl . '/collections/code_chunks/points?wait=true', [
'points' => [$point]
]);
Ces extraits montrent l’enchaînement et non une bibliothèque PHP officielle. Vérifiez les routes et le format exacts dans la documentation correspondant à votre serveur avant la mise en production.
Relier Qdrant à PHP : REST ou client Composer
Qdrant indique que l’interaction passe par son API REST et recommande cette voie pour les langages qui ne disposent pas d’un client officiel. La page des interfaces répertorie les clients maintenus : Interfaces : API & SDKs. PHP n’y figure pas comme client officiel.
| Voie | Avantages | Points de vigilance |
|---|---|---|
| REST direct avec cURL ou un client HTTP PHP | Contrôle total des URL, en-têtes, délais, retries et journalisation ; peu de dépendances. | Vous devez maintenir la sérialisation, gérer les erreurs et suivre les changements de l’API. |
hkulekci/qdrant via Composer |
Encapsule les appels courants de collection, d’upsert et de requête dans une bibliothèque PHP. | Projet communautaire, non officiel : vérifiez sa compatibilité avec votre version de serveur et son rythme de maintenance. |
Le dépôt communautaire documente la création de collection, l’upsert et la Query API : Qdrant PHP Client. Son README avertit que les anciens endpoints search() et recommend() sont dépréciés au profit de la Query API. N’écrivez donc pas une nouvelle intégration autour de ces méthodes historiques.
Avec REST, encapsulez les appels dans un service PHP unique. Il doit définir un délai d’expiration, traiter les codes HTTP non réussis, ne pas réessayer aveuglément une écriture non idempotente et transmettre les filtres de payload de façon explicite.
Rank #4
$queryVector = embed($reviewQuery);
$result = postJson($qdrantUrl . '/collections/code_chunks/points/query', [
'query' => $queryVector,
'limit' => $topK,
'with_payload' => true,
'filter' => [
'must' => [
['key' => 'revision', 'match' => ['value' => $revision]]
]
]
]);
Le filtre de révision évite de mélanger des passages provenant d’états différents. Vous pouvez ajouter un filtre de langage, de chemin ou de composant lorsque ces champs sont fiables.
Transformer un diff en requête de revue
Construire le texte de recherche
Un diff seul ne contient pas toujours les définitions appelées ni les invariants du module. Construisez une requête qui combine les hunks modifiés, le chemin du fichier, les noms de symboles, le message de commit ou de pull request et les règles explicites du projet. Pour un gros diff, lancez une recherche par hunk ou par fichier, dédupliquez les résultats et conservez la provenance de chaque passage.
- Extraire les lignes ajoutées, supprimées et les fonctions touchées.
- Ajouter les noms de classes, interfaces, constantes et appels externes visibles.
- Joindre les consignes pertinentes : sécurité, compatibilité d’API, migrations ou conventions de tests.
- Vectoriser chaque requête avec le même modèle que celui utilisé à l’indexation.
- Interroger Qdrant avec une limite Top-K choisie pour l’expérience, puis conserver chemin, lignes, score et texte du payload.
Écrire une instruction contrôlable
Le générateur doit distinguer un fait observé d’une hypothèse. Demandez une sortie structurée qui cite les lignes du diff ou du contexte récupéré, explique le mécanisme du risque et indique quand aucune anomalie n’est démontrée.
Tu examines le diff ci-dessous avec le contexte récupéré du même dépôt.
Pour chaque problème potentiel, donne :
- fichier et lignes concernées ;
- constat observable ;
- impact concret ;
- raison technique ;
- test ou vérification proposée.
N’invente pas une définition absente du contexte. Si les éléments sont insuffisants, indique-le.
DIFF:
...
CONTEXTE QDRANT:
...
Ajoutez les passages sous des délimiteurs clairs et transmettez leurs métadonnées. Le modèle pourra ainsi rattacher une remarque à une ligne plutôt que de produire une affirmation générale. Une sortie bien formatée facilite aussi la validation humaine et le calcul des métriques.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Évaluer le prototype sans inventer de score
Aucune mesure publiée ne permet d’annoncer un taux de détection, une taille de fragment optimale, un modèle Ollama gagnant ou une configuration matérielle minimale pour cette combinaison. Construisez un petit corpus représentatif du dépôt, composé de diffs dont les constats attendus ont été validés par une personne.
The Tool Desk
Outbyte Driver Updater FREEFix the driver behind crashes, sound loss and screen glitchesFind Drivers →Outbyte PC Repair FREERepair Windows errors before they cause bigger problemsFix Now →Mesurer séparément la recherche et la génération
- Retrieval : le bon fichier, le bon symbole et le contexte nécessaire apparaissent-ils dans les résultats ?
- Constats : quelle précision et quel rappel pour les problèmes réellement présents ?
- Faux positifs : combien de remarques sont invalides ou sans preuve ?
- Localisation : les lignes citées correspondent-elles au diff ou au passage récupéré ?
- Ressources : mesurez latence, mémoire et occupation CPU/GPU sur le matériel réellement ciblé.
Comparer dans des conditions identiques
Conservez les mêmes exemples, le même prompt et les mêmes règles d’annotation lorsque vous comparez dense, lexical et hybride. Répétez l’expérience avec plusieurs découpages et plusieurs valeurs de Top-K. Notez le modèle, sa configuration, la révision du dépôt et la version de Qdrant afin qu’un résultat soit reproductible. Une amélioration de la qualité de recherche ne compense pas forcément une latence ou une consommation que votre équipe ne peut pas accepter : mesurez les deux.
Limites et pannes courantes
Le passage pertinent n’est pas retrouvé
Un embedding peut rapprocher deux explications similaires tout en manquant le nom exact d’un identifiant. Inspectez les requêtes qui échouent et testez une composante lexicale ou hybride. Vérifiez également que le découpage conserve les définitions et les appels nécessaires, plutôt que de couper une relation importante entre deux fenêtres.
Index obsolète ou incohérent
Un résultat provenant d’une ancienne révision peut rendre une remarque apparemment convaincante mais fausse. Filtrez sur la révision, supprimez les points supprimés et affichez la version dans les journaux. Après tout changement de modèle ou de dimension, créez une collection compatible et réindexez.
Secrets et données sensibles
Les payloads contiennent le texte du code. Limitez les droits de lecture, chiffrez les transports, protégez les journaux et décidez si les sauvegardes peuvent contenir ces données. Avec un service géré, vérifiez la région et les règles de conservation ; avec une installation locale, sécurisez les ports et l’accès au disque. Cette architecture n’est pas un audit de sécurité.
API ou bibliothèque modifiée
Les interfaces de Qdrant évoluent. Épinglez les versions testées, lisez les notes de migration et exécutez un test d’intégration qui crée une collection temporaire, insère un point, effectue une Query et supprime la collection. Pour le client PHP communautaire, contrôlez particulièrement le remplacement des anciennes méthodes search() et recommend() par la Query API.
Commentaire non fondé
Un modèle peut produire une remarque plausible sans preuve. Exigez une référence de ligne et le passage qui la justifie, acceptez explicitement la réponse « éléments insuffisants » et soumettez chaque proposition à une revue humaine. Ne fusionnez jamais automatiquement une correction sur la seule sortie du modèle.
Plan de mise en œuvre pragmatique
- Prototype fermé : choisissez un dépôt non sensible, indexez quelques fichiers et vérifiez le cycle embedding–Qdrant–requête.
- Provenance : ajoutez révision, chemin, langage, symbole et lignes dans chaque payload, puis filtrez sur la révision.
- Revue reproductible : enregistrez le diff, les passages récupérés, le modèle et les paramètres dans un journal conforme à votre politique de confidentialité.
- Jeu d’évaluation : faites annoter des diffs et mesurez retrieval, constats, faux positifs, localisation et ressources.
- Durcissement : gérez les erreurs HTTP, les timeouts, les retries, les mises à jour de collection et la suppression des anciennes révisions.
- Intégration : branchez le service à votre outil de pull request uniquement après avoir défini qui valide les remarques et comment les données sont conservées.
Le résultat attendu est un assistant qui fournit rapidement du contexte et des pistes vérifiables. Sa valeur dépendra de la qualité de l’index, du protocole d’évaluation et de la validation humaine, pas de la seule présence de PHP, Ollama ou Qdrant.
Quick Recap
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

