Freigeben über


Erste Schritte mit der Auswertung von Antworten in einer Chat-App in Python

In diesem Artikel erfahren Sie, wie Sie die Antworten einer Chat-App anhand einer Reihe von korrekten oder idealen Antworten (als „Ground Truth“) evaluieren können. Wenn Sie Ihre Chat-Anwendung so ändern, dass sich dies auf die Antworten auswirkt, führen Sie eine Evaluierung durch, um die Änderungen zu vergleichen. Diese Demoanwendung bietet Tools, die Sie heute verwenden können, um die Ausführung von Auswertungen zu vereinfachen.

Wenn Sie die Anweisungen in diesem Artikel befolgen,

  • Verwenden Sie die bereitgestellten Beispielaufforderungen, die auf das jeweilige Thema zugeschnitten sind. Diese Eingabeaufforderungen befinden sich bereits im Repository.
  • Generieren Sie Beispielbenutzerfragen und Ground Truth-Antworten aus Ihren eigenen Dokumenten.
  • Führen Sie Auswertungen mithilfe einer Beispielaufforderung mit den generierten Benutzerfragen aus.
  • Überprüfen Sie die Analyse der Antworten.

Hinweis

In diesem Artikel wird mindestens eine KI-App-Vorlage als Grundlage für die Beispiele und Anleitungen im Artikel verwendet. KI-App-Vorlagen bieten Ihnen gut gepflegte Referenzimplementierungen, die einfach bereitzustellen sind. Sie tragen dazu bei, einen qualitativ hochwertigen Ausgangspunkt für Ihre KI-Apps zu gewährleisten.

Übersicht über die Architektur

Zu den wichtigsten Komponenten der Architektur gehören:

  • In Azure gehostete Chat-App: Die Chat-App wird im Azure App Service ausgeführt.
  • Microsoft AI Chat Protocol: Das Protokoll stellt standardisierte API-Verträge für KI-Lösungen und -Sprachen bereit. Die Chat-App entspricht dem Microsoft KI-Chat-Protokoll, mit dem die Evaluierungs-App für jede Chat-App ausgeführt werden kann, die dem Protokoll entspricht.
  • Azure KI-Suche: Die Chat-App verwendet Azure KI-Suche, um die Daten aus Ihren eigenen Dokumenten zu speichern.
  • Beispielfragen-Generator: Das Tool kann viele Fragen für jedes Dokument zusammen mit der Antwort Ground Truth-Antwort generieren. Je mehr Fragen es gibt, desto länger die Bewertungen.
  • Auswertung: Das Tool führt Beispielfragen und Eingabeaufforderungen für die Chat-App aus und gibt die Ergebnisse zurück.
  • Überprüfungstool: Das Tool überprüft die Ergebnisse der Auswertungen.
  • Diff-Tool: Das Tool vergleicht die Antworten zwischen Auswertungen.

Wenn Sie diese Auswertung in Azure bereitstellen, wird der Azure OpenAI-Dienstendpunkt für das GPT-4 Modell mit eigener Kapazität erstellt. Bei der Evaluierung von Chat-Anwendungen ist es wichtig, dass der Evaluator über eine eigene Azure OpenAI-Ressource mit GPT-4 mit eigener Kapazität verfügt.

