Teilen über


Erste Schritte mit der Evaluierung von Antworten in einer Chat-App in JavaScript

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 sofort verwenden können, um die Ausführung von Evaluierungen zu vereinfachen.

Indem Sie die Anweisungen in diesem Artikel befolgen, werden Sie:

  • 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 Evaluierungen 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, einfach bereitzustellende Referenzimplementierungen, die helfen, 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.
  • Das Microsoft KI-Chat-Protokoll bietet standardisierte API-Verträge über KI-Lösungen und Sprachen hinweg. 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: Kann viele Fragen für jedes Dokument zusammen mit der Antwort Ground Truth-Antwort generieren. Je mehr Fragen, umso länger die Evaluierung.
  • Evaluator führt Beispielfragen und Eingabeaufforderungen für die Chat-App aus und gibt die Ergebnisse zurück.
  • Mit dem Überprüfungstool können Sie die Ergebnisse der Evaluierungen überprüfen.
  • Mit dem Diff-Tool können Sie die Antworten zwischen Evaluierungen vergleichen.

Wenn Sie diese Auswertung in Azure bereitstellen, wird der Azure OpenAI-Endpunkt 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 OpenAI-Ressource mit GPT-4 mit eigener Kapazität verfügt.

Voraussetzungen

  • Azure-Abonnement. Kostenloses Konto erstellen

  • Zugriff auf Azure OpenAI im gewünschten Azure-Abonnement gewährt.

    Derzeit wird der Zugriff auf diesen Dienst nur auf Antrag gewährt. Sie können den Zugriff auf Azure OpenAI beantragen, indem Sie das Formular unter https://aka.ms/oai/access ausfüllen.

  • Bereitstellen einer Chat-App

  • Diese Chat-Apps laden die Daten in die Azure KI-Suche-Ressource. 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 Service-Back-End-Endpunkt, der am Ende des azd up-Prozesses angezeigt wird.
    • Azure KI-Suche. Die folgenden Werte sind erforderlich:
      • Ressourcenname: Der Name des Azure KI-Suche-Ressourcennamens, der während als Search service während des azd up-Prozesses gemeldet wird.
      • Indexname: Der Name des Azure KI-Suche-Indexes, in dem Ihre Dokumente gespeichert sind. Diesen finden Sie 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 erfasst haben, sollten Sie die Entwicklungsumgebung der Chat-App nicht mehr verwenden müssen. Auf diese wird später in diesem Artikel mehrmals verwiesen, um anzugeben, wie die Chat-App von der Evaluierungs-App verwendet wird. 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 Sie die Entwicklungsumgebung

Beginnen Sie jetzt mit einer Entwicklungsumgebung, in der alle Abhängigkeiten installiert sind, um diesen Artikel abzuschließen. Sie sollten Ihren Monitor-Arbeitsbereich so anordnen, 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 für die einfachste Entwicklungsumgebung GitHub Codespaces, damit Sie die richtigen Entwicklertools und Abhängigkeiten vorinstalliert haben, um diesen Artikel abzuschließen.

Wichtig

Alle GitHub-Konten können Codespaces für bis zu 60 Stunden pro Monat mit zwei Kerninstanzen kostenlos 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 Branch main des GitHub-Repositorys Azure-Samples/ai-rag-chat-evaluator zu erstellen.

  2. Klicken Sie mit der rechten Maustaste auf die folgende Schaltfläche, und wählen Sie den Link in neuem Fenster öffnen aus, damit sowohl die Entwicklungsumgebung als auch die Dokumentation gleichzeitig verfügbar sind.

    In GitHub Codespaces öffnen

  3. Überprüfen Sie auf der Seite Codespace erstellen die Codespace-Konfigurationseinstellungen, und wählen Sie dann Neuen Codespace erstellen aus.

    Screenshot: Bestätigungsbildschirm vor dem Erstellen eines neuen Codespace.

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

  5. Melden Sie sich am unteren Bildschirmrand am Terminal 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, Azure OpenAI, für die Evaluierungs-App bereit.

    azd up
    

    Dies AZD command stellt die Evaluierungs-App nicht bereit, erstellt aber die Azure OpenAI-Ressource mit einer erforderlichen GPT-4-Bereitstellung, um die Evaluierungen in der lokalen Entwicklungsumgebung auszuführen.

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

  9. Der Name des GitHub-Repositorys wird in der Suchleiste angezeigt. Mit diesem visuellen Indikator können Sie die Evaluierungs-App von der Chat-App unterscheiden. Dieses ai-rag-chat-evaluator Repository wird in diesem Artikel als Evaluierungs-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 Evaluierungs-App erfasst haben.

  1. Erstellen einer .env Datei basierend auf .env.sample:

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

    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 ihre Azure KI-Suche-Instanz zum Abschnitt .envVoraussetzungen hinzu, die Sie im Abschnitt „Voraussetzungen“ erfasst 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 Evaluierungs-App implementieren beide Microsoft AI Chat Protocol specification, einen sprachagnostischen Open-Source- und Cloud-KI-Endpunkt-API-Vertrag für Nutzung und Evaluierung. Wenn Ihre Client- und Endpunkte auf mittlerer Ebene dieser API-Spezifikation entsprechen, können Sie Evaluierungen 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:

    Settings-Eigenschaft Beschreibung
    semantic_ranker Gibt an, ob semantischer Rangfolger verwendet werden soll, ein Modell, das Suchergebnisse basierend auf der semantischen Ähnlichkeit mit der Abfrage des Benutzers rerankt. Wir deaktivieren es für dieses Lernprogramm, um Kosten zu senken.
    retrieval_mode Der zu verwendende Abrufmodus. Der Standardwert ist hybrid.
    Temperatur Die Temperatureinstellung für das Modell. Der Standardwert ist 0.3.
    Oben Die Anzahl der zurückzugebenden Suchergebnisse. Der Standardwert ist 3.
    prompt_template Eine Außerkraftsetzung der Eingabeaufforderung, die verwendet wird, 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 URI-Wert Ihrer Chat-App, den Sie im Abschnitt Voraussetzungen erfasst 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 „Ground Truth“-Antwort verglichen werden, d.h. der idealen Antwort für eine bestimmte Frage. Generieren Sie Fragen und Antworten aus Dokumenten, die in Azure KI-Suche für die Chat-App gespeichert sind.

  1. Kopieren Sie den example_input Ordner in einen neuen Ordner mit dem Namenmy_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-/Antwort-Paare werden als Eingabe für den im nächsten Schritt verwendeten Evaluator generiert und im my_input/qa.jsonl JSONL-Format gespeichert. Bei einer Evaluierung in der Produktion würden Sie mehr Frage/Antwort-Paare generieren, nicht nur die 200 wie für dieses Dataset.

