Mit der fortschreitenden Weiterentwicklung der künstlichen Intelligenz (KI) sind Chatbots zu unverzichtbaren Werkzeugen für Unternehmen geworden und bieten Hilfe in Echtzeit sowie individuelle Empfehlungen und automatisieren den Kundenservice über verschiedene Plattformen hinweg. Da diese Chatbots zunehmend komplexere Aufgaben bewältigen, etwa Fragen beantworten, spezifische Informationen abrufen und Benutzer durch mehrstufige Prozesse führen, ist ihre Performance von entscheidender Bedeutung.

Wenn Ihr Chatbot fehleranfällig ist oder Verzögerungen aufweist, kann dies Ihre Benutzer:innen frustrieren, was zu schlechten Erfahrungen und potenziellen Geschäftsverlusten führen kann. Mithilfe eines Observability-Tools wie New Relic AI Monitoring können Sie wichtige Metriken wie Antwortzeit, Tokennutzung und Fehlerquote beobachten, um sicherzustellen, dass Ihr Chatbot optimal funktioniert und Ihren Benutzer:innen ein reibungsloses und effizientes Erlebnis bietet.

In diesem Handbuch erfahren Sie, wie das geht! Hier sind die Schritte, die Sie unternehmen müssen, um die Performance eines Chatbots mithilfe von New Relic AI Monitoring zu überwachen und zu optimieren:

  • Richten Sie eine Chatbot-Anwendung mit OpenAI ein
  • Integrieren Sie New Relic zur Echtzeitüberwachung Ihres Chatbots
  • Verfolgen Sie wichtige Performance-Metriken
  • Identifizieren und beheben Sie Performance-Probleme mithilfe von New Relic

Einrichten der Umgebung

Für dieses Tutorial verwenden Sie eine Demoanwendung namens Relicstaurants. Dies ist ein Kundenservice-Chatbot, der speziell für die Interaktion mit einem bereitgestellten Datensatz entwickelt wurde, um auf der Grundlage der Benutzeranfragen maßgeschneiderte Antworten liefern zu können. Der Chatbot wird mit Flask und dem GPT-4o-Modell von OpenAI erstellt.

Anforderungen:

Stellen Sie vor dem Start sicher, dass Sie über Folgendes verfügen:

Sobald diese Voraussetzungen erfüllt sind, können Sie mit der Einrichtung des Relicstaurants-Chatbots loslegen.

  1. Klonen Sie die Chatbot-Anwendung „Relicstaurants“ in Ihre lokale Umgebung.
git clone https://github.com/mehreentahir16/Relicstaurants_chatbot.git
cd Relicstaurants_chatbot
  1. Richten Sie eine virtuelle Umgebung ein und installieren Sie die erforderlichen Pakete.
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
  1. Bevor Sie die Anwendung ausführen, müssen Sie Ihren OpenAI-API-Key als Umgebungsvariable exportieren.
export OPENAI_API_KEY= your-openai-api-key
  1. Starten Sie den Chatbot durch Ausführen des folgenden Befehls.
python3 app.py

Sobald die Anwendung ausgeführt wird, sollten Sie in Ihrem Terminal einen ähnlichen Output wie diesen sehen:

* Serving Flask app 'app'
* Debug mode: on
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
* Running on http://127.0.0.1:5000
Press CTRL+C to quit
  1. Navigieren Sie in Ihrem Webbrowser zu http://127.0.0.1:5000/ und beginnen Sie mit dem Chatten!

Wenn der Relicstaurants-Chatbot einsatzbereit ist, können Sie seine Funktionen erkunden und sehen, wie er benutzerdefinierte Daten nutzt, um Benutzer:innen maßgeschneiderte Antworten zu liefern.

Integration von New Relic zum Echtzeit-Monitoring

Wenn Ihr Relicstaurants-Chatbot einsatzbereit ist, besteht der nächste Schritt darin, einen New Relic Agent für das Echtzeit-Monitoring zu installieren. Auf diese Weise können Sie wichtige Performance-Metriken beobachten, potenzielle Probleme erkennen und Ihren Chatbot optimieren.

  1. Melden Sie sich bei Ihrem New Relic Konto an und klicken Sie im Navigationsmenü auf der linken Seite auf Integrations and Agents.
  2. Wählen Sie aus den aufgelisteten Funktionen Python aus.
  3. Wählen Sie auf dem nächsten Bildschirm als Instrumentierungsmethode On a host (package manager).
  4. Geben Sie als Nächstes Ihre Anmeldeinformationen ein.
  5. Folgen Sie nun den Anweisungen auf dem Bildschirm, um den Agent zu installieren.
  • Falls Sie es noch nicht getan haben, installieren Sie das New Relic Paket, indem Sie den folgenden Befehl ausführen:
