Lire en anglais

Partager via


Résolution des problèmes et bonnes pratiques pour Azure OpenAI sur vos données

Cet article peut vous aider à résoudre les problèmes courants liés au développement d’une solution à l’aide d’Azure OpenAI Service sur vos données, une fonctionnalité qui vous permet d’utiliser la puissance des modèles OpenAI avec vos propres données. En suivant les meilleures pratiques et les conseils de cet article, vous pouvez optimiser votre sortie avec Azure OpenAI sur vos données et obtenir la meilleure qualité d’IA possible.

Azure OpenAI sur vos données : flux de travail

Le flux de travail d’Azure OpenAI sur vos données comporte deux parties principales :

  • Ingestion des données : Il s’agit de l’étape où vous connectez vos données à Azure OpenAI sur vos données. Dans cette phase, les documents utilisateur sont traités et divisés en blocs plus petits, puis indexés. La taille des blocs est de 1024 jetons par défaut, mais d’autres options de segmentation sont disponibles.

    Dans cette phase, vous pouvez également choisir un modèle d’incorporation à utiliser pour la création d’incorporations ou le type de recherche préféré. Les incorporations sont des représentations de valeurs ou d’objets (tels que du texte, des images et de l’audio) conçus pour être consommés par des modèles Machine Learning et des algorithmes de recherche sémantique.

    La sortie de ce processus est un index qui sera utilisé ultérieurement pour récupérer des documents lors de l’inférence.

  • Inférence : il s’agit de l’étape où les utilisateurs conversent avec leurs données à l’aide d’un studio, d’une application web déployée ou d’appels d’API directs. Dans cette phase, les utilisateurs peuvent définir différents paramètres de modèle (tels que temperature et top_P), ainsi que des paramètres système (tels que strictness et topNDocuments).

Considérez l’ingestion comme un processus distinct avant l’inférence. Une fois l’index créé, Azure OpenAI sur vos données passe par les étapes suivantes pour générer une bonne réponse aux questions utilisateur :

  1. Génération d’intentions : Azure OpenAI sur vos données génère plusieurs intentions de recherche à l’aide des questions utilisateur et de l’historique des conversations. Il génère plusieurs intentions de recherche pour résoudre toute ambiguïté au niveau de la question de l’utilisateur, ajouter un contexte supplémentaire à l’aide de l’historique des conversations pour récupérer des informations holistiques à l’étape de récupération et fournir des informations supplémentaires pour rendre la réponse finale complète et utile.
  2. Récupération : à l’aide du type de recherche fourni pendant l’ingestion, Azure OpenAI sur vos données récupère une liste de blocs de documents pertinents qui correspondent à chacune des intentions de recherche.
  3. Filtrage : Azure OpenAI sur vos données utilise le paramètre de rigueur pour filtrer les documents récupérés considérés comme non pertinents en fonction du seuil de rigueur. Le paramètre strictness contrôle l’agressivité du filtrage.
  4. Reclassement : Azure OpenAI sur vos données reclasse les blocs de document restants récupérés pour chacune des intentions de recherche. L’objectif du reclassement est de produire une liste combinée des documents les plus pertinents récupérés pour toutes les intentions de recherche.
  5. Inclusion de paramètres : le paramètre topNDocuments de la liste reclassée est inclus dans le prompt envoyé au modèle, avec la question, l’historique des conversations et les informations sur le rôle ou le message système.
  6. Génération de réponse : le modèle utilise le contexte fourni pour générer la réponse finale, ainsi que les citations.

Guide pratique pour structurer l’examen du débogage

Lorsque vous voyez une réponse défavorable à une requête, cela peut être le résultat de sorties provenant de différents composants qui ne fonctionnent pas comme prévu. Vous pouvez déboguer les sorties de chaque composant en procédant comme suit.

Étape 1 : recherchez les problèmes de récupération

Utilisez l’API REST pour vérifier si les blocs de documents appropriés sont présents dans les documents récupérés. Dans la réponse de l’API, vérifiez les citations dans le message tool.

Étape 2 : recherchez les problèmes de génération

Si les blocs de documents appropriés apparaissent dans les documents récupérés, vous rencontrez probablement un problème avec la génération de contenu. Envisagez d’utiliser un modèle plus puissant à l’aide de l’une des méthodes suivantes :

  • Mettez à niveau le modèle. Par exemple, si vous utilisez gpt-35-turbo, envisagez d’utiliser gpt-4.
  • Changez la version du modèle. Par exemple, si vous utilisez gpt-35-turbo-1106, envisagez d’utiliser gpt-35-turbo-16k (0613).

Vous pouvez également ajuster les aspects plus subtils de la réponse en modifiant les informations de rôle ou le message système.

Étape 3 : vérifier le reste de l’entonnoir

