\n\n\n\n Meine praktische Meinung: die neue Streaming-API von LangChain für KI-Assistenten - AgntBox Meine praktische Meinung: die neue Streaming-API von LangChain für KI-Assistenten - AgntBox \n

Meine praktische Meinung: die neue Streaming-API von LangChain für KI-Assistenten

📖 12 min read2,261 wordsUpdated Mar 30, 2026

Hallo zusammen, hier ist Nina von agntbox.com, und ich habe heute etwas Kleines für euch! Wir werden etwas genauer unter die Lupe nehmen, das in meinen Programmierkreisen seit einiger Zeit für Aufsehen sorgt, etwas, das verspricht, unsere Arbeit als KI-Entwickler zu erleichtern: die neue Streaming-API von LangChain für Assistenten. Und nein, es ist kein langweiliges technisches Geplänkel. Ich hatte in den letzten Wochen direkten Kontakt damit, habe es an seine Grenzen gebracht und habe einige Überlegungen, Erfolge und “Oh, komm schon!”-Momente zu teilen.

Für diejenigen unter euch, die irgendetwas mit Large Language Models (LLMs) gebaut haben, wisst ihr, wie es funktioniert. Ihr sendet eine Anfrage und wartet. Manchmal wartet ihr lange. Und wenn ihr einen Chatbot oder einen interaktiven Assistenten baut, kann diese Wartezeit die Benutzererfahrung schneller ruinieren als eine schlechte Internetverbindung. Wir sind es gewohnt, diese tollen Antworten Token für Token von Diensten wie ChatGPT zu sehen, aber sie in unseren eigenen benutzerdefinierten Anwendungen nachzubilden? Das ist der Moment, in dem die eigentliche Arbeit beginnt. Und genau dabei soll die neue Streaming-API von LangChain für ihren Assistentenrahmen helfen.

Mein persönliches Dilemma mit Streaming (Bevor LangChain eingriff)

Bevor wir uns mit der Lösung von LangChain beschäftigen, lasst mich euch ein wenig zurückführen. Ich arbeitete an einem Projekt für einen Kunden – einem Kundenservice-Bot, der den Benutzern helfen sollte, ihre Smart-Home-Geräte zu reparieren. Der Bot sollte die Anfragen der Benutzer analysieren, auf eine Wissensdatenbank zugreifen (search-augmented generation, auch RAG genannt, wenn ihr den Jargon sprecht), und dann eine Schritt-für-Schritt-Lösung anbieten. Die erste Version funktionierte, war aber langsam. Manchmal extrem langsam. Die Benutzer stellten eine Frage und starrten dann 10, 15 oder sogar 20 Sekunden lang auf einen leeren Bildschirm, bevor die vollständige Antwort erschien.

Mein Kunde war, verständlicherweise, nicht begeistert. „Nina,“ sagten sie, „wir brauchen, dass das reaktionsschnell aussieht. So als würde eine echte Person schreiben.“ Und sie hatten recht. Ich habe alle möglichen Hacks ausprobiert. Ich habe versucht, die Anfrage in kleinere Stücke zu zerlegen, in der Hoffnung, teilweise Antworten zu erhalten. Ich habe sogar experimentiert, indem ich eine generische Nachricht mit „Es wird nachgedacht…“ gesendet habe, was nur wie ein Pflaster auf einer klaffenden Wunde wirkte. Das Problem war im Grunde genommen, wie die LLMs Anfragen verarbeiten – sie berechnen oft die vollständige Antwort, bevor sie diese zurücksenden. Die Streaming-Funktionen von Plattformen wie der OpenAI-API waren vorhanden, aber sie nahtlos in einen komplexen RAG-Pipeline zu integrieren, insbesondere einen, der mit älteren Versionen von LangChain erstellt wurde, schien so schwierig wie das Zusammenbringen von Katzen.

Ich erinnere mich an eine späte Nacht, an der ich ein besonders hartnäckiges Problem debuggte, bei dem die Streaming-Stücke durcheinander kamen. Ich raufe mir die Haare! Der Traum eines flüssigen, in Echtzeit agierenden KI-Assistenten schien unerreichbar. Also, als ich die Ankündigung der LangChain-Assistenten-API mit integriertem Streaming sah, wurde ich hellhörig. Könnte das endlich die Lösung für meine Streaming-Probleme sein?

Was ist die Streaming-API von LangChain für Assistenten?

Okay, lassen Sie uns ins Technische eintauchen, aber dabei freundlich bleiben. Die LangChain-Assistenten-API ist deren hochrangiger Rahmen zum Erstellen komplexer KI-Agenten. Denkt daran, es ist wie ein Plan zum Erstellen von Bots, die mehr können als nur Fragen zu beantworten – sie können Werkzeuge nutzen, den Verlauf von Konversationen verwalten und mehrstufige Aktionen planen. Die neue Streaming-API ist keine separate Sache; sie ist eine Verbesserung *innerhalb* dieses Assistentenrahmens.

