Personnalisation des paramètres de l'expérience RAG
Lorsque vous créez une solution de génération augmentée par extraction dans l'AutoAI, vous pouvez personnaliser les paramètres de l'expérience pour adapter vos résultats.
Si vous exécutez une expérience RAG sur la base des paramètres par défaut, le processus AutoAI sélectionne :
- La mesure d'optimisation à maximiser lors de la recherche du meilleur pipeline RAG
- Les modèles d'intégration à essayer, sur la base de la liste disponible
- Les modèles de fondation à essayer, sur la base de la liste disponible
Pour mieux contrôler l'expérience RAG, vous pouvez personnaliser les paramètres de l'expérience. Après avoir saisi les informations nécessaires à la définition de l'expérience, cliquez sur Paramètres de l'expérience pour personnaliser les options avant d'exécuter l'expérience. Les paramètres que vous pouvez revoir ou modifier se répartissent en trois catégories :
- Récupération et génération : choisir la métrique à utiliser pour optimiser le choix du modèle RAG, la quantité de données à récupérer et les modèles que l' AutoAI e peut utiliser pour l'expérience.
- Indexation : choisissez comment les données sont divisées en segments, la métrique utilisée pour mesurer la similarité sémantique et le modèle d'intégration AutoAI à utiliser pour l'expérimentation.
- Informations complémentaires : Examinez l'environnement à utiliser pour l'expérience.
Si vous utilisez une base de connaissances préexistante, certains paramètres peuvent ne pas faire partie du processus de configuration.
Paramètres de récupération et de génération
Visualiser ou modifier les paramètres utilisés pour générer les pipelines RAG.
Métrique d'optimisation
Choisissez la métrique à maximiser lors de la recherche des modèles RAG optimaux. Pour plus d'informations sur les mesures d'optimisation et leurs détails de mise en œuvre, voir les mesures RAG.
- La fidélité de la réponse mesure dans quelle mesure la réponse générée correspond au contexte extrait du magasin de vecteurs. Le score est calculé à l'aide d'une métrique lexicale qui compte le nombre de jetons de réponse générés inclus dans le contexte récupéré à partir du magasin de vecteurs. Un score élevé indique que la réponse représente bien le contexte récupéré. Mais un score de fidélité élevé n'indique pas nécessairement que la réponse est correcte. Pour plus d'informations sur la mise en œuvre de l'indicateur, voir Fidélité.
- La justesse de la réponse mesure la justesse de la réponse générée par rapport à la réponse correcte fournie dans les fichiers de référence. Cela inclut la pertinence du contexte récupéré et la qualité de la réponse générée. Le score est calculé à l'aide d'une métrique lexicale qui compte le nombre de tokens de réponse de référence inclus dans la réponse générée. Pour plus d'informations sur la mise en œuvre de la métrique, voir Correctness.
- La pertinence du contexte indique dans quelle mesure le contexte extrait du magasin de vecteurs correspond au contexte de référence fourni dans le benchmark. Le score est calculé en fonction du classement du contexte de référence parmi les fragments récupérés. Plus le contexte de la réalité terrain est proche du haut de la liste, plus le score est élevé. Pour plus d'informations sur la mise en œuvre de la métrique, voir Correction du contexte.
Le modèle de la langue large comme juge ( LLMaaJ )
Vous pouvez également choisir d'optimiser en utilisant les métriques LLM-as-a-Judge ( LLMaaJ ) :
- Réponse fidélité ( LLMaaJ )
- Correction des réponses ( LLMaaJ )
LLMaaJ mesurent les mêmes qualités que les mesures standard, mais au lieu d'utiliser une formule basée sur le chevauchement des jetons, elles utilisent un LLM pour évaluer la qualité de la sortie générée. Le LLM reçoit une invite qui contient la question, la sortie générée et le contexte récupéré ou la réponse de référence, en fonction de la métrique choisie. Ensuite, le LLM évalue si la sortie est sémantiquement exacte, factuellement correcte et conforme aux données extraites de l'index de la documentation.
Par rapport à la notation basée sur une formule, les LLM peuvent fournir des évaluations plus précises et plus nuancées, en particulier pour les réponses ouvertes ou complexes. En effet, les LLM peuvent fournir une évaluation plus approfondie en reconnaissant les paraphrases valides, en détectant les hallucinations et en reflétant mieux le jugement humain.
Pour utiliser LLMaaJ les métriques, vous devez avoir installé l'un de ces modèles dans votre environnement :
mistralai/mistral-smallmistralai/mistral-mediummistralai/mistral-largemeta-llama/llama
Méthodes de récupération
Vous pouvez sélectionner automatiquement les configurations pour récupérer les données pertinentes ou modifier les paramètres de configuration. Les méthodes de recherche diffèrent par la manière dont elles filtrent et classent les documents.
Choisissez la méthode de recherche par fenêtre ou la méthode de recherche simple.
- Méthode de récupération de fenêtre : entoure les morceaux récupérés avec des morceaux supplémentaires avant et après les morceaux, en fonction du contenu du document original. Cette méthode est utile pour inclure plus de contexte qui pourrait manquer dans le morceau récupéré à l'origine. La récupération de la fenêtre fonctionne comme suit :
- Rechercher : Trouve les fragments de document les plus pertinents dans le magasin de vecteurs.
- Développer : pour chaque bloc trouvé, récupère les blocs environnants pour fournir un contexte.
- Chaque bloc stocke son numéro de séquence dans ses métadonnées.
- Après avoir récupéré un bloc, les métadonnées de ce bloc sont utilisées pour récupérer les blocs voisins du même document. Par exemple, si
window_sizeest égal à 2, il ajoute 2 morceaux avant et 2 morceaux après. - Fusionner : Combine le texte qui se chevauche dans la fenêtre pour supprimer les répétitions.
- Gestion des métadonnées : fusionne les dictionnaires de métadonnées en conservant les mêmes clés et en regroupant les valeurs dans des listes.
- Return : Sort la fenêtre fusionnée en tant que nouveau morceau, en remplaçant l'original.
- Méthode de récupération simple : trouve les segments les plus pertinents dans le magasin vectoriel.
- Méthode de récupération de fenêtre : entoure les morceaux récupérés avec des morceaux supplémentaires avant et après les morceaux, en fonction du contenu du document original. Cette méthode est utile pour inclure plus de contexte qui pourrait manquer dans le morceau récupéré à l'origine. La récupération de la fenêtre fonctionne comme suit :
Sélectionnez le nombre de morceaux de 1 à 10. Le nombre de morceaux d'extraction détermine le nombre de morceaux plus petits en lesquels un passage de texte extrait est divisé.
Si vous sélectionnez la méthode de récupération par fenêtre, vous pouvez définir la taille de la fenêtre entre 1 et 4. La taille de la fenêtre correspond au nombre de segments adjacents que le modèle prend en compte lors de la récupération d'informations à partir des documents indexés.
Vous pouvez choisir une stratégie hybride pour améliorer la qualité de la sortie. Une stratégie hybride combine des vecteurs d'intégration denses et épars pour effectuer une recherche de similarité dans la base de données vectorielle. Les encastrements épars donnent la priorité aux correspondances exactes de mots clés, et les encastrements denses donnent la priorité aux résultats qui présentent une similarité sémantique. La combinaison d'encastrements épars et denses améliore la précision et la pertinence de la recherche, ce qui permet d'obtenir des informations plus complètes à partir de la base de données. Ce paramètre n'est pas disponible pour la base de données vectorielles Chroma en mémoire. Si vous utilisez la base de données vectorielle Elasticsearch, vous devez installer le modèle ELSER.
Choisissez l'une de ces options de stratégie hybride :
- RRF (Reciprocal Rank Fusion) : Combine les classements de plusieurs sources en une seule liste plus pertinente. Pour utiliser RRF avec la base de données vectorielle Elasticsearch, vous devez disposer de la version Elasticsearch 8.8 ou d'une version ultérieure.
- Pondéré : Attribue de l'importance aux résultats et donne la priorité au plus fiable d'entre eux pour le résultat final.
- Aucun : Utilise uniquement des encastrements denses, sans stratégie hybride.
Si vous utilisez une stratégie hybride, vous pouvez sélectionner une famille de modèles d'encastrement clairsemés. Si plusieurs versions du même modèle sont installées, la version la plus récente est utilisée par AutoAI.
Sélectionnez l'une de ces options de famille de modèles :
- Automatique : sélectionne automatiquement le modèle en fonction de votre choix de magasin vectoriel et des modèles que vous avez installés dans le magasin vectoriel. Si vous utilisez le magasin Elasticsearch vectoriel et que le modèle ELSER est installé, ELSER est sélectionné. Mais si ELSER n'est pas installé, BM25 est sélectionné.
- ELSER : s'applique uniquement au magasin de vecteurs Elasticsearch. Pour utiliser le modèle ELSER, il doit être installé dans le magasin de vecteurs Elasticsearch.
- BM25 : S'applique aux bases de données des magasins de vecteurs Elasticsearch et Milvus.
Modèles de fondation à inclure
Vous pouvez choisir d'utiliser des modèles de fondation fournis ou des modèles de fondation personnalisés.
Par défaut, tous les modèles de fondations disponibles qui supportent AutoAI pour RAG sont sélectionnés pour l'expérimentation. Vous pouvez modifier manuellement la liste des modèles de fondation fournis que AutoAI peut prendre en compte pour générer des modèles RAG. Pour chaque modèle, vous pouvez cliquer sur Détails du modèle pour afficher ou exporter les détails du modèle.
Pour obtenir la liste des modèles de fondations disponibles et leur description, voir Modèles de fondations par tâche.
Pour utiliser des modèles de base personnalisés, cliquez sur Modèles personnalisés et sélectionnez les modèles que vous souhaitez AutoAI prendre en compte pour générer des modèles RAG. La liste des modèles personnalisés comprend les modèles déployés à la demande, ainsi que les modèles personnalisés qui sont déployés dans le projet où vous menez l'expérience et dans tous les espaces dont vous êtes membre.
Pour ajouter un nouveau modèle de fondation personnalisé, voir Déploiement de modèles de fondation personnalisés.
Pour plus d'informations sur la manière de coder une expérience avec un modèle de base personnalisé, voir Coder une expérience RAG AutoAI avec un modèle de base personnalisé.
Nombre maximum de motifs RAG à réaliser
Vous pouvez spécifier le nombre de modèles RAG à réaliser dans la phase d'expérimentation, jusqu'à un maximum de 20. Un nombre plus élevé compare plus de modèles et peut donner des modèles mieux notés, mais consomme plus de ressources informatiques.
Correspondre à la langue d'entrée
Par défaut, détecte AutoAI automatiquement la langue utilisée dans les invites et demande aux modèles de répondre dans la même langue. Les modèles qui ne prennent pas en charge la langue d'entrée sont moins prioritaires dans la recherche du modèle RAG. Désactivez ce paramètre pour prendre en compte tous les modèles disponibles et générer des réponses en anglais uniquement.
Paramètres d'indexation
Affichez ou modifiez les paramètres de création de la base de données vectorielles de texte à partir de la collection de documents.
Granularisation
Vous pouvez sélectionner automatiquement des configurations pour le regroupement de vos données ou modifier les paramètres de configuration. Les paramètres de découpage déterminent la manière dont les documents indexés sont divisés en morceaux plus petits avant d'être intégrés dans un magasin vectoriel. Le découpage des données permet de rechercher et de récupérer les morceaux d'un document les plus pertinents pour une requête. Cela permet au modèle de génération de ne traiter que les données les plus pertinentes.
Vous pouvez choisir l'une des méthodes de découpage suivantes :
Récursif : AutoAI RAG utilise un séparateur LangChain’s de texte récursif pour diviser les documents en morceaux. Cette méthode décompose le document de manière hiérarchique, en commençant par les paragraphes, puis les phrases, puis les mots. Il tente de conserver ces éléments ensemble aussi longtemps que possible jusqu'à ce que le bloc soit plus petit que la taille demandée. La méthode de découpage récursif est bien adaptée aux données structurées avec un formatage clair et permet de garantir des tailles de morceaux cohérentes. Pour plus d'informations sur la méthode de découpage récursif, voir Retrieval recursively split by character dans la documentation Langchain.
Sémantique : cette méthode utilise la similarité basée sur l'intégration pour diviser les documents en morceaux sémantiquement significatifs. Le découpage sémantique reconnaît les coupures naturelles dans le texte en fonction du sens, et non de la longueur des caractères ou des phrases. Cette approche préserve le contexte et améliore la pertinence de la recherche en regroupant les idées connexes. La méthode de segmentation sémantique est particulièrement adaptée aux données complexes ou non structurées.
Les morceaux plus petits permettent une interaction plus granulaire avec le texte, ce qui permet une recherche plus ciblée de contenu pertinent, tandis que les morceaux plus grands peuvent fournir plus de contexte. Pour votre cas d'utilisation de découpage, spécifiez une ou plusieurs options pour :
- Le nombre de caractères à inclure dans chaque bloc de données.
- Le nombre de caractères à superposer pour le découpage des données. Le nombre doit être inférieur à la taille de découpage.
Les options retenues sont explorées et comparées dans la phase d'expérimentation.
Modèles d'intégration
Les modèles d'intégration sont utilisés dans les solutions de génération augmentée par extraction pour encoder les morceaux et les requêtes sous forme de vecteurs afin de capturer leur signification sémantique. Les blocs de données d'entrée vectorisées sont ingérés dans un magasin vectoriel. Lorsqu'une requête est formulée, la représentation vectorisée est utilisée pour rechercher les blocs pertinents dans le magasin de vecteurs.
Pour obtenir la liste des modèles d'intégration disponibles pour les expériences RAG d' AutoAI, consultez la page Modèles d'encodeur pris en charge disponibles avec watsonx.ai.
Renseignements supplémentaires
Examinez la définition de l'environnement utilisée pour l'expérience.
Paramètres de configuration pour les réglages de l'expérience
Si vous codez une expérience AutoAI RAG, vous pouvez configurer les paramètres par programmation à l'aide de rag_optimizer l'objet. Pour plus d'informations sur la manière d'initialiser l'optimiseur RAG avec des paramètres personnalisés, voir Working with AutoAI RAG class and rag_optimizer.
| Paramètre | Descriptif | Valeurs |
|---|---|---|
| nom | Entrez un nom valide pour l'expérience | Nom de l'expérience |
| description | Décrire éventuellement l'expérience | Description de l'expérimentation |
| granularisation | Paramètres de regroupement pour le fractionnement des documents | {"method": "recursive", "chunk_size": 256, "chunk_overlap": 128} |
| modèles d'intégration | Intégrer des modèles à essayer | ibm/slate-125m-english-rtrvrintfloat/multilingual-e5-large |
| récupération | Paramètres de récupération | Utiliser AutoAIRAGRetrievalConfig dataclass |
| modèles_de_fondation | Modèles de base ou modèles personnalisés à utiliser | Voir les modèles de fondation par tâche Utiliser AutoAIRAGModelConfig ou AutoAIRAGCustomModelConfig |
| génération | Configuration de l'étape de génération | {"language": {"auto_detect": False}} |
| max_number_of_rag_patterns (nombre maximal de motifs de frottement) | Nombre maximal de motifs RAG à créer | 4-20 |
| optimisation_métrie | Nom(s) de la métrique à utiliser pour l'optimisation | faithfulnessanswer_correctnesscontext_correctnessanswer_correctness_judgefaithfulness_judge |
Vous pouvez utiliser les exemples de code suivants pour initialiser l'optimiseur RAG et configurer chaque paramètre.
Exemple de configuration de recherche :
from ibm_watsonx_ai.foundation_models.schema import AutoAIRAGRetrievalConfig, AutoAIRAGHybridRankerParams, HybridRankerStrategy
from ibm_watsonx_ai.foundation_models.extensions.rag.retriever import RetrievalMethod
retrieval_config = AutoAIRAGRetrievalConfig(
method=RetrievalMethod.SIMPLE,
number_of_chunks=5,
window_size=2,
hybrid_ranker=AutoAIRAGHybridRankerParams(
strategy=HybridRankerStrategy.RRF,
sparse_vectors={"model_id": "elser_model_2"},
alpha=0.9,
k=70,
)
)
Exemple de configuration d'un modèle de fondation :
from ibm_watsonx_ai.foundation_models.schema import (
AutoAIRAGModelConfig,
AutoAIRAGCustomModelConfig,
AutoAIRAGModelParams,
TextGenDecodingMethod
)
# Foundation model
model_id = "meta-llama/llama-3-1-8b-instruct"
# Foundation model with properties
fm = AutoAIRAGModelConfig(
model_id="ibm/granite-13b-instruct-v2",
parameters=AutoAIRAGModelParams(
decoding_method=TextGenDecodingMethod.SAMPLE,
min_new_tokens=5,
max_new_tokens=300,
max_sequence_length=4096,
),
prompt_template_text="My question {question} related to these documents {reference_documents}.",
context_template_text="My document {document}",
word_to_token_ratio=1.5,
)
# Custom foundation model with properties
custom_fm = AutoAIRAGCustomModelConfig(
deployment_id="<PASTE_DEPLOYMENT_ID_HERE>",
space_id="<PASTE_SPACE_ID_HERE>",
parameters=AutoAIRAGModelParams(
decoding_method=TextGenDecodingMethod.GREEDY,
min_new_tokens=5,
max_new_tokens=300,
max_sequence_length=4096,
),
prompt_template_text="My question {question} related to these documents {reference_documents}.",
context_template_text="My document {document}",
word_to_token_ratio=1.5,
)
foundation_models = [model_id, fm, custom_fm]
Exemple de configuration de regroupement :
chunking_config = {
"method": "recursive",
"chunk_size": 256,
"chunk_overlap": 128,
}
Exemple d'initialisation d'un optimiseur RAG avec une configuration personnalisée :
from ibm_watsonx_ai.experiment import AutoAI
experiment = AutoAI(credentials, project_id=project_id)
rag_optimizer = experiment.rag_optimizer(
name="DEMO - AutoAI RAG ibm-watsonx-ai SDK documentation",
description="AutoAI RAG experiment grounded with the ibm-watsonx-ai SDK documentation",
embedding_models=["ibm/slate-125m-english-rtrvr", "intfloat/multilingual-e5-large"],
foundation_models=foundation_models,
retrieval=[retrieval_config],
chunking=[chunking_config],
generation={"language": {"auto_detect": False}},
max_number_of_rag_patterns=5,
optimization_metrics=[AutoAI.RAGMetrics.ANSWER_CORRECTNESS],
)