Voraussetzungen

  • Ein Azure-Abonnement. Erstellen Sie ein kostenloses Konto.

  • Führen Sie das vorherige Verfahren der Chat-App aus, um die Chat-App in Azure bereitzustellen. Diese Ressource ist erforderlich, damit die Evaluierungs-App funktioniert. Schließen Sie den Abschnitt "Ressourcen bereinigen" des vorherigen Verfahrens nicht ab.

    Sie benötigen die folgenden Azure-Ressourceninformationen aus dieser Bereitstellung, die in diesem Artikel als Chat-App bezeichnet wird:

    • Chat-API-URI Der Dienst-Back-End-Endpunkt, der am Ende des azd up Prozesses angezeigt wird.
    • Azure AI Search. Die folgenden Werte sind erforderlich:
      • Ressourcenname: Der Name der Azure AI Search-Ressource, der während des azd up-Prozesses als Search service gemeldet wird.
      • Indexname: Der Name des Azure AI Search-Index, in dem Ihre Dokumente gespeichert sind. Sie finden es im Azure-Portal für den Suchdienst.

    Die Chat-API-URL ermöglicht den Evaluierungen, Anforderungen über Ihre Back-End-Anwendung zu stellen. Die Azure KI-Suche-Informationen ermöglichen den Evaluierungsskripts, dieselbe Bereitstellung wie Ihr Back-End zu verwenden, mit den Dokumenten.

    Nachdem Sie diese Informationen gesammelt haben, sollten Sie die Entwicklungsumgebung der Chat-App nicht mehr verwenden. In diesem Artikel wird später mehrmals darauf verwiesen, um anzugeben, wie die Auswertungs-App die Chat-App verwendet. Löschen Sie die Chat-App-Ressourcen erst, wenn Sie das gesamte Verfahren in diesem Artikel abgeschlossen haben.

  • Eine Entwicklungscontainerumgebung ist mit allen Abhängigkeiten verfügbar, die zum Abschließen dieses Artikels erforderlich sind. Sie können den Entwicklungscontainer in GitHub Codespaces (in einem Browser) oder lokal mit Visual Studio Code ausführen.

    • GitHub -Konto

Öffnen einer Entwicklungsumgebung

Befolgen Sie diese Anweisungen, um eine vorkonfigurierte Entwicklungsumgebung mit allen erforderlichen Abhängigkeiten einzurichten, um diesen Artikel abzuschließen. Ordnen Sie Ihren Monitorarbeitsbereich so an, dass Sie diese Dokumentation und die Entwicklungsumgebung gleichzeitig sehen können.

Dieser Artikel wurde mit der switzerlandnorth-Region für die Evaluierungsbereitstellung getestet.

GitHub Codespaces führt einen von GitHub verwalteten Entwicklungscontainer mit Visual Studio Code für Web als Benutzeroberfläche aus. Verwenden Sie GitHub Codespaces für die einfachste Entwicklungsumgebung. Es enthält die richtigen Entwicklertools und Abhängigkeiten, die vorinstalliert sind, um diesen Artikel abzuschließen.

Wichtig

Alle GitHub-Konten können GitHub Codespaces für bis zu 60 Stunden kostenlos jeden Monat mit zwei Kerninstanzen verwenden. Weitere Informationen finden Sie im Artikel zu monatlich enthaltener Speicherkapazität und Kernstunden in GitHub Codespaces.

  1. Starten Sie den Prozess, um einen neuen GitHub-Codespace im main Zweig des GitHub-Repositorys Azure-Samples/ai-rag-chat-evaluator zu erstellen.

  2. Wenn Sie die Entwicklungsumgebung und die dokumentation anzeigen möchten, die gleichzeitig verfügbar ist, klicken Sie mit der rechten Maustaste auf die folgende Schaltfläche, und wählen Sie im neuen Fenster "Link öffnen" aus.

    In GitHub Codespaces öffnen.

  3. Überprüfen Sie auf der Seite Codespace erstellen die Konfigurationseinstellungen für den Codespace und wählen Sie dann Neuen Codespace erstellen.

    Screenshot des Bestätigungsbildschirms, bevor Sie einen neuen Codespace erstellen.

  4. Warten Sie den Start des Codespaces ab. Dieser Startvorgang kann einige Minuten dauern.

  5. Melden Sie sich am unteren Rand des Bildschirms mit der Azure Developer CLI bei Azure an:

    azd auth login --use-device-code
    
  6. Kopieren Sie den Code vom Terminal und fügen Sie ihn dann in einen Browser ein. Befolgen Sie die Anweisungen zum Authentifizieren mit Ihrem Azure-Konto.

  7. Stellen Sie die erforderliche Azure-Ressource, den Azure OpenAI-Dienst, für die Auswertungs-App bereit:

    azd up
    

    Dieser AZD Befehl stellt die Auswertungs-App nicht bereit, erstellt aber die Azure OpenAI-Ressource mit einer erforderlichen GPT-4 Bereitstellung, um die Auswertungen in der lokalen Entwicklungsumgebung auszuführen.