Hinweis

Die geringe Anzahl der Fragen und Antworten pro Quelle sollen Ihnen ermöglichen, dieses Verfahren schnell abzuschließen. Dies ist nicht als Produktionsevaluierung gedacht, die mehr Fragen und Antworten pro Quelle verwenden sollte.

Ausführen der ersten Evaluierung mit einer optimierten Eingabeaufforderung

  1. Bearbeiten Sie die Eigenschaften der my_config.json-Konfigurationsdatei:

    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 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 Evaluierung, einschließlich:

    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. Sehr ähnlich wie config.json bei zusätzlichen Metadaten wie Zeitstempel.
    eval_results.jsonl Jede Frage und Antwort, zusammen mit den GPT-Metriken für jedes Frage/Antwort-Paar.
    summary.json Die Gesamtergebnisse, z. B. die durchschnittlichen GPT-Metriken.

Ausführen der zweiten Evaluierung mit schwacher Eingabeaufforderung

  1. Bearbeiten Sie die Eigenschaften der my_config.json-Konfigurationsdatei:

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

    Diese schwache Eingabeaufforderung hat keinen Kontext im Zusammenhang mit dem Thema:

    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
    

Ausführen der dritten Evaluierung mit einer bestimmten Temperatur

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

  1. Bearbeiten Sie die Eigenschaften der my_config.json-Konfigurationsdatei:

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

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

    Die Eingabeaufforderung 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 folgt aussehen, mit der Ausnahme, dass results_dir durch Ihren Pfad ersetzt wurden:

    {
        "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 Evaluierungen anzuzeigen:

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

    Screenshot des Evaluierungsprüfungstools mit den drei Evaluierungen.

    Jeder Wert wird als Zahl und Prozentsatz ausgegeben.

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

    Wert Beschreibung
    Quellenübereinstimmung Dies bezieht sich darauf, wie gut die Antworten des Modells auf faktenbezogenen und überprüfbaren Informationen basieren. Eine Antwort wird als gut fundiert betrachtet, wenn sie sachlich korrekt ist und die Realität widerspiegelt.
    Relevance 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 Dies bezieht sich darauf, wie logisch konsistent die Antworten des Modells sind. Eine kohärente Antwort wahrt einen logischen Fluss und widerspricht sich nicht selbst.
    Quellenangaben Dies gibt an, ob die Antwort im in der Eingabeaufforderung angeforderten Format zurückgegeben wurde.
    Length Dies misst die Länge der Antwort.
  4. Die Ergebnisse sollten darauf hinweisen, dass alle drei Evaluierungen eine hohe Relevanz hatten, während die experiment_ignoresources_temp09 die niedrigste Relevanz hatte.

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

  6. Betätigen Sie Strg + C, um die App zu beenden.

Vergleichen der Antworten

Vergleichen Sie die zurückgegebenen Antworten aus den Evaluierungen.

  1. Wählen Sie zwei der zu vergleichenden Evaluierungen 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 des Vergleichs von Evaluierungsantworten zwischen Evaluierungen.

  3. Betätigen Sie Strg + C, um die App zu beenden.

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

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

Bereinigen von GitHub-Codespaces

Durch das Löschen der GitHub Codespaces-Umgebung wird sichergestellt, dass Sie die Anzahl der kostenlosen Berechtigungsstunden pro Kern 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-Dashboard (https://github.com/codespaces) an.

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

    Screenshot aller ausgeführten Codespaces einschließlich status und Vorlagen.

  3. Öffnen Sie das Kontextmenü für den Codespace, und wählen Sie dann Löschen aus.

    Screenshot: Kontextmenü für einen Codespace mit hervorgehobener Löschoption.

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

Nächste Schritte