Blog

Kombination von Kedro und Streamlit zum Aufbau eines einfachen LLM-basierten Leseassistenten

Piotr Chaberski

Aktualisiert Oktober 21, 2025
8 Minuten

Generative KI und Large Language Models erobern das angewandte maschinelle Lernen im Sturm, und es gibt keine Anzeichen für eine Abschwächung dieses Trends. Es ist zwar wichtig, daran zu denken, dass diese Strömung andere Zweige des maschinellen Lernens nicht auslöschen wird und dass es immer noch viele Dinge gibt, auf die man bei der Anwendung von LLMs achten muss (lesen Sie meinen früheren Blog-Beitrag für einige Beispiele), ist die Verwendung dieser Modelle in einigen Bereichen unumgänglich. Aber um sie wirklich effizient zu nutzen, müssen einige Teile richtig zusammengesetzt werden. Insbesondere die Nutzung leistungsstarker Sprachverstehensfunktionen muss durch eine saubere und gut organisierte Implementierung und eine angenehme Benutzererfahrung unterstützt werden. Anhand eines sehr einfachen Beispiels zeigen wir Ihnen, wie Sie diese 3 wesentlichen Ziele mit Hilfe der kommerziellen LLM-APIs Kedro bzw. Streamlit erreichen können.

Die Idee eines Leseassistenten

Stellen Sie sich vor, Sie müssen ein sehr technisches Dokument lesen, ohne ein Experte auf diesem Gebiet zu sein. Das Dokument enthält sicherlich eine Menge bereichsspezifischer Formulierungen, schwer verständliche Begriffe und möglicherweise auch viele externe Referenzen. Das Lesen eines solchen Dokuments kann ziemlich mühsam sein. Sie verbringen mehr Zeit damit,im Internet nach Erklärungen zu suchen, als mit dem Dokument selbst. Heutzutage können Sie diesen Prozess mit Hilfe von Large Language Models viel schneller und einfacher gestalten. LLMs werden anhand großer Mengen von Texten aus verschiedenen Bereichen trainiert und kodieren all dieses umfassende Wissen in ihren Parametern, was eine nahtlose Mensch-Maschine-Interaktion in einfacher, natürlicher Sprache ermöglicht. In einigen Fällen, in denen das vortrainierte Wissen nicht ausreicht, besteht die Möglichkeit, ein Modell an eine bestimmte Domäne anzupassen oder andere Formen der Feinabstimmung vorzunehmen, um es noch nützlicher zu machen. Dies ist jedoch ein recht komplexes und heikles Thema, auf das wir uns in diesem Artikel nicht konzentrieren werden. Es wird jedoch in unseren GetInData Advanced Analytics Labs intensiv erforscht.

Was genau ist die Idee hinter dem LLM-Leseassistenten? Es ist ganz einfach:

  • Sie laden das Dokument, das Sie lesen möchten, in die webbasierte Anwendung hoch und beginnen mit dem Lesen
  • Wenn Sie auf einen unverständlichen Begriff oder einen schwer verständlichen Textabschnitt stoßen, können Sie ihn auswählen und den LLM bitten, ihn entweder zu erklären oder zusammenzufassen
  • Eine entsprechende Abfrage wird unter der Haube konstruiert, über eine API gesendet und die Antwort wird zurückgegeben und gedruckt

Die Nützlichkeit dieser Art von Tools zeigt sich in großen Organisationen, in denen Menschen mit unterschiedlichen Rollen (Management, Wirtschaft, Technik, Recht usw.) mit domänenspezifischen Dokumenten umgehen müssen und die Effizienz der Verarbeitung dieser Dokumente entscheidend ist. Als Beispiele können wir uns das vorstellen:

  • Rechtsakte
  • wissenschaftliche Arbeiten
  • medizinische Dokumentation
  • Finanzberichte