pip install newrelic
  • Stellen Sie sicher, dass das Feature Analyze your AI application responses aktiviert ist. Auf diese Weise können Sie die Performance Ihres Chatbots bei der Bearbeitung KI-bezogener Anfragen überwachen.
  • Laden Sie die Konfigurationsdatei newrelic.ini herunter und fügen Sie sie dem Root-Verzeichnis Ihres Projekts hinzu. 
  1. Sobald die Konfigurationsdatei an Ort und Stelle ist, fügen Sie oben in der Datei app.py die folgenden Zeilen hinzu, um den New Relic Agent zu initialisieren:
import newrelic.agent
newrelic.agent.initialize('newrelic.ini')
  1. Starten Sie die Anwendung nun mit dem folgenden Befehl neu:
NEW_RELIC_CONFIG_FILE=newrelic.ini newrelic-admin run-program python3 app.py

Sobald die Anwendung ausgeführt wird, beginnen Sie mit Ihrem Chatbot zu chatten, um etwas Traffic zu generieren. Der nächste Schritt besteht darin, die von New Relic bereitgestellten Performance-Metriken zu verstehen. Mithilfe dieser Metriken können Sie den Zustand Ihrer Anwendung überwachen und potenzielle Performance-Probleme erkennen.

Verfolgung wichtiger Performance-Metriken

Da New Relic AI Monitoring in den Python APM Agent eingebettet ist, erhalten Sie das Beste aus beiden Welten: detaillierte Einblicke sowohl in Ihre Anwendung als auch in die KI-Antworten. Dieses zweischichtige Monitoring stellt sicher, dass Sie nicht nur die allgemeine Integrität der App im Auge behalten, sondern auch die Performance der KI selbst nachverfolgen können. Werfen wir einen Blick auf die wichtigsten Metriken, die in New Relic angezeigt werden.

  1. Gehen Sie zu Ihrem New Relic Konto und wählen Sie im Bereich APM & Services Ihre Anwendung aus.
  2. Auf dem nächsten Bildschirm wird ein Dashboard angezeigt, das wichtige Performance-Metriken zu Ihrer Anwendung anzeigt, wie z. B. Web transaction time, Apdex score und Throughput.
  1. Weiter unten im Dashboard finden Sie den Bereich mit der Zusammenfassung der KI-Antworten. Hier sehen Sie KI-spezifische Metriken wie Response time, Token usage per response und Error rate, die Ihnen einen Überblick über die Leistung Ihres Chatbots geben.

Diese Metriken sind wichtig, um Bottlenecks zu identifizieren, die speziell für Ihre KI-Komponente gelten. Durch das Monitoring dieser Daten können Sie schnell erkennen, ob Ihr Chatbot zu lange zum Antworten braucht, mehr Token verbraucht als erwartet oder ob bei bestimmten Interaktionsarten Fehler auftreten.

Erkennen und Beheben von Performance-Problemen

Jetzt ist es an der Zeit, sich eingehender mit den spezifischen Problemen zu befassen, die die Performance Ihres Chatbots beeinträchtigen. Beispielsweise zeigt der obige Screenshot hohe Werte bei Response time und Errors. Dies sind klare Hinweise darauf, dass Performance-Bottlenecks vorliegen. Sehen wir uns das etwas genauer an.

Response time: Langsame Transaktionen identifizieren

  1. Auf der Übersichtsseite für die Anwendung werden unter 5 slowest transactions (by total time) die 5 langsamsten Transaktionen (nach Gesamtzeit) angezeigt. Wählen Sie die langsamste Transaktion aus.

Im folgenden Screenshot sehen Sie den Span-Ablauf der Transaktion zusammen mit einem Kreisdiagramm, das zeigt, welche Komponenten während der Transaktion am meisten Zeit in Anspruch genommen haben.

Als Trace-Dauer wird 29.77s angezeigt, was für eine Chatbot-Anwendung ziemlich hoch ist. Sie können auch sehen, dass der API-Aufruf an OpenAI (api.openai.com - httpx/POST) 99,92 % der gesamten Antwortzeit in Anspruch nahm und somit der Hauptgrund für die insgesamt lange Antwortzeit ist.

Zusätzlich können Sie den Fokus auf langsame Spans legen (Focus on Slow spans), wie in der folgenden Abbildung gezeigt:

