Liefert Ihre LLM-basierte App sichere Antworten? Testen Sie es!
(blog.pamelafox.org)- Bei der Entwicklung von Apps auf Basis von LLMs (Large Language Models) ist es äußerst wichtig, die Qualität und Sicherheit der Antworten zu bewerten
- Bei der Qualitätsbewertung wird vor allem geprüft, ob die Antworten klar, konsistent, auf die Anforderungen der Nutzer abgestimmt und faktenbasiert sind
- Bei der Sicherheitsbewertung geht es darum, zu verhindern, dass die App Nutzer verärgert, schädliche Informationen liefert oder auf böswillige Anfragen reagiert
- So ist es beispielsweise notwendig, die Ausgaben der App sorgfältig zu prüfen, damit sie keine Hassrede oder Anleitungen zu destruktivem Verhalten enthalten
Allgemeine Schritte der Sicherheitsbewertung
- Die Sicherheit der App-Antworten wird in den folgenden Schritten bewertet
- 1. Azure AI Project bereitstellen
- 2. Azure AI Evaluation SDK einrichten
- 3. App-Antworten mit AdversarialSimulator simulieren
- 4. Ergebnisse mit ContentSafetyEvaluator auswerten
Azure AI Project bereitstellen
- Um sicherheitsbezogene Funktionen im Azure AI Evaluation SDK zu nutzen, wird ein Azure AI Project benötigt
- Dieses Project muss sich in einer bestimmten unterstützten Region befinden
- Das Project ist an einen Azure AI Hub gebunden, daher kann ein vorhandener Hub wiederverwendet oder ein neuer erstellt werden
- Das Project kann im Azure AI Foundry Portal erstellt oder per Infrastructure as Code mit einem Beispiel für eine Bicep-Datei eingerichtet werden
- Für die Sicherheitsbewertung muss kein separates Modell bereitgestellt werden; ein dediziertes GPT-Deployment für Sicherheit wird im Backend automatisch verwendet
Azure AI Evaluation SDK einrichten
- Das Azure AI Evaluation SDK ist als Python-Paket
azure-ai-evaluationund für .NET alsMicrosoft.Extensions.AI.Evaluationverfügbar - Derzeit unterstützt nur das Python-Paket sicherheitsbezogene Klassen wie
AdversarialSimulatorundContentSafetyEvaluator - In einer Python-Umgebung kann das Paket mit dem folgenden Befehl installiert werden
pip install azure-ai-evaluation - Danach lassen sich die Azure-AI-Project-Informationen in Python über Umgebungsvariablen konfigurieren
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"], }
App-Antworten mit AdversarialSimulator simulieren
- Mit
AdversarialSimulatorkann die App anhand böswilliger Szenarien getestet werden, um festzustellen, wie wahrscheinlich unsichere Antworten sind - Eine Instanz von
AdversarialSimulatorwird mit der Project-Konfiguration und den Authentifizierungsdaten initialisiertfrom azure.ai.evaluation.simulator import ( AdversarialScenario, AdversarialSimulator, SupportedLanguages, ) adversarial_simulator = AdversarialSimulator( azure_ai_project=azure_ai_project, credential=credential ) - Beim Ausführen des Simulators werden Szenario, Sprache, Anzahl der Simulationen, Seed für die Zufallssteuerung usw. festgelegt und eine Zielfunktion übergeben, also eine Callback-Funktion zum Aufruf der App
outputs = await adversarial_simulator( scenario=AdversarialScenario.ADVERSARIAL_QA, language=SupportedLanguages.English, max_simulation_results=200, randomization_seed=1, target=callback ) AdversarialScenariounterstützt mehrere Typen wie QA und Conversation- Bei einer QA-Simulation werden auf Basis von Vorlagen viele Anfragen erzeugt und die Antworten der App gesammelt
- Eine Beispiel-Callback-Funktion, die in einer Testumgebung einen lokalen Server aufruft, sieht wie folgt aus
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]} - Nach Abschluss der Simulation können die Ergebnisse bei Bedarf auch als JSONL-Datei gespeichert werden
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()) - Da die erzeugten Anfragen unangenehm oder extrem sein können, werden sie mitunter nicht direkt im Project gespeichert, sondern nur im Arbeitsspeicher geprüft
Ergebnisse mit ContentSafetyEvaluator auswerten
- Die mit dem Simulator gesammelten App-Antworten lassen sich mit
ContentSafetyEvaluatorüberprüfen ContentSafetyEvaluatorbewertet vier Kategorien gemeinsam: Hate/Unfairness, Sexual, Violence und Self-Harm- Jedes Bewertungsergebnis enthält einen Score (1–7), eine Stufe („Very low“, „Low“ usw.) und eine Begründung
- Beispielcode
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"] - Wenn alle Antworten als „Very low“ oder „Low“ eingestuft werden, kann man davon ausgehen, dass die Sicherheitskriterien erfüllt sind
- Wenn zum Beispiel bei allen 200 Simulationen „Low“ oder niedriger erreicht wird, bedeutet das, dass die App unsichere Anfragen sicher ablehnt oder filtert
Wann die Sicherheitsbewertung ausgeführt werden sollte
- Da eine Sicherheitsbewertung Zeit und Ressourcen kostet, empfiehlt es sich, sie bei Änderungen mit großem Einfluss durchzuführen, etwa bei Anpassungen des Modell-Prompts, Wechsel der Modellversion oder Änderung der Modellfamilie
- Bei einer RAG-App (bei der Dokumente passend zur Anfrage gesucht und anschließend zusammengefasst werden) können sich die Sicherheitsmetriken deutlich ändern, wenn ein anderes Modell eingesetzt wird
- In einem Beispiel ergaben sich beim Vergleich des GPT-4o-Modells mit einem lokalen Llama3.1:8b-Modell folgende Ergebnisse
- Hate/Unfairness: Bei GPT-4o lagen 100 %, bei Llama3.1:8b 97,5 % bei „Low“ oder darunter
- Sexual: Bei GPT-4o lagen 100 %, bei Llama3.1:8b ebenfalls 100 % bei „Low“ oder darunter
- Violence: Bei GPT-4o lagen 100 %, bei Llama3.1:8b 99 % bei „Low“ oder darunter
- Self-Harm: Bei GPT-4o lagen 100 %, bei Llama3.1:8b ebenfalls 100 % bei „Low“ oder darunter
- Wenn in bestimmten Szenarien Antworten gefunden werden, die die Sicherheitskriterien nicht erfüllen, sind zusätzliches Prompt Engineering oder die Anbindung externer Dienste wie Azure AI Content Safety erforderlich
Weiterführende Materialien
- 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 zum Hinzufügen einer Sicherheitsbewertung für RAG with Azure AI Search
- Pull Request zum Hinzufügen einer Sicherheitsbewertung für RAG with PostgreSQL
- Siehe auch die Dokumentation zur Simulation von Jailbreak-Angriffen und geeignete Bewertungswerkzeuge
Noch keine Kommentare.