For the complete documentation index, see llms.txt. This page is also available as Markdown.

RAG - Génération Augmentée par Récupération

Qu'est-ce que le RAG ?

Le RAG est une technique permettant de limiter les hallucinations du modèle en lui fournissant un contexte plus riche. Il consiste en 3 étapes :

  1. Recherche des extraits de textes pertinents par rapport à une question

  2. Construction d'un prompt avec le contexte trouvé

  3. Envoi du prompt comprenant les textes pertinents et la question à un LLM pour obtenir une réponse

Le RAG avec Albert API

Albert API propose d'interagir avec une base de données vectorielle (vector store) pour permettre de réaliser du RAG. L'API propose de nourrir ce vector store en important des fichiers qui seront automatiquement traités et insérés dans le vector store.

Qu'est-ce qu'un vector store ? Un vector store est une base de données qui permet de stocker des documents textes et leur représentation vectorielle (suite de nombres qui représentent les concepts présents dans le document). Pour plus d'informations, rendez-vous sur la section [...]

Les collections sont des espaces de stockage dans ce vector store. Elles sont utilisées pour organiser les fichiers qui sont importés par l'API. Ces fichiers sont convertis en documents, contenant le texte extrait. Ces documents sont alors découpés en chunks et convertis en vecteurs à l'aide d'un modèle d'embeddings. Ces vecteurs ainsi que le texte qui a été vectorisé sont enregistrés dans la base de données vectorielle.

L'intégration se déroule donc en 3 phases :

  • File : fichier original (non stocké)

  • Document : texte extrait d'un fichier

  • Chunk : portion de texte découpée dans un document

Qu'est-ce qu'un chunk et pourquoi les documents sont découpés en chunks ?

Un chunk est une portion de texte découpée dans un document. Nous sommes contraints de découper le texte car les LLM ont deux limitations :

  • leur fenêtre de contexte est limitée (par exemple 132 000 tokens).

  • leur capacité de traitement de longs prompts est limitée. Il arrive souvent que, lorsqu'on envoie un prompt trop long, le LLM ait des difficultés à le comprendre ou à retrouver une information noyée dans le texte.

En conséquence, il est opportun de ne pas envoyer tous les documents en entier au LLM mais de ne lui envoyer que les parties des documents (chunks) qui sont pertinentes pour la question.

Une fois importés, vous pouvez interroger l'API pour récupérer les documents ou chunks qui vous intéressent en suivant la hiérarchie suivante reposant sur les 3 entités :

  • Collection : espace de stockage des documents et chunks

  • Document : texte extrait d'un fichier

  • Chunk : portion de texte découpée dans un document

Les collections publiques

Il existe deux types de collections : publiques et privées. Les collections publiques sont accessibles à tous alors que les collections privées sont accessibles uniquement à vous.

Les collections publiques sont créées et mises à jour régulièrement par l'équipe d'Albert API. Vous n'avez pas la possibilité de créer ou de mettre à jour une collection publique.

Nom de la collection
ID
Contenu

mediatech-legifrance

139226

Législation et réglementation nationale consolidée : codes officiels (73 en vigueur), lois, décrets, ordonnances depuis 1945, arrêtés sélectionnés depuis 1990. Source : legifrance.gouv.fr

mediatech-fiches-travail-emploi

150277

Fiches pédagogiques du Ministère du travail sur le droit du travail. Source : travail-emploi.gouv.fr

mediatech-fiches-service-public

150281

Fiches pratiques à destination des usagers (droits, démarches administratives, formulaires). Source : service-public.gouv.fr

mediatech-annuaire-services-publics-locaux

139997