Die in diesem Artikel vorgestellte Lösung ist nur ein sehr einfaches PoC, das die Idee eines Leseassistenten vorstellt und außerdem zeigt, wie Sie mit einer Kombination aus den Frameworks Kedro und Streamlit, unterstützt durch kommerzielle Large Language Models, leicht eine recht funktionale Anwendung erstellen können. Um daraus ein vollwertiges, produktionsreifes Tool zu machen, wären einige wichtige Entwicklungen erforderlich, z.B.:

  • eine fortschrittlichere Benutzeroberfläche, die eine bessere Benutzererfahrung durch die Verwendung von Kontextmenüs anstelle von manuellen Kopier-/Einfügevorgängen ermöglicht,
  • eventuell ein Chat-Fenster, um die Kommunikation mit dem Modell über einfache Erklärungs-/Zusammenfassungsanfragen hinaus zu erweitern,
  • eine Option zur Verwendung von Modellen für große Kontexte und zur Suche in Dokumenten, zusätzlich zu der Möglichkeit, sich nur auf vortrainiertes Modellwissen zu verlassen,
  • umfassende Belastungs- und Funktionstests,
  • optionale Verwendung von Open-Source-Modellen, die selbst eingesetzt werden und auf domänenspezifische Korpora abgestimmt sind.

Dennoch ist eine solche Demo immer ein guter Anfang, also lassen Sie uns eintauchen und sehen, wie es funktioniert.

Implementierung mit Kedro, Streamlit und LLM APIs

Der Code der hier beschriebenen Anwendung ist öffentlich verfügbar als einer der QuickStart ML Blueprints verfügbar. Dabei handelt es sich um eine Reihe verschiedener ML-Lösungsbeispiele, die mit einem modernen Open-Source-Stack und nach den besten Praktiken der Data Science-Entwicklung erstellt wurden. Sie finden das Projekt und seine Dokumentation hier. Probieren Sie es aus und experimentieren Sie damit, und erkunden Sie auch andere Blueprints, die Klassifizierungs-/Regressionsmodelle, Empfehlungssysteme und Zeitreihenprognosen usw. umfassen.

Kedro-Benutzern wird sicherlich auffallen, dass die vorgestellte Lösung aus Sicht dieses Frameworks im Vergleich zu Standard-Kedro-Anwendungsfällen sehr abgespeckt ist. Sie besteht aus nur einer Pipeline (run_assistant), die nur einen einzigen Knoten (complete_request) enthält. Da alle Eingaben in die Pipeline über Parameter erfolgen (einige davon standardmäßig über Kedro conf-Dateien, die anderen über die Streamlit-App, die später erläutert wird) und die einzige Ausgabe die Antwort des LLM ist, die für den Benutzer ausgedruckt werden muss, verwendet das Projekt keinen Datenkatalog. In diesem einfachen PoC bestand auch kein Bedarf an MLflow-Protokollierung; nur der lokale Logger wurde für Debugging-Zwecke verwendet. Eine Funktion von Kedro, die immer noch sehr hilfreich ist, ist der Konfigurationsmechanismus für die Pipeline. Es hat sich herausgestellt, dass er in einem so speziellen Anwendungsfall, der scheinbar nicht viel mit der üblichen Arbeitsweise von Kedro zu tun hat, eine flexible und effiziente Integration mit der zusätzlichen Benutzeroberflächenschicht ermöglicht, die von der Streamlit-App gebildet wird.

Zusätzlich zur Kedro run_assistant Pipeline gibt es ein weiteres Python-Skript run_app, das - wenig überraschend - die Streamlit-Anwendung definiert und ausführt. Im Einzelnen dient es den folgenden Zwecken:

  • Zeigt eine hochgeladene PDF-Datei zum Lesen an
  • Verarbeitet zusätzliche Eingabeparameter, die nicht über Kedro conf-Dateien an die Kedro-Pipeline übergeben werden. Diese Parameter sind: der Typ der zu verwendenden LLM-API, das LLM-Modell, der Betriebsmodus (entweder Erklärung oder Zusammenfassung, die als grundlegende Demofunktionalitäten gewählt wurden, die natürlich durch andere erweitert werden können) und natürlich die Haupteingabe, d.h. der zu erklärende oder zusammenzufassende Begriff oder Text
  • Löst den Betrieb der Kedro-Pipeline aus, die:
  • sammelt die Eingabeparameter (einschließlich der verbleibenden technischen Parameter, die in der traditionellen Kedro-Methode übergeben werden und für den Aufbau der Eingabeaufforderung und die Abfrage der Antwort erforderlich sind),
  • sendet die Anfrage über die ausgewählte API (derzeit werden die native OpenAI API, Azure OpenAI Service und VertexAI Google PaLM API unterstützt) und ruft die Antwort ab
  • Druckt die Antwort unter dem Dokument