Was sie tut, ist, dass sie es ermöglicht, die Ausgabe des Assistenten schrittweise zu erhalten, während sie generiert wird. Das umfasst nicht nur die endgültige textliche Antwort, sondern auch Updates zu den von dem Assistenten verwendeten Werkzeugen, Beobachtungen dieser Werkzeuge und sogar Fehler. Es ist, als würde man einen detaillierten Kommentar zum Denkprozess und den Aktionen des Assistenten erhalten, alles in Echtzeit.

Das ist ein großer Schritt nach vorne, da es über einfaches Streaming des endgültigen LLM-Texts hinausgeht. Es streamt *den gesamten Ausführungsfluss*. Stellt euch vor, euer Assistent entscheidet, dass er Daten aus einer Datenbank abrufen muss. Mit der neuen API könnt ihr eine Nachricht erhalten, die besagt: „Der Assistent ruft das Datenbankwerkzeug auf,“ dann „Die Datenbank hat X Daten zurückgegeben,“ und *dann* die endgültige textliche Antwort, alles ohne eine lange frustrierende Pause.

Konfigurieren Sie Ihren ersten Stream: Ein praktisches Beispiel

Macht euch bereit. Ich werde euch durch eine vereinfachte Version führen, wie ich dies in meinen Smart-Home-Fehlerbehebungsbot integriert habe. Wir richten einen einfachen Assistenten ein, der Fragen beantworten und ein fiktives „Wissensdatenbank“-Werkzeug nutzen kann.

Voraussetzungen:

  • Python (ich benutze 3.10+)
  • langchain und langchain_openai installiert (pip install langchain langchain_openai)
  • Ein OpenAI-API-Schlüssel (als Umgebungsvariable OPENAI_API_KEY definiert)

Schritt 1: Definieren Sie Ihr Werkzeug

Zuerst erstellen wir ein einfaches Werkzeug. Für unseren Smart-Home-Bot stellen wir uns ein Werkzeug vor, das „die Handbücher der Geräte durchsucht.“


from langchain_core.tools import tool

@tool
def lookup_device_manual(device_name: str) -> str:
 """
 Sucht das Handbuch zur Fehlersuche für ein gegebenes Smart-Home-Gerät.
 Verwenden Sie dieses Werkzeug, wenn ein Benutzer Hilfe zu einem speziellen Gerät anfordert.
 """
 if "thermostat" in device_name.lower():
 return "Fehlersuche beim Thermostat: Überprüfen Sie die Batterie, stellen Sie sicher, dass die WLAN-Verbindung hergestellt ist, setzen Sie das Gerät zurück, indem Sie die Einschalttaste 10 Sekunden lang gedrückt halten."
 elif "lampe" in device_name.lower():
 return "Fehlersuche bei der intelligenten Lampe: Stellen Sie sicher, dass sie richtig eingeschraubt ist, versuchen Sie, die Stromversorgung des Geräts zurückzusetzen, überprüfen Sie die App auf Firmware-Updates."
 else:
 return f"Kein spezifisches Handbuch für {device_name} gefunden. Bitte versuchen Sie es mit einem gebräuchlicheren Gerät."

Schritt 2: Erstellen Sie Ihren Assistenten

Jetzt bauen wir unseren Assistenten und geben ihm Zugang zu unserem Werkzeug.


from langchain_openai import ChatOpenAI
from langchain.agents import AgentExecutor, create_openai_functions_agent
from langchain_core.messages import HumanMessage, AIMessage
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder

# Definieren Sie die Vorlagenstruktur
prompt = ChatPromptTemplate.from_messages(
 [
 ("system", "Sie sind ein hilfreicher Smart-Home-Assistent. Beantworten Sie die Fragen der Benutzer und verwenden Sie Werkzeuge, wenn es angemessen ist."),
 MessagesPlaceholder("chat_history", optional=True),
 ("human", "{input}"),
 MessagesPlaceholder("agent_scratchpad"),
 ]
)

# Initialisieren Sie das LLM
llm = ChatOpenAI(model="gpt-4-turbo-preview", temperature=0) # Verwendung eines aktuellen Modells

# Erstellen Sie den Agenten
tools = [lookup_device_manual]
agent = create_openai_functions_agent(llm, tools, prompt)

# Erstellen Sie den Agenten-Executor (das ist der Teil, den wir streamen werden)
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)

Schritt 3: Streamen Sie die Antworten

Hier wird die Magie wirksam. Anstatt agent_executor.invoke() aufzurufen, verwenden wir agent_executor.stream().


