{"id":15132,"date":"2024-03-31T18:25:36","date_gmt":"2024-03-31T14:55:36","guid":{"rendered":"https:\/\/www.itpiran.net\/blog\/?p=15132"},"modified":"2024-03-31T19:25:29","modified_gmt":"2024-03-31T15:55:29","slug":"fullstack-llm-langchain-chatbot-on-aws","status":"publish","type":"post","link":"https:\/\/www.itpiran.net\/blog\/de\/amazon\/fullstack-llm-langchain-chatbot-on-aws\/","title":{"rendered":"Entwicklung eines leistungsstarken Full-Stack-Chatbots durch Extraktion von Informationen aus unstrukturierten Dokumenten"},"content":{"rendered":"<h2 id=\"%d9%85%d9%82%d8%af%d9%85%d9%87\">Einf\u00fchrung<\/h2>\n<p>Stellen Sie sich vor, Sie k\u00f6nnten mit Ihren unstrukturierten Daten kommunizieren und dabei m\u00fchelos wertvolle Informationen extrahieren. In der heutigen datengetriebenen Welt stellt die Gewinnung aussagekr\u00e4ftiger Erkenntnisse aus unstrukturierten Dokumenten nach wie vor eine Herausforderung dar und behindert Entscheidungsfindung und Innovation. In diesem Tutorial lernen Sie Embeddings kennen, erkunden die Nutzung von Amazon OpenSearch als Vektordatenbank und integrieren das Langchain-Framework mit Large Language Models (LLMs), um eine Website mit einem eingebetteten NLP-Chatbot zu erstellen. Wir behandeln die Grundlagen von LLMs, um mithilfe eines Open-Source-LLMs aussagekr\u00e4ftige Erkenntnisse aus unstrukturierten Dokumenten zu gewinnen. Am Ende dieses Tutorials verf\u00fcgen Sie \u00fcber ein umfassendes Verst\u00e4ndnis daf\u00fcr, wie Sie aussagekr\u00e4ftige Erkenntnisse aus unstrukturierten Dokumenten gewinnen und diese F\u00e4higkeiten nutzen k\u00f6nnen, um \u00e4hnliche Full-Stack-KI-basierte L\u00f6sungen zu entwickeln und Innovationen voranzutreiben.<\/p>\n<h5 id=\"%d9%be%db%8c%d8%b4-%d9%86%db%8c%d8%a7%d8%b2%d9%87%d8%a7\">Voraussetzungen<\/h5>\n<ul>\n<li>Sie ben\u00f6tigen ein aktives AWS-Konto. Falls Sie noch keines besitzen, k\u00f6nnen Sie sich auf der AWS-Website registrieren.<\/li>\n<li>Stellen Sie sicher, dass die AWS-Befehlszeilenschnittstelle (CLI) auf Ihrem lokalen Rechner installiert und mit den erforderlichen Anmeldeinformationen und der Standardregion korrekt konfiguriert ist. Die Konfiguration erfolgt mit dem Befehl `aws configure`.<\/li>\n<li>Laden Sie Docker Engine herunter und installieren Sie es. Befolgen Sie die Installationsanweisungen f\u00fcr Ihr spezifisches Betriebssystem.<\/li>\n<\/ul>\n<h2 id=\"%d9%82%d8%b1%d8%a7%d8%b1-%d8%a7%d8%b3%d8%aa-%da%86%d9%87-%da%86%db%8c%d8%b2%db%8c-%d8%a8%d8%b3%d8%a7%d8%b2%db%8c%d9%85%d8%9f\">Was werden wir bauen?<\/h2>\n<p>In diesem Beispiel simulieren wir ein Problem, mit dem viele Unternehmen konfrontiert sind. Ein Gro\u00dfteil der heutigen Daten ist unstrukturiert und liegt beispielsweise in Form von Audio- und Videotranskripten, PDF- und Word-Dokumenten, Handb\u00fcchern, gescannten Notizen, Social-Media-Transkripten usw. vor. Wir verwenden das Flan-T5 XXL-Modell als LLM (Low-Level-Matrix). Dieses Modell kann Zusammenfassungen und FAQs aus unstrukturierten Texten generieren. Die Abbildung unten zeigt die Architektur der verschiedenen Bausteine.<\/p>\n<h2 id=\"%d8%a8%db%8c%d8%a7%db%8c%db%8c%d8%af-%d8%a8%d8%a7-%d8%a7%d8%b5%d9%88%d9%84-%d8%b4%d8%b1%d9%88%d8%b9-%da%a9%d9%86%db%8c%d9%85\"><img  loading=\"lazy\"  decoding=\"async\"  src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAAA1BMVEUAAP+KeNJXAAAAAXRSTlMAQObYZgAAAAlwSFlzAAAOxAAADsQBlSsOGwAAAApJREFUCNdjYAAAAAIAAeIhvDMAAAAASUVORK5CYII=\"  alt=\"\"  width=\"750\"  height=\"482\"  class=\"aligncenter wp-image-15133 size-full pk-lazyload\"  data-pk-sizes=\"auto\"  data-ls-sizes=\"auto, (max-width: 750px) 100vw, 750px\"  data-pk-src=\"https:\/\/cdn.itpiran.net\/2024\/03\/31141557\/1-1.webp\"  data-pk-srcset=\"https:\/\/cdn.itpiran.net\/2024\/03\/31141557\/1-1.webp 750w, https:\/\/cdn.itpiran.net\/2024\/03\/31141557\/1-1-300x193.webp 300w, https:\/\/cdn.itpiran.net\/2024\/03\/31141557\/1-1-110x71.webp 110w, https:\/\/cdn.itpiran.net\/2024\/03\/31141557\/1-1-200x129.webp 200w, https:\/\/cdn.itpiran.net\/2024\/03\/31141557\/1-1-380x244.webp 380w, https:\/\/cdn.itpiran.net\/2024\/03\/31141557\/1-1-255x164.webp 255w, https:\/\/cdn.itpiran.net\/2024\/03\/31141557\/1-1-550x353.webp 550w\" ><br \/>\nFangen wir mit den Grundlagen an.<\/h2>\n<p>Wir verwenden eine Technik namens kontextbezogenes Lernen, um dom\u00e4nen- oder fallbezogenen \u201cKontext\u201d in unser Lernmodell (LLM) einzubinden. Konkret handelt es sich um ein unstrukturiertes PDF-Handbuch f\u00fcr ein Auto, das wir als \u00abKontext\u00bb f\u00fcr das LLM hinzuf\u00fcgen m\u00f6chten. Das LLM soll dann Fragen zu diesem Handbuch beantworten. So einfach ist das! Unser Ziel ist es, einen Schritt weiterzugehen und eine Echtzeit-API zu entwickeln, die Fragen empf\u00e4ngt, an unser Backend weiterleitet und \u00fcber einen in die Website eingebetteten Open-Source-Chatbot zug\u00e4nglich ist. Dieses Tutorial erm\u00f6glicht es uns, die gesamte Benutzererfahrung zu gestalten und Einblicke in die verschiedenen Konzepte und Werkzeuge des Prozesses zu gewinnen.<\/p>\n<ol>\n<li>Der erste Schritt zur Bereitstellung von In-Text-Lernen besteht darin, das PDF-Dokument einzulesen und in Textabschnitte zu zerlegen, Vektordarstellungen dieser Textabschnitte, sogenannte \u201cEmbeddings\u201d, zu generieren und diese Embeddings schlie\u00dflich in einer Vektordatenbank zu speichern.<\/li>\n<li>Vektordatenbanken erm\u00f6glichen es uns, \u00ab\u00c4hnlichkeitssuchen\u00bb anhand der darin gespeicherten Text-Embeddings durchzuf\u00fchren.<\/li>\n<li>Amazon SageMaker JumpStart bietet Vorlagen f\u00fcr die Bereitstellung mit nur einem Klick, um die Infrastruktur f\u00fcr Open-Source-Modelle mit vortrainierten Daten einzurichten. Wir werden Amazon SageMaker JumpStart verwenden, um das Embedding-Modell und das Large Language-Modell bereitzustellen.<\/li>\n<li>Amazon OpenSearch ist eine Such- und Analyse-Engine, die die n\u00e4chsten Nachbarn von Punkten in einem Vektorraum finden kann und sich daher als Vektordatenbank eignet.<\/li>\n<\/ol>\n<h2 id=\"%d9%86%d9%85%d9%88%d8%af%d8%a7%d8%b1-%d8%aa%d8%a8%d8%af%db%8c%d9%84-%d8%a7%d8%b2-pdf-%d8%a8%d9%87-%d8%ac%d8%a7%d8%b3%d8%a7%d8%b2%db%8c-%d8%af%d8%b1-%d9%be%d8%a7%db%8c%da%af%d8%a7%d9%87-%d8%af%d8%a7\">Diagramm: Konvertierung von PDF zu Einbettung in Vektordatenbank<\/h2>\n<h2 id=\"%d9%85%d8%b1%d8%ad%d9%84%d9%87-1-%d8%a7%d8%b3%d8%aa%d9%82%d8%b1%d8%a7%d8%b1-%d9%85%d8%af%d9%84-%d8%ac%d8%a7%d8%b3%d8%a7%d8%b2%db%8c-gpt-j-6b-fp16-%d8%a8%d8%a7-amazon-sagemaker-jumpst\"><img  loading=\"lazy\"  decoding=\"async\"  src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAAA1BMVEUAAP+KeNJXAAAAAXRSTlMAQObYZgAAAAlwSFlzAAAOxAAADsQBlSsOGwAAAApJREFUCNdjYAAAAAIAAeIhvDMAAAAASUVORK5CYII=\"  alt=\"\"  width=\"750\"  height=\"418\"  class=\"aligncenter wp-image-15134 size-full pk-lazyload\"  data-pk-sizes=\"auto\"  data-ls-sizes=\"auto, (max-width: 750px) 100vw, 750px\"  data-pk-src=\"https:\/\/cdn.itpiran.net\/2024\/03\/31151937\/2-1.webp\"  data-pk-srcset=\"https:\/\/cdn.itpiran.net\/2024\/03\/31151937\/2-1.webp 750w, https:\/\/cdn.itpiran.net\/2024\/03\/31151937\/2-1-300x167.webp 300w, https:\/\/cdn.itpiran.net\/2024\/03\/31151937\/2-1-110x61.webp 110w, https:\/\/cdn.itpiran.net\/2024\/03\/31151937\/2-1-200x111.webp 200w, https:\/\/cdn.itpiran.net\/2024\/03\/31151937\/2-1-380x212.webp 380w, https:\/\/cdn.itpiran.net\/2024\/03\/31151937\/2-1-255x142.webp 255w, https:\/\/cdn.itpiran.net\/2024\/03\/31151937\/2-1-550x307.webp 550w\" ><br \/>\nSchritt 1 \u2013 Bereitstellung des GPT-J 6B FP16-Einbettungsmodells mit Amazon SageMaker JumpStart<\/h2>\n<p>Folgen Sie den Schritten in der Amazon SageMaker-Dokumentation: \u00d6ffnen Sie den JumpStart-Bereich im Hauptmen\u00fc von Amazon SageMaker Studio, um einen Amazon SageMaker JumpStart-Knoten zu starten. W\u00e4hlen Sie \u2018Modelle, Notebooks, L\u00f6sungen\u2019 und anschlie\u00dfend das GPT-J 6B Embedding FP16-Einbettungsmodell (siehe Abbildung unten). Klicken Sie dann auf \u201eBereitstellen\u201c. Amazon SageMaker JumpStart richtet die Infrastruktur f\u00fcr die Bereitstellung dieses vortrainierten Modells in der SageMaker-Umgebung ein.<\/p>\n<h2 id=\"%d9%85%d8%b1%d8%ad%d9%84%d9%87-2-%d8%a7%d8%b3%d8%aa%d9%82%d8%b1%d8%a7%d8%b1-flan-t5-xxl-llm-%d8%a8%d8%a7-amazon-sagemaker-jumpstart\"><img  loading=\"lazy\"  decoding=\"async\"  src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAAA1BMVEUAAP+KeNJXAAAAAXRSTlMAQObYZgAAAAlwSFlzAAAOxAAADsQBlSsOGwAAAApJREFUCNdjYAAAAAIAAeIhvDMAAAAASUVORK5CYII=\"  alt=\"\"  width=\"750\"  height=\"423\"  class=\"aligncenter wp-image-15135 size-full pk-lazyload\"  data-pk-sizes=\"auto\"  data-ls-sizes=\"auto, (max-width: 750px) 100vw, 750px\"  data-pk-src=\"https:\/\/cdn.itpiran.net\/2024\/03\/31152132\/3-1.webp\"  data-pk-srcset=\"https:\/\/cdn.itpiran.net\/2024\/03\/31152132\/3-1.webp 750w, https:\/\/cdn.itpiran.net\/2024\/03\/31152132\/3-1-300x169.webp 300w, https:\/\/cdn.itpiran.net\/2024\/03\/31152132\/3-1-110x62.webp 110w, https:\/\/cdn.itpiran.net\/2024\/03\/31152132\/3-1-200x113.webp 200w, https:\/\/cdn.itpiran.net\/2024\/03\/31152132\/3-1-380x214.webp 380w, https:\/\/cdn.itpiran.net\/2024\/03\/31152132\/3-1-255x144.webp 255w, https:\/\/cdn.itpiran.net\/2024\/03\/31152132\/3-1-550x310.webp 550w\" ><br \/>\n<img  loading=\"lazy\"  decoding=\"async\"  src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAAA1BMVEUAAP+KeNJXAAAAAXRSTlMAQObYZgAAAAlwSFlzAAAOxAAADsQBlSsOGwAAAApJREFUCNdjYAAAAAIAAeIhvDMAAAAASUVORK5CYII=\"  alt=\"\"  width=\"750\"  height=\"423\"  class=\"aligncenter wp-image-15136 size-full pk-lazyload\"  data-pk-sizes=\"auto\"  data-ls-sizes=\"auto, (max-width: 750px) 100vw, 750px\"  data-pk-src=\"https:\/\/cdn.itpiran.net\/2024\/03\/31152206\/4-1.webp\"  data-pk-srcset=\"https:\/\/cdn.itpiran.net\/2024\/03\/31152206\/4-1.webp 750w, https:\/\/cdn.itpiran.net\/2024\/03\/31152206\/4-1-300x169.webp 300w, https:\/\/cdn.itpiran.net\/2024\/03\/31152206\/4-1-110x62.webp 110w, https:\/\/cdn.itpiran.net\/2024\/03\/31152206\/4-1-200x113.webp 200w, https:\/\/cdn.itpiran.net\/2024\/03\/31152206\/4-1-380x214.webp 380w, https:\/\/cdn.itpiran.net\/2024\/03\/31152206\/4-1-255x144.webp 255w, https:\/\/cdn.itpiran.net\/2024\/03\/31152206\/4-1-550x310.webp 550w\" ><br \/>\nSchritt 2 \u2013 Flan T5 XXL LLM mit Amazon SageMaker JumpStart bereitstellen<\/h2>\n<p>W\u00e4hlen Sie anschlie\u00dfend in Amazon SageMaker JumpStart Flan-T5 XXL LLM aus und klicken Sie dann auf \u2018Bereitstellen\u2019, um die automatische Infrastruktureinrichtung zu starten und den Modellendpunkt in der Amazon SageMaker-Umgebung bereitzustellen.<\/p>\n<h2 id=\"%d9%85%d8%b1%d8%ad%d9%84%d9%87-3-%d9%88%d8%b6%d8%b9%db%8c%d8%aa-%d9%86%d9%82%d8%a7%d8%b7-%d9%be%d8%a7%db%8c%d8%a7%d9%86%db%8c-%d9%85%d8%af%d9%84-%d9%85%d8%b3%d8%aa%d9%82%d8%b1-%d8%b4\"><img  loading=\"lazy\"  decoding=\"async\"  src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAAA1BMVEUAAP+KeNJXAAAAAXRSTlMAQObYZgAAAAlwSFlzAAAOxAAADsQBlSsOGwAAAApJREFUCNdjYAAAAAIAAeIhvDMAAAAASUVORK5CYII=\"  alt=\"\"  width=\"750\"  height=\"424\"  class=\"aligncenter wp-image-15137 size-full pk-lazyload\"  data-pk-sizes=\"auto\"  data-ls-sizes=\"auto, (max-width: 750px) 100vw, 750px\"  data-pk-src=\"https:\/\/cdn.itpiran.net\/2024\/03\/31152316\/5-1.webp\"  data-pk-srcset=\"https:\/\/cdn.itpiran.net\/2024\/03\/31152316\/5-1.webp 750w, https:\/\/cdn.itpiran.net\/2024\/03\/31152316\/5-1-300x170.webp 300w, https:\/\/cdn.itpiran.net\/2024\/03\/31152316\/5-1-110x62.webp 110w, https:\/\/cdn.itpiran.net\/2024\/03\/31152316\/5-1-200x113.webp 200w, https:\/\/cdn.itpiran.net\/2024\/03\/31152316\/5-1-380x215.webp 380w, https:\/\/cdn.itpiran.net\/2024\/03\/31152316\/5-1-255x144.webp 255w, https:\/\/cdn.itpiran.net\/2024\/03\/31152316\/5-1-550x311.webp 550w\" ><br \/>\nSchritt 3 \u2013 \u00dcberpr\u00fcfen Sie den Status der bereitgestellten Modellendpunkte<\/h2>\n<p>Wir \u00fcberpr\u00fcfen den Status der in Schritt 1 und Schritt 2 bereitgestellten Modellendpunkte in der Amazon SageMaker-Konsole und notieren uns deren Namen, da wir sie in unserem Code verwenden werden. So sieht meine Konsole nach der Bereitstellung der Modellendpunkte aus.<\/p>\n<h2 id=\"%d9%85%d8%b1%d8%ad%d9%84%d9%87-4-%d8%ae%d9%88%d8%b4%d9%87-%d8%ac%d8%b3%d8%aa%d8%ac%d9%88%db%8c-%d8%a8%d8%a7%d8%b2-%d8%a2%d9%85%d8%a7%d8%b2%d9%88%d9%86-%d8%b1%d8%a7-%d8%a7%db%8c%d8%ac%d8%a7\"><img  loading=\"lazy\"  decoding=\"async\"  src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAAA1BMVEUAAP+KeNJXAAAAAXRSTlMAQObYZgAAAAlwSFlzAAAOxAAADsQBlSsOGwAAAApJREFUCNdjYAAAAAIAAeIhvDMAAAAASUVORK5CYII=\"  alt=\"\"  width=\"750\"  height=\"396\"  class=\"aligncenter wp-image-15138 size-full pk-lazyload\"  data-pk-sizes=\"auto\"  data-ls-sizes=\"auto, (max-width: 750px) 100vw, 750px\"  data-pk-src=\"https:\/\/cdn.itpiran.net\/2024\/03\/31152449\/6-1.webp\"  data-pk-srcset=\"https:\/\/cdn.itpiran.net\/2024\/03\/31152449\/6-1.webp 750w, https:\/\/cdn.itpiran.net\/2024\/03\/31152449\/6-1-300x158.webp 300w, https:\/\/cdn.itpiran.net\/2024\/03\/31152449\/6-1-110x58.webp 110w, https:\/\/cdn.itpiran.net\/2024\/03\/31152449\/6-1-200x106.webp 200w, https:\/\/cdn.itpiran.net\/2024\/03\/31152449\/6-1-380x201.webp 380w, https:\/\/cdn.itpiran.net\/2024\/03\/31152449\/6-1-255x135.webp 255w, https:\/\/cdn.itpiran.net\/2024\/03\/31152449\/6-1-550x290.webp 550w\" ><br \/>\nSchritt 4 \u2013 Amazon Open Search Cluster erstellen<\/h2>\n<p>Amazon OpenSearch ist ein Such- und Analysedienst, der den k-Nearest-Neighbors-Algorithmus (kNN) unterst\u00fctzt. Diese Funktion ist f\u00fcr \u00e4hnlichkeitbasierte Suchen von unsch\u00e4tzbarem Wert und erm\u00f6glicht die effektive Nutzung von OpenSearch als Vektordatenbank. Weitere Informationen zu den Elasticsearch\/OpenSearch-Versionen, die das kNN-Plugin unterst\u00fctzen, finden Sie unter folgendem Link: k-NN-Plugin-Dokumentation.<\/p>\n<p>Wir verwenden die AWS CLI, um die AWS CloudFormation-Vorlagendatei vom GitHub-Speicherort bereitzustellen. <code>Infrastructure\/opensearch-vectordb.yaml<\/code> Wir werden den AWS-Befehl verwenden. <code>cloudformation create-stack<\/code> F\u00fchren Sie die folgenden Schritte aus, um einen Amazon Open Search-Cluster zu erstellen. Ersetzen Sie die Werte vor der Ausf\u00fchrung des Befehls durch Ihre eigenen. <code>Benutzername<\/code> Und <code>Passwort<\/code> Lass es uns tun.<\/p>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-plain\" data-lang=\"Plain Text\"><code>aws cloudformation create-stack --stack-name opensearch-vectordb \\\r\n--template-body file:\/\/opensearch-vectordb.yaml \\\r\n--parameters ParameterKey=ClusterName,ParameterValue=opensearch-vectordb \\\r\nParameterKey=MasterUserName,ParameterValue=&lt;username&gt; \\\r\nParameterKey=MasterUserPassword,ParameterValue=&lt;password&gt; <\/code><\/pre>\n<\/div>\n<h2 id=\"%d9%85%d8%b1%d8%ad%d9%84%d9%87-5-%da%af%d8%b1%d8%af%d8%b4-%da%a9%d8%a7%d8%b1-%d8%ac%d8%b0%d8%a8-%d9%88-%d8%ac%d8%a7%d8%b3%d8%a7%d8%b2%db%8c-%d8%b3%d9%86%d8%af-%d8%b1%d8%a7-%d8%a8%d8%b3%d8%a7\">Schritt 5 \u2013 Erstellen Sie den Workflow zur Dokumentenerfassung und -einbettung.<\/h2>\n<p>In diesem Schritt erstellen wir eine Pipeline zur Erfassung und Verarbeitung von PDF-Dokumenten, die in einem Amazon Simple Storage Service (S3)-Bucket abgelegt werden. Diese Pipeline f\u00fchrt folgende Aufgaben aus:<\/p>\n<ol>\n<li>Text aus einem PDF-Dokument extrahieren.<\/li>\n<li>Konvertiere Textfragmente in Einbettungen (Vektordarstellungen).<\/li>\n<li>Speichern Sie eingebettete Inhalte in Amazon Open Search.<\/li>\n<\/ol>\n<p>Das Hochladen einer PDF-Datei in einen S3-Bucket l\u00f6st einen ereignisgesteuerten Workflow aus, der einen AWS Fargate-Job beinhaltet. Dieser Job ist f\u00fcr die Umwandlung des Textes in eingebettete Elemente und deren Einbettung in Amazon OpenSearch zust\u00e4ndig.<\/p>\n<h5 id=\"%d9%86%d9%85%d8%a7%db%8c-%da%a9%d9%84%db%8c-%d9%86%d9%85%d9%88%d8%af%d8%a7%d8%b1%db%8c\">Diagrammatischer \u00dcberblick<\/h5>\n<p>Nachfolgend ein Diagramm, das die Dokumenten\u00fcbertragungspipeline zum Speichern eingebetteter Textausschnitte in der Amazon OpenSearch-Vektordatenbank zeigt:<\/p>\n<h5 id=\"%d8%a7%d8%b3%da%a9%d8%b1%db%8c%d9%be%d8%aa-%d8%b1%d8%a7%d9%87-%d8%a7%d9%86%d8%af%d8%a7%d8%b2%db%8c-%d9%88-%d8%b3%d8%a7%d8%ae%d8%aa%d8%a7%d8%b1-%d9%81%d8%a7%db%8c%d9%84\"><img  loading=\"lazy\"  decoding=\"async\"  src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAAA1BMVEUAAP+KeNJXAAAAAXRSTlMAQObYZgAAAAlwSFlzAAAOxAAADsQBlSsOGwAAAApJREFUCNdjYAAAAAIAAeIhvDMAAAAASUVORK5CYII=\"  alt=\"\"  width=\"750\"  height=\"231\"  class=\"aligncenter wp-image-15139 size-full pk-lazyload\"  data-pk-sizes=\"auto\"  data-ls-sizes=\"auto, (max-width: 750px) 100vw, 750px\"  data-pk-src=\"https:\/\/cdn.itpiran.net\/2024\/03\/31153207\/7-1.webp\"  data-pk-srcset=\"https:\/\/cdn.itpiran.net\/2024\/03\/31153207\/7-1.webp 750w, https:\/\/cdn.itpiran.net\/2024\/03\/31153207\/7-1-300x92.webp 300w, https:\/\/cdn.itpiran.net\/2024\/03\/31153207\/7-1-110x34.webp 110w, https:\/\/cdn.itpiran.net\/2024\/03\/31153207\/7-1-200x62.webp 200w, https:\/\/cdn.itpiran.net\/2024\/03\/31153207\/7-1-380x117.webp 380w, https:\/\/cdn.itpiran.net\/2024\/03\/31153207\/7-1-255x79.webp 255w, https:\/\/cdn.itpiran.net\/2024\/03\/31153207\/7-1-550x169.webp 550w\" ><br \/>\nStartskript und Dateistruktur<\/h5>\n<p>Die Hauptlogik in der Datei <code>create-embeddings-save-in-vectordb\\startup_script.py<\/code> Dieses Python-Skript befindet sich unter <code>startup_script.py<\/code>Das Skript f\u00fchrt verschiedene Aufgaben im Zusammenhang mit der Dokumentenverarbeitung, dem Einbetten von Text und dem Einf\u00fcgen in einen Amazon Open Search-Cluster aus. Es l\u00e4dt ein PDF-Dokument aus einem Amazon S3-Bucket herunter und zerlegt es in kleinere Textabschnitte. Der Textinhalt jedes Abschnitts wird an den in Amazon SageMaker bereitgestellten Endpunkt des GPT-J 6B FP16-Einbettungsmodells (abgerufen \u00fcber die Umgebungsvariable TEXT_EMBEDDING_MODEL_ENDPOINT_NAME) gesendet, um Texteinbettungen zu erstellen. Diese Einbettungen werden zusammen mit anderen Informationen im Amazon Open Search-Index abgelegt. Das Skript ruft Konfigurations- und Validierungsparameter aus Umgebungsvariablen ab und sorgt so f\u00fcr Konsistenz in verschiedenen Umgebungen. Es ist f\u00fcr die einheitliche Ausf\u00fchrung in einem Docker-Container vorgesehen.<\/p>\n<h5 id=\"%d8%aa%d8%b5%d9%88%db%8c%d8%b1-docker-%d8%b1%d8%a7-%d8%a8%d8%b3%d8%a7%d8%b2%db%8c%d8%af-%d9%88-%d9%85%d9%86%d8%aa%d8%b4%d8%b1-%da%a9%d9%86%db%8c%d8%af\">Docker-Image erstellen und ver\u00f6ffentlichen<\/h5>\n<p>Nachdem ich den Code verstanden hatte <code>startup_script.py<\/code>Wir werden die Dockerfile aus dem Ordner erstellen. <code>create-embeddings-save-in-vectordb<\/code> Wir laden das Image nun in die Amazon Elastic Container Registry (Amazon ECR) hoch. Amazon ECR ist eine vollst\u00e4ndig verwaltete Container-Registry, die leistungsstarkes Hosting bietet, sodass wir Anwendungs-Images und Artefakte zuverl\u00e4ssig \u00fcberall bereitstellen k\u00f6nnen. Wir verwenden die AWS CLI und die Docker CLI, um das Docker-Image zu erstellen und in Amazon ECR hochzuladen. In allen folgenden Befehlen Ersetzen Sie dies durch die korrekte AWS-Kontonummer.<\/p>\n<p>Rufen Sie ein Authentifizierungstoken ab und authentifizieren Sie den Docker-Client bei der Registry \u00fcber die AWS CLI.<\/p>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-plain\" data-lang=\"Plain Text\"><code>aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin &lt;AWS Account Number&gt;.dkr.ecr.us-east-1.amazonaws.com <\/code><\/pre>\n<\/div>\n<p>Erstellen Sie Ihr Docker-Image mit dem folgenden Befehl.<\/p>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-plain\" data-lang=\"Plain Text\"><code>docker build -t save-embedding-vectordb .\r\n<\/code><\/pre>\n<\/div>\n<p>Sobald der Build abgeschlossen ist, taggen Sie das Image, damit wir es in dieses Repository hochladen k\u00f6nnen:<\/p>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-plain\" data-lang=\"Plain Text\"><code>docker tag save-embedding-vectordb:latest &lt;AWS Account Number&gt;.dkr.ecr.us-east-1.amazonaws.com\/save-embedding-vectordb:latest\r\n<\/code><\/pre>\n<\/div>\n<p>F\u00fchren Sie den folgenden Befehl aus, um dieses Image in das neue Amazon ECR-Repository zu \u00fcbertragen:<\/p>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-plain\" data-lang=\"Plain Text\"><code>docker push &lt;AWS Account Number&gt;.dkr.ecr.us-east-1.amazonaws.com\/save-embedding-vectordb:latest\r\n<\/code><\/pre>\n<\/div>\n<p>Sobald das Docker-Image in das Amazon ECR-Repository hochgeladen wurde, sollte es wie folgt aussehen:<\/p>\n<h5 id=\"%d8%b2%db%8c%d8%b1%d8%b3%d8%a7%d8%ae%d8%aa%db%8c-%d8%a8%d8%b1%d8%a7%db%8c-%da%af%d8%b1%d8%af%d8%b4-%da%a9%d8%a7%d8%b1-%d8%ac%d8%a7%d8%b3%d8%a7%d8%b2%db%8c-pdf-%d9%85%d8%a8%d8%aa%d9%86%db%8c-%d8%a8\"><img  loading=\"lazy\"  decoding=\"async\"  src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAAA1BMVEUAAP+KeNJXAAAAAXRSTlMAQObYZgAAAAlwSFlzAAAOxAAADsQBlSsOGwAAAApJREFUCNdjYAAAAAIAAeIhvDMAAAAASUVORK5CYII=\"  alt=\"\"  width=\"750\"  height=\"191\"  class=\"aligncenter wp-image-15140 size-full pk-lazyload\"  data-pk-sizes=\"auto\"  data-ls-sizes=\"auto, (max-width: 750px) 100vw, 750px\"  data-pk-src=\"https:\/\/cdn.itpiran.net\/2024\/03\/31154130\/8-1.webp\"  data-pk-srcset=\"https:\/\/cdn.itpiran.net\/2024\/03\/31154130\/8-1.webp 750w, https:\/\/cdn.itpiran.net\/2024\/03\/31154130\/8-1-300x76.webp 300w, https:\/\/cdn.itpiran.net\/2024\/03\/31154130\/8-1-110x28.webp 110w, https:\/\/cdn.itpiran.net\/2024\/03\/31154130\/8-1-200x51.webp 200w, https:\/\/cdn.itpiran.net\/2024\/03\/31154130\/8-1-380x97.webp 380w, https:\/\/cdn.itpiran.net\/2024\/03\/31154130\/8-1-255x65.webp 255w, https:\/\/cdn.itpiran.net\/2024\/03\/31154130\/8-1-550x140.webp 550w\" ><br \/>\nAufbau einer Infrastruktur f\u00fcr einen ereignisbasierten PDF-Einbettungs-Workflow<\/h5>\n<p>Wir k\u00f6nnen die AWS-Befehlszeilenschnittstelle (AWS CLI) verwenden, um einen CloudFormation-Stack f\u00fcr einen ereignisgesteuerten Workflow mit den angegebenen Parametern zu erstellen. Die CloudFormation-Vorlage ist im GitHub-Repository unter [Link einf\u00fcgen] verf\u00fcgbar. <code>Infrastructure\/fargate-embeddings-vectordb-save.yaml<\/code> Wir m\u00fcssen die Parameter ignorieren, um die AWS-Umgebung nachzubilden.<\/p>\n<p>Hier sind die wichtigsten Parameter, die im Befehl aktualisiert werden m\u00fcssen. <code>aws cloudformation create-stack<\/code> Es hei\u00dft:<\/p>\n<ul>\n<li>BucketName: Dieser Parameter repr\u00e4sentiert den Amazon S3-Bucket, in dem die PDF-Dokumente abgelegt werden.<\/li>\n<li>VpcId und SubnetId: Diese Parameter legen fest, wo die Fargate-Aufgabe ausgef\u00fchrt wird.<\/li>\n<li>ImageName: Dies ist der Name des Docker-Images in der Amazon Elastic Container Registry (ECR) f\u00fcr save-embedding-vectordb.<\/li>\n<li>TextEmbeddingModelEndpointName: Verwenden Sie diesen Parameter, um den Namen des in Schritt 1 in Amazon SageMaker bereitgestellten Einbettungsmodells anzugeben.<\/li>\n<li>VectorDatabaseEndpoint: Geben Sie die Endpunktadresse der Amazon OpenSearch-Dom\u00e4ne an.<\/li>\n<li>VectorDatabaseUsername und VectorDatabasePassword: Diese Parameter sind die Anmeldeinformationen, die f\u00fcr den Zugriff auf den in Schritt 4 erstellten Amazon Open Search-Cluster ben\u00f6tigt werden.<\/li>\n<li>VectorDatabaseIndex: Legt den Namen des Index in Amazon Open Search fest, in dem eingebettete PDF-Dokumente gespeichert werden.<\/li>\n<\/ul>\n<p>Um die Erstellung des CloudFormation-Stacks nach der Aktualisierung der Parameterwerte durchzuf\u00fchren, verwenden wir den folgenden AWS CLI-Befehl:<\/p>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-plain\" data-lang=\"Plain Text\"><code>aws cloudformation create-stack \\\r\n--stack-name ecs-embeddings-vectordb \\\r\n--template-body file:\/\/fargate-embeddings-vectordb-save.yaml \\\r\n--parameters \\\r\nParameterKey=BucketName,ParameterValue=car-manuals-12345 \\\r\nParameterKey=VpcId,ParameterValue=vpc-123456 \\\r\nParameterKey=SubnetId,ParameterValue=subnet-123456,subnet-123456 \\\r\nParameterKey=Imagename,ParameterValue=123456.dkr.ecr.us-east-1.amazonaws.com\/save-embedding-vectordb:latest \\\r\nParameterKey=TextEmbeddingModelEndpointName,ParameterValue=jumpstart-dft-hf-textembedding-gpt-j-6b-fp16 \\\r\nParameterKey=VectorDatabaseEndpoint,ParameterValue=https:\/\/search-cfnopensearch2-xxxxxxxx.us-east-1.es.amazonaws.com \\\r\nParameterKey=VectorDatabaseUsername,ParameterValue=master \\\r\nParameterKey=VectorDatabasePassword,ParameterValue=vectordbpassword \\\r\nParameterKey=VectorDatabaseIndex,ParameterValue=carmanual<\/code><\/pre>\n<\/div>\n<p>Durch die Erstellung des oben beschriebenen CloudFormation-Stacks richten wir einen S3-Bucket ein und erstellen S3-Benachrichtigungen, die eine Lambda-Funktion starten. Diese Lambda-Funktion wiederum startet einen Fargate-Task. Der Fargate-Task erstellt einen Docker-Container mit der Datei <code>startup-script.py<\/code> Implementiert die Funktion, die f\u00fcr die Erstellung von Einbettungen in Amazon OpenSearch unter einem neuen OpenSearch-Index namens \u201e\u2026\u201c verantwortlich ist. <code>Autohandbuch<\/code> Es ist.<\/p>\n<h5 id=\"%d8%aa%d8%b3%d8%aa-%d8%a8%d8%a7-%db%8c%da%a9-%d9%86%d9%85%d9%88%d9%86%d9%87-pdf\">Testen Sie es mit einem PDF-Beispiel.<\/h5>\n<p>Sobald der CloudFormation-Stack ausgef\u00fchrt wird, legen Sie eine PDF-Datei mit dem Maschinenhandbuch in Ihren S3-Bucket hoch. Ich habe ein Maschinenhandbuch heruntergeladen, das hier verf\u00fcgbar ist. Nachdem die ereignisbasierte Transportpipeline abgeschlossen ist, sollte der Amazon OpenSearch-Cluster das folgende Profil enthalten: <code>Autohandbuch<\/code> Mit den unten gezeigten Einbettungen.<\/p>\n<h2 id=\"%d9%85%d8%b1%d8%ad%d9%84%d9%87-6-api-%d9%be%d8%b1%d8%b3%d8%b4-%d9%88-%d9%be%d8%a7%d8%b3%d8%ae-%d8%a8%d9%84%d8%a7%d8%af%d8%b1%d9%86%da%af-%d8%b1%d8%a7-%d8%a8%d8%a7-%d9%be%d8%b4%d8%aa%db%8c\"><img  loading=\"lazy\"  decoding=\"async\"  src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAAA1BMVEUAAP+KeNJXAAAAAXRSTlMAQObYZgAAAAlwSFlzAAAOxAAADsQBlSsOGwAAAApJREFUCNdjYAAAAAIAAeIhvDMAAAAASUVORK5CYII=\"  alt=\"\"  width=\"750\"  height=\"328\"  class=\"aligncenter wp-image-15141 size-full pk-lazyload\"  data-pk-sizes=\"auto\"  data-ls-sizes=\"auto, (max-width: 750px) 100vw, 750px\"  data-pk-src=\"https:\/\/cdn.itpiran.net\/2024\/03\/31155042\/9-1.webp\"  data-pk-srcset=\"https:\/\/cdn.itpiran.net\/2024\/03\/31155042\/9-1.webp 750w, https:\/\/cdn.itpiran.net\/2024\/03\/31155042\/9-1-300x131.webp 300w, https:\/\/cdn.itpiran.net\/2024\/03\/31155042\/9-1-110x48.webp 110w, https:\/\/cdn.itpiran.net\/2024\/03\/31155042\/9-1-200x87.webp 200w, https:\/\/cdn.itpiran.net\/2024\/03\/31155042\/9-1-380x166.webp 380w, https:\/\/cdn.itpiran.net\/2024\/03\/31155042\/9-1-255x112.webp 255w, https:\/\/cdn.itpiran.net\/2024\/03\/31155042\/9-1-550x241.webp 550w\" ><br \/>\n<img  loading=\"lazy\"  decoding=\"async\"  src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAAA1BMVEUAAP+KeNJXAAAAAXRSTlMAQObYZgAAAAlwSFlzAAAOxAAADsQBlSsOGwAAAApJREFUCNdjYAAAAAIAAeIhvDMAAAAASUVORK5CYII=\"  alt=\"\"  width=\"750\"  height=\"375\"  class=\"aligncenter wp-image-15142 size-full pk-lazyload\"  data-pk-sizes=\"auto\"  data-ls-sizes=\"auto, (max-width: 750px) 100vw, 750px\"  data-pk-src=\"https:\/\/cdn.itpiran.net\/2024\/03\/31155112\/10-1.webp\"  data-pk-srcset=\"https:\/\/cdn.itpiran.net\/2024\/03\/31155112\/10-1.webp 750w, https:\/\/cdn.itpiran.net\/2024\/03\/31155112\/10-1-300x150.webp 300w, https:\/\/cdn.itpiran.net\/2024\/03\/31155112\/10-1-110x55.webp 110w, https:\/\/cdn.itpiran.net\/2024\/03\/31155112\/10-1-200x100.webp 200w, https:\/\/cdn.itpiran.net\/2024\/03\/31155112\/10-1-380x190.webp 380w, https:\/\/cdn.itpiran.net\/2024\/03\/31155112\/10-1-255x128.webp 255w, https:\/\/cdn.itpiran.net\/2024\/03\/31155112\/10-1-550x275.webp 550w\" ><br \/>\nSchritt 6 \u2013 Implementierung der Echtzeit-Fragen-und-Antworten-API mit Llm-Textunterst\u00fctzung<\/h2>\n<p>Nachdem wir unsere Texteinbettungen in einer von Amazon Open Search unterst\u00fctzten Vektordatenbank gespeichert haben, fahren wir mit dem n\u00e4chsten Schritt fort. Hier nutzen wir die Funktionen des T5 Flan XXL LLM, um in Echtzeit Antworten zu unserer Fahrzeugbedienungsanleitung zu erhalten.<\/p>\n<p>Wir nutzen die in der Vektordatenbank gespeicherten Einbettungen, um LLM Kontextinformationen bereitzustellen. Dieser Kontext erm\u00f6glicht es LLM, Fragen zu unserer Fahrzeugbedienungsanleitung effektiv zu verstehen und zu beantworten. Dazu verwenden wir das Framework LangChain, welches die Koordination der verschiedenen Komponenten unseres von LLM entwickelten, textbasierten Echtzeit-Frage-Antwort-Systems vereinfacht.<\/p>\n<p>In einer Vektordatenbank gespeicherte Embeddings stellen die Bedeutungen und Beziehungen von W\u00f6rtern dar und erm\u00f6glichen Berechnungen auf Basis semantischer \u00c4hnlichkeiten. W\u00e4hrend Embeddings Vektordarstellungen von Textausschnitten erstellen, um Bedeutungen und Beziehungen zu erfassen, ist T5 Flan LLM darauf spezialisiert, kontextrelevante Antworten auf Basis des in Anfragen und Abfragen eingef\u00fcgten Kontexts zu generieren. Ziel ist es, Benutzerfragen mit Textausschnitten abzugleichen, indem Embeddings f\u00fcr die Fragen erstellt und anschlie\u00dfend deren \u00c4hnlichkeit zu anderen in der Vektordatenbank gespeicherten Embeddings gemessen wird.<\/p>\n<p>Indem wir Textausschnitte und Nutzeranfragen als Vektoren darstellen, k\u00f6nnen wir mathematische Berechnungen durchf\u00fchren, um kontextbezogene \u00c4hnlichkeitssuchen durchzuf\u00fchren. Um die \u00c4hnlichkeit zwischen zwei Datenpunkten zu messen, verwenden wir Distanzmetriken in einem mehrdimensionalen Raum.<\/p>\n<p>Das untenstehende Diagramm zeigt den Echtzeit-Frage-und-Antwort-Workflow, der von LangChain und unserem T5 Flan LLM bereitgestellt wird.<\/p>\n<h5 id=\"%d8%a8%d8%b1%d8%b1%d8%b3%db%8c-%d8%a7%d8%ac%d9%85%d8%a7%d9%84%db%8c-%d9%86%d9%85%d9%88%d8%af%d8%a7%d8%b1%db%8c-%d9%be%d8%b4%d8%aa%db%8c%d8%a8%d8%a7%d9%86%db%8c-%d9%be%d8%b1%d8%b3%d8%b4-%d9%88-%d9%be\">Grafische \u00dcbersicht der Echtzeit-Frage-und-Antwort-Unterst\u00fctzung von T5-Flan-XXL LLM<\/h5>\n<h5 id=\"api-%d8%b1%d8%a7-%d8%a8%d8%b3%d8%a7%d8%b2%db%8c%d8%af\"><img  loading=\"lazy\"  decoding=\"async\"  src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAAA1BMVEUAAP+KeNJXAAAAAXRSTlMAQObYZgAAAAlwSFlzAAAOxAAADsQBlSsOGwAAAApJREFUCNdjYAAAAAIAAeIhvDMAAAAASUVORK5CYII=\"  alt=\"\"  width=\"750\"  height=\"430\"  class=\"aligncenter wp-image-15143 size-full pk-lazyload\"  data-pk-sizes=\"auto\"  data-ls-sizes=\"auto, (max-width: 750px) 100vw, 750px\"  data-pk-src=\"https:\/\/cdn.itpiran.net\/2024\/03\/31155349\/11-1.webp\"  data-pk-srcset=\"https:\/\/cdn.itpiran.net\/2024\/03\/31155349\/11-1.webp 750w, https:\/\/cdn.itpiran.net\/2024\/03\/31155349\/11-1-300x172.webp 300w, https:\/\/cdn.itpiran.net\/2024\/03\/31155349\/11-1-110x63.webp 110w, https:\/\/cdn.itpiran.net\/2024\/03\/31155349\/11-1-200x115.webp 200w, https:\/\/cdn.itpiran.net\/2024\/03\/31155349\/11-1-380x218.webp 380w, https:\/\/cdn.itpiran.net\/2024\/03\/31155349\/11-1-255x146.webp 255w, https:\/\/cdn.itpiran.net\/2024\/03\/31155349\/11-1-550x315.webp 550w\" ><br \/>\nErstellen Sie die API<\/h5>\n<p>Nachdem wir unseren LangChain- und T5 Flask LLM-Workflow besprochen haben, schauen wir uns nun den API-Code an, der Benutzerfragen entgegennimmt und kontextbezogene Antworten liefert. Diese Echtzeit-Frage-und-Antwort-API befindet sich im Ordner \u201eRAG-langchain-questionanswer-t5-llm\u201c unseres GitHub-Repositorys, und ihre Kernlogik ist in der Datei \u201eapp.py\u201c implementiert. Diese Flask-basierte Anwendung definiert eine Route \u201e\/qa\u201c zum Beantworten von Fragen.<\/p>\n<p>Wenn ein Benutzer eine Anfrage an die API sendet, verwendet diese die Umgebungsvariable TEXT_EMBEDDING_MODEL_ENDPOINT_NAME und verweist auf einen Amazon SageMaker-Endpunkt, um die Anfrage in numerische Vektordarstellungen, sogenannte Embeddings, umzuwandeln. Diese Embeddings erfassen die semantische Bedeutung des Textes.<\/p>\n<p>Die API nutzt Amazon OpenSearch f\u00fcr kontextbezogene \u00c4hnlichkeitssuchen und ruft relevante Textausschnitte aus dem OpenSearch-Verzeichnishandbuch basierend auf den Einbettungen der Nutzeranfragen ab. Anschlie\u00dfend ruft die API den T5 Flan LLM-Endpunkt auf, der durch die Umgebungsvariable T5FLAN_XXL_ENDPOINT_NAME identifiziert und ebenfalls in Amazon SageMaker bereitgestellt wird. Der Endpunkt verwendet die von Amazon OpenSearch abgerufenen Textausschnitte als Kontext f\u00fcr die Generierung von Antworten. Diese Textausschnitte liefern dem T5 Flan LLM-Endpunkt wertvollen Kontext und erm\u00f6glichen so die Bereitstellung aussagekr\u00e4ftiger Antworten auf Nutzeranfragen. Der API-Code verwendet LangChain zur Orchestrierung all dieser Interaktionen.<\/p>\n<h5 id=\"%d8%aa%d8%b5%d9%88%db%8c%d8%b1-docker-%d8%b1%d8%a7-%d8%a8%d8%b1%d8%a7%db%8c-api-%d8%a8%d8%b3%d8%a7%d8%b2%db%8c%d8%af-%d9%88-%d9%85%d9%86%d8%aa%d8%b4%d8%b1-%da%a9%d9%86%db%8c%d8%af\">Erstellen und ver\u00f6ffentlichen Sie das Docker-Image f\u00fcr die API.<\/h5>\n<p>Nachdem wir den Code in app.py verstanden haben, erstellen wir das Dockerfile aus dem Ordner RAG-langchain-questionanswer-t5-llm und laden das Image in Amazon ECR hoch. Wir verwenden die AWS CLI und die Docker CLI, um das Docker-Image zu erstellen und in Amazon ECR hochzuladen. In allen folgenden Befehlen Ersetzen Sie dies durch die korrekte AWS-Kontonummer.<\/p>\n<p>Rufen Sie ein Authentifizierungstoken ab und authentifizieren Sie den Docker-Client bei der Registry \u00fcber die AWS CLI.<\/p>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-plain\" data-lang=\"Plain Text\"><code>aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin &lt;AWS Account Number&gt;.dkr.ecr.us-east-1.amazonaws.com \r\n<\/code><\/pre>\n<\/div>\n<p>Erstellen Sie das Docker-Image mit dem folgenden Befehl.<\/p>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-plain\" data-lang=\"Plain Text\"><code>docker build -t qa-container .\r\n<\/code><\/pre>\n<\/div>\n<p>Sobald der Build abgeschlossen ist, taggen Sie das Image, damit wir es in dieses Repository hochladen k\u00f6nnen:<\/p>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-plain\" data-lang=\"Plain Text\"><code>docker tag qa-container:latest &lt;AWS Account Number&gt;.dkr.ecr.us-east-1.amazonaws.com\/qa-container:latest\r\n<\/code><\/pre>\n<\/div>\n<p>F\u00fchren Sie den folgenden Befehl aus, um dieses Image in das neue Amazon ECR-Repository zu \u00fcbertragen:<\/p>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-plain\" data-lang=\"Plain Text\"><code>docker push &lt;AWS Account Number&gt;.dkr.ecr.us-east-1.amazonaws.com\/qa-container:latest\r\n<\/code><\/pre>\n<\/div>\n<p>Sobald das Docker-Image in das Amazon ECR-Repository hochgeladen wurde, sollte es wie folgt aussehen:<\/p>\n<h5 id=\"%d9%be%d8%b4%d8%aa%d9%87-cloudformation-%d8%b1%d8%a7-%d8%a8%d8%b1%d8%a7%db%8c-%d9%85%db%8c%d8%b2%d8%a8%d8%a7%d9%86%db%8c-%d9%86%d9%82%d8%b7%d9%87-%d9%be%d8%a7%db%8c%d8%a7%d9%86%db%8c-api-%d8%a8%d8%b3\"><img  loading=\"lazy\"  decoding=\"async\"  src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAAA1BMVEUAAP+KeNJXAAAAAXRSTlMAQObYZgAAAAlwSFlzAAAOxAAADsQBlSsOGwAAAApJREFUCNdjYAAAAAIAAeIhvDMAAAAASUVORK5CYII=\"  alt=\"\"  width=\"750\"  height=\"170\"  class=\"aligncenter wp-image-15144 size-full pk-lazyload\"  data-pk-sizes=\"auto\"  data-ls-sizes=\"auto, (max-width: 750px) 100vw, 750px\"  data-pk-src=\"https:\/\/cdn.itpiran.net\/2024\/03\/31155754\/12-1.webp\"  data-pk-srcset=\"https:\/\/cdn.itpiran.net\/2024\/03\/31155754\/12-1.webp 750w, https:\/\/cdn.itpiran.net\/2024\/03\/31155754\/12-1-300x68.webp 300w, https:\/\/cdn.itpiran.net\/2024\/03\/31155754\/12-1-110x25.webp 110w, https:\/\/cdn.itpiran.net\/2024\/03\/31155754\/12-1-200x45.webp 200w, https:\/\/cdn.itpiran.net\/2024\/03\/31155754\/12-1-380x86.webp 380w, https:\/\/cdn.itpiran.net\/2024\/03\/31155754\/12-1-255x58.webp 255w, https:\/\/cdn.itpiran.net\/2024\/03\/31155754\/12-1-550x125.webp 550w\" ><br \/>\nErstellen Sie einen CloudFormation-Stack zum Hosten des API-Endpunkts.<\/h5>\n<p>Wir verwenden die AWS-Befehlszeilenschnittstelle (CLI), um einen CloudFormation-Stack f\u00fcr einen Amazon ECS-Cluster zu erstellen, der eine Fargate-Aufgabe zur Bereitstellung der API hostet. Die CloudFormation-Vorlage befindet sich im GitHub-Repository unter Infrastructure\/fargate-api-rag-llm-langchain.yaml. Wir m\u00fcssen die Parameter an die AWS-Umgebung anpassen. Hier sind die wichtigsten Parameter, die im Befehl `aws cloudformation create-stack` aktualisiert werden m\u00fcssen:<\/p>\n<ul>\n<li>DemoVPC: Dieser Parameter gibt die virtuelle private Cloud (VPC) an, in der Ihr Dienst ausgef\u00fchrt wird.<\/li>\n<li>PublicSubnetIds: Dieser Parameter erfordert eine Liste \u00f6ffentlicher Subnetz-IDs, in denen sich Ihr Load Balancer und Ihre Aufgaben befinden werden.<\/li>\n<li>IMAGENAME: Geben Sie den Namen des Docker-Images in der Amazon Elastic Container Registry (ECR) f\u00fcr den qa-Container an.<\/li>\n<li>TextEmbeddingModelEndpointName: Geben Sie den Endpunktnamen des in Schritt 1 in Amazon SageMaker bereitgestellten Embeddings-Modells an.<\/li>\n<li>T5FlanXXLEndpointName: Legen Sie den T5-FLAN-Endpunktnamen fest, der in Schritt 2 auf Amazon SageMaker bereitgestellt wurde.<\/li>\n<li>VectorDatabaseEndpoint: Geben Sie die Endpunktadresse der Amazon OpenSearch-Dom\u00e4ne an.<\/li>\n<li>VectorDatabaseUsername und VectorDatabasePassword: Diese Parameter sind die Anmeldeinformationen, die f\u00fcr den Zugriff auf den in Schritt 4 erstellten OpenSearch-Cluster ben\u00f6tigt werden.<\/li>\n<li>VectorDatabaseIndex: Legen Sie den Namen des Index in Amazon OpenSearch fest, in dem Ihre Servicedaten gespeichert werden. Der in diesem Beispiel verwendete Indexname lautet carmanual.<\/li>\n<\/ul>\n<p>Um die Erstellung des CloudFormation-Stacks nach der Aktualisierung der Parameterwerte durchzuf\u00fchren, verwenden wir den folgenden AWS CLI-Befehl:<\/p>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-plain\" data-lang=\"Plain Text\"><code>aws cloudformation create-stack \\\r\n--stack-name ecs-questionanswer-llm \\\r\n--template-body file:\/\/fargate-api-rag-llm-langchain.yaml \\\r\n--parameters \\\r\nParameterKey=DemoVPC,ParameterValue=vpc-123456 \\\r\nParameterKey=PublicSubnetIds,ParameterValue=subnet-123456,subnet-789012 \\\r\nParameterKey=Imagename,ParameterValue=123456.dkr.ecr.us-east-1.amazonaws.com\/qa-container:latest \\\r\nParameterKey=TextEmbeddingModelEndpointName,ParameterValue=jumpstart-dft-hf-textembedding-gpt-j-6b-fp16 \\\r\nParameterKey=T5FlanXXLEndpointName,ParameterValue=jumpstart-example-huggingface-text2text-2023-08-06-16-40-45-080 \\\r\nParameterKey=VectorDatabaseEndpoint,ParameterValue=https:\/\/search-cfnopensearch2-xxxxxxxx.us-east-1.es.amazonaws.com \\\r\nParameterKey=VectorDatabaseUsername,ParameterValue=master \\\r\nParameterKey=VectorDatabasePassword,ParameterValue=vectordbpassword \\\r\nParameterKey=VectorDatabaseIndex,ParameterValue=carmanual<\/code><\/pre>\n<\/div>\n<p>Nachdem Sie den oben genannten CloudFormation-Stack erfolgreich ausgef\u00fchrt haben, rufen Sie die AWS-Konsole auf und \u00f6ffnen Sie den Tab \u2018CloudFormation-Ausgaben\u2019 f\u00fcr den ecs-questionanswer-llm-Stack. Dort finden Sie alle notwendigen Informationen, einschlie\u00dflich des API-Endpunkts. Nachfolgend sehen Sie ein Beispiel, wie die Ausgabe aussehen k\u00f6nnte:<\/p>\n<h5 id=\"api-%d8%b1%d8%a7-%d8%aa%d8%b3%d8%aa-%da%a9%d9%86%db%8c%d8%af\"><img  loading=\"lazy\"  decoding=\"async\"  src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAAA1BMVEUAAP+KeNJXAAAAAXRSTlMAQObYZgAAAAlwSFlzAAAOxAAADsQBlSsOGwAAAApJREFUCNdjYAAAAAIAAeIhvDMAAAAASUVORK5CYII=\"  alt=\"\"  width=\"750\"  height=\"232\"  class=\"aligncenter wp-image-15145 size-full pk-lazyload\"  data-pk-sizes=\"auto\"  data-ls-sizes=\"auto, (max-width: 750px) 100vw, 750px\"  data-pk-src=\"https:\/\/cdn.itpiran.net\/2024\/03\/31160211\/13-1.webp\"  data-pk-srcset=\"https:\/\/cdn.itpiran.net\/2024\/03\/31160211\/13-1.webp 750w, https:\/\/cdn.itpiran.net\/2024\/03\/31160211\/13-1-300x93.webp 300w, https:\/\/cdn.itpiran.net\/2024\/03\/31160211\/13-1-110x34.webp 110w, https:\/\/cdn.itpiran.net\/2024\/03\/31160211\/13-1-200x62.webp 200w, https:\/\/cdn.itpiran.net\/2024\/03\/31160211\/13-1-380x118.webp 380w, https:\/\/cdn.itpiran.net\/2024\/03\/31160211\/13-1-255x79.webp 255w, https:\/\/cdn.itpiran.net\/2024\/03\/31160211\/13-1-550x170.webp 550w\" ><br \/>\nTesten Sie die API<\/h5>\n<p>Wir k\u00f6nnen den API-Endpunkt mit dem curl-Befehl wie folgt testen:<\/p>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-plain\" data-lang=\"Plain Text\"><code>curl -X POST -H \"Content-Type: application\/json\" -d '{\"question\":\"How can I clean my windshield?\"}' http:\/\/quest-Publi-abc-xxxx.us-east-1.elb.amazonaws.com\/qa\r\n<\/code><\/pre>\n<\/div>\n<p>Wir werden eine Reaktion wie die untenstehende sehen.<\/p>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-plain\" data-lang=\"Plain Text\"><code>{\"response\":\"To clean sensors and camera lenses, use a cloth moistened with a small amount of glass detergent.\"}\r\n<\/code><\/pre>\n<\/div>\n<h2 id=\"%d9%85%d8%b1%d8%ad%d9%84%d9%87-7-%d8%a7%db%8c%d8%ac%d8%a7%d8%af-%d9%88-%d8%a7%d8%b3%d8%aa%d9%82%d8%b1%d8%a7%d8%b1-%d9%88%d8%a8-%d8%b3%d8%a7%db%8c%d8%aa-%d8%a8%d8%a7-%da%86%d8%aa-%d8%a8%d8%a7\">Schritt 7 \u2013 Erstellen und Bereitstellen einer Website mit integriertem Chatbot<\/h2>\n<p>Anschlie\u00dfend folgen der letzte Schritt unserer Full-Stack-Pipeline: die Integration der API mit dem eingebetteten Chatbot in eine HTML-Website. F\u00fcr diese Website und den eingebetteten Chatbot verwenden wir eine Node.js-Anwendung mit einer index.html-Datei, die mit dem Open-Source-Chatbot botkit.js integriert ist. Zur Vereinfachung habe ich ein Dockerfile erstellt und es zusammen mit dem Code im Ordner \u201ehomegrown_website_and_bot\u201c bereitgestellt. Wir verwenden die AWS CLI und die Docker CLI, um das Docker-Image f\u00fcr die Frontend-Website zu erstellen und in Amazon ECR hochzuladen. In allen folgenden Befehlen gilt: Ersetzen Sie dies durch die korrekte AWS-Kontonummer.<\/p>\n<p>Rufen Sie ein Authentifizierungstoken ab und authentifizieren Sie den Docker-Client bei der Registry \u00fcber die AWS CLI.<\/p>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-plain\" data-lang=\"Plain Text\"><code>aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin &lt;AWS Account Number&gt;.dkr.ecr.us-east-1.amazonaws.com \r\n<\/code><\/pre>\n<\/div>\n<p>Erstellen Sie das Docker-Image mit folgendem Befehl:<\/p>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-plain\" data-lang=\"Plain Text\"><code>docker build -t web-chat-frontend .\r\n<\/code><\/pre>\n<\/div>\n<p>Sobald der Build abgeschlossen ist, taggen Sie das Image, damit wir es in dieses Repository hochladen k\u00f6nnen:<\/p>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-plain\" data-lang=\"Plain Text\"><code>docker tag web-chat-frontend:latest &lt;AWS Account Number&gt;.dkr.ecr.us-east-1.amazonaws.com\/web-chat-frontend:latest\r\n<\/code><\/pre>\n<\/div>\n<p>F\u00fchren Sie den folgenden Befehl aus, um dieses Image in das neue Amazon ECR-Repository zu \u00fcbertragen:<\/p>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-plain\" data-lang=\"Plain Text\"><code>docker push &lt;AWS Account Number&gt;.dkr.ecr.us-east-1.amazonaws.com\/web-chat-frontend:latest\r\n<\/code><\/pre>\n<\/div>\n<p>Nachdem das Docker-Image f\u00fcr die Website in das ECR-Repository hochgeladen wurde, erstellen wir den CloudFormation-Stack f\u00fcr das Frontend, indem wir die Datei `Infrastructure\\fargate-website-chatbot.yaml` ausf\u00fchren. Die Parameter m\u00fcssen an die AWS-Umgebung angepasst werden. Hier sind die wichtigsten Parameter, die im Befehl `aws cloudformation create-stack` aktualisiert werden m\u00fcssen:<\/p>\n<ul>\n<li>DemoVPC: Dieser Parameter gibt die virtuelle private Cloud (VPC) an, in der Ihre Website bereitgestellt wird.<\/li>\n<li>PublicSubnetIds: Dieser Parameter erfordert eine Liste \u00f6ffentlicher Subnetz-IDs, in denen Ihr Website-Loadbalancer und Ihre Aufgaben platziert werden.<\/li>\n<li>IMAGENAME: Geben Sie den Namen des Docker-Images in der Amazon Elastic Container Registry (ECR) f\u00fcr Ihre Website ein.<\/li>\n<li>QUESTRULD: Geben Sie die URL des in Schritt 6 bereitgestellten API-Endpunkts an. Das Format ist http:\/\/ Es ist \/qa.<\/li>\n<\/ul>\n<p>Um die Erstellung des CloudFormation-Stacks nach der Aktualisierung der Parameterwerte durchzuf\u00fchren, verwenden wir den folgenden AWS CLI-Befehl:<\/p>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-plain\" data-lang=\"Plain Text\"><code>aws cloudformation create-stack \\\r\n--stack-name ecs-website-chatbot \\\r\n--template-body file:\/\/fargate-website-chatbot.yaml \\\r\n--parameters \\\r\nParameterKey=DemoVPC,ParameterValue=vpc-12345 \\\r\nParameterKey=PublicSubnetIds,ParameterValue=subnet-1,subnet-2 \\\r\nParameterKey=Imagename,ParameterValue=123456.dkr.ecr.us-east-1.amazonaws.com\/web-chat-frontend:latest \\\r\nParameterKey=QUESTURL,ParameterValue=http:\/\/your-api-alb-dns-name\/qa<\/code><\/pre>\n<\/div>\n<h2 id=\"%d9%85%d8%b1%d8%ad%d9%84%d9%87-8-%d8%af%d8%b3%d8%aa%db%8c%d8%a7%d8%b1-%d9%87%d9%88%d8%b4-%d9%85%d8%b5%d9%86%d9%88%d8%b9%db%8c-car-savvy-%d8%b1%d8%a7-%d8%a8%d8%b1%d8%b1%d8%b3%db%8c-%da%a9%d9%86\">Schritt 8 \u2013 Sehen Sie sich den Car Savvy KI-Assistenten an<\/h2>\n<p>Nachdem Sie den oben genannten CloudFormation-Stack erfolgreich erstellt haben, rufen Sie die AWS-Konsole auf und \u00f6ffnen Sie den Tab \u201eCloudFormation-Ausgaben\u201c f\u00fcr den Stack \u201eecs-website-chatbot\u201c. Dort finden Sie den DNS-Namen des Application Load Balancers (ALB), der mit dem Frontend verkn\u00fcpft ist. Nachfolgend sehen Sie ein Beispiel, wie die Ausgabe aussehen k\u00f6nnte:<\/p>\n<p><img  loading=\"lazy\"  decoding=\"async\"  src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAAA1BMVEUAAP+KeNJXAAAAAXRSTlMAQObYZgAAAAlwSFlzAAAOxAAADsQBlSsOGwAAAApJREFUCNdjYAAAAAIAAeIhvDMAAAAASUVORK5CYII=\"  alt=\"\"  width=\"750\"  height=\"248\"  class=\"aligncenter wp-image-15146 size-full pk-lazyload\"  data-pk-sizes=\"auto\"  data-ls-sizes=\"auto, (max-width: 750px) 100vw, 750px\"  data-pk-src=\"https:\/\/cdn.itpiran.net\/2024\/03\/31161224\/14-1.webp\"  data-pk-srcset=\"https:\/\/cdn.itpiran.net\/2024\/03\/31161224\/14-1.webp 750w, https:\/\/cdn.itpiran.net\/2024\/03\/31161224\/14-1-300x99.webp 300w, https:\/\/cdn.itpiran.net\/2024\/03\/31161224\/14-1-110x36.webp 110w, https:\/\/cdn.itpiran.net\/2024\/03\/31161224\/14-1-200x66.webp 200w, https:\/\/cdn.itpiran.net\/2024\/03\/31161224\/14-1-380x126.webp 380w, https:\/\/cdn.itpiran.net\/2024\/03\/31161224\/14-1-255x84.webp 255w, https:\/\/cdn.itpiran.net\/2024\/03\/31161224\/14-1-550x182.webp 550w\" ><br \/>\nRufen Sie die Endpunkt-URL im Browser auf, um sich die Website anzusehen. Stellen Sie dem integrierten Chatbot Fragen in nat\u00fcrlicher Sprache. Beispiele f\u00fcr solche Fragen sind: \u201cWie reinige ich meine Windschutzscheibe?\u201d, \u201cWo finde ich die Fahrzeugidentifikationsnummer (FIN)?\u201d, \u201cWie melde ich einen Sicherheitsmangel?\u201d<\/p>\n<h5 id=\"%d8%a8%d8%b9%d8%af-%da%86%db%8c%d8%9f\"><img  loading=\"lazy\"  decoding=\"async\"  src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAAA1BMVEUAAP+KeNJXAAAAAXRSTlMAQObYZgAAAAlwSFlzAAAOxAAADsQBlSsOGwAAAApJREFUCNdjYAAAAAIAAeIhvDMAAAAASUVORK5CYII=\"  alt=\"\"  width=\"750\"  height=\"418\"  class=\"aligncenter wp-image-15147 size-full pk-lazyload\"  data-pk-sizes=\"auto\"  data-ls-sizes=\"auto, (max-width: 750px) 100vw, 750px\"  data-pk-src=\"https:\/\/cdn.itpiran.net\/2024\/03\/31161325\/15-1.webp\"  data-pk-srcset=\"https:\/\/cdn.itpiran.net\/2024\/03\/31161325\/15-1.webp 750w, https:\/\/cdn.itpiran.net\/2024\/03\/31161325\/15-1-300x167.webp 300w, https:\/\/cdn.itpiran.net\/2024\/03\/31161325\/15-1-110x61.webp 110w, https:\/\/cdn.itpiran.net\/2024\/03\/31161325\/15-1-200x111.webp 200w, https:\/\/cdn.itpiran.net\/2024\/03\/31161325\/15-1-380x212.webp 380w, https:\/\/cdn.itpiran.net\/2024\/03\/31161325\/15-1-255x142.webp 255w, https:\/\/cdn.itpiran.net\/2024\/03\/31161325\/15-1-550x307.webp 550w\" ><br \/>\nWie geht es weiter?<\/h5>\n<p>Ich hoffe, die obigen Ausf\u00fchrungen zeigen Ihnen, wie Sie Ihre eigenen produktionsreifen Pipelines f\u00fcr LLMs erstellen und diese mit Ihren Frontend-Chatbots und eingebetteter NLP integrieren k\u00f6nnen. Lassen Sie mich wissen, wor\u00fcber Sie sonst noch gerne lesen m\u00f6chten \u2013 zum Thema Open-Source-Technologien, Analytik, maschinelles Lernen und AWS!<\/p>\n<p>Im weiteren Verlauf Ihres Lernprozesses empfehle ich Ihnen, sich eingehender mit Embeddings, Vektordatenbanken, LangChain und weiteren LLMs auseinanderzusetzen. Diese sind im Amazon SageMaker JumpStart sowie in den AWS-Tools verf\u00fcgbar, die wir in diesem Tutorial verwendet haben, wie beispielsweise Amazon OpenSearch, Docker-Container und Fargate. Hier sind einige n\u00e4chste Schritte, die Ihnen helfen, diese Technologien zu beherrschen:<\/p>\n<ol>\n<li>Amazon SageMaker: Machen Sie sich im Laufe Ihrer Arbeit mit SageMaker auch mit den anderen angebotenen Algorithmen vertraut.<\/li>\n<li>AMAZON-OPEN-SUCHE: Erfahren Sie mehr \u00fcber den K-NN-Algorithmus und andere Distanzalgorithmen.<\/li>\n<li>Langchain: LangChain ist ein Framework, das die Erstellung von Anwendungen mit LLM vereinfachen soll.<\/li>\n<li>Einbettungen: Eine Einbettung ist eine numerische Darstellung einer Information, z. B. von Texten, Dokumenten, Bildern, Audiodateien usw.<\/li>\n<li>Amazon SageMaker JumpStart: SageMaker JumpStart bietet vortrainierte Open-Source-Modelle f\u00fcr eine breite Palette von Problemtypen, um Ihnen den Einstieg in das maschinelle Lernen zu erleichtern.<\/li>\n<\/ol>\n<h5 id=\"%d9%be%d8%a7%da%a9-%da%a9%d8%b1%d8%af%d9%86\">L\u00f6schen<\/h5>\n<ol>\n<li>Melden Sie sich bei der AWS CLI an. Stellen Sie sicher, dass die AWS CLI ordnungsgem\u00e4\u00df konfiguriert ist und \u00fcber die erforderlichen Berechtigungen verf\u00fcgt, um diese Aktionen auszuf\u00fchren.<\/li>\n<li>L\u00f6schen Sie die PDF-Datei aus Ihrem Amazon S3-Bucket, indem Sie den folgenden Befehl ausf\u00fchren. Ersetzen Sie \u201ebucket-name\u201c durch den tats\u00e4chlichen Namen Ihres Amazon S3-Buckets und passen Sie gegebenenfalls den Pfad zu Ihrer PDF-Datei an.<\/li>\n<\/ol>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-plain\" data-lang=\"Plain Text\"><code>aws s3 rm s3:\/\/your-bucket-name\/path\/to\/your-pdf-file.pdf\r\n<\/code><\/pre>\n<\/div>\n<p>L\u00f6schen Sie die CloudFormation-Stacks. Ersetzen Sie die Stack-Namen durch die tats\u00e4chlichen Namen Ihrer CloudFormation-Stacks.<\/p>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-plain\" data-lang=\"Plain Text\"><code># Delete 'ecs-website-chatbot' stack\r\naws cloudformation delete-stack --stack-name ecs-website-chatbot\r\n# Delete 'ecs-questionanswer-llm' stack\r\naws cloudformation delete-stack --stack-name ecs-questionanswer-llm\r\n# Delete 'ecs-embeddings-vectordb' stack\r\naws cloudformation delete-stack --stack-name ecs-embeddings-vectordb\r\n# Delete 'opensearch-vectordb' stack\r\naws cloudformation delete-stack --stack-name opensearch-vectordb<\/code><\/pre>\n<\/div>\n<div class=\"mdxdivp my-0\">L\u00f6schen Sie die SageMaker-Endpunkte. Ersetzen Sie endpoint-name-1 und endpoint-name-2 durch die Namen der SageMaker-Endpunkte.<\/div>\n<div>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-plain\" data-lang=\"Plain Text\"><code># Delete SageMaker endpoint 1\r\naws sagemaker delete-endpoint --endpoint-name endpoint-name-1\r\n# Delete SageMaker endpoint 2\r\naws sagemaker delete-endpoint --endpoint-name endpoint-name-2<\/code><\/pre>\n<\/div>\n<\/div>\n<h2 id=\"%d9%86%d8%aa%db%8c%d8%ac%d9%87\">Ergebnis<\/h2>\n<p>In diesem Tutorial haben wir einen Full-Stack-Fragen-und-Antworten-Chatbot mit AWS-Technologien und Open-Source-Tools entwickelt. Wir haben Amazon OpenSearch als Vektordatenbank und ein GPT-J 6B FP16-Einbettungsmodell integriert und Langchain mit einem LLM verwendet. Der Chatbot extrahiert Erkenntnisse aus unstrukturierten Dokumenten.<\/p>","protected":false},"excerpt":{"rendered":"Einleitung Stellen Sie sich vor, Sie k\u00f6nnten mit Ihren unstrukturierten Daten kommunizieren und wertvolle Informationen \u00fcbermitteln\u2026","protected":false},"author":1,"featured_media":15159,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_yoast_wpseo_focuskw":"\u0633\u0627\u062e\u062a \u06cc\u06a9 \u0686\u062a \u0628\u0627\u062a Full Stack","_yoast_wpseo_title":"","_yoast_wpseo_metadesc":"","_yoast_wpseo_canonical":"","_yoast_wpseo_opengraph-description":"","_yoast_wpseo_opengraph-image":"","_yoast_wpseo_twitter-description":"","_yoast_wpseo_twitter-image":"","_yoast_wpseo_focuskeywords":"","_yoast_wpseo_primary_category":"220","footnotes":""},"categories":[220,193],"tags":[366],"class_list":{"0":"post-15132","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-amazon","8":"category-tutorials","9":"tag-366"},"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>\u0633\u0627\u062e\u062a \u06cc\u06a9 \u0686\u062a \u0628\u0627\u062a Full Stack \u0642\u062f\u0631\u062a\u0645\u0646\u062f \u0628\u0627 \u0627\u0633\u062a\u062e\u0631\u0627\u062c \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0627\u0632 \u0627\u0633\u0646\u0627\u062f \u0628\u062f\u0648\u0646 \u0633\u0627\u062e\u062a\u0627\u0631 - \u0628\u0644\u0627\u06af ITPiran<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.itpiran.net\/blog\/de\/amazon\/fullstack-llm-langchain-chatbot-on-aws\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u0633\u0627\u062e\u062a \u06cc\u06a9 \u0686\u062a \u0628\u0627\u062a Full Stack \u0642\u062f\u0631\u062a\u0645\u0646\u062f \u0628\u0627 \u0627\u0633\u062a\u062e\u0631\u0627\u062c \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0627\u0632 \u0627\u0633\u0646\u0627\u062f \u0628\u062f\u0648\u0646 \u0633\u0627\u062e\u062a\u0627\u0631 - \u0628\u0644\u0627\u06af ITPiran\" \/>\n<meta property=\"og:description\" content=\"\u0645\u0642\u062f\u0645\u0647 \u062a\u0635\u0648\u0631 \u06a9\u0646\u06cc\u062f \u06a9\u0647 \u0628\u062a\u0648\u0627\u0646\u06cc\u062f \u0628\u0627 \u062f\u0627\u062f\u0647 \u0647\u0627\u06cc \u0628\u062f\u0648\u0646 \u0633\u0627\u062e\u062a\u0627\u0631 \u062e\u0648\u062f \u0645\u06a9\u0627\u0644\u0645\u0647 \u06a9\u0646\u06cc\u062f \u0648 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0627\u0631\u0632\u0634\u0645\u0646\u062f \u0631\u0627 \u0628\u0647&hellip;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.itpiran.net\/blog\/de\/amazon\/fullstack-llm-langchain-chatbot-on-aws\/\" \/>\n<meta property=\"og:site_name\" content=\"\u0628\u0644\u0627\u06af ITPiran\" \/>\n<meta property=\"article:published_time\" content=\"2024-03-31T14:55:36+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-03-31T15:55:29+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/cdn.itpiran.net\/2024\/03\/31192501\/chat-bot.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1793\" \/>\n\t<meta property=\"og:image:height\" content=\"1110\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"admin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"admin\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"5\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/amazon\\\/fullstack-llm-langchain-chatbot-on-aws\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/amazon\\\/fullstack-llm-langchain-chatbot-on-aws\\\/\"},\"author\":{\"name\":\"admin\",\"@id\":\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/#\\\/schema\\\/person\\\/04ed27b919baca468a2273f8e4318f81\"},\"headline\":\"\u0633\u0627\u062e\u062a \u06cc\u06a9 \u0686\u062a \u0628\u0627\u062a Full Stack \u0642\u062f\u0631\u062a\u0645\u0646\u062f \u0628\u0627 \u0627\u0633\u062a\u062e\u0631\u0627\u062c \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0627\u0632 \u0627\u0633\u0646\u0627\u062f \u0628\u062f\u0648\u0646 \u0633\u0627\u062e\u062a\u0627\u0631\",\"datePublished\":\"2024-03-31T14:55:36+00:00\",\"dateModified\":\"2024-03-31T15:55:29+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/amazon\\\/fullstack-llm-langchain-chatbot-on-aws\\\/\"},\"wordCount\":485,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/amazon\\\/fullstack-llm-langchain-chatbot-on-aws\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/cdn.itpiran.net\\\/2024\\\/03\\\/31192501\\\/chat-bot.jpg\",\"keywords\":[\"\u0628\u0631\u0646\u0627\u0645\u0647 \u0646\u0648\u06cc\u0633\u06cc\"],\"articleSection\":[\"\u0622\u0645\u0627\u0632\u0648\u0646\",\"\u0622\u0645\u0648\u0632\u0634\u06cc\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/amazon\\\/fullstack-llm-langchain-chatbot-on-aws\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/amazon\\\/fullstack-llm-langchain-chatbot-on-aws\\\/\",\"url\":\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/amazon\\\/fullstack-llm-langchain-chatbot-on-aws\\\/\",\"name\":\"\u0633\u0627\u062e\u062a \u06cc\u06a9 \u0686\u062a \u0628\u0627\u062a Full Stack \u0642\u062f\u0631\u062a\u0645\u0646\u062f \u0628\u0627 \u0627\u0633\u062a\u062e\u0631\u0627\u062c \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0627\u0632 \u0627\u0633\u0646\u0627\u062f \u0628\u062f\u0648\u0646 \u0633\u0627\u062e\u062a\u0627\u0631 - \u0628\u0644\u0627\u06af ITPiran\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/amazon\\\/fullstack-llm-langchain-chatbot-on-aws\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/amazon\\\/fullstack-llm-langchain-chatbot-on-aws\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/cdn.itpiran.net\\\/2024\\\/03\\\/31192501\\\/chat-bot.jpg\",\"datePublished\":\"2024-03-31T14:55:36+00:00\",\"dateModified\":\"2024-03-31T15:55:29+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/amazon\\\/fullstack-llm-langchain-chatbot-on-aws\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/amazon\\\/fullstack-llm-langchain-chatbot-on-aws\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/amazon\\\/fullstack-llm-langchain-chatbot-on-aws\\\/#primaryimage\",\"url\":\"https:\\\/\\\/cdn.itpiran.net\\\/2024\\\/03\\\/31192501\\\/chat-bot.jpg\",\"contentUrl\":\"https:\\\/\\\/cdn.itpiran.net\\\/2024\\\/03\\\/31192501\\\/chat-bot.jpg\",\"width\":1793,\"height\":1110},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/amazon\\\/fullstack-llm-langchain-chatbot-on-aws\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u0622\u0645\u0627\u0632\u0648\u0646\",\"item\":\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/category\\\/amazon\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"\u0633\u0627\u062e\u062a \u06cc\u06a9 \u0686\u062a \u0628\u0627\u062a Full Stack \u0642\u062f\u0631\u062a\u0645\u0646\u062f \u0628\u0627 \u0627\u0633\u062a\u062e\u0631\u0627\u062c \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0627\u0632 \u0627\u0633\u0646\u0627\u062f \u0628\u062f\u0648\u0646 \u0633\u0627\u062e\u062a\u0627\u0631\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/\",\"name\":\"\u0628\u0644\u0627\u06af ITPiran\",\"description\":\"\u0627\u062e\u0628\u0627\u0631 \u0648 \u0645\u0642\u0627\u0644\u0627\u062a \u062a\u062c\u0627\u0631\u062a \u067e\u0627\u06cc\u062f\u0627\u0631 \u0627\u06cc\u0631\u0627\u0646\u06cc\u0627\u0646\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/#organization\",\"name\":\"\u0628\u0644\u0627\u06af \u062a\u062c\u0627\u0631\u062a \u067e\u0627\u06cc\u062f\u0627\u0631 \u0627\u06cc\u0631\u0627\u0646\u06cc\u0627\u0646\",\"alternateName\":\"ITPIran Blog\",\"url\":\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/cdn.itpiran.net\\\/2023\\\/12\\\/27150508\\\/cropped-ITPIRAN-BLOG-LOGO-2.png\",\"contentUrl\":\"https:\\\/\\\/cdn.itpiran.net\\\/2023\\\/12\\\/27150508\\\/cropped-ITPIRAN-BLOG-LOGO-2.png\",\"width\":512,\"height\":512,\"caption\":\"\u0628\u0644\u0627\u06af \u062a\u062c\u0627\u0631\u062a \u067e\u0627\u06cc\u062f\u0627\u0631 \u0627\u06cc\u0631\u0627\u0646\u06cc\u0627\u0646\"},\"image\":{\"@id\":\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/#\\\/schema\\\/person\\\/04ed27b919baca468a2273f8e4318f81\",\"name\":\"admin\",\"url\":\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/de\\\/author\\\/admin\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Entwicklung eines leistungsstarken Full-Stack-Chatbots durch Informationsgewinnung aus unstrukturierten Dokumenten \u2013 ITPiran-Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.itpiran.net\/blog\/de\/amazon\/fullstack-llm-langchain-chatbot-on-aws\/","og_locale":"de_DE","og_type":"article","og_title":"\u0633\u0627\u062e\u062a \u06cc\u06a9 \u0686\u062a \u0628\u0627\u062a Full Stack \u0642\u062f\u0631\u062a\u0645\u0646\u062f \u0628\u0627 \u0627\u0633\u062a\u062e\u0631\u0627\u062c \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0627\u0632 \u0627\u0633\u0646\u0627\u062f \u0628\u062f\u0648\u0646 \u0633\u0627\u062e\u062a\u0627\u0631 - \u0628\u0644\u0627\u06af ITPiran","og_description":"\u0645\u0642\u062f\u0645\u0647 \u062a\u0635\u0648\u0631 \u06a9\u0646\u06cc\u062f \u06a9\u0647 \u0628\u062a\u0648\u0627\u0646\u06cc\u062f \u0628\u0627 \u062f\u0627\u062f\u0647 \u0647\u0627\u06cc \u0628\u062f\u0648\u0646 \u0633\u0627\u062e\u062a\u0627\u0631 \u062e\u0648\u062f \u0645\u06a9\u0627\u0644\u0645\u0647 \u06a9\u0646\u06cc\u062f \u0648 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0627\u0631\u0632\u0634\u0645\u0646\u062f \u0631\u0627 \u0628\u0647&hellip;","og_url":"https:\/\/www.itpiran.net\/blog\/de\/amazon\/fullstack-llm-langchain-chatbot-on-aws\/","og_site_name":"\u0628\u0644\u0627\u06af ITPiran","article_published_time":"2024-03-31T14:55:36+00:00","article_modified_time":"2024-03-31T15:55:29+00:00","og_image":[{"width":1793,"height":1110,"url":"https:\/\/cdn.itpiran.net\/2024\/03\/31192501\/chat-bot.jpg","type":"image\/jpeg"}],"author":"admin","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"admin","Gesch\u00e4tzte Lesezeit":"5\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.itpiran.net\/blog\/amazon\/fullstack-llm-langchain-chatbot-on-aws\/#article","isPartOf":{"@id":"https:\/\/www.itpiran.net\/blog\/amazon\/fullstack-llm-langchain-chatbot-on-aws\/"},"author":{"name":"admin","@id":"https:\/\/www.itpiran.net\/blog\/#\/schema\/person\/04ed27b919baca468a2273f8e4318f81"},"headline":"\u0633\u0627\u062e\u062a \u06cc\u06a9 \u0686\u062a \u0628\u0627\u062a Full Stack \u0642\u062f\u0631\u062a\u0645\u0646\u062f \u0628\u0627 \u0627\u0633\u062a\u062e\u0631\u0627\u062c \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0627\u0632 \u0627\u0633\u0646\u0627\u062f \u0628\u062f\u0648\u0646 \u0633\u0627\u062e\u062a\u0627\u0631","datePublished":"2024-03-31T14:55:36+00:00","dateModified":"2024-03-31T15:55:29+00:00","mainEntityOfPage":{"@id":"https:\/\/www.itpiran.net\/blog\/amazon\/fullstack-llm-langchain-chatbot-on-aws\/"},"wordCount":485,"commentCount":0,"publisher":{"@id":"https:\/\/www.itpiran.net\/blog\/#organization"},"image":{"@id":"https:\/\/www.itpiran.net\/blog\/amazon\/fullstack-llm-langchain-chatbot-on-aws\/#primaryimage"},"thumbnailUrl":"https:\/\/cdn.itpiran.net\/2024\/03\/31192501\/chat-bot.jpg","keywords":["\u0628\u0631\u0646\u0627\u0645\u0647 \u0646\u0648\u06cc\u0633\u06cc"],"articleSection":["\u0622\u0645\u0627\u0632\u0648\u0646","\u0622\u0645\u0648\u0632\u0634\u06cc"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.itpiran.net\/blog\/amazon\/fullstack-llm-langchain-chatbot-on-aws\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.itpiran.net\/blog\/amazon\/fullstack-llm-langchain-chatbot-on-aws\/","url":"https:\/\/www.itpiran.net\/blog\/amazon\/fullstack-llm-langchain-chatbot-on-aws\/","name":"Entwicklung eines leistungsstarken Full-Stack-Chatbots durch Informationsgewinnung aus unstrukturierten Dokumenten \u2013 ITPiran-Blog","isPartOf":{"@id":"https:\/\/www.itpiran.net\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.itpiran.net\/blog\/amazon\/fullstack-llm-langchain-chatbot-on-aws\/#primaryimage"},"image":{"@id":"https:\/\/www.itpiran.net\/blog\/amazon\/fullstack-llm-langchain-chatbot-on-aws\/#primaryimage"},"thumbnailUrl":"https:\/\/cdn.itpiran.net\/2024\/03\/31192501\/chat-bot.jpg","datePublished":"2024-03-31T14:55:36+00:00","dateModified":"2024-03-31T15:55:29+00:00","breadcrumb":{"@id":"https:\/\/www.itpiran.net\/blog\/amazon\/fullstack-llm-langchain-chatbot-on-aws\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.itpiran.net\/blog\/amazon\/fullstack-llm-langchain-chatbot-on-aws\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/www.itpiran.net\/blog\/amazon\/fullstack-llm-langchain-chatbot-on-aws\/#primaryimage","url":"https:\/\/cdn.itpiran.net\/2024\/03\/31192501\/chat-bot.jpg","contentUrl":"https:\/\/cdn.itpiran.net\/2024\/03\/31192501\/chat-bot.jpg","width":1793,"height":1110},{"@type":"BreadcrumbList","@id":"https:\/\/www.itpiran.net\/blog\/amazon\/fullstack-llm-langchain-chatbot-on-aws\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.itpiran.net\/blog\/"},{"@type":"ListItem","position":2,"name":"\u0622\u0645\u0627\u0632\u0648\u0646","item":"https:\/\/www.itpiran.net\/blog\/category\/amazon\/"},{"@type":"ListItem","position":3,"name":"\u0633\u0627\u062e\u062a \u06cc\u06a9 \u0686\u062a \u0628\u0627\u062a Full Stack \u0642\u062f\u0631\u062a\u0645\u0646\u062f \u0628\u0627 \u0627\u0633\u062a\u062e\u0631\u0627\u062c \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0627\u0632 \u0627\u0633\u0646\u0627\u062f \u0628\u062f\u0648\u0646 \u0633\u0627\u062e\u062a\u0627\u0631"}]},{"@type":"WebSite","@id":"https:\/\/www.itpiran.net\/blog\/#website","url":"https:\/\/www.itpiran.net\/blog\/","name":"ITPiran Blog","description":"Iranische Nachrichten und Artikel zum Thema nachhaltiger Handel","publisher":{"@id":"https:\/\/www.itpiran.net\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.itpiran.net\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/www.itpiran.net\/blog\/#organization","name":"Nachhaltiger iranischer Unternehmensblog","alternateName":"ITPIran Blog","url":"https:\/\/www.itpiran.net\/blog\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/www.itpiran.net\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/cdn.itpiran.net\/2023\/12\/27150508\/cropped-ITPIRAN-BLOG-LOGO-2.png","contentUrl":"https:\/\/cdn.itpiran.net\/2023\/12\/27150508\/cropped-ITPIRAN-BLOG-LOGO-2.png","width":512,"height":512,"caption":"\u0628\u0644\u0627\u06af \u062a\u062c\u0627\u0631\u062a \u067e\u0627\u06cc\u062f\u0627\u0631 \u0627\u06cc\u0631\u0627\u0646\u06cc\u0627\u0646"},"image":{"@id":"https:\/\/www.itpiran.net\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.itpiran.net\/blog\/#\/schema\/person\/04ed27b919baca468a2273f8e4318f81","name":"Administrator","url":"https:\/\/www.itpiran.net\/blog\/de\/author\/admin\/"}]}},"_links":{"self":[{"href":"https:\/\/www.itpiran.net\/blog\/de\/wp-json\/wp\/v2\/posts\/15132","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.itpiran.net\/blog\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.itpiran.net\/blog\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.itpiran.net\/blog\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.itpiran.net\/blog\/de\/wp-json\/wp\/v2\/comments?post=15132"}],"version-history":[{"count":2,"href":"https:\/\/www.itpiran.net\/blog\/de\/wp-json\/wp\/v2\/posts\/15132\/revisions"}],"predecessor-version":[{"id":15160,"href":"https:\/\/www.itpiran.net\/blog\/de\/wp-json\/wp\/v2\/posts\/15132\/revisions\/15160"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.itpiran.net\/blog\/de\/wp-json\/wp\/v2\/media\/15159"}],"wp:attachment":[{"href":"https:\/\/www.itpiran.net\/blog\/de\/wp-json\/wp\/v2\/media?parent=15132"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.itpiran.net\/blog\/de\/wp-json\/wp\/v2\/categories?post=15132"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.itpiran.net\/blog\/de\/wp-json\/wp\/v2\/tags?post=15132"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}