What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
iTechGuides is reader-supported. When you buy through links on our site, we may earn an affiliate commission. As an Amazon Associate I earn from qualifying purchases. Learn more
Oui, vous pouvez construire un prototype local de revue de code avec PHP, Ollama et Qdrant. PHP orchestre l’indexation et la requête, Ollama transforme les fragments en vecteurs (et peut rédiger la réponse), tandis que Qdrant conserve ces vecteurs avec leurs métadonnées et renvoie les passages les plus pertinents. Le résultat est une aide à l’analyse d’un diff, pas un approbateur automatique : chaque constat doit être vérifié par une personne.
Ce que vous construisez exactement
Le pipeline est un RAG (Retrieval-Augmented Generation, ou génération augmentée par récupération). Au lieu d’envoyer uniquement un diff au modèle, l’application recherche d’abord les portions du dépôt qui peuvent l’expliquer : définition d’une classe appelée, contrat d’une interface, test associé ou configuration voisine. Elle transmet ensuite au modèle le diff, ces extraits et une consigne de revue.
Cette séparation répond à deux problèmes fréquents. Le modèle ne reçoit pas tout le dépôt à chaque requête, et les références renvoyées par la base peuvent être affichées avec le chemin et les lignes concernés. La présentation PHP de Zimuel décrit ce même enchaînement général : retrouver un sous-ensemble de documents, puis le fournir au générateur dans son contexte (présentation « Build a Retrieval-Augmented Generation (RAG) System in PHP »).
Il s’agit d’une architecture de prototype. Les sources disponibles ne mesurent ni le taux de détection de bogues, ni la taille de fragment idéale, ni le modèle Ollama le plus efficace. Vous devez donc traiter les choix ci-dessous comme des hypothèses à évaluer sur votre propre dépôt.
#1 Best Overall
- Read Before You Buy — No Video Output: These adapters support charging and USB 2.0 data transfer, but cannot transmit video signals. Except for standard USB webcams (which use USB data only), they are not compatible with HDMI/DisplayPort cables, video-capable USB-C hubs, or docking stations with video output.
- Convert USB-A Ports to USB-C: Designed to connect USB-C earphones, cables, flash drives, card readers, and other USB-C accessories to standard USB-A ports. Plug-and-play with no drivers or software required.
- Aluminum Alloy Housing: Built with a sturdy aluminum alloy shell that aids in heat dissipation and protects against daily wear and scratches. Designed to maintain a stable and secure connection.
- Compact & Travel-Friendly: The ultra-compact design allows the adapter to stay plugged into your device without blocking adjacent ports or adding bulk, reducing wear and tear on your original USB ports.
- 12-Month Warranty: Backed by a 12-month manufacturer warranty for peace of mind. Designed to meet strict quality control standards for reliable everyday performance.
Architecture et responsabilités
| Composant | Responsabilité | Donnée échangée |
|---|---|---|
| PHP | Parcourt les fichiers, découpe le code, appelle les services, assemble le contexte et formate la sortie. | Chemins, révisions, diff, vecteurs, résultats de recherche |
| Ollama | Produit les embeddings avec un modèle choisi ; peut aussi générer le texte de la revue. | Texte entrant, vecteur ou réponse générée |
| Qdrant | Stocke les points (vecteur + payload), applique les filtres et renvoie les meilleurs voisins. | Vecteurs, métadonnées, score de pertinence |
| Dépôt Git | Fournit les fichiers suivis, la révision indexée et le diff à examiner. | Code source et historique |
Dans Qdrant, une collection fixe la dimension des vecteurs et la métrique de distance. Chaque point associe le vecteur à un payload : dans ce projet, le texte du fragment, son chemin, son langage, sa révision et ses lignes. La documentation de présentation de Qdrant couvre le Top-K, les filtres de payload et les modes de déploiement (Qdrant Overview).
Prérequis et décisions à prendre avant de coder
- Un dépôt dont vous connaissez la révision à indexer et les répertoires à exclure.
- PHP avec l’extension HTTP nécessaire à votre choix d’intégration (cURL, Guzzle ou bibliothèque Composer).
- Une instance Ollama avec un modèle d’embedding et, si vous voulez une réponse rédigée, un modèle génératif. Les noms et dimensions disponibles évoluent : vérifiez-les dans l’installation utilisée.
- Une instance Qdrant locale, privée ou gérée. Les ports 11434 pour Ollama et 6333 pour Qdrant sont ceux de l’exemple officiel, pas des exigences universelles (Using Ollama with Qdrant).
- Une politique de confidentialité : secrets, fichiers générés, dépendances et données personnelles doivent être exclus avant toute vectorisation.
Notez également le modèle d’embedding, sa configuration, la métrique choisie et la révision Git dans un fichier de configuration versionné. Si vous changez de modèle ou de dimension, une collection existante n’est plus compatible : créez une collection distincte ou réindexez-la entièrement.
Étape 1 : définir le périmètre de l’index
Filtrer les fichiers
Commencez par les fichiers suivis par Git plutôt que par un parcours aveugle du disque. Ignorez explicitement les répertoires de dépendances, les artefacts de compilation, les binaires, les fichiers d’environnement et tout secret détecté. Conservez une liste d’exclusions testable ; une erreur ici peut envoyer une clé d’API dans un service de génération ou dans des journaux.
Choisir une unité de passage
Un passage doit être assez petit pour isoler un symbole, mais assez grand pour conserver son contexte. Trois stratégies sont raisonnables à comparer :
- un fichier complet pour les petits fichiers ;
- un symbole (classe, méthode, fonction ou bloc de configuration) avec son chemin et ses lignes ;
- une fenêtre de lignes autour d’un symbole ou d’une portion modifiée, avec un léger recouvrement entre fenêtres.
Aucune source ne valide un nombre de lignes ou de tokens. Mesurez donc plusieurs découpages sur un jeu de diffs annotés. Conservez dans chaque payload au minimum path, revision, language, start_line, end_line et text. Ajoutez le nom du symbole et le module lorsque votre analyseur les connaît.
Étape 2 : créer les embeddings et la collection
Pour chaque fragment, PHP envoie le texte au point d’entrée d’embedding d’Ollama et récupère un tableau numérique. La requête de revue doit être encodée avec exactement le même modèle et la même configuration ; mélanger deux espaces vectoriels rend les scores incohérents.
Rank #2
- 5-in-1 USB-C Hub: Experience comprehensive connectivity featuring a Power Delivery input, two USB-A 2.0 ports, a USB-A 3.0 port, and an HDMI port. (Note: The USB-C power delivery input port is only for connecting an external wall charger to power your laptop and cannot power peripheral devices.)
- 90W Pass-Through Charging: Achieve optimal charging with 90W pass-through power to your laptop, supported by a total input of 100W, with the hub reserving 10W for operational efficiency. (Note: Wall charger not included.)
- Quick Data Transfers: Accelerate your productivity with rapid data transfers using a high-speed 5Gbps USB 3.0 port and two 480Mbps USB 2.0 ports.
- 4K HDMI Display: Enhance your visual experience with a hub capable of delivering 4K resolution at 30Hz in both mirror and extend modes. Please note that this hub is compatible with MacBook (macOS 12 and newer), Windows 10 and 11, ChromeOS, and laptops equipped with DP Alt Mode and Power Delivery. Note: This device is not compatible with Linux.
- What You Get: Anker USB-C Hub (5-in-1, 4K HDMI), welcome guide, 18-month warranty, and our friendly customer service.
La procédure illustrée par Qdrant consiste à obtenir la longueur du vecteur renvoyé, créer une collection avec cette dimension et la métrique retenue, puis effectuer un upsert avec le vecteur et son payload. L’exemple officiel suppose Ollama accessible sur le port 11434 et Qdrant sur 6333 ; adaptez les adresses à votre réseau (documentation Qdrant/Ollama).
Recommended Free Tools
// Schéma d’orchestration PHP (les appels HTTP dépendent de votre client)
$model = getenv('EMBEDDING_MODEL');
$vector = ollamaEmbed($model, $fragment['text']);
$dimension = count($vector);
ensureCollection('code_chunks', $dimension, 'Cosine');
upsertPoint('code_chunks', [
'id' => stableId($fragment['path'], $fragment['start_line'], $revision),
'vector' => $vector,
'payload' => $fragment + ['revision' => $revision]
]);
Utilisez un identifiant stable comprenant le chemin, les lignes et la révision, ou supprimez les anciens points d’une révision avant de réindexer. Dans les deux cas, évitez de mélanger silencieusement des versions du même fichier.
Étape 3 : connecter PHP à Qdrant
Qdrant indique que toutes les interactions passent par son API REST et recommande cette voie pour les langages sans client officiel. PHP ne figure pas dans la liste des clients officiels présentée par Qdrant (Interfaces: API & SDKs). Vous avez donc deux options.
| Option | Atouts | Points de vigilance |
|---|---|---|
| REST direct | Contrôle complet des URL, des délais, des en-têtes et des versions ; peu de dépendances. | Vous devez gérer la sérialisation JSON, les erreurs, les reprises et les changements d’API. |
hkulekci/qdrant via Composer |
Objets PHP pour la création de collection, l’upsert et la requête ; intégration rapide. | C’est une bibliothèque communautaire, non un SDK officiel. Vérifiez sa compatibilité avec votre serveur. |
Le dépôt communautaire documente une requête Query avec filtre, limite et retour du payload. Son README précise que les anciens endpoints search() et recommend() sont dépréciés au profit de la Query API (Qdrant PHP Client). Ne copiez donc pas un exemple ancien sans vérifier la version installée.
composer require hkulekci/qdrant
Si vous préférez REST, encapsulez les appels dans un service PHP unique : createCollection, upsertPoints, queryPoints et deleteRevision. Ainsi, un changement d’URL ou de format reste confiné à cette couche.
Quick wins for a faster PC:
Scan for outdated or missing drivers - takes under a minuteDriver Scan →Clear out junk files and repair common Windows errorsFree Scan →Fix the driver behind crashes, sound loss and screen glitchesFind Drivers →Étape 4 : indexer le dépôt
- Fixez la révision. Enregistrez le commit, la branche ou l’identifiant de version utilisé pour produire les passages.
- Énumérez les fichiers suivis. Appliquez les exclusions de sécurité et de périmètre avant de lire le contenu.
- Découpez. Produisez des fragments repérables par chemin, symbole et lignes ; ajoutez un recouvrement si une fonction dépend de lignes voisines.
- Vectorisez. Appelez Ollama pour chaque fragment, en limitant les lots selon la mémoire disponible et en journalisant uniquement des identifiants non sensibles.
- Insérez. Envoyez les points à Qdrant avec leur payload complet. Contrôlez que la dimension de chaque vecteur correspond à la collection.
- Validez. Relisez quelques résultats par chemin et lignes avant d’utiliser l’index pour une pull request.
Un index incrémental peut recalculer uniquement les fichiers modifiés, mais il doit supprimer les points obsolètes d’un fichier renommé ou supprimé. Une réindexation complète est plus simple après un changement de modèle d’embedding.
Rank #3
- Sleek 7-in-1 USB-C Hub: Features an HDMI port, two USB-A 3.0 ports, and a USB-C data port, each providing 5Gbps transfer speeds. It also includes a USB-C PD input port for charging up to 100W and dual SD and TF card slots, all in a compact design.
- Flawless 4K@60Hz Video with HDMI: Delivers exceptional clarity and smoothness with its 4K@60Hz HDMI port, making it ideal for high-definition presentations and entertainment. (Note: Only the HDMI port supports video projection; the USB-C port is for data transfer only.)
- Double Up on Efficiency: The two USB-A 3.0 ports and a USB-C port support a fast 5Gbps data rate, significantly boosting your transfer speeds and improving productivity.
- Fast and Reliable 85W Charging: Offers high-capacity, speedy charging for laptops up to 85W, so you spend less time tethered to an outlet and more time being productive.
- What You Get: Anker USB-C Hub (7-in-1), welcome guide, 18-month warranty, and our friendly customer service.
Étape 5 : transformer un diff en requête de revue
Le diff seul n’est pas nécessairement la meilleure requête. Enrichissez-le avec le chemin du fichier, le langage, les symboles modifiés et les consignes du projet (règles de sécurité, compatibilité ou style). Recherchez ensuite les fragments voisins et liés dans Qdrant.
Pour chaque résultat, restituez le chemin, les lignes, la révision et le score. Un score n’est pas une preuve de pertinence : c’est un signal pour trier les passages. Limitez le nombre de fragments afin de ne pas noyer le diff dans un contexte redondant, puis testez plusieurs valeurs de Top-K sur votre corpus.
$queryText = implode("n", [
"Fichier : {$file}",
"Symboles modifiés : {$symbols}",
"Diff :", $diff,
"Consignes :", $projectRules
]);
$queryVector = ollamaEmbed($embeddingModel, $queryText);
$hits = queryPoints('code_chunks', $queryVector, [
'limit' => $topK,
'with_payload' => true,
'filter' => ['language' => $language]
]);
Le filtre de langage est facultatif : il peut réduire le bruit, mais il risque d’exclure une configuration ou une interface écrite dans un autre langage. Comparez une recherche filtrée et une recherche ouverte sur des exemples représentatifs.
Do these 3 things before closing this tab:
1Fix the driver behind crashes, sound loss and screen glitches2Repair Windows errors before they cause bigger problems3Scan for outdated or missing drivers - takes under a minuteÉtape 6 : demander une sortie vérifiable au modèle
Assemblez un message qui sépare clairement le diff, les extraits récupérés et les règles de sortie. Demandez des constats localisés, avec chemin et lignes, une explication du risque et une suggestion conditionnelle. Exigez que le modèle indique lorsqu’aucun problème vérifiable n’apparaît et qu’il n’invente pas de référence absente du contexte.
Tu analyses le diff ci-dessous avec les extraits fournis.
Pour chaque constat :
- donne le chemin et les lignes exactes présentes dans le contexte ;
- explique le comportement observable et l’impact potentiel ;
- propose une correction minimale ;
- indique les hypothèses à vérifier.
Ne déduis pas un bug uniquement d’un nom de variable et ne crée aucune ligne absente.
Diff :
...
Extraits récupérés :
...
Cette consigne améliore la traçabilité, mais elle ne prouve pas la justesse du résultat. Présentez la réponse comme des pistes de revue et conservez le lien vers le diff original. Une personne doit accepter, corriger ou rejeter chaque constat.
Recherche dense, lexicale ou hybride
Les embeddings denses rapprochent des textes par sens. Ils peuvent retrouver une implémentation équivalente même lorsque les mots diffèrent. Pour du code, cette propriété peut manquer un identifiant exact, un nom de méthode ou une constante. Qdrant documente aussi les vecteurs clairsemés, adaptés aux correspondances lexicales précises, et la possibilité d’une recherche hybride (Qdrant Overview).
Rank #4
- Dual Converters, Infinite Potential:Includes 2× USB C male to USB A female adapters and 2× USB A male to USB C female adapters. Perfect for a wide range of uses—tablets with Bluetooth keyboards, expand USB ports on macbook, and more. Two different converters for all your daily needs
- Next-Level 10Gbps & 3A Charging: No more slow 480Mbps, this usb to usb c adapter has a transfer speed of up to 10Gbps, allowing you to do more transferring in less time. This usb adapter fits both USB A and USB C charger, supporting up to 3A fast charging
- Upgraded Exquisite Craftsmanship: With an aluminum alloy housing and metal connector, the usbc to usb adapter is extremely durable and sturdy. Rigorously tested to withstand more than 10,000 times of plugging and unplugging, ensuring long-lasting performance
- Broad Compatible: The usb c to usb adapter widely supports all USB C/ USB A devices like laptops, tablets, cellphones, car chargers, and phone chargers. Such as compatible with MacBook Pro/Air 2023/2022, Thunderbolt 4/3 Devices,Apple MagSafe Watch 9/8/7/SE/Ultra, iPad Pro 2022/2021, Samsung Galaxy S23/S20/S10, and iPhone 17/16/15 Pro. Plug and play
- Please Note: To reach 10Gbps speed, keep the cable under 3.3 ft. For USB A Male to USB C adapters, try flipping the USB C connector. USB C Male to USB A adapters support bidirectional 10Gbps transfer within 3.3 ft
| Stratégie | Quand l’essayer | Mesure à observer |
|---|---|---|
| Dense | Descriptions sémantiques, code similaire avec vocabulaire différent. | Le bon fichier et le bon symbole apparaissent-ils dans les premiers résultats ? |
| Lexicale clairsemée | Identifiants, noms de tables, constantes ou messages d’erreur exacts. | Les occurrences précises sont-elles retrouvées sans trop de bruit ? |
| Hybride | Diffs mêlant concepts et identifiants spécifiques. | Le compromis rappel/précision est-il meilleur sur vos diffs annotés ? |
Aucune des sources ne désigne un gagnant pour la revue de code. Gardez le même jeu de tests, le même modèle génératif et la même limite Top-K lorsque vous comparez ces modes.
Déploiement : local, géré ou hybride
Qdrant mentionne plusieurs formes de déploiement : open source auto-hébergé, Cloud géré, Hybrid Cloud et Private Cloud (Qdrant Overview). Le choix dépend moins d’une promesse de qualité que du contrôle opérationnel dont votre dépôt a besoin.
- Auto-hébergé : les vecteurs et payloads restent dans votre infrastructure ; vous administrez stockage, sauvegardes, mises à jour et exposition réseau.
- Service géré : vous réduisez l’exploitation du serveur ; vérifiez la région, la conservation, les contrôles d’accès et le flux exact des données avant indexation.
- Hybride ou privé : utile lorsque certaines données doivent rester dans un périmètre contrôlé, au prix d’une architecture et d’un suivi plus complexes.
Ollama et Qdrant peuvent écouter sur des interfaces locales plutôt que sur toutes les adresses réseau. Protégez les ports, chiffrez les communications hors machine, limitez les journaux et séparez les collections par dépôt ou par équipe. Une base vectorielle locale ne garantit pas à elle seule la confidentialité si PHP journalise le diff ou si un service distant reçoit le contexte.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Évaluer avant de faire confiance aux résultats
Construisez un jeu de diffs représentatif, chacun accompagné de constats attendus validés par une personne. Mesurez séparément :
- Retrieval : le bon fichier, symbole et voisinage apparaissent-ils dans les premiers résultats ?
- Qualité des constats : quelle précision et quel rappel pour les problèmes réellement pertinents ?
- Faux positifs : combien de remarques sont infondées ou localisées sur de mauvaises lignes ?
- Coût opérationnel : latence, mémoire, stockage et consommation sur le matériel réellement ciblé.
Répétez cette mesure pour plusieurs découpages, valeurs de Top-K et modes dense ou hybride, en gardant les diffs et les règles identiques. Publiez vos propres résultats avec la version de PHP, Ollama, du modèle et de Qdrant : aucune statistique générale de qualité, de vitesse ou de coût n’est établie pour cette combinaison.
PC Slower Than It Used to Be?
A free scan shows the junk files, broken settings and background clutter dragging Windows down - then fixes them in one click.Free scan · Windows 10 & 11Outdated 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 matchPièges courants et corrections
La dimension du vecteur ne correspond pas
La collection a été créée avec un ancien modèle ou une autre configuration. Vérifiez la dimension renvoyée par Ollama, créez une collection compatible et réindexez tous les fragments ; ne mélangez pas les espaces vectoriels.
Best Value
- 5-in-1 Connectivity: Equipped with a 4K HDMI port, a 5 Gbps USB-C data port, two 5 Gbps USB-A ports, and a USB C 100W PD-IN port. Note: The USB C 100W PD-IN port supports only charging and does not support data transfer devices such as headphones or speakers.
- Powerful Pass-Through Charging: Supports up to 85W pass-through charging so you can power up your laptop while you use the hub. Note: Pass-through charging requires a charger (not included). Note: To achieve full power for iPad, we recommend using a 45W wall charger.
- Transfer Files in Seconds: Move files to and from your laptop at speeds of up to 5 Gbps via the USB-C and USB-A data ports. Note: The USB C 5Gbps Data port does not support video output.
- HD Display: Connect to the HDMI port to stream or mirror content to an external monitor in resolutions of up to 4K@30Hz. Note: The USB-C ports do not support video output.
- What You Get: Anker 332 USB-C Hub (5-in-1), welcome guide, our worry-free 18-month warranty, and friendly customer service.
Le résultat est sémantiquement proche mais oublie un identifiant
Ajoutez le nom du symbole et le diff dans la requête, conservez les métadonnées lexicales et comparez une recherche clairsemée ou hybride. Un score dense élevé ne remplace pas une occurrence exacte.
Les références de lignes sont fausses
Stockez les lignes au moment du découpage et transmettez-les dans chaque payload. Après une modification du dépôt, réindexez la révision concernée ; ne réutilisez pas des numéros de lignes d’un ancien commit.
Le contexte est trop volumineux
Réduisez Top-K, dédupliquez les fragments voisins et tronquez les passages selon une règle déterministe. Enregistrez les passages exclus pour pouvoir diagnostiquer un rappel insuffisant.
La bibliothèque PHP ne fonctionne plus après une mise à jour
Vérifiez la version du serveur et du paquet communautaire. Utilisez la Query API actuelle plutôt que les endpoints search() et recommend() signalés comme dépréciés dans son README (dépôt hkulekci/qdrant). REST direct est une solution de repli lorsque l’abstraction bloque une fonctionnalité.
Un secret apparaît dans une réponse
Arrêtez l’indexation, révoquez le secret, purgez les payloads et journaux concernés, puis renforcez les exclusions. Traitez toute sortie générée comme non fiable tant qu’elle n’a pas été relue.
Checklist de mise en service
- La révision Git, le modèle d’embedding et la dimension sont enregistrés.
- Les exclusions couvrent secrets, dépendances générées, binaires et fichiers hors périmètre.
- Chaque passage contient chemin, révision, langage, lignes et texte.
- La collection et le modèle utilisent la même dimension et la même métrique.
- Les appels Qdrant sont isolés dans une couche REST ou dans une dépendance communautaire versionnée.
- La requête combine diff et contexte de fichier, puis affiche les références retournées.
- Les sorties demandent des constats précis et signalent les hypothèses.
- Un jeu de diffs annotés mesure retrieval, précision, rappel, faux positifs, latence et ressources.
- Les accès réseau, journaux, sauvegardes et règles de conservation ont été examinés.
- Une personne valide chaque remarque avant qu’elle ne devienne une décision de revue.
Verdict
PHP, Ollama et Qdrant forment une base cohérente pour un assistant de revue de code RAG : PHP contrôle le flux, Ollama fournit l’espace vectoriel et éventuellement le texte, et Qdrant rend le contexte recherché interprétable. La valeur réelle dépendra toutefois du découpage, du retrieval, du prompt et du dépôt. Commencez par un prototype traçable sur des diffs annotés, mesurez les variantes localement et gardez l’humain responsable de la décision finale.
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.
Free tools Windows power users keep installed
One-click scans. No signup required.

