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:
- Python 3.8+
- OpenAI API-Key: Sie finden Ihren geheimen API-Key auf der API-Key-Seite. Wenn Sie noch kein Konto haben, können Sie sich hier für eines registrieren.
- Ein kostenloses New Relic Konto
Sobald diese Voraussetzungen erfüllt sind, können Sie mit der Einrichtung des Relicstaurants-Chatbots loslegen.
- Klonen Sie die Chatbot-Anwendung „Relicstaurants“ in Ihre lokale Umgebung.
git clone https://github.com/mehreentahir16/Relicstaurants_chatbot.git
cd Relicstaurants_chatbot
- 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
- Bevor Sie die Anwendung ausführen, müssen Sie Ihren OpenAI-API-Key als Umgebungsvariable exportieren.
export OPENAI_API_KEY= your-openai-api-key
- 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
- 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.
Dieses Handbuch ist als praktische Anleitung gedacht und führt Sie durch die Schritte zum Identifizieren und Beheben von Performance-Engpässen, die die Leistung Ihres Chatbots beeinträchtigen könnten. Wir raten Ihnen daher, sich etwas Zeit zu nehmen, um sich mit der Codebasis vertraut zu machen, da dies beim Befolgen der Anleitung nützlich sein wird.
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.
- Melden Sie sich bei Ihrem New Relic Konto an und klicken Sie im Navigationsmenü auf der linken Seite auf Integrations and Agents.
- Wählen Sie aus den aufgelisteten Funktionen Python aus.
- Wählen Sie auf dem nächsten Bildschirm als Instrumentierungsmethode On a host (package manager).
- Geben Sie als Nächstes Ihre Anmeldeinformationen ein.
- 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.
- 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')
- Starten Sie die Anwendung nun mit dem folgenden Befehl neu:
NEW_RELIC_CONFIG_FILE=newrelic.ini newrelic-admin run-program python3 app.py
Ausführlichere Anweisungen zum Einrichten des Python-Agent finden Sie in der New Relic Dokumentation.
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.
- Gehen Sie zu Ihrem New Relic Konto und wählen Sie im Bereich APM & Services Ihre Anwendung aus.
- 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.
- 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
- 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.
Beim Einrichten des Monitorings für KI-Chatbots ist es wichtig, auf sensible Informationen wie personenbezogene Daten (PII; personally identifiable information) zu achten. Um die Preisgabe vertraulicher Daten zu verhindern, können Sie mit New Relic Regeln konfigurieren, um alle vertraulichen Daten zu löschen, bevor sie erfasst oder gespeichert werden. Sie haben folgende Optionen:
- Deaktivieren Sie
ai.monitoring.record_content.enabled
. Dadurch wird verhindert, dass Benutzerprompts und KI-Antworten an New Relic Datenbanken gesendet werden. Weitere Informationen zu Agent-Konfigurationen finden Sie in unserer Dokumentation zur Konfiguration des AI Monitoring. - Zusätzlich können Sie Drop-Filter verwenden, um zu verhindern, dass vertrauliche Daten in New Relic gespeichert werden. Weitere Informationen zu Drop-Filtern und deren Erstellung finden Sie in unserer Dokumentation.
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!
Nächste Schritte
Nachdem Sie nun gelernt haben, wie Sie mit New Relic einen KI-Chatbot einrichten und überwachen, besteht der nächste Schritt darin, diese Tools auf Ihre eigenen Anwendungen anzuwenden.
- Falls Sie es noch nicht getan haben, registrieren Sie sich für ein kostenloses New Relic Konto.
- Ist Ihre KI-App nicht in Python? New Relic unterstützt AI Monitoring in einer Reihe von Sprachen wie Go, Java, Node und mehr. Erfahren Sie mehr über die unterstützten Sprachen in unserer Dokumentation.
- Sobald Sie AI Monitoring installiert haben, können Sie das Standardverhalten des Agent konfigurieren oder ihn Ihren Anforderungen entsprechend anpassen.
- Erkunden Sie Ihre KI-Daten eingehend in New Relic.
Die in diesem Blog geäußerten Ansichten sind die des Autors und spiegeln nicht unbedingt die Ansichten von New Relic wider. Alle vom Autor angebotenen Lösungen sind umgebungsspezifisch und nicht Teil der kommerziellen Lösungen oder des Supports von New Relic. Bitte besuchen Sie uns exklusiv im Explorers Hub (discuss.newrelic.com) für Fragen und Unterstützung zu diesem Blogbeitrag. Dieser Blog kann Links zu Inhalten auf Websites Dritter enthalten. Durch die Bereitstellung solcher Links übernimmt, garantiert, genehmigt oder billigt New Relic die auf diesen Websites verfügbaren Informationen, Ansichten oder Produkte nicht.