Grep contre embeddings dans les agents de code
Pourquoi un agent qui persévère avec grep fait souvent aussi bien qu'un index sémantique sur du code, ce que cette persévérance coûte en tours et en tokens, et les cas où l'index redevient nécessaire.
Par Elias Varen7 min de lectureMembres
Un outil de recherche grossier entre les mains de quelqu'un qui essaie dix fois vaut mieux qu'un outil fin utilisé une seule fois. Cela suffit à expliquer un fait contre-intuitif pour qui vient du RAG : les agents de code travaillent très bien avec grep, un listing de fichiers et rien d'autre.
L'agent cherche RateLimit, ne trouve rien, essaie throttle, tombe sur un middleware, lit le fichier, y voit un nom de service, cherche ses usages. Cinq tours, aucune infrastructure, et il a trouvé le code ainsi que la manière dont il est appelé. Un index vectoriel aurait répondu en un appel, peut-être juste, peut-être avec la version du fichier d'avant votre dernier commit.
Pourquoi la persévérance suffit, sur du code
Plusieurs propriétés du code rendent la recherche lexicale itérative étonnamment forte.
Le code est son propre vocabulaire. Dans un corpus documentaire, la même idée s'écrit de vingt façons, et c'est pour cela qu'on a besoin d'embeddings. Dans une base de code, un concept porte un nom (une classe, une fonction, une constante), répété à l'identique partout où le concept est utilisé. Une fois le nom trouvé, grep donne une exhaustivité que la similarité ne donnera jamais, avec tous les appelants et pas seulement les dix plus ressemblants.
Chaque résultat enseigne la requête suivante. L'agent mène une enquête plus qu'il ne lance une recherche. Un import, un nom de namespace, une convention de nommage aperçue dans un fichier lui donnent le terme exact du tour suivant, et la boucle transforme une recherche à faible rappel en parcours guidé.
Le résultat est vérifiable. Une ligne de grep est un fait : ce fichier contient cette chaîne à cette ligne. Un résultat vectoriel est une proximité, ce fragment ressemblant à votre question à 0,81. L'agent peut raisonner sur une absence de résultat lexical, alors qu'il ne peut rien conclure d'un score.
À lire ensuite
Toute la rubrique IAIA
Le RAG n'est pas mort, votre recherche est mauvaise
Pourquoi ni les grandes fenêtres de contexte ni les agents ne suppriment la recherche, comment mesurer le rappel séparément de la génération, et les fondamentaux à corriger avant de changer d'architecture.
7 minMembres
IA
Cache sémantique : rapide et faux
Pourquoi deux questions proches dans l'espace des embeddings peuvent exiger des réponses opposées, ce qu'un faux succès de cache coûte vraiment, et les rares périmètres où un cache sémantique est défendable.
8 minMembres
IA
Évaluer la recherche avant la génération
Dans un système à recherche documentaire, le rappel de la recherche plafonne la qualité des réponses. Comment mesurer cet étage seul, attribuer chaque échec au bon composant, et éviter de régler un prompt sur un bug de recherche.
7 minMembres