Da die Latenz in diesem Fall durch einen externen API-Aufruf verursacht wird, besteht eine Maßnahme zur Latenzreduzierung darin, häufig angeforderte Antworten zwischenzuspeichern. Wenn Ihr Chatbot häufig ähnliche Fragen beantwortet (beispielsweise Restaurantempfehlungen), verhindert das Zwischenspeichern dieser Antworten, dass das System OpenAI wiederholt für dieselben Daten aufruft und zusätzliche Token verbraucht. Eine andere mögliche Lösung wäre, je nach Anwendungsfall über die Option „Provisioned Throughput Unit“ (PTU) auf OpenAI zuzugreifen.

Fehler-Tracking und Fehlerbehebung

Keine Anwendung ist fehlerfrei, und in KI-basierten Systemen können aus verschiedenen Gründen Fehler auftreten, beispielsweise aufgrund ungültiger Eingaben, API-Fehler oder Systemüberlastungen. Allerdings sind Fehler nicht immer leicht zu diagnostizieren. Beispielsweise ist Ihnen möglicherweise aufgefallen, dass beim Chatbot ein Fehler auftritt, wenn nach Restaurants gesucht wird und keine Küche angegeben ist.

Sehen wir uns genauer an, was passiert.

Navigieren Sie im Entity-Menü in New Relic zum Abschnitt AI Responses. Hier sehen Sie detaillierte Informationen zur Interaktion Ihres Chatbots mit Benutzer:innen, zu seiner Antworteffizienz sowie zu etwaigen Problemen oder Fehlern, die behoben werden müssen. Wählen Sie eine der Antworten auf Fragen nach Restaurantvorschlägen aus.

Dadurch gelangen Sie zur Seite Response details mit den zugehörigen Angaben zu Trace, Logs und Metadata.

In dieser Ansicht sehen Sie unter Request Duration, Total Tokens, User input usw. die Anfragedauer, die Gesamtzahl der Token, die Benutzereingabe und mehr. Das Feld Response Details ist besonders wichtig, da es Kontext zu den Aktionen des Chatbots bietet. Es gibt die Tools, das Format und die Benutzerfragen für den Chatbot an und fordert zur Antwort auf. Sie können auch die Angaben für Action und Action Input als Antwort auf die Benutzerabfrage untersuchen.

Die rot hervorgehobenen Spans zeigen Aufrufe an, bei denen Fehler oder Performance-Bottlenecks aufgetreten sind. In diesem Fall können wir sehen, dass bei den Aufrufen LangChain/invoke und LangChain/run ein Problem aufgetreten ist. Sie können diese Trace-Details zum Debuggen des Fehlers verwenden. Klicken Sie auf den Span LangChain/invoke, um die Detailseite zu öffnen.

Klicken Sie auf Error Details, um die Fehlerdetails aufzurufen.

Im vorhergehenden Screenshot sehen Sie genau, welcher Fehler während der Anfrage aufgetreten ist. Insbesondere verweisen die Fehlerdetails auf einen Builtins:TypeError, bei dem einer Lambda-Funktion ein unerwartetes Argument übergeben wurde, mit der Meldung: „() nimmt 0 Positionsargumente an, aber es wurde 1 angegeben“. Dies ist ein häufiges Problem beim Arbeiten mit Funktionen, die eingehende Argumente nicht berücksichtigen.

Nachdem Sie nun anhand der Trace- und Fehlerdetails das genaue Problem ermittelt haben, besteht der nächste Schritt darin, zur Codebasis zurückzukehren und die Lambda-Funktion anzupassen, die diese Anfrage verarbeitet. In diesem Fall ruft LangChain die Funktion search_top_restaurants mit dem zusätzlichen Input „None“ auf. Ändern Sie search_top_restaurants, um dieses zusätzliche Argument zu berücksichtigen.

def search_top_restaurants(flattened_data, limit=5, _=None):
    results = []
    entries = flattened_data.split("\n\n")
    for i in range(min(limit, len(entries))):
        restaurant_info = format_restaurant_info(entries[i])
        results.append(restaurant_info)
    return "\n\n".join(results)

Sie müssen auch die LangChain-Tools ändern, um dieses Argument zu berücksichtigen.

Tool(name="search_top_restaurants", func=lambda _: search_top_restaurants(flattened_data), description="Use this tool when user wants to find restaurants without specifying a particular cuisine."),

Nach der Korrektur starten Sie die Anwendung neu und prüfen Sie, ob sie jetzt wie erwartet funktioniert.

Überwachung der Tokennutzung und -optimierung

Im Abschnitt „Summary“ Ihrer Chatbot-Anwendung können Sie, wie in der folgenden Abbildung dargestellt, auch die Tokennutzung für die Chatbot-Anwendung „Relicstaurants“ sehen.

