Ich habe kürzlich eine KI -Plattform gefunden, die automatisch Flashkarten aus jeder Art von Medien generiert. Da ich es liebe, Konzepte mit der Wiederholung von Abstand auswendig zu lernen, habe ich mein XGBoost -Tutorial sofort hochgeladen und die KI gebeten, 50 Flash -Karten darauf zu erstellen.
Aber ich war enttäuscht. Die meisten Fragen waren zu einfach, und nur sehr wenige von ihnen waren von Code -Syntax. Noch seltsamer war, dass 10% der Fragen identisch und völlig unauffällig waren-„Was ist die Hauptstadt Frankreichs?“.
Diese Arten von Fehlern deuten auf eine mangelnde ordnungsgemäße Bewertung und Validierung von Ausgaben hin, die von AI -Diensten erzeugt werden. Vielleicht wussten sie nichts über Langsmith.
Langsmith ist eine vollwertige Plattform zum Testen, Debuggen und Bewerten von LLM-Anwendungen. Vielleicht ist das wichtigste Merkmal die LLM -Ausgangsbewertung und Leistungsüberwachung. In diesem Tutorial sehen wir den Rahmen in Aktion und lernen Techniken, um es in Ihren eigenen Projekten anzuwenden.
Beginnen wir!
Wie ich oben erwähnt habe, ist Langsmith eine umfassende Plattform für die Bewertung von Anwendungen mit großer Sprache. Hier sind einige seiner Merkmale und greifbare reale Vorteile, die sie mitbringen:
Programmierer können in Minuten und nicht in Stunden mit Langsmith experimentieren. Dies bedeutet
QualitätssicherungEchtzeitüberwachung und Visualisierung
Integration in Langchain
Schauen Sie sich unsere LLM -Anwendungen mit Langchain Tutorial an, um mehr über Langchain zu erfahren.
Ein weiteres großartiges Merkmal von Langsmith sind Datensätze. Sie können verwendet werden, um die Langchain -Ketten, -Vermittel oder -modelle anhand einer Reihe von standardisierten Beispielen vor dem Einsatz zu verbessern. Zum Beispiel haben wir möglicherweise eine CSV -Datei mit zwei Spalten - Fragen und Antworten für Flitzkarten in einem bestimmten Format.
Durch Konvertieren dieser Datei in einen Referenzdatensatz können wir LLMs anweisen, ihre eigene Ausgabe mithilfe der zuvor genannten Qualitätssicherungsmetriken zu bewerten.
Wir werden jetzt all diese Funktionen anhand von Beispielen eins von einem einzelnen sehen.
In der ML-App-Entwicklung sammeln Sie Daten, Zug-, Feinabstimmung, Test- und Einsatzmodelle-die Schritte sind gut definiert. Bei LLM-Apps beginnen Sie jedoch häufig mit einem vorgefertigten Modell eines Verkäufers. Feinabstimmung? Das kann teuer sein. Sie konzentrieren sich also viel darauf, die richtigen Eingabeaufforderungen zu erstellen - es geht darum, Ihre LLM -App die richtigen Fragen zu stellen. Stellen Sie sich vor, Sie benötigen viele Aufforderungen, um Dinge zu testen, genau wie Sie viele Daten für ein gutes ML -Modell benötigen.
Mit Eingabeaufforderungen beschäftigen Sie sich jedoch mit Texten, die ein- und aussteigen, nicht mit Zahlen. Die üblichen Möglichkeiten, Fehler oder Genauigkeit wie MSE oder Cross-Entropy zu messen, funktionieren hier nicht hier. Stellen Sie sich vor, Sie lesen jeden Eingang und jede Ausgabe für die Bewertung - das würde Tage dauern, wenn Sie Tausende von Eingabeaufforderungen zur Bewertung haben.
Sie benötigen also einen Workflow, in dem es darum geht, diese Eingabeaufforderungen effizient zu erstellen und zu testen, um zu sehen, wie gut Ihre LLM -App abschneidet, ohne in manuellen Überprüfungen zu ertrinken. So könnte das aussehen:
In dieser Phase werden Sie das Grundgestein Ihrer Anwendung anhand von Frameworks wie Langchain prototypisieren. Bei einem Projekt mit Flashcard -Generator kann Ihr Prototyp mehrere Komponenten über Ihrem ausgewählten LLM von einem Anbieter enthalten. Zum Beispiel müssen Sie es möglicherweise anketten, um:
und so weiter (siehe, welche Art von Komponenten Sie von dieser Seite von Langchain -Dokumenten hinzufügen können). Sie können jedoch Ihre Entwicklungszeit drastisch verkürzen, indem Sie von Langchain für gemeinsame Aufgaben auf hoher Ebene angeboten werden.
In dieser Phase testen Sie Ihre Bewerbung an so vielen Szenarien wie möglich. Das bedeutet
Angesichts der LLMs sind nicht deterministisch (sie erzeugen nicht die gleiche Ausgabe für denselben Eingang) und die Komplexität der zusätzlichen Komponenten. Sie werden die meiste Zeit in dieser Phase verbringen. Und Langsmith wurde mit dem einzigen Zweck entwickelt, diese Zeit so kurz wie möglich zu machen. Wir werden dies im gesamten Tutorial mehr diskutieren.Sobald Sie eine praktikable Anwendung haben, können Sie sie als REST -API bereitstellen. Eine REST -API wandelt grundsätzlich Ihre vorhandenen Langchain -Ketten oder -Argentäter in HTTPS -Links um, die andere Anfragen zur Interaktion mit Ihrem KI -Modell senden können. Jetzt erstellen Sie die Benutzeroberfläche Ihres Dienstes wie eine Desktop -Anwendung oder häufiger eine Website.
Im Moment gibt es keine einfache Möglichkeit, dies zu tun, aber Langchain -Entwickler sind im Begriff, Langserve zu veröffentlichen, die in Fastapi integriert werden (wie großartig wäre das?). Schauen Sie sich den Sneak Peak von dieser Seite der Dokumentation an.
Lassen Sie uns nun endlich anfangen, an Langsmith zu basteln.
Wir werden mit dem Verständnis der Web -Benutzeroberfläche beginnen. Es ist über Smith.langchain.com Link erhältlich. Für den Zugriff müssen Sie sich anmelden und aus der Warteliste gelöscht werden, da es sich derzeit in geschlossener Beta befindet.
Aber sobald Sie sich befinden, sieht die Zielseite so aus:
Die beiden Hauptabschnitte sind Projekte und Datensätze und Tests, und beide Abschnitte können über Python SDK manipuliert werden. Die Plattform verfügt auch über Registerkarten für Bereitstellungs- und Annotationswarteschlangen, aber sie sind jenseits des Rahmens dieses Artikels.
Die Verwaltung von Projekten in Langsmith ist mit seinem Python SDK, der über einen API -Schlüssel mit der Plattform verbunden ist, viel einfacher.
.Um einen Schlüssel zu erhalten, klicken Sie auf das Schlüsselsymbol in der Plattform und speichern Sie es an einem sicheren Ort. Erstellen Sie in einem neuen Verzeichnis mit einer neuen virtuellen Umgebung eine .env -Datei. Fügen Sie die folgenden zwei Zeilen ein:
LANGCHAIN_API_KEY="LangSmith-API-key" OPENAI_API_KEY="Your-OPENAI-key"
Führen Sie als nächstes in Ihrem Terminal die folgenden Befehle aus, um Langsmith und Python-dotenv zu installieren, um Umgebungsvariablen zu lesen:
python-dotenv to read environment variables: pip install -U langsmith pip install python-dotenv
Jetzt Zeit zum Schreiben von Code:
import warnings from dotenv import find_dotenv, load_dotenv warnings.filterwarnings("ignore")
Wir importieren find_dotenv und load_dotenv Funktionen, um Umgebungsvariablen zu lesen, und richten Sie sie mit Betriebssystem ein:
import os load_dotenv(find_dotenv()) os.environ["LANGCHAIN_API_KEY"] = str(os.getenv("LANGCHAIN_API_KEY")) os.environ["LANGCHAIN_TRACING_V2"] = "true" os.environ["LANGCHAIN_ENDPOINT"] = "https://api.smith.langchain.com"
Einstellen von Langchain_Tracing_v2 in true ermöglicht die Verfolgung (Protokollierung), was für das Debuggen von LLMs von entscheidender Bedeutung ist. Anschließend initialisieren wir einen Kunden, um mit der Langsmith -Plattform zu sprechen:
from langsmith import Client # Initialize a client client = Client()
Client enthält Befehle auf hoher Ebene, um Projekte und Vermögenswerte in Langsmith zu manipulieren. Der erste Befehl des Clients, den wir verwenden werden, ist das Erstellen eines neuen Projekts:
import uuid # Create id uid = uuid.uuid4() # Create a unique name PROJECT_NAME = "flashcards-generator-" + str(uid) # Create the project session = client.create_project( project_name=PROJECT_NAME, description="A project that generates flashcards from user input", )
Nach erfolgreicher Ausführungen create_project sehen Sie das Projekt im Abschnitt Projekte der Web -Benutzeroberfläche:
Als nächstes müssen wir das neue Projekt als Standard mit einer anderen Umgebungsvariablen festlegen:
os.environ["LANGCHAIN_PROJECT"] = PROJECT_NAME
Jetzt brauchen wir ein LLM für unser Projekt. Wir werden mit GPT-3,5 Turbo gehen, da es billiger ist, aber Sie können viele andere Modelle verwenden, die über Langchain verfügbar sind. OpenAI -Modelle werden über die Chatopenai -Klasse initialisiert.
from langchain.chat_models import ChatOpenAI llm = ChatOpenAI() # Uses gpt-3.5-turbo by default
Lassen Sie uns unseren ersten Lauf machen:
LANGCHAIN_API_KEY="LangSmith-API-key" OPENAI_API_KEY="Your-OPENAI-key"
Wenn Sie das Projekt von der Benutzeroberfläche schnell überprüfen, sehen Sie den oben genannten Lauf (protokolliert):
Wenn wir die Umgebungsvariablen und den Client eingerichtet haben, haben wir automatisch die Protokollierung aktiviert. Wie Sie sehen können, haben wir bereits ein paar Metadaten über den Lauf.
Lassen Sie uns ein paar weitere Eingabeaufforderungen ausführen:
python-dotenv to read environment variables: pip install -U langsmith pip install python-dotenv
Wir können bereits einen grundlegenden Textübersichtszusatz erstellen. Fassen wir die Ausgabe des letzten Laufs zusammen:
import warnings from dotenv import find_dotenv, load_dotenv warnings.filterwarnings("ignore")
Großartig, jetzt ist es Zeit, unseren ersten Datensatz zu erstellen.
Wie ich im Abschnitt „LLM Application Development Workflow“ erwähnt habe, müssen Sie wahrscheinlich Tausende von Eingabeaufforderungen erstellen oder sammeln, um Ihr LLM -Modell, Ihre Kette oder Ihr Agent zu bewerten. Es ist also keine beste Praxis, diese einzeln zu laufen, wie oben,
.Aus diesem Grund bietet Langsmith Datensätze in drei Typen an:
import os load_dotenv(find_dotenv()) os.environ["LANGCHAIN_API_KEY"] = str(os.getenv("LANGCHAIN_API_KEY")) os.environ["LANGCHAIN_TRACING_V2"] = "true" os.environ["LANGCHAIN_ENDPOINT"] = "https://api.smith.langchain.com"
from langsmith import Client # Initialize a client client = Client()
Wenn Sie die Registerkarte "Dataset der Benutzeroberfläche" überschreiten, sehen Sie jede Eingabeaufforderung, die mit Nullausgabe aufgeführt ist:
import uuid # Create id uid = uuid.uuid4() # Create a unique name PROJECT_NAME = "flashcards-generator-" + str(uid) # Create the project session = client.create_project( project_name=PROJECT_NAME, description="A project that generates flashcards from user input", )
aus:
Sobald der Lauf fertig ist, wird er auf der Datensatzseite aufgeführt. So sieht es aus:
Wir haben gerade einen Test ausgeführt, der auf einem nicht morschenden Datensatz ausgeführt wurde - einen Datensatz mit Beispielaufforderungen, aber keine Beispielausgaben. Unser Test hat einfach eine Antwort auf jede Eingabeaufforderung hervorgerufen, aber nichts bewertet. Aber wir möchten grundlegende Überprüfungen wie "Ist die Ausgabe hilfreich?" oder "Ist die Antwort kurz oder lang"?
Bewertung von LLMs in Langsmith Um mit den drei Eingabeaufforderungen, die wir in unserem Datensatz haben, ausführen, können wir die Runevalconfig -Klasse verwenden:
LANGCHAIN_API_KEY="LangSmith-API-key" OPENAI_API_KEY="Your-OPENAI-key"
oben definieren wir zwei Kriterien in einer Liste namens Evaluatoren. Wir übergeben diese Evaluatoren an den Evaluierungsparameter der Funktion run_on_dataset:
python-dotenv to read environment variables: pip install -U langsmith pip install python-dotenv
run_on_dataset ist eine hilfreiche Funktion, um alle Eingabeaufforderungen in einem Datensatz mit dem bereitgestellten LLM auszuführen und jede Art von Bewertung im laufenden Fliegen durchzuführen. Die Ergebnisse sind auf der dedizierten Seite jedes Datensatzes sichtbar:
Diesmal hat der Lauf für jede Eingabeaufforderung Kohärenz- und Zuverlässigkeitsmetriken. Unten sehen Sie auch eine durchschnittliche Punktzahl für jede Metrik.
Um die Liste aller integrierten Kriterien anzuzeigen, führen Sie den folgenden Snippet aus:
import warnings from dotenv import find_dotenv, load_dotenv warnings.filterwarnings("ignore")
Natürlich können nicht alle LLM -Anwendungsfälle mit grundlegenden Evaluatoren überprüft werden. Beispielsweise gibt es keinen Bewerter, der überprüft, ob eine FlashCard eine Codierungsfrage enthält oder nicht. Also definieren wir es besser:
import os load_dotenv(find_dotenv()) os.environ["LANGCHAIN_API_KEY"] = str(os.getenv("LANGCHAIN_API_KEY")) os.environ["LANGCHAIN_TRACING_V2"] = "true" os.environ["LANGCHAIN_ENDPOINT"] = "https://api.smith.langchain.com"
Um eine benutzerdefinierte Kriterien mit natürlicher Sprache zu übergeben, übergeben wir einfach {"criteria_name": "Bedingung zu überprüfen"} an die Kriterienklasse. Oben erstellen wir zwei zusätzliche Evaluatoren, sodass Langsmith zwei zusätzliche Eingabeaufforderungen auf der Ausgabe ausführt, die von den Eingabeaufforderungen in unserem Datensatz erstellt wurden:
from langsmith import Client # Initialize a client client = Client()
Wenn Sie sich den Lauf ansehen, sehen Sie die benutzerdefinierten Kriterien, die wir unter jeder Eingabeaufforderung definiert haben. Wenn Sie umgehen, erhalten Sie nach:
die Argumentation des LLM
Durch Überprüfen der Bewertungsergebnisse für alle Eingabeaufforderungen werden Sie feststellen, dass unsere Kriterien nicht wie erwartet bewertet werden. Hier ist also etwas zu berücksichtigen-Sie müssen auch Ihre Kriterien einschalten, um sicherzustellen, dass sie die richtigen Dinge überprüfen.
Manchmal beschließen Sie möglicherweise, einen Datensatz mit Eingabeaufforderungen mit erwarteten Ausgängen zu erstellen, z. B. beschriftete Datensätze. Sie können gekennzeichnete Datensätze in verschiedenen Formaten erstellen, aber die häufigste ist eine CSV -Datei. Zum Beispiel ist hier eine Datei, die ich mit ChatGPT generiert habe, die fünf Fragen zur Pytorch -Syntax enthält:
Um einen Datensatz daraus zu erstellen, können wir die Funktion upload_csv verwenden:
import uuid # Create id uid = uuid.uuid4() # Create a unique name PROJECT_NAME = "flashcards-generator-" + str(uid) # Create the project session = client.create_project( project_name=PROJECT_NAME, description="A project that generates flashcards from user input", )
Die Funktion enthält drei erforderliche Parameter: CSV -Pfad und die Namen der Eingangs-/Ausgangsspalten. Sobald das Upload beendet ist, wird der Datensatz in der Benutzeroberfläche angezeigt:
Führen Sie unser benutzerdefiniertes Kriterium auch aus dem vorherigen Abschnitt in diesem Datensatz aus:
os.environ["LANGCHAIN_PROJECT"] = PROJECT_NAME
Wenn Sie zur Datensatzseite gehen und den Lauf überprüfen, können wir die durchschnittlichen Punkte für jedes benutzerdefinierte Kriterium sehen:
integrierte und benutzerdefinierte Evaluatoren, die in der natürlichen Sprache geschrieben wurden, sind hauptsächlich für unbezeichnete Datensätze bestimmt. Für gekennzeichnete Datensätze wie den von uns hochgeladenen CSV -Datensatz bietet Langsmith umfassendere Evaluatoren für die Messung der Richtigkeit der Antwort auf eine Eingabeaufforderung:
Versuchen wir den letzten in unseren Beispielen:
LANGCHAIN_API_KEY="LangSmith-API-key" OPENAI_API_KEY="Your-OPENAI-key"
COTQA -Kriterium gibt eine Punktzahl namens Kontextgenauigkeit zurück, wie im GIF unten dargestellt (auch in der Benutzeroberfläche):
Bitte besuchen Sie den Abschnitt Langchain Evaluatoren von Langsmith Docs, um viel mehr über Bewerter zu erfahren.
Wenn Sie nach dem Lesen dieses Tutorials den Eindruck haben, dass Langsmith wirklich nur ein komplexes Werkzeug für die schnelle Technik ist, haben Sie richtig! Derzeit ist Langsmith das beste Framework, um sicherzustellen, dass die Anweisungen und Ausgänge von LLMs tatsächlich das sind, was Sie wollen.
Sie müssen auch die Anstrengungen erkannt haben, die zum Aufbau von LLM-Anwendungen für Produktionsgröße erforderlich sind. Verwenden Sie also Langsmith für eine glattere Erfahrung, während Sie an LLM -Projekten arbeiten.
Wenn einige der Konzepte in Langsmith keinen Sinn hatten, haben Sie möglicherweise einige Grundlagen in Langchain. Hier sind einige Ressourcen dazu:
Das obige ist der detaillierte Inhalt vonEine Einführung in das Debugging und das Testen von LLMs in Langsmith. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!