Die verbleibenden Aufgaben in diesem Artikel finden im Kontext dieses Entwicklungscontainers statt.

Der Name des GitHub-Repositorys wird in der Suchleiste angezeigt. Mit diesem visuellen Indikator können Sie die Auswertungs-App von der Chat-App unterscheiden. Dieses ai-rag-chat-evaluator Repository wird in diesem Artikel als Auswertungs-App bezeichnet.

Vorbereiten von Umgebungswerten und Konfigurationsinformationen

Aktualisieren Sie die Umgebungswerte und Konfigurationsinformationen mit den Informationen, die Sie während der Voraussetzungen für die Auswertungs-App gesammelt haben.

  1. Erstellen Sie eine .env Datei basierend auf .env.sample.

    cp .env.sample .env
    
  2. Führen Sie diesen Befehl aus, um die erforderlichen Werte für AZURE_OPENAI_EVAL_DEPLOYMENT und AZURE_OPENAI_SERVICE aus der bereitgestellten Ressourcengruppe abzurufen. Fügen Sie diese Werte in die .env Datei ein.

    azd env get-value AZURE_OPENAI_EVAL_DEPLOYMENT
    azd env get-value AZURE_OPENAI_SERVICE
    
  3. Fügen Sie die folgenden Werte aus der Chat-App für die Azure AI Search-Instanz in die Datei ein, die Sie im Abschnitt Voraussetzungen gesammelt haben.

    AZURE_SEARCH_SERVICE="<service-name>"
    AZURE_SEARCH_INDEX="<index-name>"
    

Verwenden des Microsoft AI-Chat-Protokolls für Konfigurationsinformationen

Die Chat-App und die Auswertungs-App implementieren die Spezifikation des Microsoft AI-Chatprotokolls, eine Open-Source-, Cloud- und sprachunabhängige AI-Endpunkt-API-Spezifikation, die für Nutzung und Auswertung verwendet wird. Wenn Ihre Client- und Endpunkte auf mittlerer Ebene dieser API-Spezifikation entsprechen, können Sie auswertungen auf Ihren KI-Back-Ends konsistent nutzen und ausführen.

  1. Erstellen Sie eine neue Datei mit dem Namen my_config.json, und kopieren Sie die folgenden Inhalte in diese Datei:

    {
        "testdata_path": "my_input/qa.jsonl",
        "results_dir": "my_results/experiment<TIMESTAMP>",
        "target_url": "http://localhost:50505/chat",
        "target_parameters": {
            "overrides": {
                "top": 3,
                "temperature": 0.3,
                "retrieval_mode": "hybrid",
                "semantic_ranker": false,
                "prompt_template": "<READFILE>my_input/prompt_refined.txt",
                "seed": 1
            }
        }
    }
    

    Das Evaluierungsskript erstellt den my_results-Ordner.

    Das overrides Objekt enthält alle Konfigurationseinstellungen, die für die Anwendung erforderlich sind. Jede Anwendung definiert einen eigenen Satz von Einstellungseigenschaften.

  2. Verwenden Sie die folgende Tabelle, um die Bedeutung der Einstellungseigenschaften zu verstehen, die an die Chat-App gesendet werden.

    Eigenschaft der Einstellungen Beschreibung
    semantic_ranker Gibt an, ob Semantischer Sortierer verwendet werden soll, ein Modell, das Suchergebnisse basierend auf der semantischen Ähnlichkeit mit der Abfrage des Benutzers neu sortiert. Wir deaktivieren es für dieses Tutorial, um Kosten zu senken.
    retrieval_mode Der zu verwendende Abrufmodus. Der Standardwert lautet hybrid.
    temperature Die Temperatureinstellung für das Modell. Der Standardwert lautet 0.3.
    top Die Anzahl der zurückzugebenden Suchergebnisse. Der Standardwert lautet 3.
    prompt_template Setzt den Prompt außer Kraft, der verwendet wurde, um die Antwort basierend auf der Frage und den Suchergebnissen zu generieren.
    seed Der Startwert für alle Aufrufe von GPT-Modellen. Das Festlegen eines Startwerts führt zu konsistenteren Ergebnissen in allen Auswertungen.
  3. Ändern Sie den target_url Wert in den URI-Wert Ihrer Chat-App, den Sie im Abschnitt "Voraussetzungen" gesammelt haben. Die Chat-App muss dem Chatprotokoll entsprechen. Der URI weist das folgende Format auf: https://CHAT-APP-URL/chat. Stellen Sie sicher, dass das Protokoll und die chat-Route Teil des URI sind.

