Classer et reclasser des documents avec la RAG

Dans le cadre de votre Génération augmentée de récupération (RAG) dans Vertex AI Agent Builder, vous pouvez classer un ensemble de documents en fonction d'une requête.

L'API de classement prend une liste de documents et reclasse ces documents en fonction sur la pertinence des documents par rapport à une requête. Par rapport aux représentations vectorielles continues, uniquement au niveau de la similarité sémantique d'un document et d'une requête, l'API de classement peut vous donnent des scores précis sur la capacité d'un document à répondre à une requête donnée. La l'API de classement peut être utilisée pour améliorer la qualité des résultats de recherche après récupérer un ensemble initial de documents candidats.

L'API de classement est sans état. Il n'est donc pas nécessaire d'indexer les documents avant d'appeler l'API. Il vous suffit de transmettre la requête et les documents. L'API est donc adaptée au reclassement des documents Vector Search et autres solutions de recherche.

Cette page explique comment utiliser l'API de classement pour classer un ensemble de documents en fonction d'une requête.

Cas d'utilisation

Le principal cas d'utilisation de l'API de classement est d'améliorer la qualité des résultats de recherche.

Cependant, l'API de classement peut être utile dans tous les cas où vous devez trouver les éléments de contenu les plus pertinents par rapport à la requête d'un utilisateur. Par exemple, L'API de classement peut vous aider à effectuer les tâches suivantes:

  • Trouver le bon contenu à transmettre à un LLM pour l'ancrage

  • Améliorer la pertinence d'une expérience de recherche existante

  • Identifier les sections pertinentes d'un document

Le flux suivant décrit comment utiliser l'API de classement pour améliorer la qualité des résultats pour les documents segmentés :

  1. Utilisez l'API Document AI Layout Parser pour diviser un ensemble de documents en fragments.

  2. Utilisez une API de représentations vectorielles continues pour créer des représentations vectorielles continues pour chacun des fragments.

  3. Chargez les embeddings dans Vector Search ou dans une autre solution de recherche.

  4. Interrogez votre index de recherche et récupérez les fragments les plus pertinents.

  5. Reclassez les segments pertinents à l'aide de l'API de classement.

Données d'entrée

L'API de classement nécessite les entrées suivantes:

  • Requête pour laquelle vous classez les enregistrements.

    Exemple :

    "query": "Why is the sky blue?"
    
  • Ensemble d'enregistrements pertinents pour la requête. Les enregistrements sont fournis un tableau d'objets. Chaque enregistrement peut inclure un identifiant unique, un titre et le contenu du document. Pour chaque enregistrement, ajoutez un titre, un contenu ou les deux. Si la longueur du titre et du contenu dépasse 512 le contenu supplémentaire est tronqué. Vous pouvez inclure jusqu'à 200 d'enregistrements par requête.

    Par exemple, un tableau d'enregistrements se présente comme suit : En réalité, de nombreux plus d'enregistrements seraient inclus dans le tableau, plus longtemps:

    "records": [
       {
           "id": "1",
           "title": "The Color of the Sky: A Poem",
           "content": "A canvas stretched across the day,\nWhere sunlight learns to dance and play.\nBlue, a hue of scattered light,\nA gentle whisper, soft and bright."
       },
       {
           "id": "2",
           "title": "The Science of a Blue Sky",
           "content": "The sky appears blue due to a phenomenon called Rayleigh scattering. Sunlight is comprised of all the colors of the rainbow. Blue light has shorter wavelengths than other colors, and is thus scattered more easily."
       }
    ]
    
  • Facultatif: nombre maximal d'enregistrements que vous souhaitez que l'API de classement retour. Par défaut, tous les enregistrements sont renvoyés. Toutefois, vous pouvez utiliser l'topN pour renvoyer moins d'enregistrements. Tous les enregistrements sont classés est définie.

    Par exemple, la requête suivante renvoie les 10 meilleurs enregistrements :

    "topN": 10,
    
  • Facultatif : paramètre qui spécifie si vous souhaitez uniquement que l'ID de l'enregistrement soit renvoyé par l'API ou si vous souhaitez également que le titre et le contenu de l'enregistrement soient renvoyés. Par défaut, l'enregistrement complet est renvoyé. La raison principale de définir cette valeur est que vous souhaitez réduire la taille de la charge utile de la réponse.

    Par exemple, la valeur true ne renvoie que l'ID d'enregistrement, et non le titre ni le contenu :

    "ignoreRecordDetailsInResponse": true,
    
  • Facultatif : nom du modèle. Ce paramètre spécifie le modèle à utiliser pour classer les documents. Si aucun modèle n'est spécifié, semantic-ranker-512@latest est utilisé, ce qui pointe automatiquement vers le dernier modèle disponible. Pour pointer vers un modèle spécifique, indiquez l'un des noms de modèle répertoriés dans la section modèles, par exemple semantic-ranker-512-002.

    Dans l'exemple suivant, model est défini sur semantic-ranker-512@latest. Cela signifie que l'API de classement utilisera toujours le dernier modèle disponible.

    "model": "semantic-ranker-512@latest"
    

Données de sortie

