Fonctionnement de la recherche augmentée
Le RAG (Retrieval-Augmented Generation) combine une recherche sémantique vectorielle et un modèle génératif pour exploiter des documentations internes sans réentraîner le modèle. L'objectif est d'injecter dynamiquement les extraits textuels pertinents dans le contexte de la requête.
Pipeline d'implémentation dans Symfony
La mise en place repose sur la vectorisation préalable des documents stockés dans une base de données relationnelle dotée d'une extension vectorielle, puis sur la recherche par similarité cosinus avant l'appel au modèle.
// Extrait du service de recherche sémantique
public function queryKnowledgeBase(string $userPrompt): string
{
$embedding = $this->openAiClient->vectorize($userPrompt);
$context = $this->vectorRepository->findMostSimilar($embedding, 3);
return $this->chatClient->complete([
'context' => implode("\n", $context),
'prompt' => $userPrompt
]);
}Critères de décision architecturale
- Fiabilité de la sortie : Le risque d'hallucination diminue drastiquement si le prompt système interdit explicitement toute réponse hors du contexte fourni.
- Latence : L'étape de vectorisation de la requête et la recherche en base ajoutent un délai non négligeable avant même la génération du texte.
- Confidentialité des données : Envoyer des documents métiers propriétaires à une API tierce nécessite de valider la conformité légale et l'absence de réentraînement sur vos données.
- Coût : La consommation de tokens augmente proportionnellement à la taille des extraits injectés dans chaque contexte.