Generieren von Beispieldaten

Um neue Antworten auszuwerten, müssen sie mit einer Wahrheitsantwort verglichen werden, die die ideale Antwort für eine bestimmte Frage ist. Generieren Sie Fragen und Antworten aus Dokumenten, die in Azure AI Search für die Chat-App gespeichert sind.

  1. Kopieren Sie den example_input Ordner in einen neuen Ordner mit dem Namen my_input.

  2. Führen Sie in einer Befehlszeile den folgenden Befehl aus, um die Beispieldaten zu generieren:

    python -m evaltools generate --output=my_input/qa.jsonl --persource=2 --numquestions=14
    

Die Frage- und Antwortpaare werden als Eingabe für den im nächsten Schritt verwendeten Evaluator generiert und im my_input/qa.jsonlJSONL-Format gespeichert. Bei einer Produktionsauswertung würden Sie weitere Frage- und Antwortpaare generieren. Für dieses Dataset werden mehr als 200 generiert.

Hinweis

Pro Quelle werden nur einige Fragen und Antworten generiert, damit Sie dieses Verfahren schnell abschließen können. Es ist nicht vorgesehen, eine Produktionsbewertung zu sein, die mehr Fragen und Antworten pro Quelle haben sollte.

Führen Sie die erste Auswertung mit einer optimierten Eingabeaufforderung aus.

  1. Bearbeiten Sie die my_config.json Konfigurationsdateieigenschaften.

    Eigenschaft Neuer Wert
    results_dir my_results/experiment_refined
    prompt_template <READFILE>my_input/prompt_refined.txt

    Die optimierte Eingabeaufforderung ist spezifisch für das jeweilige Thema.

    If there isn't enough information below, say you don't know. Do not generate answers that don't use the sources below. If asking a clarifying question to the user would help, ask the question.
    
    Use clear and concise language and write in a confident yet friendly tone. In your answers, ensure the employee understands how your response connects to the information in the sources and include all citations necessary to help the employee validate the answer provided.
    
    For tabular information, return it as an html table. Do not return markdown format. If the question is not in English, answer in the language used in the question.
    
    Each source has a name followed by a colon and the actual information. Always include the source name for each fact you use in the response. Use square brackets to reference the source, e.g. [info1.txt]. Don't combine sources, list each source separately, e.g. [info1.txt][info2.pdf].
    
  2. Führen Sie in eine Befehlseingabe den folgenden Befehl aus, um die Evaluierung auszuführen:

    python -m evaltools evaluate --config=my_config.json --numquestions=14
    

    Dieses Skript hat mit der Evaluierung einen neuen Experimentordner in my_results/ erstellt. Der Ordner enthält die Ergebnisse der Auswertung.

    Dateiname Beschreibung
    config.json Eine Kopie der Konfigurationsdatei, die für die Auswertung verwendet wird.
    evaluate_parameters.json Die Parameter, die für die Auswertung verwendet werden. Ähnlich wie config.json, aber es umfasst auch andere Metadaten wie Zeitstempel.
    eval_results.jsonl Jede Frage und Antwort zusammen mit den GPT-Metriken für jedes Frage- und Antwortpaar.
    summary.json Die Gesamtergebnisse, z. B. die durchschnittlichen GPT-Metriken.

