2 Punkte von GN⁺ 2025-02-26 | Noch keine Kommentare. | Auf WhatsApp teilen
  • 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-evaluation und für .NET als Microsoft.Extensions.AI.Evaluation verfügbar
  • Derzeit unterstützt nur das Python-Paket sicherheitsbezogene Klassen wie AdversarialSimulator und ContentSafetyEvaluator
  • 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 AdversarialSimulator kann die App anhand böswilliger Szenarien getestet werden, um festzustellen, wie wahrscheinlich unsichere Antworten sind
  • Eine Instanz von AdversarialSimulator wird mit der Project-Konfiguration und den Authentifizierungsdaten initialisiert
    from 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  
    )  
    
  • AdversarialScenario unterstü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
  • ContentSafetyEvaluator bewertet 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

Noch keine Kommentare.

Noch keine Kommentare.