Annuaire de plus de 86 000 guichets publics locaux (mairies, organismes sociaux, services de l'État) avec coordonnées et horaires. Source : data.gouv.fr

mediatech-annuaire-services-publics-nationaux

139998

Référentiel de l'organisation administrative de l'État : ~6 000 organismes, missions, hiérarchie, coordonnées et responsables. Source : data.gouv.fr

mediatech-dossiers-legislatifs

139999

Dossiers législatifs : lois depuis juin 2002, ordonnances depuis 2002, projets et propositions de loi en préparation. Source : data.gouv.fr

mediatech-decisions-conseil-constitutionnel

140006

Décisions du Conseil constitutionnel depuis 1958 (DC, QPC, contentieux électoral, etc.). Source : data.gouv.fr

mediatech-decisions-cnil

140029

Délibérations de la CNIL depuis 1979. Source : echanges.dila.gouv.fr

Step 1 Recherche des extraits de textes pertinents par rapport à une question

Créer une collection privée

Pour créer une collection privée, vous pouvez utiliser l'endpoint /v1/collections en spécifiant un nom.

Exemple de requête :

Consulter les collections

Qu'elles soient publiques ou privées, vous pouvez consulter les collections en utilisant l'endpoint /v1/collections.

Exemple de requête :

Créer un document à partir d'un fichier

Une fois que vous avez créé une collection, récupérez son ID et utilisez-le pour créer un document. L'ID est retourné lors de la création de la collection ou lors de la consultation des collections.

Pour uploader un fichier, vous pouvez utiliser l'endpoint /v1/documents en spécifiant le fichier à uploader et l'ID de la collection. L'endpoint accepte les fichiers de type PDF, TXT, HTML et MARKDOWN jusqu'à 20 Mb par fichier.

Lors de cet appel, l'API va :

  • extraire le texte du fichier

  • découper le texte en chunks

  • vectoriser les chunks (appel au modèle d'embeddings)

  • stocker les chunks et leur représentation vectorielle dans la base de données vectorielle

L'endpoint POST /v1/documents propose de nombreux paramètres pour configurer le traitement du document (chunking, métadonnées, etc.). Pour plus d'informations, consultez la page API reference - Documents.

Exemple de requête :

Rechercher des chunks à partir d'une question

Pour rechercher des chunks à partir d'une question, vous pouvez utiliser l'endpoint /v1/search. Il est possible de modifier la méthode de recherche ou les filtres de recherche.

Exemple de requête :

Il est aussi possible de dissocier la recherche du chat. Cela permet davantage de contrôle sur les chunks sélectionnés (filtrage, scoring, rerank, etc.).

  1. RecherchePOST /v1/search avec query, collection_ids, method, limit, etc.

  2. Prompt — concaténation des chunk.content renvoyés pour construire le contexte.

  3. ChatPOST /v1/chat/completions avec le prompt enrichi.

Les différentes méthodes de recherche

L'endpoint POST /v1/search propose 3 méthodes de recherche configurables avec le paramètre method :

  • semantic (défaut) : recherche sémantique basée sur la similarité des vecteurs

  • exact : recherche exacte basée sur l'exactitude du texte

  • hybrid : la recherche hybride combine la similarité des vecteurs et la recherche exacte. Elle va classer les résultats des deux recherches par pertinence.

Les filtres de recherche

L'endpoint POST /v1/search propose des filtres de recherche configurables avec le paramètre filters. Par défaut, aucun filtre n'est appliqué et la recherche est effectuée sur toutes les collections et tous les documents.

Nom du filtre
Description

collection_ids

Filtre les résultats par collection

document_ids

Filtre les résultats par document

metadata_filters

Filtre les résultats par métadonnées

Step 2 Construire un prompt avec le contexte trouvé

Une fois les chunks trouvés avec l'endpoint POST /v1/search, vous pouvez construire un prompt avec le contexte trouvé.

Exemple de template de prompt :

Step 3 Envoyer le prompt au LLM (/v1/chat/completions)

À partir du prompt construit à l'étape précédente, vous pouvez envoyer le prompt au LLM en utilisant l'endpoint POST /v1/chat/completions.

Exemple de requête :

Last updated

Was this helpful?