Führen Sie die zweite Auswertung mit einer schwachen Eingabeaufforderung aus.

  1. Bearbeiten Sie die my_config.json Konfigurationsdateieigenschaften.

    Eigenschaft Neuer Wert
    results_dir my_results/experiment_weak
    prompt_template <READFILE>my_input/prompt_weak.txt

    Diese schwache Eingabeaufforderung hat keinen Kontext zur Betreffdomäne.

    You are a helpful assistant.
    
  2. Führen Sie in eine Befehlseingabe den folgenden Befehl aus, um die Evaluierung auszuführen:

    python -m evaltools evaluate --config=my_config.json --numquestions=14
    

Führen Sie die dritte Auswertung mit einer bestimmten Temperatur aus.

Verwenden Sie eine Eingabeaufforderung, die mehr Kreativität ermöglicht.

  1. Bearbeiten Sie die my_config.json Konfigurationsdateieigenschaften.

    Vorhanden Eigenschaft Neuer Wert
    Vorhanden results_dir my_results/experiment_ignoresources_temp09
    Vorhanden prompt_template <READFILE>my_input/prompt_ignoresources.txt
    Neu temperature 0.9

    Der Standard temperature ist „0.7“. Je höher die Temperatur, umso kreativer die Antworten.

    Der Prompt ignore ist kurz.

    Your job is to answer questions to the best of your ability. You will be given sources but you should IGNORE them. Be creative!
    
  2. Das Konfigurationsobjekt sollte wie im folgenden Beispiel aussehen, außer dass Sie results_dir durch Ihren Pfad ersetzt haben.

    {
        "testdata_path": "my_input/qa.jsonl",
        "results_dir": "my_results/prompt_ignoresources_temp09",
        "target_url": "https://YOUR-CHAT-APP/chat",
        "target_parameters": {
            "overrides": {
                "temperature": 0.9,
                "semantic_ranker": false,
                "prompt_template": "<READFILE>my_input/prompt_ignoresources.txt"
            }
        }
    }
    
  3. Führen Sie in eine Befehlseingabe den folgenden Befehl aus, um die Evaluierung auszuführen:

    python -m evaltools evaluate --config=my_config.json --numquestions=14
    

Überprüfen der Auswertungsergebnisse

Sie haben drei Evaluierungen basierend auf unterschiedlichen Eingabeaufforderungen und App-Einstellungen durchgeführt. Die Ergebnisse werden in dem Ordner my_results gespeichert. Überprüfen Sie, wie sich die Ergebnisse je nach den Einstellungen unterscheiden.

  1. Verwenden Sie das Überprüfungstool, um die Ergebnisse der Auswertungen anzuzeigen.

    python -m evaltools summary my_results
    
  2. Die Ergebnisse sehen etwa so aus:

    Screenshot des Bewertungstools mit den drei Auswertungen.

    Jeder Wert wird als Zahl und Prozentsatz ausgegeben.

  3. Verwenden Sie die folgende Tabelle, um die Bedeutung der Werte zu verstehen.

    value Beschreibung
    Fundiertheit Überprüft, wie gut die Antworten des Modells auf faktenbezogenen, überprüfbaren Informationen basieren. Eine Antwort wird als gut fundiert betrachtet, wenn sie sachlich korrekt ist und die Realität widerspiegelt.
    Relevanz Dies ist ein Maß dafür, wie genau die Antworten des Modells mit dem Kontext oder der Eingabeaufforderung übereinstimmen. Eine relevante Antwort passt direkt zur Frage oder Anweisung des Benutzers.
    Kohärenz Überprüft, wie logisch konsistent die Antworten des Modells sind. Eine kohärente Antwort wahrt einen logischen Fluss und widerspricht sich nicht selbst.
    Quellenangaben Gibt an, ob die Antwort im in der Eingabeaufforderung angeforderten Format zurückgegeben wurde.
    Länge Ein Maß für die Länge der Antwort.
  4. Die Ergebnisse sollten darauf hinweisen, dass alle drei Auswertungen eine hohe Relevanz hatten, während die experiment_ignoresources_temp09 niedrigste Relevanz hatte.

  5. Wählen Sie den Ordner aus, um die Konfiguration für die Evaluierung anzuzeigen.

  6. Drücken Sie STRG + C , um die App zu beenden und zum Terminal zurückzukehren.