Das Interessante an dieser Einrichtung ist die Kopplung zwischen Streamlit und der Kedro-Pipeline. Kedro verfügt über einen eigenen Satz von Parametern, die im Verzeichnis conf gespeichert sind. Standardmäßig gibt es dort zwei Unterordner: base und local (Sie können auch andere Parametersätze definieren und sie als verschiedene Umgebungen verwenden). Der erste ist ein Satz von Standardparametern für einen grundlegenden Kedro-Lauf und wird in Git gespeichert. Der andere Satz wird nur lokal gespeichert. Sie können sie verwenden, um Parameter zu speichern, die für Ihre eigene Umgebung spezifisch sind und die nicht weitergegeben werden sollten. Es ist auch ein guter Ort, um etwas Temporäres zu speichern, das Sie nicht in Ihren Basiskonfigurationsdateien überschreiben möchten. Damit ist parameters.yml im lokalen Unterverzeichnis ein perfekter Ort, um als Verbindung zwischen den in der Streamlit-Schnittstelle eingegebenen Parametern und der Kedro-Pipeline zu dienen. Am Beispiel des Leseassistenten funktioniert das im Wesentlichen so:

  1. Zunächst wird das KedroSession-Objekt initialisiert, um die Kedro-Pipeline durch Angabe seines Namens im Python-Skript run_app starten zu können:
from kedro.framework.session import KedroSession
from kedro.framework.startup import bootstrap_project
bootstrap_project(os.getcwd())
session = KedroSession.create()
  1. Einige Streamlit-Widgets werden definiert und ihre Werte werden Variablen zugewiesen:
api = st.selectbox("Select an API:", ["OpenAI", "VertexAI PaLM", "Azure OpenAI"])
model = st.selectbox("Choose LLM:", model_choices)
mode = st.selectbox("Choose mode:", ["explain", "summarize"])
input_text = st.text_area("Paste term or text:", value="", height=200
  1. Jedes Mal, wenn Eingabefelder aktualisiert werden, werden die neuen Parameterwerte in die lokale Parameterdatei übertragen:
with open("./conf/local/parameters.yml", "w") as f:
yaml.dump(
{"api": api, "model": model, "mode": mode, "input_text": input_text}, f
)
  1. Nachdem Sie auf die Schaltfläche "Antwort erhalten!" geklickt haben, wird die Kedro-Pipeline gestartet. Sie sammelt alle Parameter - aus der Basiskonfiguration, aber auch aus unserer ständig über die Streamlit-App aktualisierten lokalen Konfiguration:
if st.button("Get Answer!"):
# Run Kedro pipeline to use LLM
answer = session.run("run_assistant_pipeline")["answer"]
else:
answer = "Paste input text and click [Get Answer!] button"

Jedes Mal, wenn Sie auf die Schaltfläche klicken, wird die Kedro-Pipeline erneut ausgeführt - möglicherweise mit neuen Parameterwerten, wenn diese in der Zwischenzeit aktualisiert wurden.

Zusammenfassung

Und das war's! Dies demonstriert eine sehr einfache, aber effektive Art der Verwaltung der Parametrisierung und Ausführung von Kedro-Pipelines über die Streamlit-Anwendung. Natürlich ist das Beispiel sehr einfach, aber Sie können sich auch komplexere Setups mit mehreren Kedro-Pipelines vorstellen, die mehr Kedro-Funktionen verwenden. In solchen Szenarien wären die Kedro-Projektstruktur und ein gut organisiertes Pipelining-Framework vorteilhafter, wobei auch die Einfachheit der Erstellung von Streamlit-Anwendungen genutzt werden könnte. Nichtsdestotrotz würde die Kopplung zwischen diesen beiden so einfach bleiben wie oben beschrieben.

Wenn Sie sich für andere Anwendungen von LLMs und mögliche Probleme bei der Implementierung interessieren, schauen Sie sich unsere anderen Blogbeiträge an und halten Sie sich über die neu veröffentlichten Beiträge auf dem Laufenden, insbesondere über den Shopping Assistant: ein E-Commerce-Konversationstool, das über eine natürlichsprachliche Schnittstelle Such- und Empfehlungsfunktionen bietet.

Verfasst von

Piotr Chaberski

Contact

Let’s discuss how we can support your journey.