# Beispiel 1 : Eine einfache Frage ohne den Einsatz von Werkzeugen
print("--- Beispiel 1 : Einfache Frage ---")
for s in agent_executor.stream({"input": "Was ist die Hauptstadt von Frankreich?"}):
 if "output" in s:
 print(f"Endgültige Antwort : {s['output']}")
 elif "intermediate_steps" in s:
 for step in s["intermediate_steps"]:
 print(f"Werkzeugaufruf : {step.tool} mit Eingabe {step.tool_input}")
 print(f"Werkzeugausgabe : {step.tool_output}")
 elif "actions" in s:
 for action in s["actions"]:
 print(f"Der Assistent hat entschieden, das Werkzeug zu verwenden : {action.tool}")
 print(f"Eingabe für das Werkzeug : {action.tool_input}")
 # Weitere Schlüssel wie "messages" können ebenfalls für eine genauere Steuerung ausgestrahlt werden

print("\n--- Beispiel 2 : Frage, die den Einsatz eines Werkzeugs erfordert ---")
# Beispiel 2 : Eine Frage, die den Einsatz eines Werkzeugs erfordert
for s in agent_executor.stream({"input": "Mein intelligenter Thermostat funktioniert nicht, was soll ich tun?"}):
 if "output" in s:
 print(f"Endgültige Antwort : {s['output']}")
 elif "intermediate_steps" in s:
 for step in s["intermediate_steps"]:
 print(f"Werkzeugaufruf : {step.tool} mit Eingabe {step.tool_input}")
 print(f"Werkzeugausgabe : {step.tool_output}")
 elif "actions" in s:
 for action in s["actions"]:
 print(f"Der Assistent hat entschieden, das Werkzeug zu verwenden : {action.tool}")
 print(f"Eingabe für das Werkzeug : {action.tool_input}")

Wenn Sie dies ausführen, werden Sie eine ganz andere Ausgabe als bei einem regulären Aufruf invoke() sehen. Für das erste Beispiel („Was ist die Hauptstadt von Frankreich?“) werden Sie wahrscheinlich relativ schnell die endgültige Antwort erhalten, möglicherweise in einem einzigen Stück, wenn das Modell schnell ist. Aber für das zweite Beispiel („Mein intelligenter Thermostat funktioniert nicht…“), werden Sie Nachrichten sehen, die den Denkprozess des Assistenten anzeigen: Er wird beschließen, das Werkzeug lookup_device_manual zu verwenden, zeigt die Eingabe, die er an das Werkzeug sendet, dann die Ausgabe des Werkzeugs und *schließlich* die vom Assistenten basierte Antwort auf dieser Ausgabe.

Das ist unglaublich leistungsfähig für die Entwicklung von Benutzeroberflächen. Sie können die Benutzeroberfläche Ihres Chatbots in Echtzeit aktualisieren:

  • Ein „Denk…“-Indikator anzeigen, wenn der Assistent mit der Verarbeitung beginnt.
  • Anzeigen „Der Assistent sucht das Handbuch für Ihren Thermostat…“, wenn ein Aktionsfluss ankommt.
  • Die endgültige Antwort token für token anzeigen, während der Fluss „output“ fortschreitet.

Meine Lehren und Was Ich Gelernt Habe

Nachdem ich ein wenig damit gespielt habe, sind hier meine ehrlichen Gedanken:

Die Positiven:

  1. Verbesserung der Benutzererfahrung: Das ist die Hauptsache. Der Unterschied in der wahrgenommenen Reaktivität ist offensichtlich. Meine Kunden sind viel zufriedener mit dem dynamischen Gefühl des Bots. Kein Leerbildschirm mehr!
  2. Transparenz in Aktion: Die Möglichkeit, die actions und intermediate_steps auszustrahlen, ist fantastisch für das Debugging und für das Nutzerfeedback. Wenn ein Nutzer eine komplexe Frage stellt, wirkt es vertrauenswürdiger, wenn gezeigt wird, dass der Bot aktiv „denkt“ oder „eine Wissensbasis konsultiert“. Dies stärkt das Vertrauen und verwaltet die Erwartungen.
  3. Vereinfachte Integration: LangChain hat hervorragende Arbeit geleistet, um einen Großteil der Komplexität bei der Verwaltung verschiedener Arten von Flüssen zu abstrahieren. Früher habe ich oft manuell Flüsse des LLM mit benutzerdefinierten Nachrichten über den Einsatz von Werkzeugen kombiniert. Jetzt ist alles Teil des gleichen Iterables.
  4. Flexibilität: Da der Fluss Dictionaries mit verschiedenen Schlüsseln (output, actions, intermediate_steps, messages) zurückgibt, haben Sie eine granulare Kontrolle darüber, was Sie dem Nutzer anzeigen und wann.

