{"id":569629,"date":"2025-05-23T05:24:09","date_gmt":"2025-05-23T04:24:09","guid":{"rendered":"https:\/\/blog.jetbrains.com\/?post_type=pycharm&#038;p=569629"},"modified":"2025-05-23T05:24:18","modified_gmt":"2025-05-23T04:24:18","slug":"so-bauen-sie-chatbots-mit-langchain","status":"publish","type":"pycharm","link":"https:\/\/blog.jetbrains.com\/de\/pycharm\/2025\/05\/so-bauen-sie-chatbots-mit-langchain\/","title":{"rendered":"So bauen Sie Chatbots mit LangChain"},"content":{"rendered":"<p><em>Dies ist ein Gastbeitrag von <a href=\"https:\/\/blog.jetbrains.com\/pycharm\/2024\/08\/how-to-build-chatbots-with-langchain\/#author\" data-type=\"link\" data-id=\"https:\/\/blog.jetbrains.com\/pycharm\/2024\/08\/how-to-build-chatbots-with-langchain\/#author\">Dido Grigorov<\/a>, einem Deep-Learning-Entwickler und Python-Programmierer mit 17 Jahren Erfahrung auf dem Gebiet.<\/em><\/p>\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-503976\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/05\/PC-social-BlogFeatured-1280x720-2x-2.png\" alt=\"\" width=\"2560\" height=\"1440\" \/><\/figure>\n<p>Chatbots sind heute weit mehr als einfache Frage-und-Antwort-Automaten. Sie nutzen die Leistungsf\u00e4higkeit gro\u00dfer Sprachmodelle (large language models, LLM), um den Kontext von Unterhaltungen zu verstehen und menschen\u00e4hnliche Antworten zu geben. Dies macht sie f\u00fcr Anwendungen im Kundensupport und anderen Arten von virtueller Unterst\u00fctzung enorm wertvoll.<\/p>\n<p>Das quelloffene Framework LangChain vereinfacht die Erstellung dieser Chatbots, indem es Tools f\u00fcr die nahtlose Modellintegration, Kontextverwaltung und Prompt Engineering bereitstellt.<\/p>\n<p>In diesem Blogartikel erkunden wir, wie LangChain funktioniert und wie Chatbots mit LLMs interagieren. Wir f\u00fchren Sie au\u00dferdem Schritt f\u00fcr Schritt durch die Entwicklung eines kontextsensitiven Chatbots mithilfe von LangChain und GPT-3, der zielgenaue, relevante Antworten gibt.<\/p>\n<p><!--more--><\/p>\n<h2 class=\"wp-block-heading\"><strong>Was sind <\/strong>LLM<strong>-basierte Chatbots?<\/strong><\/h2>\n<p>Auf LLMs basierende Chatbots sind hochmoderne Softwareanwendungen, die \u00fcber Text- oder Sprachschnittstellen menschen\u00e4hnliche Unterhaltungen mit Benutzer*innen simulieren. Diese Chatbots nutzen die fortgeschrittenen F\u00e4higkeiten von LLMs, also neuronalen Netzen, die mit riesigen Mengen von Textdaten trainiert wurden und dadurch in der Lage sind, auf ein gro\u00dfes Spektrum von Prompts (Anfragen) menschen\u00e4hnliche Antworten zu geben.<\/p>\n<p>Unter anderem k\u00f6nnen LLM-basierte Chatbots bei der Generierung einer Antwort den Kontext der Unterhaltung ber\u00fccksichtigen. Dies bedeutet, dass sie \u00fcber mehrere Austauschvorg\u00e4nge hinweg koh\u00e4rent bleiben und komplexe Anfragen verarbeiten k\u00f6nnen, um Ausgaben zu erzeugen, die den Intentionen der Benutzer*innen entsprechen. Au\u00dferdem werten diese Chatbots den emotionalen Gehalt der Benutzerinputs aus und passen ihre Antworten an die Gef\u00fchlslage ihres Gegen\u00fcbers an.<\/p>\n<p>Chatbots sind hochgradig anpassungsf\u00e4hig und personalisiert. Sie lernen daraus, wie Benutzer*innen mit ihnen interagieren und verbessern so ihre Antworten, indem sie diese an individuelle Vorlieben und Bed\u00fcrfnisse anpassen.<\/p>\n<h2 class=\"wp-block-heading\"><strong>Was ist LangChain?<\/strong><\/h2>\n<p>LangChain ist ein quelloffenes Framework, das f\u00fcr die Erstellung von Anwendungen entwickelt wurde, die gro\u00dfe Sprachmodelle (LLMs) verwenden. Es verf\u00fcgt \u00fcber Tools und Abstraktionen, um die aus diesen Modellen gewonnenen Informationen besser zu personalisieren und dabei Korrektheit und Relevanz zu wahren.<\/p>\n<p>Ein g\u00e4ngiger Begriff in der Literatur \u00fcber LLMs ist \u201ePromptkette\u201c. Eine Promptkette bezieht sich auf eine Abfolge von Prompts oder Anweisungen, die im Kontext von k\u00fcnstlicher Intelligenz und maschinellem Lernen verwendet werden, um das KI-Modell in einem mehrstufigen Prozess zum Generieren von genaueren, detaillierteren oder verbesserten Ergebnissen anzuleiten. Diese Methode kann f\u00fcr verschiedene Aufgaben eingesetzt werden, etwa f\u00fcr das Schreiben, das L\u00f6sen von Problemen oder die Generierung von Code.<\/p>\n<p>Entwickler*innen k\u00f6nnen mit LangChain neue Promptketten erstellen \u2013 das ist eine der gr\u00f6\u00dften St\u00e4rken des Frameworks. Sie k\u00f6nnen sogar bestehende Promptvorlagen ver\u00e4ndern, ohne das Modell bei Verwendung neuer Datensammlungen erneut trainieren zu m\u00fcssen.<\/p>\n<h2 class=\"wp-block-heading\"><strong>Wie funktioniert LangChain?<\/strong><\/h2>\n<p>LangChain ist ein Framework, das die Entwicklung von Anwendungen vereinfachen soll, die Sprachmodelle verwenden. Es bietet eine Reihe von Tools, die Entwickler*innen bei der effizienten Entwicklung und Verwaltung von Anwendungen helfen, die auf linguistische Datenverarbeitung (NLP) und gro\u00dfe Sprachmodelle zur\u00fcckgreifen. Mit LangChain k\u00f6nnen Entwickler*innen Sprachmodelle flexibel an spezifische Gesch\u00e4ftskontexte anpassen, indem sie die Schritte definieren, die zum Erreichen des gew\u00fcnschten Ergebnisses erforderlich sind (dies kann ein Chatbot, eine Aufgabenautomatisierung, ein virtueller Assistent, Kundensupport und vieles mehr sein).<\/p>\n<p>Im Folgenden finden Sie einen groben \u00dcberblick \u00fcber die Funktionsweise von LangChain.<\/p>\n<h3 class=\"wp-block-heading\"><strong>Modellintegration<\/strong><\/h3>\n<p>LangChain unterst\u00fctzt verschiedene Sprachmodelle, unter anderem von<em> OpenAI, Hugging Face, Cohere, Anyscale, Azure Models, Databricks, Ollama, Llama, GPT4All, Spacy, Pinecone, AWS Bedrock und MistralAI<\/em>. Entwickler*innen k\u00f6nnen unkompliziert zwischen Modellen wechseln oder mehrere Modelle in einer Anwendung verwenden. Sie k\u00f6nnen ma\u00dfgeschneiderte L\u00f6sungen f\u00fcr die Modellintegration erstellen, um spezielle F\u00e4higkeiten zu nutzen, die auf ihre konkreten Anwendungen zugeschnitten sind.<\/p>\n<h3 class=\"wp-block-heading\"><strong>Ketten<\/strong><\/h3>\n<p>Das Kernkonzept von LangChain sind <strong>Ketten<\/strong>, die unterschiedliche KI-Komponenten zur Erzeugung von kontextsensitiven Antworten zusammenbringen. Eine Kette repr\u00e4sentiert eine Reihe von automatisierten Aktionen zwischen einer Benutzereingabe und der endg\u00fcltigen Modellausgabe. LangChain stellt zwei Arten von Ketten bereit:<\/p>\n<ul>\n<li><strong>Sequenzielle Ketten:<\/strong> Mit diesen Ketten kann die Ausgabe eines Modells oder einer Funktion als Eingabe f\u00fcr ein anderes Modell bzw. eine andere Funktion verwendet werden. Besonders hilfreich ist dies bei der Erstellung von mehrstufigen Prozessen, die voneinander abh\u00e4ngen.<\/li>\n<li><strong>Parallele Ketten:<\/strong> Diese erm\u00f6glichen die gleichzeitige Ausf\u00fchrung mehrerer Aufgaben, deren Ergebnisse am Ende zusammengef\u00fchrt werden. Damit eignen sie sich perfekt f\u00fcr Aufgaben, die in voneinander vollst\u00e4ndig unabh\u00e4ngige Teilaufgaben unterteilt werden k\u00f6nnen.<\/li>\n<\/ul>\n<h3 class=\"wp-block-heading\"><strong>Arbeitsspeicher<\/strong><\/h3>\n<p>LangChain erleichtert das Speichern und Abrufen von Informationen \u00fcber mehrere Interaktionen hinweg. Besonders wichtig ist dies, wenn \u2013 wie bei Chatbots oder interaktiven Agents \u2013 der Kontext erhalten bleiben soll. Es werden zwei Arten von Speicher bereitgestellt:<\/p>\n<ul>\n<li><strong>Kurzzeitspeicher <\/strong>\u2013 Erm\u00f6glicht das Speichern der letzten Sitzungen.<\/li>\n<li><strong>Langzeitspeicher<\/strong> \u2013 Erm\u00f6glicht das Speichern von Informationen aus fr\u00fcheren Sitzungen, um die F\u00e4higkeit des Systems zu verbessern, sich an vergangene Chats und Benutzerpr\u00e4ferenzen zu erinnern.<\/li>\n<\/ul>\n<h3 class=\"wp-block-heading\"><strong>Tools und Hilfsmittel<\/strong><\/h3>\n<p>LangChain stellt zahlreiche Tools bereit, aber die am h\u00e4ufigsten verwendeten sind Prompt Engineering, Data Loader und Evaluatoren.\u00a0 Im Hinblick auf Prompt Engineering enth\u00e4lt LangChain Hilfsmittel zur Entwicklung guter Prompts, die sehr wichtig sind, um die besten Antworten aus Sprachmodellen herauszuholen.<\/p>\n<p>Wenn Sie Dateien im CSV-, PDF- oder anderen Formaten laden m\u00f6chten, helfen Ihnen <strong>Data Loader<\/strong> dabei, unterschiedliche Datentypen zu laden und durch eine Vorverarbeitung f\u00fcr Modellinteraktionen nutzbar zu machen.<\/p>\n<p>Die Auswertung oder Evaluierung ist ein wesentlicher Bestandteil der Arbeit mit ML-Modellen und gro\u00dfen Sprachmodellen. Aus diesem Grund stellt LangChain <strong>Evaluatoren<\/strong> bereit \u2013 Werkzeuge zum Testen von Sprachmodellen und -ketten, um sicherzustellen, dass die generierten Ergebnisse die ben\u00f6tigten Kriterien erf\u00fcllen. Zum Beispiel:<\/p>\n<p><strong>Kriterien f\u00fcr Datensammlungen:<\/strong><\/p>\n<ul>\n<li><strong>Manuell kuratierte Beispiele:<\/strong> Beginnen Sie mit hochwertigen, vielf\u00e4ltigen Inputs.<\/li>\n<li><strong>Historische Protokolle:<\/strong> Nutzen Sie echte Benutzerdaten und -feedback.<\/li>\n<li><strong>Synthetische Daten: <\/strong>Hierbei werden aus den Ursprungsdaten weitere Beispiele generiert.<\/li>\n<\/ul>\n<p><strong>Evaluierungsarten:<\/strong><\/p>\n<ul>\n<li><strong>Menschlich:<\/strong> Bewertung und Feedback werden manuell vorgenommen.<\/li>\n<li><strong>Heuristisch:<\/strong> Regelbasierte Funktionen, sowohl referenzfrei als auch referenzbasiert.<\/li>\n<li><strong>LLM-basiert: <\/strong>LLMs bewerten die Outputs anhand von einprogrammierten Kriterien.<\/li>\n<li><strong>Paarweise: <\/strong>Zwei Outputs werden verglichen, um den besseren auszuw\u00e4hlen.<\/li>\n<\/ul>\n<p><strong>Anwendungsevaluierung:<\/strong><\/p>\n<ul>\n<li><strong>Unit-Tests:<\/strong> Schnelle, auf Heuristiken basierende Pr\u00fcfungen.<\/li>\n<li><strong>Regressionstests: <\/strong>Messen der Leistung im Zeitverlauf.<\/li>\n<li><strong>Backtesting: <\/strong>Testen neuer Versionen mit vorhandenen Produktionsdaten.<\/li>\n<li><strong>Online-Evaluierung: <\/strong>Echtzeit-Evaluierung, oft in Bezug auf Schutzma\u00dfnahmen (Guardrails) und Klassifizierungen.<\/li>\n<\/ul>\n<p><strong>Agents<\/strong><strong><br \/><\/strong>LangChain-Agents sind im Wesentlichen autonome Einheiten, die LLMs nutzen, um auf der Grundlage von nat\u00fcrlichsprachlichen Inputs mit Benutzer*innen zu interagieren, Aufgaben auszuf\u00fchren und Entscheidungen zu treffen.<\/p>\n<p><strong>Aktionsorientierte Agents<\/strong> verwenden Sprachmodelle, um f\u00fcr vorgegebene Aufgaben das optimale Vorgehen zu ermitteln. <strong>Interaktive Agents<\/strong> oder interaktive Anwendungen wie Chatbots wiederum nutzen diese Agents, die bei der Beantwortung von Anfragen auch Benutzereingaben und gespeicherte Daten ber\u00fccksichtigen.<\/p>\n<h2 class=\"wp-block-heading\"><strong>Wie verwenden Chatbots LLMs?<\/strong><\/h2>\n<p>Die den Chatbots zugrunde liegenden LLMs verwenden Natural Language Understanding (NLU, Verst\u00e4ndnis nat\u00fcrlicher Sprache) und Natural Language Generation (NLG, Erzeugung nat\u00fcrlicher Sprache), erm\u00f6glicht durch das vorherige Training von Modellen mit umfangreichen Textdaten.<\/p>\n<h3 class=\"wp-block-heading\"><strong>Verst\u00e4ndnis nat\u00fcrlicher Sprache (NLU)<\/strong><\/h3>\n<ul>\n<li><strong>Kontextbezogenheit:<\/strong> LLMs k\u00f6nnen Feinheiten und Anspielungen in einer Unterhaltung verstehen und das Gespr\u00e4ch von einer Interaktion zur n\u00e4chsten verfolgen. Dadurch k\u00f6nnen Chatbots logische und zum Kontext passende Antworten generieren.<\/li>\n<li><strong>Intentionserkennung: <\/strong>Diese Modelle sollten in der Lage sein, die Intention der Benutzer*innen anhand ihrer Anfragen zu erkennen, unabh\u00e4ngig davon, ob sie eine sehr spezifische oder eher allgemeine Sprache verwenden. Sie k\u00f6nnen erkennen, was die Benutzer*innen erreichen m\u00f6chten und den besten Weg zum Erreichen dieses Ziels bestimmen.<\/li>\n<li><strong>Sentimentanalyse: <\/strong>Chatbots k\u00f6nnen die Emotionen ihres Gegen\u00fcbers durch den verwendeten Sprachton erkennen und sich daran anpassen, was die Interaktionsbereitschaft der Benutzerinnen erh\u00f6ht.<\/li>\n<\/ul>\n<h3 class=\"wp-block-heading\"><strong>Erzeugung nat\u00fcrlicher Sprache (NLG)<\/strong><\/h3>\n<ul>\n<li><strong>Antwortgenerierung: <\/strong>Wenn an LLMs Fragen gestellt werden, geben sie Antworten, die sowohl grammatikalisch als auch in Bezug auf den Kontext korrekt sind. Das liegt daran, dass die Antworten, die diese Modelle erzeugen, die menschliche Kommunikation nachahmen. Erm\u00f6glicht wird dies durch das Trainieren der Modelle mit riesigen Mengen an nat\u00fcrlichsprachlichen Textdaten.<\/li>\n<li><strong>Kreativit\u00e4t und Flexibilit\u00e4t:<\/strong> Neben einfachen Antworten k\u00f6nnen LLM-basierte Chatbots auch eine Geschichte erz\u00e4hlen, ein Gedicht verfassen oder eine detaillierte Beschreibung eines bestimmten technischen Problems geben \u2013 sie sind also sehr flexibel in Bezug auf das bereitgestellte Material.<\/li>\n<\/ul>\n<h3 class=\"wp-block-heading\"><strong>Personalisierung und Anpassungsf\u00e4higkeit<\/strong><\/h3>\n<ul>\n<li><strong>Lernen aus Interaktionen: <\/strong>Chatbots personalisieren ihre Interaktionen, da sie die F\u00e4higkeit haben, aus dem Verhalten und den Entscheidungen der Benutzer*innen zu lernen. Man kann sagen, dass Chatbots st\u00e4ndig dazulernen und dadurch bei der Beantwortung von Fragen effektiver und pr\u00e4ziser werden.<\/li>\n<li><strong>Anpassung an unterschiedliche Gebiete: <\/strong>LLMs k\u00f6nnen auf bestimmte Bereiche oder Spezialgebiete abgestimmt werden. Auf diese Weise k\u00f6nnen Chatbots als Fachexperten etwa im Kundenbeziehungsmanagement, im technischen Support oder im Gesundheitswesen auftreten.<\/li>\n<\/ul>\n<p>LLMs k\u00f6nnen Text in mehreren Sprachen verstehen und generieren, was sie f\u00fcr den Einsatz in verschiedenen linguistischen Kontexten pr\u00e4destiniert.<\/p>\n<h2 class=\"wp-block-heading\"><strong>Erstellen eines eigenen Chatbots mit LangChain in f\u00fcnf Schritten<\/strong><\/h2>\n<p>Ziel dieses Projekts ist die Entwicklung eines Chatbots, der GPT-3 nutzt, um in Dokumenten Antworten auf Fragen zu finden. Als Erstes laden wir Inhalte aus Online-Artikeln herunter, zerlegen sie in kleine Teile, berechnen deren Embeddings und speichern sie in Deep Lake. Anschlie\u00dfend verwenden wir eine Benutzerabfrage, um die relevantesten Teile aus Deep Lake abzurufen und diese in einen Prompt zu integrieren, um die endg\u00fcltige Antwort vom LLM generieren zu lassen.<\/p>\n<p>Es ist wichtig zu wissen, dass die Verwendung von LLMs das Risiko birgt, falsche Informationen \u2013 sogenannte Halluzinationen \u2013 zu generieren. Auch wenn dies in vielen Kundensupport-Szenarien inakzeptabel ist, kann der Chatbot dennoch wertvoll sein, um Mitarbeitende beim Verfassen von Antworten zu unterst\u00fctzen, die sie dann \u00fcberpr\u00fcfen, bevor sie sie an Benutzer*innen weitersenden.<\/p>\n<p>Als N\u00e4chstes sehen wir uns an, wie Unterhaltungen mit GPT-3 verwaltet werden k\u00f6nnen und zeigen die Effektivit\u00e4t dieses Workflows anhand von Beispielen.<\/p>\n<h3 class=\"wp-block-heading\"><strong>Schritt 1: Projekterstellung, Voraussetzungen und Installation der Bibliotheken<\/strong><\/h3>\n<p>Erstellen Sie als Erstes Ihr PyCharm-Projekt f\u00fcr den Chatbot. \u00d6ffnen Sie <a href=\"https:\/\/www.jetbrains.com\/de-de\/pycharm\/\" target=\"_blank\" rel=\"noopener\" data-type=\"link\" data-id=\"https:\/\/www.jetbrains.com\/de-de\/pycharm\/\">PyCharm<\/a> und klicken Sie auf \u201eNew project\u201c. Geben Sie dann Ihrem Projekt einen Namen.<\/p>\n<figure class=\"wp-block-image size-full is-style-default\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-504042\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2024\/08\/unnamed-1.png\" alt=\"Erstellen Sie ein PyCharm-Projekt\" width=\"780\" height=\"638\" \/><\/figure>\n<p>Nachdem Sie das Projekt eingerichtet haben, generieren Sie Ihren &#8216;<code>OPENAI_API_KEY<\/code>&#8216; auf der <a href=\"https:\/\/platform.openai.com\/docs\/overview\" target=\"_blank\" rel=\"noopener\">Website der OpenAI-API-Plattform<\/a>. Dazu m\u00fcssen Sie sich einloggen (bzw. sich auf der OpenAI-Website zu diesem Zweck registrieren). \u00d6ffnen Sie dazu den Bereich \u201eAPI Keys\u201c im linken Navigationsmen\u00fc und klicken Sie dann auf die Schaltfl\u00e4che \u201e+Create new secret key\u201c. Denken Sie daran, Ihren Schl\u00fcssel zu kopieren.<\/p>\n<p>Danach m\u00fcssen Sie Ihren &#8216;<code>ACTIVELOOP_TOKEN<\/code>&#8216; beziehen. Hierzu registrieren Sie sich auf der <a href=\"https:\/\/www.activeloop.ai\/\" target=\"_blank\" rel=\"noopener\">Activeloop-Website<\/a>. Sobald Sie eingeloggt sind, klicken Sie einfach auf die Schaltfl\u00e4che \u201eCreate API Token\u201c, um zur Seite f\u00fcr die Erstellung des Tokens weitergeleitet zu werden. Kopieren Sie auch diesen Token.<\/p>\n<p>Wenn Sie sowohl den Token als auch den Schl\u00fcssel erhalten haben, \u00f6ffnen Sie Ihre Konfigurationseinstellungen in PyCharm, indem Sie auf die Schaltfl\u00e4che mit den drei Punkten neben den Schaltfl\u00e4chen Ausf\u00fchren und Debuggen klicken, und w\u00e4hlen Sie \u201eEdit\u201c. Sie sollten das folgende Fenster sehen:<\/p>\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-504079\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2024\/08\/unnamed-3.png\" alt=\"Run\/Debug-Konfigurationen in PyCharm\" width=\"1382\" height=\"989\" \/><\/figure>\n<p>Suchen Sie nun das Feld \u201eEnvironment variables\u201c und das Symbol rechts neben dem Feld. Wenn Sie darauf klicken, erscheint das folgende Fenster:<\/p>\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-544577\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/02\/unnamed-1.png\" alt=\"Umgebungsvariablen in PyCharm\" width=\"1382\" height=\"989\" \/><\/figure>\n<p>Klicken Sie nun auf die Schaltfl\u00e4che + und geben Sie Ihre Umgebungsvariablen ein \u2013 achten Sie dabei auf die genaue Schreibweise. Wie oben zu sehen sollten die Variablen wie folgt lauten: &#8216;<code>OPENAI_API_KEY<\/code>&#8216; und &#8216;<code>ACTIVELOOP_TOKEN<\/code>\u2018. Wenn Sie fertig sind, klicken Sie im ersten Fenster auf \u201eOK\u201c und im zweiten Fenster auf \u201eApply\u201c und \u201eOK\u201c.<\/p>\n<p>Das ist ein gro\u00dfer Vorteil von PyCharm und ich mag es sehr, weil es die Umgebungsvariablen automatisch f\u00fcr uns handhabt, ohne dass wir zus\u00e4tzliche Aufrufe verwenden m\u00fcssen. So k\u00f6nnen wir uns auf den kreativen Teil des Codes konzentrieren.<\/p>\n<p><em>Hinweis: <\/em><strong><em>Activeloop<\/em><\/strong><em> ist ein Technologieunternehmen, das sich der Entwicklung von Dateninfrastrukturen und Tools f\u00fcr maschinelles Lernen und k\u00fcnstliche Intelligenz widmet. Ziel des Unternehmens ist es, die Verwaltung, Speicherung und Verarbeitung gro\u00dfer Datenmengen zu vereinfachen, insbesondere f\u00fcr Deep Learning und andere KI-Anwendungen.<\/em><\/p>\n<p><strong><em>Deep Lake<\/em><\/strong><em> ist das Hauptprodukt von Activeloop. F\u00fcr die Speicherung, das Management und den Zugriff auf Daten stellt es effiziente Funktionen bereit. Diese sind f\u00fcr gro\u00dfe Datensammlungen optimiert, die h\u00e4ufig in KI-Anwendungen verwendet werden.<\/em><\/p>\n<h4 class=\"wp-block-heading\"><strong>Erforderliche Bibliotheken installieren<\/strong><\/h4>\n<p>Wir verwenden die Klasse &#8216;<code>SeleniumURLLoader<\/code>&#8216; von LangChain, die auf die Python-Bibliotheken &#8216;<code>unstructured<\/code>&#8216; und &#8216;<code>selenium<\/code>&#8216; zur\u00fcckgreift. Installieren Sie diese mit pip.\u00a0 Es ist empfehlenswert, die neueste Version zu installieren, obwohl der Code speziell mit Version 0.7.7 getestet wurde.<\/p>\n<p>Geben Sie dazu den folgenden Befehl in Ihrem PyCharm-Terminal ein:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">pip install unstructured selenium<\/pre>\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-544604\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/02\/Install-Selenium-1.png\" alt=\"\" width=\"1385\" height=\"991\" \/><\/figure>\n<p>Jetzt m\u00fcssen wir noch <code>langchain<\/code>, <code>deeplake<\/code> und <code>openai<\/code> installieren. Verwenden Sie dazu diesen Befehl in Ihrem Terminal (dasselbe Fenster, das Sie auch f\u00fcr Selenium verwendet haben) und warten Sie ein wenig, bis alles erfolgreich installiert wurde:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">pip install langchain==0.0.208 deeplake openai==0.27.8 psutil tiktoken<\/pre>\n<p>Um sicherzustellen, dass alle Bibliotheken korrekt installiert sind, geben Sie einfach die folgenden Zeilen ein, die f\u00fcr unsere Chatbot-App ben\u00f6tigt werden, und klicken Sie auf die Run-Schaltfl\u00e4che:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">from langchain.embeddings.openai import OpenAIEmbeddings\n\nfrom langchain.vectorstores import DeepLake\n\nfrom langchain.text_splitter import CharacterTextSplitter\n\nfrom langchain import OpenAI\n\nfrom langchain.document_loaders import SeleniumURLLoader\n\nfrom langchain import PromptTemplate<\/pre>\n<p>Alternativ k\u00f6nnen Sie Ihre Bibliotheken auch in den Einstellungen von PyCharm installieren. \u00d6ffnen Sie die Einstellungen und gehen Sie zum Abschnitt Project -&gt; Python Interpreter. Suchen Sie dann \u00fcber die Schaltfl\u00e4che + nach Ihrem Paket und klicken Sie auf \u201eInstall Package\u201c. Sobald der Vorgang abgeschlossen ist, schlie\u00dfen Sie das Fenster und klicken im n\u00e4chsten Fenster auf \u201eApply\u201c und dann auf \u201eOK\u201c.<\/p>\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-503888\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2024\/08\/image-38.png\" alt=\"Python-Interpreter in PyCharm\" width=\"1012\" height=\"759\" \/><\/figure>\n<h3 class=\"wp-block-heading\"><strong>Schritt 2: Inhalte aufteilen und Embeddings berechnen<\/strong><\/h3>\n<p>Wie bereits erw\u00e4hnt soll unser Chatbot mit Inhalten aus Online-Artikeln \u201ekommunizieren\u201c. Aus diesem Grund habe ich Digitaltrends.com als Datenquelle gew\u00e4hlt und zun\u00e4chst 8 Artikel ausgew\u00e4hlt. Alle werden in eine Python-Liste aufgenommen und der Variablen \u201earticles\u201c zugewiesen.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">articles = ['https:\/\/www.digitaltrends.com\/computing\/claude-sonnet-vs-gpt-4o-comparison\/',\n           'https:\/\/www.digitaltrends.com\/computing\/apple-intelligence-proves-that-macbooks-need-something-more\/',\n           'https:\/\/www.digitaltrends.com\/computing\/how-to-use-openai-chatgpt-text-generation-chatbot\/',\n           'https:\/\/www.digitaltrends.com\/computing\/character-ai-how-to-use\/',\n           'https:\/\/www.digitaltrends.com\/computing\/how-to-upload-pdf-to-chatgpt\/']<\/pre>\n<p>Wir laden die Dokumente von den angegebenen URLs herunter und teilen sie mit &#8216;<code>CharacterTextSplitter<\/code>&#8216; in Chunks von der Gr\u00f6\u00dfe 1000 ohne \u00dcberlappung:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># Use the selenium to load the documents\nloader = SeleniumURLLoader(urls=articles)\ndocs_not_splitted = loader.load()\n\n# Split the documents into smaller chunks\ntext_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)\ndocs = text_splitter.split_documents(docs_not_splitted)<\/pre>\n<p>Wenn Sie den bisherigen Code ausf\u00fchren, sollten Sie den folgenden Output erhalten:<\/p>\n<p><em><code>[Document(page_content=\"techcrunchnntechcrunchnnWe, TechCrunch, are part of the Yahoo family of brandsThe sites and apps that we own and operate, including Yahoo and AOL, and our digital advertising service, Yahoo Advertising.Yahoo family of brands.nn\u00a0 \u00a0 When you use our sites and apps, we use nnCookiesCookies (including similar technologies such as web storage) allow the operators of websites and apps to store and read information from your device. Learn more in our cookie policy.cookies to:nnprovide our sites and apps to younnauthenticate users, apply security measures, and prevent spam and abuse, andnnmeasure your use of our sites and appsnn\u00a0 \u00a0 If you click '\", metadata={'source':\u00a0\u2026\u2026\u2026\u2026\u2026]<\/code><\/em><\/p>\n<p>Als N\u00e4chstes generieren wir die Embeddings mit OpenAIEmbeddings und speichern sie in einem Deep Lake-Vektorspeicher in der Cloud. In einer Produktionsumgebung k\u00f6nnten wir im Idealfall eine komplette Website oder das Material f\u00fcr einen ganzen Kurs in eine Deep Lake Datensammlung hochladen, um eine Suche in Tausenden oder sogar Millionen von Dokumenten zu erm\u00f6glichen.<\/p>\n<p>Durch die Nutzung einer serverlosen Deep-Lake-Datensammlung in der Cloud k\u00f6nnen Anwendungen von verschiedenen Orten aus reibungslos auf eine zentralisierte Datensammlung zugreifen, ohne einen Vektorspeicher auf einem dedizierten System einzurichten.<\/p>\n<h4 class=\"wp-block-heading\"><strong>Warum brauchen wir Embeddings und in Chunks geteilte Dokumente?<\/strong><\/h4>\n<p>Bei der Entwicklung von Chatbots mit LangChain sind Embeddings und das Aufteilen von Dokumenten in Chunks unerl\u00e4sslich, und zwar aus mehreren Gr\u00fcnden, die mit der Effizienz, der Korrektheit und der Performance des Chatbots zusammenh\u00e4ngen.<\/p>\n<p><strong>Embeddings<\/strong> sind Vektordarstellungen, die die semantische Bedeutung von Textinhalten (W\u00f6rtern, S\u00e4tzen, Abs\u00e4tzen oder Dokumenten) erfassen. Sie stellen den Kontext und die Bedeutung der W\u00f6rter in numerischer Form dar. Dies erm\u00f6glicht es dem Chatbot, Sprache zu verstehen und kontextbasierte Antworten zu generieren, indem er Nuancen, Synonyme und Beziehungen zwischen W\u00f6rtern erfasst.<\/p>\n<p>Der Chatbot kann au\u00dferdem die relevantesten Antworten oder Informationen in einer Wissensdatenbank identifizieren und abrufen, denn die Embeddings erm\u00f6glichen es, Benutzeranfragen den semantisch relevantesten Informationsteilen zuzuordnen, selbst wenn der Wortlaut unterschiedlich ist.<\/p>\n<p>Beim <strong>Chunking<\/strong> wiederum geht es um die Aufteilung gro\u00dfer Dokumente in kleinere, \u00fcberschaubare St\u00fccke (Chunks). Kleinere Chunks lassen sich schneller verarbeiten und analysieren als gro\u00dfe, monolithische Dokumente. Dies steigert die Reaktionsschnelligkeit des Chatbots.<\/p>\n<p>Das Chunking von Dokumenten f\u00f6rdert auch die Relevanz des Outputs, denn wenn Benutzer*innen eine Frage stellen, findet sich die Antwort oft nur in einem bestimmten Teil eines Dokuments. Durch Chunking kann das System die relevanten Abschnitte eingrenzen und abrufen, und der Chatbot kann pr\u00e4zisere und korrektere Antworten geben.<\/p>\n<p>Kehren wir nun zu unserer Anwendung zur\u00fcck und aktualisieren wir den folgenden Code, indem wir Ihre Activeloop-Organisations-ID einf\u00fcgen. Beachten Sie, dass Ihre Organisations-ID standardm\u00e4\u00dfig Ihrem Benutzernamen entspricht.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># TODO: use your organization id here. (by default, org id is your username)\nmy_activeloop_org_id = \"didogrigorov\"\nmy_activeloop_dataset_name = \"jetbrains_article_dataset\"\ndataset_path = f\"hub:\/\/{my_activeloop_org_id}\/{my_activeloop_dataset_name}\"\ndb = DeepLake(dataset_path=dataset_path, embedding_function=embeddings)\n\n\n# add documents to our Deep Lake dataset\ndb.add_documents(docs)<\/pre>\n<p>Eine weitere gro\u00dfartige Funktion von PyCharm ist die M\u00f6glichkeit, TODO-Anmerkungen direkt in Python-Kommentaren einzuf\u00fcgen. Wenn Sie TODO in Gro\u00dfbuchstaben eingeben, wird Ihre Notiz in einem PyCharm-Bereich angezeigt, der Ihnen einen \u00dcberblick \u00fcber alle Todo-Eintr\u00e4ge bietet:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># TODO: use your organization id here. (by default, org id is your username)<\/pre>\n<p>Sie k\u00f6nnen sie anklicken und PyCharm zeigt Ihnen direkt, wo sie sich in Ihrem Code befinden. Ich finde das sehr praktisch f\u00fcr die Entwicklung und nutze es st\u00e4ndig:<\/p>\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-503899\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2024\/08\/image-39.png\" alt=\"TODO-Anmerkungen innerhalb von Python-Kommentaren in PyCharm\" width=\"1445\" height=\"993\" \/><\/figure>\n<p>Wenn Sie den bisherigen Code ausf\u00fchren, sollten Sie die folgende Ausgabe sehen, wenn alles normal funktioniert:<\/p>\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-504068\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2024\/08\/unnamed-2.png\" alt=\"Ausf\u00fchrung des Chatbot-Codes in PyCharm\" width=\"1377\" height=\"989\" \/><\/figure>\n<p>Um die Chunks zu finden, die einer bestimmten Abfrage am \u00e4hnlichsten sind, k\u00f6nnen wir die Methode similarity_search des Deep-Lake-Vektorspeichers verwenden:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># Check the top relevant documents to a specific query\nquery = \"how to check disk usage in linux?\"\ndocs = db.similarity_search(query)\nprint(docs[0].page_content)<\/pre>\n<h3 class=\"wp-block-heading\"><strong>Schritt 3: Prompt f\u00fcr GPT-3 erstellen<\/strong><\/h3>\n<p>Wir erstellen eine Promptvorlage, die Rollen-Prompting, relevante Daten aus der Wissensdatenbank sowie die Benutzerfrage enth\u00e4lt. Diese Vorlage etabliert die Pers\u00f6nlichkeit des Chatbots als herausragende Supportkraft. Sie hat zwei Eingabevariablen: chunks_formatted enth\u00e4lt die vorformatierten Artikelausz\u00fcge, und query enth\u00e4lt die Kundenfrage. Das Ziel ist es, eine pr\u00e4zise Antwort ausschlie\u00dflich auf Grundlage der vorgegebenen Chunks zu erstellen und dabei jegliche erfundenen oder nicht korrekten Informationen zu vermeiden.<\/p>\n<h3 class=\"wp-block-heading\"><strong>Schritt 4: Chatbot-Funktionalit\u00e4t aufbauen<\/strong><\/h3>\n<p>Um eine Antwort zu generieren, rufen wir zun\u00e4chst die obersten k (z.\u00a0B. 3) Chunks ab, die der Benutzeranfrage am \u00e4hnlichsten sind. Diese Chunks werden dann zu einem Prompt formatiert, der mit einer Temperatureinstellung von 0 an das GPT-3-Modell gesendet wird.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># user question\nquery = \"How to check disk usage in linux?\"\n\n# retrieve relevant chunks\ndocs = db.similarity_search(query)\nretrieved_chunks = [doc.page_content for doc in docs]\n\n# format the prompt\nchunks_formatted = \"nn\".join(retrieved_chunks)\nprompt_formatted = prompt.format(chunks_formatted=chunks_formatted, query=query)\n\n# generate answer\nllm = OpenAI(model=\"gpt-3.5-turbo-instruct\", temperature=0)\nanswer = llm(prompt_formatted)\nprint(answer)<\/pre>\n<p>Wenn alles funktioniert, sollte Ihre Ausgabe so aussehen:<\/p>\n<p><em><code>To upload a PDF to ChatGPT, first log into the website and click the paperclip icon next to the text input field. W\u00e4hlen Sie dann die PDF-Datei von Ihrer lokalen Festplatte, Google Drive oder Microsoft OneDrive aus. Wenn Sie die Datei angeh\u00e4ngt haben, geben Sie Ihre Anfrage oder Frage in das Eingabefeld ein und klicken Sie auf die Schaltfl\u00e4che \u201eHochladen\u201c. Geben Sie dem System Zeit, die PDF-Datei zu analysieren und Ihnen eine Antwort zu geben.<\/code><\/em><\/p>\n<h3 class=\"wp-block-heading\"><strong>Schritt 5: Gespr\u00e4chsverlauf erstellen<\/strong><\/h3>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># Create conversational memory\nmemory = ConversationBufferMemory(memory_key=\"chat_history\", input_key=\"input\")\n\n# Define a prompt template that includes memory\ntemplate = \"\"\"You are an exceptional customer support chatbot that gently answers questions.\n\n{chat_history}\n\nYou know the following context information.\n\n{chunks_formatted}\n\nAnswer the following question from a customer. Use only information from the previous context information. Do not invent stuff.\n\nQuestion: {input}\n\nAnswer:\"\"\"\n\nprompt = PromptTemplate(\n    input_variables=[\"chat_history\", \"chunks_formatted\", \"input\"],\n    template=template,\n)\n\n# Initialize the OpenAI model\nllm = OpenAI(openai_api_key=\"YOUR API KEY\", model=\"gpt-3.5-turbo-instruct\", temperature=0)\n\n# Create the LLMChain with memory\nchain = LLMChain(\n    llm=llm,\n    prompt=prompt,\n    memory=memory\n)\n\n# User query\nquery = \"What was the 5th point about on the question how to remove spotify account?\"\n\n# Retrieve relevant chunks\ndocs = db.similarity_search(query)\nretrieved_chunks = [doc.page_content for doc in docs]\n\n# Format the chunks for the prompt\nchunks_formatted = \"nn\".join(retrieved_chunks)\n\n# Prepare the input for the chain\ninput_data = {\n    \"input\": query,\n    \"chunks_formatted\": chunks_formatted,\n    \"chat_history\": memory.buffer\n}\n\n# Simulate a conversation\nresponse = chain.predict(**input_data)\n\nprint(response)<\/pre>\n<p>Gehen wir den Code im Einzelnen durch.<\/p>\n<p>Zun\u00e4chst legen wir mit &#8216;<code>ConversationBufferMemory<\/code>&#8216; einen Konversationsspeicher an. So kann sich unser Chatbot den Chatverlauf merken und mit &#8216;<code>input_key=\"input\"<\/code>&#8216; den Benutzerinput verwalten.<\/p>\n<p>Als N\u00e4chstes erstellen wir eine Promptvorlage. Diese Vorlage ist wie ein Skript f\u00fcr den Chatbot und enth\u00e4lt Abschnitte f\u00fcr den Chatverlauf, die gesammelten Informationsteile und den aktuellen Benutzerinput (Frage). Durch diese Struktur wei\u00df der Chatbot genau, welchen Kontext er zu ber\u00fccksichtigen hat und welche Frage er beantworten muss.<\/p>\n<p>Danach initialisieren wir unsere Sprachmodellkette mit &#8216;<code>LLMChain<\/code>&#8216;. Wir k\u00f6nnen uns dies als einen Zusammenbau von Einzelteilen vorstellen: Wir nehmen unsere Promptvorlage, das Sprachmodell und den im Vorfeld eingerichteten Speicher und kombinieren sie zu einem Workflow.<\/p>\n<p>Wenn es soweit ist und wir eine Benutzerfrage bearbeiten m\u00fcssen, bereiten wir den Input vor. Dabei wird ein Dictionary erstellt, das die Benutzerfrage (&#8216;<code>input<\/code>&#8216;) und die entsprechenden Informationsteile (&#8216;<code>chunks_formatted<\/code>&#8216;) enth\u00e4lt. Durch diese Einrichtung stellen wir sicher, dass der Chatbot \u00fcber alle Informationen verf\u00fcgt, die er f\u00fcr eine fundierte Antwort ben\u00f6tigt.<\/p>\n<p>Schlie\u00dflich generieren wir die Antwort. Wir rufen die Methode &#8216;<code>chain.predict<\/code>&#8216; mit unseren vorbereiteten Input-Daten auf. Die Methode verarbeitet diese Eingaben gem\u00e4\u00df dem von uns vorgegebenen Workflow und gibt uns die Antwort des Chatbots zur\u00fcck, die wir dann anzeigen.<\/p>\n<p>Durch diesen Ansatz kann unser Chatbot eine fl\u00fcssige, informierte Unterhaltung f\u00fchren, sich an vergangene Interaktionen erinnern und unter Ber\u00fccksichtigung des Kontexts relevante Antworten bereitstellen.<\/p>\n<p>Ein weiterer meiner Lieblingstricks in PyCharm, der mir bei der Erstellung dieser Funktionalit\u00e4t sehr geholfen hat, war die M\u00f6glichkeit, mit gedr\u00fcckter Strg-Taste eine Methode anzuklicken.<\/p>\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-544616\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/02\/put-my-cursor-over-a-method.gif\" alt=\"Cursor auf eine Methode setzen\" width=\"1200\" height=\"805\" \/><\/figure>\n<h2 class=\"wp-block-heading\"><strong>Fazit<\/strong><\/h2>\n<p>GPT-3 eignet sich hervorragend f\u00fcr die Erstellung von Chatbots, die spezifische Fragen auf Grundlage der im Prompt bereitgestellten Kontextinformationen beantworten. Sicherzustellen, dass das Modell seine Antworten ausschlie\u00dflich auf der Grundlage dieses Kontexts generiert, kann allerdings schwierig sein, denn das Modell halluziniert gerne (d.\u00a0h. es erfindet neue, m\u00f6glicherweise falsche Informationen). Die Auswirkungen solcher Fehlinformationen sind je nach Anwendungsfall unterschiedlich.<\/p>\n<p>Abschlie\u00dfend k\u00f6nnen wir festhalten, dass wir mit LangChain unter Verwendung der bereitgestellten Codeabschnitte und Strategien ein kontextsensitives Frage-Antwort-System entwickelt haben. Dabei haben wir Dokumente in Chunks aufgeteilt, ihre Embeddings berechnet, ein Abfragesystem zum Auffinden \u00e4hnlicher Chunks implementiert, einen Prompt f\u00fcr GPT-3 erstellt und das GPT-3-Modell f\u00fcr die Textgenerierung verwendet. Dieser Ansatz zeigt das Potenzial, mit GPT-3 leistungsstarke und kontextbasierte Chatbots zu erstellen. Gleichzeitig wird erkennbar, wie wichtig es ist, auf die Gefahr der Generierung von Falschinformationen zu achten.<\/p>\n<h2 id=\"author\" class=\"wp-block-heading\"><strong>Zum Autor<\/strong><\/h2>\n<div class=\"about-author \">\n<div class=\"about-author__box\">\n<div class=\"row\">\n<div class=\"about-author__box-img\"><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2024\/08\/dido-grigorov.jpeg\" alt=\"Dido Grigorov\" \/><\/div>\n<div class=\"about-author__box-text\">\n<h4>Dido Grigorov<\/h4>\n<p><i><span style=\"font-weight: 400;\">Dido ist erfahrener Deep-Learning-Engineer und Python-Programmierer mit beeindruckenden 17 Jahren Erfahrung in diesem Bereich. Derzeit absolviert er ein Aufbaustudium an der renommierten Stanford University, wo er in einem hochmodernen KI-Studiengang eingeschrieben ist, der von renommierten Fachleuten wie Andrew Ng, Christopher Manning, Fei-Fei Li und Chelsea Finn geleitet wird und Dido unvergleichliche Einblicke und Mentoring bietet.<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">Didos Leidenschaft f\u00fcr k\u00fcnstliche Intelligenz zeigt sich in seiner Leidenschaft sowohl f\u00fcr seine Arbeit als auch f\u00fcr das Experimentieren. Im Laufe der Jahre hat er sich ein umfassendes Fachwissen in der Entwicklung, Implementierung und Optimierung von Modellen f\u00fcr maschinelles Lernen angeeignet. Dank seiner Python-Kenntnisse konnte er komplexe Probleme angehen und zu innovativen KI-L\u00f6sungen in verschiedenen Bereichen beitragen.<\/span><\/i><\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p><strong>Autorin des urspr\u00fcnglichen Blogposts<\/strong><\/p>\n\n    <div class=\"about-author \">\n        <div class=\"about-author__box\">\n            <div class=\"row\">\n                <div class=\"about-author__box-img\">\n                    <img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2021\/03\/evgenia-200x200.jpg\" width=\"200\" height=\"200\" alt=\"Evgenia Verbina\" loading=\"lazy\"  class=\"avatar avatar-200 wp-user-avatar wp-user-avatar-200 photo avatar-default\">\n                <\/div>\n                <div class=\"about-author__box-text\">\n                                            <h4>Evgenia Verbina<\/h4>\n                                                        <\/div>\n            <\/div>\n        <\/div>\n    <\/div>\n","protected":false},"author":811,"featured_media":569643,"comment_status":"closed","ping_status":"closed","template":"","categories":[952,1401],"tags":[6230,8556,8557],"cross-post-tag":[],"acf":[],"_links":{"self":[{"href":"https:\/\/blog.jetbrains.com\/de\/wp-json\/wp\/v2\/pycharm\/569629"}],"collection":[{"href":"https:\/\/blog.jetbrains.com\/de\/wp-json\/wp\/v2\/pycharm"}],"about":[{"href":"https:\/\/blog.jetbrains.com\/de\/wp-json\/wp\/v2\/types\/pycharm"}],"author":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/de\/wp-json\/wp\/v2\/users\/811"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/de\/wp-json\/wp\/v2\/comments?post=569629"}],"version-history":[{"count":4,"href":"https:\/\/blog.jetbrains.com\/de\/wp-json\/wp\/v2\/pycharm\/569629\/revisions"}],"predecessor-version":[{"id":569656,"href":"https:\/\/blog.jetbrains.com\/de\/wp-json\/wp\/v2\/pycharm\/569629\/revisions\/569656"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/de\/wp-json\/wp\/v2\/media\/569643"}],"wp:attachment":[{"href":"https:\/\/blog.jetbrains.com\/de\/wp-json\/wp\/v2\/media?parent=569629"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/de\/wp-json\/wp\/v2\/categories?post=569629"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/de\/wp-json\/wp\/v2\/tags?post=569629"},{"taxonomy":"cross-post-tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/de\/wp-json\/wp\/v2\/cross-post-tag?post=569629"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}