Si les blocs de documents corrects n’apparaissent pas dans les documents récupérés, vous devez creuser davantage :

  • Il est possible que le bloc de document correct ait été récupéré, mais qu’il ait été filtré en fonction de la rigueur. Dans ce cas, essayez de réduire le paramètre strictness.

  • Il est possible qu’un bloc de document correct ne faisait pas partie du paramètre topNDocuments. Dans ce cas, augmentez le paramètre .

  • Il est possible que vos champs d’index ne soient pas correctement mappés, et de ce fait que la récupération ne fonctionne pas correctement. Ce mappage est particulièrement pertinent si vous utilisez une source de données préexistante. (Autrement dit, vous n’avez pas créé l’index à l’aide du studio ou des scripts hors connexion disponibles sur GitHub.) Pour plus d’informations sur le mappage des champs d’index, consultez l’article décrivant la procédure.

  • Il est possible que l’étape de génération d’intention ne fonctionne pas correctement. Dans la réponse de l’API, vérifiez les champs intents du message tool.

    Certains modèles ne fonctionnent pas bien pour la génération d’intentions. Par exemple, si vous utilisez la version de modèle GPT-35-turbo-1106, envisagez d’utiliser un modèle ultérieur, tel que gpt-35-turbo (0125) ou GPT-4-1106-preview.

  • Avez-vous des données semi-structurées dans vos documents, telles que de nombreuses tables ? Il peut y avoir un problème d’ingestion. Vos données peuvent avoir besoin d’une gestion spéciale pendant l’ingestion.

    • Si le format de fichier est PDF, nous offrons une ingestion optimisée pour les tables utilisant les scripts hors connexion disponibles sur GitHub. Pour utiliser les scripts, vous devez disposer d’une ressource Intelligence documentaire et utiliser le modèle de disposition.

    • Vous pouvez ajuster votre taille de bloc pour vous assurer qu’un bloc puisse contenir votre plus grande table.

  • Convertissez-vous un type de données semi-structuré tel que JSON ou XML en document PDF ? Cette conversion peut entraîner un problème d’ingestion, car les informations structurées ont besoin d’une stratégie de segmentation différente du contenu purement textuel.

  • Si aucun des éléments précédents ne s’applique, vous rencontrerez peut-être un problème de récupération. Envisagez d’utiliser une valeur query_type plus puissante. En fonction de notre point de référence, semantic et vectorSemanticHybrid sont préférés.

Problèmes courants

Les sections suivantes répertorient les solutions possibles aux problèmes que vous pouvez rencontrer lorsque vous développez une solution à l’aide d’Azure OpenAI Service sur vos données.

Les informations sont correctes, mais le modèle répond « Les informations demandées ne sont pas présentes dans les documents récupérés. Essayez une autre requête ou rubrique. »

Consultez l’étape 3 du processus de débogage précédent.

Une réponse provient de vos données, mais elle n’est pas pertinente ou correcte dans le contexte de la question

Consultez le processus de débogage précédent, à partir de l’étape 1.

Le modèle ne suit pas les informations de rôle ou le message système

  • Assurez-vous que les instructions contenues dans les informations de rôle sont cohérentes avec les Directives pour l’IA responsable. Le modèle ne suivra probablement pas les informations de rôle si celles-ci contredisent ces directives.

  • Vérifiez que vos informations de rôle suivent les limites établies pour celles-ci. Chaque modèle a une limite de jetons implicite pour les informations de rôle. Au delà de cette limite, les informations sont tronquées.

  • Utilisez la technique d’ingénierie de prompt qui consiste à répéter une instruction importante à la fin du prompt. Mettre un astérisque double (**) sur les deux côtés de l’information importante peut également aider.

  • Effectuez une mise à niveau vers un modèle GPT-4 plus récent, car il est susceptible de mieux suivre vos instructions que GPT-3.5.

Des réponses ont des incohérences

  • Vérifiez que vous utilisez une valeur temperature faible. Nous vous recommandons de la définir sur 0.

  • À l’aide de l’API REST, vérifiez si les intentions de recherche générées sont identiques les deux fois. Si les intentions sont différentes, essayez un modèle plus puissant tel que GPT-4 pour voir si le modèle choisi affecte le problème. Si les intentions sont identiques ou similaires, essayez de réduire strictness ou d’augmenter topNDocuments.

Notes

Bien que la question soit la même, l’historique des conversations est ajouté au contexte et affecte la façon dont le modèle répond à la même question pendant une longue session.

Les intentions sont vides ou incorrectes

  • Consultez l’étape 3 du processus de débogage précédent.

  • Si les intentions ne sont pas pertinentes, le problème peut être que l’étape de génération d’intentions manque de contexte. La génération d’intentions prend uniquement en compte la question de l’utilisateur et l’historique des conversations. Elle ne prend pas en compte les informations de rôle ou les blocs de document. Vous pouvez envisager d’ajouter un préfixe à chaque question utilisateur avec une chaîne de contexte courte pour aider l’étape de génération d’intentions.

Vous avez défini inScope=true ou coché la case pour restreindre les réponses aux données, mais le modèle répond toujours aux questions hors domaine

  • Envisagez d’augmenter strictness.

  • Ajoutez l’instruction suivante dans vos informations de rôle ou votre message système :

    You are also allowed to respond to questions based on the retrieved documents.

  • Définissez le paramètre inScope sur true. Le paramètre n’est pas un commutateur immuable, mais le définir sur true encourage le modèle à rester limité.

La réponse est correcte, mais il manque parfois des références de document ou des citations

  • Envisagez la mise à niveau vers un modèle GPT-4 si vous ne l’utilisez pas déjà. GPT-4 est généralement plus cohérent en ce qui concerne la génération de citations.

  • Essayez de mettre l’accent sur la génération de citations dans la réponse en ajoutant You must generate citation based on the retrieved documents in the response dans les informations de rôle.

  • Essayez d’ajouter un préfixe dans la requête utilisateur You must generate citation to the retrieved documents in the response to the user question \n User Question: {actual user question}.