Die Negativen (oder Dinge, die man im Hinterkopf behalten sollte):

  1. Erfordert immer Arbeit im Frontend: Während LangChain das Backend vereinfacht, erfordert die Integration in ein schönes, reaktionsfähiges Frontend immer noch eine sorgfältige Kodierung. Sie müssen den Fluss analysieren, die verschiedenen Nachrichtentypen identifizieren und Ihre UI entsprechend aktualisieren. Es gibt keinen magischen Knopf „Verwandle meine UI in einen Fluss“.
  2. Komplexität für sehr granulare Kontrolle: Wenn Sie *jeden Token* aus der LLM-Antwort *und* diesen perfekt mit Nachrichten über den Einsatz von Werkzeugen abwechseln müssen, könnten Sie dennoch ein wenig benutzerdefinierte Logik benötigen. Der Schlüssel output gibt Ihnen oft größere Textblöcke anstatt individueller Tokens, obwohl dies je nach Modell und Konfiguration variieren kann. Für meinen Anwendungsfall sind größere Blöcke völlig akzeptabel.
  3. Debugging kann schwierig sein: Wenn in einem Fluss etwas schiefgeht, kann es manchmal schwieriger sein, den genauen Fehlerpunkt zu lokalisieren im Vergleich zu einem synchronisierten Aufruf, bei dem Sie eine klare Fehlermeldung erhalten. Sie benötigen eine gute Protokollierung und ein klares Verständnis der Struktur des Flusses.
  4. Überkopf: Obwohl sich die wahrgenommene Leistung verbessert, führt das Streaming selbst zu einer geringen Überlappung. Sie öffnen und schließen ständig Verbindungen oder verwalten Iteratoren. Für sehr bandwidth-intensive Anwendungen mit niedriger Latenz zählt jede Millisekunde, also denken Sie immer daran, zu profilieren.

Maßnahmen für Ihr Nächstes KI-Projekt

Sie haben also gesehen, was es tun kann und meine Meinung dazu gehört. Hier sind meine Empfehlungen für Sie:

  1. Einfach anfangen: Versuchen Sie nicht, am ersten Tag eine produktionsreife Streaming-UI zu erstellen. Beginnen Sie mit einem grundlegenden Assistenten und experimentieren Sie mit der .stream()-Methode, um die verschiedenen Arten von Ereignissen zu verstehen, die sie erzeugt.
  2. UX priorisieren: Denken Sie an den Weg Ihres Nutzers. Welche Informationen wären in Echtzeit am wertvollsten für sie? Geht es nur um den endgültigen Text, oder würden sie davon profitieren, zu wissen, wann ein Werkzeug verwendet wird? Gestalten Sie Ihre UI-Updates rund um diese Erkenntnisse.
  3. Ihr Frontend-Framework berücksichtigen: Wenn Sie eine Webanwendung erstellen, sind Frameworks wie React mit WebSockets oder modernes serverseitiges Rendering mit SSE (Server-Sent Events) ausgezeichnete Wahlmöglichkeiten, um Streaming-Daten zu konsumieren und anzuzeigen.
  4. Überwachen und Iterieren: Wie bei jeder neuen Funktion sollten Sie ihre Leistung in Ihrer Anwendung überwachen. Sammeln Sie Rückmeldungen von den Nutzern. Verbessert das Streaming die Dinge oder führt es zu Verwirrung? Seien Sie bereit, Ihre Implementierung anzupassen.
  5. Aktuell bleiben: Das LangChain-Ökosystem entwickelt sich rasend schnell. Halten Sie Ausschau nach ihrer Dokumentation und ihren Versionshinweisen für mögliche Verbesserungen der Streaming-Funktionalitäten.

Die neue Streaming-API von LangChain für Assistenten ist ein bedeutender Fortschritt für jeden, der interaktive KI-Anwendungen erstellt. Sie adressiert einen echten Schmerzpunkt, den ich persönlich empfunden habe, und bietet einen leistungsstarken, wenn auch relativ einfachen Weg, ein viel ansprechenderes und reaktionsfähigeres Benutzererlebnis bereitzustellen. Es ist keine Wunderlösung – Sie müssen immer noch die Arbeit leisten – aber es gibt uns die richtigen Werkzeuge, um endlich die Art von dynamischen und Echtzeit-KI-Assistenten zu bauen, die wir uns immer vorgestellt haben.

Gehen Sie raus und streamen Sie! Lassen Sie mich in den Kommentaren wissen, ob Sie das ausprobiert haben und welche Erfahrungen Sie gemacht haben. Viel Spaß beim Programmieren!

🕒 Published:

🧰
Written by Jake Chen

Software reviewer and AI tool expert. Independently tests and benchmarks AI products. No sponsored reviews — ever.

Learn more →
Browse Topics: AI & Automation | Comparisons | Dev Tools | Infrastructure | Security & Monitoring

More AI Agent Resources

AgntapiAgntkitBotclawAi7bot
Scroll to Top