L'API de classement renvoie une liste classée d'enregistrements avec les résultats suivants:

  • Score : valeur flottante comprise entre 0 et 1 qui indique la pertinence de l'enregistrement.

  • ID: l'identifiant unique de l'enregistrement.

  • Objet complet (s'il est demandé) : l'ID, le titre et le contenu.

    Exemple :

{
    "records": [
        {
            "id": "2",
            "score": 0.98,
            "title": "The Science of a Blue Sky",
            "content": "The sky appears blue due to a phenomenon called Rayleigh scattering. Sunlight is comprised of all the colors of the rainbow. Blue light has shorter wavelengths than other colors, and is thus scattered more easily."
        },
        {
            "id": "1",
            "score": 0.64,
            "title": "The Color of the Sky: A Poem",
            "content": "A canvas stretched across the day,\nWhere sunlight learns to dance and play.\nBlue, a hue of scattered light,\nA gentle whisper, soft and bright."
        }
    ]
}

Classer (ou reclasser) un ensemble d'enregistrements en fonction d'une requête

En règle générale, vous fournissez à l'API de classement une requête et un ensemble d'enregistrements pertinents pour cette requête et qui ont déjà été classés par une autre méthode, telle qu'une recherche par mot clé ou une recherche vectorielle. Vous utilisez ensuite l'API de classement pour améliorer la qualité du classement et déterminer un score qui indique la pertinence de chaque enregistrement par rapport à la requête.

  1. Obtenir la requête et les enregistrements obtenus Assurez-vous que chaque enregistrement comporte un ID et un titre, un contenu ou les deux.

    Le modèle accepte jusqu'à 512 jetons par enregistrement. Si la longueur combinée de le titre et le contenu comportent plus de 512 jetons, le contenu supplémentaire tronquées.

  2. Appelez la méthode rankingConfigs.rank à l'aide du code suivant:

REST

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-H "X-Goog-User-Project: PROJECT_ID" \
"https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/rankingConfigs/default_ranking_config:rank" \
-d '{
"model": "semantic-ranker-512@latest",
"query": "QUERY",
"records": [
    {
        "id": "RECORD_ID_1",
        "title": "TITLE_1",
        "content": "CONTENT_1"
    },
    {
        "id": "RECORD_ID_2",
        "title": "TITLE_2",
        "content": "CONTENT_2"
    },
    {
        "id": "RECORD_ID_3",
        "title": "TITLE_3",
        "content": "CONTENT_3"
    }
]
}'

Remplacez les éléments suivants :

  • PROJECT_ID : ID de votre projet Google Cloud.
  • QUERY: requête par rapport à laquelle les enregistrements sont classés et notés.
  • RECORD_ID_n : chaîne unique qui identifie l'enregistrement.
  • TITLE_n : titre de l'enregistrement.
  • CONTENT_n : contenu de l'enregistrement.

Pour obtenir des informations générales sur cette méthode, consultez rankingConfigs.rank.

Cliquez ici pour voir un exemple de commande curl et de réponse.

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    -H "X-Goog-User-Project: my-project-123" \
    "https://discoveryengine.googleapis.com/v1/projects/my-project-123/locations/global/rankingConfigs/default_ranking_config:rank" \
    -d '{
        "model": "semantic-ranker-512@latest",
        "query": "what is Google gemini?",
        "records": [
            {
                "id": "1",
                "title": "Gemini",
                "content": "The Gemini zodiac symbol often depicts two figures standing side-by-side."
            },
            {
                "id": "2",
                "title": "Gemini",
                "content": "Gemini is a cutting edge large language model created by Google."
            },
            {
                "id": "3",
                "title": "Gemini Constellation",
                "content": "Gemini is a constellation that can be seen in the night sky."
            }
        ]
    }'
    
{
    "records": [
        {
            "id": "2",
            "title": "Gemini",
            "content": "Gemini is a cutting edge large language model created by Google.",
            "score": 0.97
        },
        {
            "id": "3",
            "title": "Gemini Constellation",
            "content": "Gemini is a constellation that can be seen in the night sky.",
            "score": 0.18
        },
        {
            "id": "1",
            "title": "Gemini",
            "content": "The Gemini zodiac symbol often depicts two figures standing side-by-side.",
            "score": 0.05
        }
    ]
}

Python

Pour en savoir plus, consultez les API Python de Vertex AI Agent Builder documentation de référence.

Pour vous authentifier auprès de Vertex AI Agent Builder, configurez les identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.

from google.cloud import discoveryengine_v1alpha as discoveryengine

# TODO(developer): Uncomment these variables before running the sample.
# project_id = "YOUR_PROJECT_ID"

client = discoveryengine.RankServiceClient()

# The full resource name of the ranking config.
# Format: projects/{project_id}/locations/{location}/rankingConfigs/default_ranking_config
ranking_config = client.ranking_config_path(
    project=project_id,
    location="global",
    ranking_config="default_ranking_config",
)
request = discoveryengine.RankRequest(
    ranking_config=ranking_config,
    model="semantic-ranker-512@latest",
    top_n=10,
    query="What is Google Gemini?",
    records=[
        discoveryengine.RankingRecord(
            id="1",
            title="Gemini",
            content="The Gemini zodiac symbol often depicts two figures standing side-by-side.",
        ),
        discoveryengine.RankingRecord(
            id="2",
            title="Gemini",
            content="Gemini is a cutting edge large language model created by Google.",
        ),
        discoveryengine.RankingRecord(
            id="3",
            title="Gemini Constellation",
            content="Gemini is a constellation that can be seen in the night sky.",
        ),
    ],
)

response = client.rank(request=request)

# Handle the response
print(response)

Modèles compatibles

Les modèles suivants sont disponibles.

Nom du modèle Dernier modèle (semantic-ranker-512@latest) Entrée Fenêtre de contexte Date de disponibilité Date d'arrêt
semantic-ranker-512-003 Oui Texte (25 langues) 512 10 septembre 2024 À déterminer
semantic-ranker-512-002 Non Texte (en uniquement) 512 3 juin 2024 À déterminer

Étape suivante

Découvrez comment utiliser la méthode de classement avec d'autres API de RAG pour générer des réponses étayées à partir de données non structurées.