Vergleichen der Antworten

Vergleichen Sie die zurückgegebenen Antworten aus den Evaluierungen.

  1. Wählen Sie zwei der zu vergleichenden Auswertungen aus, und verwenden Sie dann dasselbe Überprüfungstool, um die Antworten zu vergleichen.

    python -m evaltools diff my_results/experiment_refined my_results/experiment_ignoresources_temp09
    
  2. Überprüfen Sie die Ergebnisse. Ihre Ergebnisse können variieren.

    Screenshot, der einen Vergleich der Auswertungsantworten zwischen Auswertungen zeigt.

  3. Drücken Sie STRG + C , um die App zu beenden und zum Terminal zurückzukehren.

Vorschläge für weitere Evaluierungen

  • Bearbeiten Sie die Eingabeaufforderungen in my_input, um die Antworten nach Themenbereich, Länge und anderen Faktoren anzupassen.
  • Bearbeiten Sie die my_config.json-Datei, um die Parameter wie temperature und semantic_ranker zu ändern, und führen Sie die Experimente erneut aus.
  • Vergleichen Sie verschiedene Antworten, um zu verstehen, wie sich Eingabeaufforderung und Frage auf die Antwortqualität auswirken.
  • Generieren Sie für jedes Dokument im Azure KI-Suche-Index eine separate Gruppe von Fragen und Ground Truth-Antworten. Führen Sie dann die Evaluierungen erneut aus, um zu sehen, wie sich die Antworten unterscheiden.
  • Ändern Sie die Eingabeaufforderungen, um kürzere oder längere Antworten anzugeben, indem Sie die Anforderung am Ende der Eingabeaufforderung hinzufügen. Beispiel: Please answer in about 3 sentences..

Bereinigen von Ressourcen und Abhängigkeiten

Die folgenden Schritte führen Sie durch den Vorgang zum Bereinigen der verwendeten Ressourcen.

Bereinigen von Azure-Ressourcen

Die in diesem Artikel erstellten Azure-Ressourcen werden Ihrem Azure-Abonnement in Rechnung gestellt. Wenn Sie nicht erwarten, dass diese Ressourcen in Zukunft benötigt werden, löschen Sie sie, um weitere Gebühren zu vermeiden.

Führen Sie den folgenden Azure Developer CLI-Befehl aus, um die Azure-Ressourcen zu löschen und den Quellcode zu entfernen:

azd down --purge

GitHub Codespaces und Visual Studio Code bereinigen

Durch das Löschen der GitHub Codespaces-Umgebung wird sichergestellt, dass Sie die anzahl der kostenlosen Berechtigungen pro Kernstunden maximieren können, die Sie für Ihr Konto erhalten.

Wichtig

Weitere Informationen zu den Berechtigungen Ihres GitHub-Kontos finden Sie im Artikel zu monatlich enthaltener Speicherkapazität und Kernstunden in GitHub Codespaces.

  1. Melden Sie sich beim GitHub Codespaces-Dashboardan.

  2. Finden Sie Ihre derzeit ausgeführten Codespaces, die aus dem GitHub-Repository Azure-Samples/ai-rag-chat-evaluator stammen.

    Screenshot mit allen laufenden Codespaces, einschließlich Status und Vorlagen.

  3. Öffnen Sie das Kontextmenü für den Codebereich, und wählen Sie dann Löschenaus.

    Screenshot, der das Kontextmenü für einen einzelnen Codespace mit hervorgehobener Option

Kehren Sie zum Artikel der Chat-App zurück, um diese Ressourcen zu bereinigen.