Als p99 (99. Perzentil) für Token wird 1822 angegeben, während die durchschnittliche Tokennutzung pro Anfrage bei etwa 579 Token für 28 Anfragen liegt. Beachten Sie, dass es beim Tokenverbrauch erhebliche Unterschiede gibt und die Obergrenzen bei über 1.800 Token liegen. Dies deutet darauf hin, dass manche Anfragen möglicherweise sehr komplex sind und mehr Token verbrauchen als nötig.

Um die Metriken zur Tokennutzung besser zu verstehen, navigieren Sie zu AI Responses und wählen Sie eine beliebige Antwort mit signifikanter Tokennutzung aus. Im folgenden Bild verwendet die Anfrage etwa 1.740 Token.

Beachten Sie die Aufschlüsselung der Tokennutzung unter Token usage, die zeigt, dass ein erheblicher Teil der gesamten Tokennutzung unter total token usage, nämlich 1386 Token während des Tool-Aufrufs search_restaurants_by_cuisine verbraucht wird. Dies zeigt, dass die meisten Token zum Abrufen von Daten verwendet werden (in diesem Fall Restaurantdetails für indische Küche) und weitere 284 Token zum Generieren des Inputs und des Kontexts, die zu dieser Aktion führen. Die verbleibenden 67 Token werden für die Handhabung anderer Chatelemente verwendet, beispielsweise für die Verarbeitung des Aktions-Input und die Formatierung der endgültigen Antwort. Dies lässt darauf schließen, dass die Komplexität der Input- und Kontext-Erzeugung für die Entscheidungsfindung von LangChain stark zur gesamten Tokennutzung beiträgt, nicht jedoch der Output, der weitaus geringer ist. Für einen Chatbot wie Relicstaurants erscheint diese Tokennutzung möglicherweise zu hoch und könnte zu höheren Latenzen und Betriebskosten führen. Hier sind einige Möglichkeiten, wie Sie die Tokennutzung in Ihrer Chatbot-Anwendung optimieren können.

  • Optimierung der LangChain-Input-Verarbeitung: In diesem Fall scheint LangChain den Input, den es generiert, zu kompliziert zu machen, bevor es ihn an OpenAI weitergibt. Eine Logikoptimierung zum Erstellen dieser Inputs oder für weniger ausführliche interne Abfragen könnte dazu beitragen, die Tokennutzung zu senken.
  • Wechsel zu einem kleineren Modell: Erwägen Sie den Wechsel zu einem günstigeren Modell wie GPT-4o mini oder GPT-3.5 Turbo. GPT-4-Modelle (wie GPT-4o) sind zwar leistungsfähiger, aber auch teurer und verbrauchen tendenziell mehr Token. Für relativ einfache Aufgaben wie Restaurantempfehlungen kann die Leistung von GPT-4o mini oder GPT-3.5 Turbo ausreichend sein.
  • Justierung der Prompts: Überprüfen Sie die Struktur der generierten Prompts. Sind manche Informationen überflüssig? Werden übermäßig viele Details eingefügt, die keinen Beitrag zum Ergebnis leisten? Durch die Reduzierung unnötiger Details im Prompt wird der Tokenverbrauch reduziert.
  • Monitoring der Tokennutzung: Überwachen Sie die Tokennutzung kontinuierlich über den Abschnitt AI Responses in New Relic. Wenn die Tokennutzung weiter zunimmt, könnte dies darauf hinweisen, dass die Inputs zunehmend komplexer oder ausführlicher werden. Sie können einzelne Transaktionen (wie zuvor gezeigt) überwachen, um zu ermitteln, welche Abfragen die meisten Token verbrauchen.

Durch den Einsatz dieser Optimierungstechniken können Sie möglicherweise Ihren Tokenverbrauch senken und Betriebskosten sparen, ohne die Qualität der Chatbot-Antworten zu beeinträchtigen.

Fazit

Die Überwachung und Optimierung Ihres Chatbots ist für ein nahtloses und effizientes Benutzererlebnis von entscheidender Bedeutung. Durch die Integration von New Relic in Ihren KI-Chatbot erhalten Sie wertvolle Einblicke in seine Performance. So können Sie Probleme schnell erkennen und lösen, die Ressourcennutzung optimieren und sicherstellen, dass Ihr Chatbot reaktionsschnell und zuverlässig bleibt. Während Sie Ihren Chatbot weiterentwickeln und verfeinern, dienen Ihnen die durch New Relic erfassten Daten als Grundlage für zukünftige Optimierungen und helfen Ihnen, auch bei steigendem Benutzerbedarf eine hohe Servicequalität aufrechtzuerhalten.

Klonen Sie zunächst das GitHub-Repository des Chatbots „Relicstaurants“ und befolgen Sie die in diesem Blog beschriebenen Schritte. Viel Spaß beim Programmieren!