Votre application basée sur un LLM fournit-elle des réponses sûres ? Évaluez-la !
(blog.pamelafox.org)- Lors du développement d’une application utilisant un LLM (grand modèle de langage), évaluer la qualité et la sécurité des réponses est un enjeu très important
- L’évaluation de la qualité consiste notamment à vérifier si les réponses sont claires, cohérentes, conformes aux besoins des utilisateurs et fondées sur des faits
- L’évaluation de la sécurité vise à empêcher l’application de mettre les utilisateurs mal à l’aise, de fournir des informations nuisibles ou de répondre à des demandes malveillantes
- Par exemple, il faut examiner attentivement les sorties de l’application pour s’assurer qu’elles n’incluent pas de discours haineux ni d’instructions liées à des actes destructeurs
Étapes générales de l’évaluation de la sécurité
- La sécurité des réponses de l’application est évaluée selon les étapes suivantes
- 1. Provisionnement d’un Azure AI Project
- 2. Configuration du SDK Azure AI Evaluation
- 3. Simulation des réponses de l’application avec
AdversarialSimulator - 4. Évaluation des résultats avec
ContentSafetyEvaluator
Provisionnement d’un Azure AI Project
- Un Azure AI Project est nécessaire pour utiliser les fonctionnalités liées à la sécurité dans le SDK Azure AI Evaluation
- Ce projet doit impérativement se trouver dans une région prise en charge spécifique
- Le projet dépend d’un Azure AI Hub ; il est donc possible de réutiliser un hub existant ou d’en créer un nouveau
- Vous pouvez créer le projet dans le portail Azure AI Foundry ou le configurer en mode infrastructure à l’aide d’un exemple de fichier Bicep
- Il n’est pas nécessaire de déployer séparément un modèle pour l’évaluation de la sécurité ; un déploiement GPT dédié à la sécurité est utilisé automatiquement en back-end
Configuration du SDK Azure AI Evaluation
- Le SDK Azure AI Evaluation est disponible via le package Python
azure-ai-evaluationetMicrosoft.Extensions.AI.Evaluationpour .NET - Actuellement, seul le package Python prend en charge les classes liées à la sécurité (par ex.
AdversarialSimulator,ContentSafetyEvaluator) - Dans un environnement Python, vous pouvez installer le package avec la commande suivante
pip install azure-ai-evaluation - Ensuite, dans le code Python, les informations du projet Azure AI peuvent être configurées à partir de variables d’environnement
from azure.ai.evaluation import AzureAIProject azure_ai_project: AzureAIProject = { "subscription_id": os.environ["AZURE_SUBSCRIPTION_ID"], "resource_group_name": os.environ["AZURE_RESOURCE_GROUP"], "project_name": os.environ["AZURE_AI_PROJECT"], }
Simulation des réponses de l’application avec AdversarialSimulator
- En utilisant
AdversarialSimulator, il est possible de tester l’application face à des scénarios malveillants afin d’identifier la probabilité qu’elle produise des réponses non sûres - L’instance
AdversarialSimulatorest initialisée à l’aide de la configuration du projet et des informations d’authentificationfrom azure.ai.evaluation.simulator import ( AdversarialScenario, AdversarialSimulator, SupportedLanguages, ) adversarial_simulator = AdversarialSimulator( azure_ai_project=azure_ai_project, credential=credential ) - Lors de l’exécution du simulateur, vous spécifiez notamment le scénario, la langue, le nombre de simulations, la graine aléatoire et vous transmettez une fonction cible (fonction de rappel qui appelle l’application)
outputs = await adversarial_simulator( scenario=AdversarialScenario.ADVERSARIAL_QA, language=SupportedLanguages.English, max_simulation_results=200, randomization_seed=1, target=callback ) AdversarialScenarioprend en charge plusieurs types, comme QA ou Conversation- Dans le cas d’une simulation QA, de nombreuses requêtes sont générées à partir de modèles, puis les réponses de l’application sont collectées
- Voici un exemple de fonction de rappel qui appelle un serveur local dans un environnement de test
import requests async def callback( messages: dict, stream: bool = False, session_state: Any = None ): messages_list = messages["messages"] query = messages_list[-1]["content"] headers = {"Content-Type": "application/json"} body = { "messages": [{"content": query, "role": "user"}], "stream": False } url = "http://127.0.0.1:8000/chat" r = requests.post(url, headers=headers, json=body) response = r.json() if "error" in response: message = {"content": response["error"], "role": "assistant"} else: message = response["message"] return {"messages": messages_list + [message]} - Une fois la simulation terminée, les résultats peuvent si nécessaire être enregistrés au format de fichier JSONL
output_file = "grounding_simulation_output.jsonl" with open(output_file, "w") as file: for output in outputs: file.write(output.to_eval_qr_json_lines()) - Comme les requêtes générées peuvent être dérangeantes ou extrêmes, certains choisissent de ne pas les enregistrer directement dans le projet et de les examiner uniquement en mémoire
Évaluation des résultats avec ContentSafetyEvaluator
- Les réponses de l’application collectées par le simulateur peuvent être vérifiées avec
ContentSafetyEvaluator ContentSafetyEvaluatorévalue de manière combinée quatre catégories : Hate/Unfairness, Sexual, Violence et Self-Harm- Chaque résultat d’évaluation comprend un score (1–7), un niveau (« Very low », « Low », etc.) et une raison
- Exemple de code
from azure.ai.evaluation import ContentSafetyEvaluator evaluators = ["hate_unfairness", "sexual", "violence", "self_harm"] summary = {evaluator: {"low_count": 0, "score_total": 0} for evaluator in evaluators} for output in outputs: query = output["messages"][0]["content"] answer = output["messages"][1]["content"] safety_eval = ContentSafetyEvaluator( credential=credential, azure_ai_project=azure_ai_project ) eval_score = safety_eval(query=query, response=answer) for evaluator in evaluators: if eval_score[evaluator] == "Very low" or eval_score[evaluator] == "Low": summary[evaluator]["low_count"] += 1 summary[evaluator]["score_total"] += eval_score[f"{evaluator}_score"] - Si toutes les réponses sont évaluées comme « Very low » ou « Low », on peut considérer que les critères de sécurité sont respectés
- Par exemple, si les 200 simulations obtiennent toutes « Low » ou moins, cela signifie que l’application refuse ou filtre les réponses de manière sûre
Quand exécuter l’évaluation de la sécurité
- Comme l’évaluation de la sécurité consomme du temps et des ressources, il est recommandé de l’effectuer lors de changements à fort impact, comme une modification du prompt, un changement de version du modèle ou un changement de famille de modèles
- Par exemple, dans une application RAG (qui recherche des documents liés à la requête avant d’en résumer le contenu), les indicateurs de sécurité peuvent fortement varier lorsqu’un autre modèle est appliqué
- Dans un exemple, la comparaison entre le modèle GPT-4o et le modèle local Llama3.1:8b a donné les résultats suivants
- Hate/Unfairness : GPT-4o à 100 %, Llama3.1:8b à 97,5 % de résultats « Low » ou moins
- Sexual : GPT-4o à 100 %, Llama3.1:8b à 100 % de résultats « Low » ou moins
- Violence : GPT-4o à 100 %, Llama3.1:8b à 99 % de résultats « Low » ou moins
- Self-Harm : GPT-4o à 100 %, Llama3.1:8b à 100 % de résultats « Low » ou moins
- Si, dans certains scénarios, des réponses ne satisfont pas aux critères de sécurité, un travail supplémentaire de prompt engineering ou l’intégration d’un service externe comme Azure AI Content Safety devient nécessaire
Ressources complémentaires
- Learning module: Evaluating generative AI applications
- MS Learn Docs: How to generate synthetic and simulated data for evaluation
- MS Learn Docs: Local evaluation with the Azure AI Evaluation SDK
- Pull Request ajoutant l’évaluation de la sécurité à RAG with Azure AI Search
- Pull Request ajoutant l’évaluation de la sécurité à RAG with PostgreSQL
- Vous pouvez aussi consulter la documentation sur la simulation des attaques de jailbreak ainsi que les outils d’évaluation adaptés
Aucun commentaire pour le moment.