{"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\/es\/amazon\/fullstack-llm-langchain-chatbot-on-aws\/","title":{"rendered":"Construir un potente chatbot de pila completa extrayendo informaci\u00f3n de documentos no estructurados"},"content":{"rendered":"<h2 id=\"%d9%85%d9%82%d8%af%d9%85%d9%87\">Introducci\u00f3n<\/h2>\n<p>Imagina poder conversar con tus datos no estructurados y extraer f\u00e1cilmente informaci\u00f3n valiosa. En el panorama actual, basado en datos, extraer informaci\u00f3n significativa de documentos no estructurados sigue siendo un desaf\u00edo, lo que dificulta la toma de decisiones y la innovaci\u00f3n. En este tutorial, conoceremos las incrustaciones, exploraremos el uso de Amazon Open Search como base de datos vectorial e integraremos el framework Langchain con Modelos de Lenguaje de Gran Tama\u00f1o (LLM) para crear un sitio web con un chatbot de PLN integrado. Repasaremos los fundamentos de los LLM para extraer informaci\u00f3n significativa de un documento no estructurado con la ayuda de un Modelo de Lenguaje de Gran Tama\u00f1o de c\u00f3digo abierto. Al finalizar este tutorial, comprender\u00e1s por completo c\u00f3mo obtener informaci\u00f3n significativa de documentos no estructurados y utilizar\u00e1s las habilidades para explorar e innovar con soluciones similares basadas en IA Full-Stack.<\/p>\n<h5 id=\"%d9%be%db%8c%d8%b4-%d9%86%db%8c%d8%a7%d8%b2%d9%87%d8%a7\">Requisitos previos<\/h5>\n<ul>\n<li>Debe tener una cuenta activa de AWS. Si no la tiene, puede registrarse en el sitio web de AWS.<\/li>\n<li>Aseg\u00farese de tener instalada la interfaz de l\u00ednea de comandos (CLI) de AWS en su equipo local y de que est\u00e9 configurada correctamente con las credenciales requeridas y la regi\u00f3n predeterminada. Puede configurarla con el comando aws configure.<\/li>\n<li>Descargue e instale Docker Engine. Siga las instrucciones de instalaci\u00f3n para su sistema operativo.<\/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\">\u00bfQu\u00e9 vamos a construir?<\/h2>\n<p>En este ejemplo, queremos imitar un problema que enfrentan muchas empresas. Gran parte de los datos actuales no est\u00e1n estructurados, sino que se presentan en forma de transcripciones de audio y video, documentos PDF y Word, manuales, notas escaneadas, transcripciones de redes sociales, etc. Utilizaremos el modelo Flan-T5 XXL como LLM. Este modelo puede generar res\u00famenes y preguntas y respuestas a partir de textos no estructurados. La imagen a continuaci\u00f3n muestra la arquitectura de los diferentes componentes.<\/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 \/>\nEmpecemos con lo b\u00e1sico.<\/h2>\n<p>Utilizaremos una t\u00e9cnica llamada aprendizaje en contexto para incorporar un contexto espec\u00edfico de dominio o caso en nuestro LLM. En este caso, tenemos un manual en PDF no estructurado de un autom\u00f3vil que queremos a\u00f1adir como contexto para el LLM y queremos que este responda preguntas sobre este manual. \u00a1As\u00ed de simple! Nuestro objetivo es ir un paso m\u00e1s all\u00e1 creando una API en tiempo real que recibe preguntas, las env\u00eda a nuestro backend y es accesible a trav\u00e9s de un chatbot de c\u00f3digo abierto integrado en el sitio web. Este tutorial nos permitir\u00e1 crear la experiencia de usuario completa y comprender mejor los diversos conceptos y herramientas a lo largo del proceso.<\/p>\n<ol>\n<li>El primer paso para proporcionar aprendizaje en texto es ingerir el documento PDF y convertirlo en fragmentos de texto, generar representaciones vectoriales de estos fragmentos de texto llamadas &quot;incrustaciones&quot; y, finalmente, almacenar estas incrustaciones en una base de datos vectorial.<\/li>\n<li>Las bases de datos vectoriales nos permiten realizar \u00abb\u00fasquedas de similitud\u00bb en las incrustaciones de texto que almacenan.<\/li>\n<li>Amazon SageMaker JumpStart ofrece plantillas de soluciones de implementaci\u00f3n con un solo clic para configurar la infraestructura para modelos de c\u00f3digo abierto preentrenados. Utilizaremos Amazon SageMaker JumpStart para implementar el modelo de incrustaci\u00f3n y el modelo de lenguaje grande.<\/li>\n<li>Amazon OpenSearch es un motor de b\u00fasqueda y an\u00e1lisis que puede buscar los vecinos m\u00e1s cercanos de los puntos en un espacio vectorial, lo que lo hace adecuado como base de datos vectorial.<\/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\">Gr\u00e1fico: Convertir de PDF para incrustar en una base de datos vectorial<\/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 \/>\nPaso 1: Implementar el modelo de integraci\u00f3n GPT-J 6B FP16 con Amazon SageMaker JumpStart<\/h2>\n<p>Siga los pasos mencionados en la documentaci\u00f3n de Amazon SageMaker: Abra y utilice la secci\u00f3n JumpStart para iniciar un nodo de Amazon SageMaker JumpStart desde el men\u00fa principal de Amazon SageMaker Studio. Seleccione Modelos, Notebooks, Soluciones y el modelo de incrustaci\u00f3n GPT-J 6B Embedding FP16, como se muestra en la imagen a continuaci\u00f3n. A continuaci\u00f3n, haga clic en &quot;Implementar&quot; y Amazon SageMaker JumpStart se encargar\u00e1 de configurar la infraestructura para implementar este modelo preentrenado en el entorno de SageMaker.<\/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 \/>\nPaso 2: Implementar Flan T5 XXL LLM con Amazon SageMaker JumpStart<\/h2>\n<p>A continuaci\u00f3n, en Amazon SageMaker JumpStart, seleccione Flan-T5 XXL LLM y haga clic en &quot;Implementar&quot; para comenzar la configuraci\u00f3n autom\u00e1tica de la infraestructura e implementar el punto final del modelo en el entorno de Amazon SageMaker.<\/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 \/>\nPaso 3: Verificar el estado de los puntos finales del modelo implementado<\/h2>\n<p>Comprobamos el estado de los puntos de conexi\u00f3n del modelo implementados en los pasos 1 y 2 en la consola de Amazon SageMaker y anotamos sus nombres, ya que los usaremos en nuestro c\u00f3digo. As\u00ed se ve mi consola despu\u00e9s de implementar los puntos de conexi\u00f3n del modelo.<\/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 \/>\nPaso 4: Crear un cl\u00faster de Amazon Open Search<\/h2>\n<p>Amazon OpenSearch es un servicio de b\u00fasqueda y an\u00e1lisis compatible con el algoritmo k-Nearest Neighbors (kNN). Esta funci\u00f3n es fundamental para las b\u00fasquedas basadas en similitud y permite utilizar OpenSearch eficazmente como base de datos vectorial. Para m\u00e1s informaci\u00f3n sobre las versiones de Elasticsearch\/OpenSearch compatibles con el plugin kNN, consulte el siguiente enlace: Documentaci\u00f3n del plugin k-NN.<\/p>\n<p>Usamos la AWS CLI para implementar el archivo de plantilla de AWS CloudFormation desde la ubicaci\u00f3n de GitHub. <code>Infraestructura\/opensearch-vectordb.yaml<\/code> Utilizaremos el comando aws. <code>pila de creaci\u00f3n de Cloudformation<\/code> Ejecute el siguiente comando para crear un cl\u00faster de Amazon Open Search. Debe reemplazar los valores por los suyos antes de ejecutar el comando. <code>nombre de usuario<\/code> y <code>contrase\u00f1a<\/code> Vamos a hacerlo.<\/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\">Paso 5: Crear el flujo de trabajo de captura e incrustaci\u00f3n de documentos<\/h2>\n<p>En este paso, crearemos una canalizaci\u00f3n de ingesta y procesamiento dise\u00f1ada para leer un documento PDF cuando se almacena en un bucket de Amazon Simple Storage Service (S3). Esta canalizaci\u00f3n realizar\u00e1 las siguientes tareas:<\/p>\n<ol>\n<li>Extraer texto del documento PDF.<\/li>\n<li>Convertir fragmentos de texto en incrustaciones (representaciones vectoriales).<\/li>\n<li>Guardar incrustaciones en Amazon Open Search.<\/li>\n<\/ol>\n<p>Al colocar un archivo PDF en un bucket de S3, se activar\u00e1 un flujo de trabajo basado en eventos que incluye un trabajo de AWS Fargate. Este trabajo se encargar\u00e1 de convertir el texto en incrustaciones e insertarlas en Amazon Open Search.<\/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\">Descripci\u00f3n esquem\u00e1tica<\/h5>\n<p>A continuaci\u00f3n se muestra un diagrama que muestra el proceso de transferencia de documentos para almacenar fragmentos de texto incrustados en la base de datos de vectores de Amazon OpenSearch:<\/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 \/>\nScript de inicio y estructura de archivos<\/h5>\n<p>La l\u00f3gica principal del archivo <code>crear-incrustaciones-guardar-en-vectordb\\startup_script.py<\/code> Este script de Python se encuentra en <code>script de inicio.py<\/code>Realiza diversas tareas relacionadas con el procesamiento de documentos, la incrustaci\u00f3n de texto y la inserci\u00f3n en un cl\u00faster de Amazon Open Search. El script descarga un documento PDF de un bucket de Amazon S3 y lo divide en fragmentos de texto m\u00e1s peque\u00f1os. Para cada fragmento, el contenido de texto se env\u00eda al punto de enlace del modelo de incrustaci\u00f3n GPT-J 6B FP16 implementado en Amazon SageMaker (obtenido de la variable de entorno TEXT_EMBEDDING_MODEL_ENDPOINT_NAME) para crear incrustaciones de texto. Las incrustaciones creadas se colocan en el \u00edndice de Amazon Open Search junto con otra informaci\u00f3n. El script recupera los par\u00e1metros de configuraci\u00f3n y validaci\u00f3n de las variables de entorno y los mantiene consistentes en todos los entornos. El script est\u00e1 dise\u00f1ado para ejecutarse de forma uniforme en un contenedor Docker.<\/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\">Construir y publicar la imagen de Docker<\/h5>\n<p>Despu\u00e9s de comprender el c\u00f3digo en <code>script de inicio.py<\/code>, construimos el Dockerfile desde la carpeta <code>crear-incrustaciones-guardar-en-vectordb<\/code> Continuaremos y subiremos la imagen a Amazon Elastic Container Registry (Amazon ECR). Amazon Elastic Container Registry (Amazon ECR) es un registro de contenedores completamente administrado que ofrece alojamiento de alto rendimiento, lo que nos permite implementar im\u00e1genes y artefactos de aplicaciones de forma fiable en cualquier lugar. Usaremos la CLI de AWS y la CLI de Docker para crear y subir la imagen de Docker a Amazon ECR. En todos los comandos siguientes, Reemplace con el n\u00famero de cuenta de AWS correcto.<\/p>\n<p>Recupere un token de autenticaci\u00f3n y autentique el cliente Docker en el registro en la 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>Construya su imagen de Docker usando el siguiente comando.<\/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>Una vez que se complete la compilaci\u00f3n, etiquete la imagen para que podamos enviarla a este repositorio:<\/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>Ejecute el siguiente comando para enviar esta imagen al nuevo repositorio de Amazon ECR:<\/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>Una vez que la imagen de Docker se carga en el repositorio de Amazon ECR, deber\u00eda verse como la siguiente imagen:<\/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 \/>\nConstruir una infraestructura para un flujo de trabajo de incrustaci\u00f3n de PDF basado en eventos<\/h5>\n<p>Podemos usar la interfaz de l\u00ednea de comandos de AWS (AWS CLI) para crear una pila de CloudFormation para un flujo de trabajo basado en eventos con los par\u00e1metros proporcionados. La plantilla de CloudFormation est\u00e1 disponible en el repositorio de GitHub en <code>Infraestructura\/fargate-embeddings-vectordb-save.yaml<\/code> Necesitamos ignorar los par\u00e1metros para que coincidan con el entorno de AWS.<\/p>\n<p>Aqu\u00ed est\u00e1n los par\u00e1metros clave para actualizar en el comando <code>pila de creaci\u00f3n de AWS CloudFormation<\/code> Se afirma:<\/p>\n<ul>\n<li>BucketName: este par\u00e1metro representa el bucket de Amazon S3 donde colocaremos los documentos PDF.<\/li>\n<li>VpcId y SubnetId: estos par\u00e1metros especifican d\u00f3nde se ejecutar\u00e1 la tarea de Fargate.<\/li>\n<li>ImageName: este es el nombre de la imagen de Docker en Amazon Elastic Container Registry (ECR) para save-embedding-vectordb.<\/li>\n<li>TextEmbeddingModelEndpointName: utilice este par\u00e1metro para proporcionar el nombre del modelo de incrustaci\u00f3n implementado en Amazon SageMaker en el paso 1.<\/li>\n<li>VectorDatabaseEndpoint: especifique la direcci\u00f3n del punto final del dominio de Amazon OpenSearch.<\/li>\n<li>VectorDatabaseUsername y VectorDatabasePassword: estos par\u00e1metros son para las credenciales necesarias para acceder al cl\u00faster de Amazon Open Search creado en el paso 4.<\/li>\n<li>VectorDatabaseIndex: establece el nombre del \u00edndice en Amazon Open Search donde se almacenan las incrustaciones de documentos PDF.<\/li>\n<\/ul>\n<p>Para ejecutar la creaci\u00f3n de la pila de CloudFormation, despu\u00e9s de actualizar los valores de los par\u00e1metros, utilizamos el siguiente comando de 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 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>Al crear la pila de CloudFormation mencionada anteriormente, configuramos un bucket S3 y creamos notificaciones S3 que lanzan una funci\u00f3n Lambda. Esta funci\u00f3n Lambda, a su vez, inicia una tarea Fargate. Esta tarea Fargate crea un contenedor Docker con el archivo. <code>script de inicio.py<\/code> Implementa que se encarga de crear incrustaciones en Amazon OpenSearch bajo un nuevo \u00edndice de OpenSearch llamado <code>manual del coche<\/code> Es.<\/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\">Prueba con una muestra en PDF<\/h5>\n<p>Una vez que la pila de CloudFormation est\u00e9 en ejecuci\u00f3n, inserte un PDF con el manual de la m\u00e1quina en su bucket de S3. Descargu\u00e9 un manual de la m\u00e1quina disponible aqu\u00ed. Una vez finalizada la ejecuci\u00f3n de la canalizaci\u00f3n de transporte basada en eventos, el cl\u00faster de Amazon Open Search deber\u00eda contener el siguiente perfil: <code>manual del coche<\/code> Con las incrustaciones que se muestran a continuaci\u00f3n.<\/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 \/>\nPaso 6: Implementar la API de preguntas y respuestas en tiempo real con soporte de texto Llm<\/h2>\n<p>Ahora que tenemos nuestras incrustaciones de texto en una base de datos vectorial impulsada por Amazon Open Search, pasemos al siguiente paso. Aqu\u00ed, usaremos las funciones del T5 Flan XXL LLM para obtener respuestas en tiempo real sobre el manual de nuestro coche.<\/p>\n<p>Utilizamos las incrustaciones almacenadas en la base de datos vectorial para contextualizar LLM. Este contexto permite a LLM comprender y responder eficazmente a preguntas sobre el manual de nuestro veh\u00edculo. Para ello, utilizaremos un framework llamado LangChain, que simplifica la coordinaci\u00f3n de los diversos componentes necesarios para nuestro sistema de preguntas y respuestas en tiempo real y con reconocimiento de texto, dise\u00f1ado por LLM.<\/p>\n<p>Las incrustaciones almacenadas en una base de datos vectorial representan el significado y las relaciones de las palabras y permiten realizar c\u00e1lculos basados en similitudes sem\u00e1nticas. Mientras que las incrustaciones crean representaciones vectoriales de fragmentos de texto para capturar significados y relaciones, T5 Flan LLM se especializa en crear respuestas contextuales basadas en el contexto introducido en solicitudes y consultas. El objetivo es vincular las preguntas del usuario con fragmentos de texto mediante la creaci\u00f3n de incrustaciones para las preguntas y la medici\u00f3n de su similitud con otras incrustaciones almacenadas en la base de datos vectorial.<\/p>\n<p>Al representar fragmentos de texto y consultas de usuario como vectores, podemos realizar c\u00e1lculos matem\u00e1ticos para realizar b\u00fasquedas de similitud contextuales. Para medir la similitud entre dos puntos de datos, utilizamos m\u00e9tricas de distancia en un espacio multidimensional.<\/p>\n<p>El siguiente diagrama muestra el flujo de trabajo de preguntas y respuestas en tiempo real proporcionado por LangChain y nuestro T5 Flan LLM.<\/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\">Descripci\u00f3n gr\u00e1fica del soporte de preguntas y respuestas en tiempo real de 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 \/>\nConstruir la API<\/h5>\n<p>Ahora que hemos revisado nuestro flujo de trabajo LLM de LangChain y T5 Flask, analicemos a fondo el c\u00f3digo de nuestra API, que acepta preguntas de los usuarios y proporciona respuestas contextuales. Esta API de preguntas y respuestas en tiempo real se encuentra en la carpeta RAG-langchain-questionanswer-t5-llm de nuestro repositorio de GitHub, y su l\u00f3gica principal se encuentra en el archivo app.py. Esta aplicaci\u00f3n basada en Flask define una ruta \/qa para responder preguntas.<\/p>\n<p>Cuando un usuario env\u00eda una consulta a la API, esta utiliza la variable de entorno TEXT_EMBEDDING_MODEL_ENDPOINT_NAME y apunta a un endpoint de Amazon SageMaker para convertir la consulta en representaciones vectoriales num\u00e9ricas llamadas incrustaciones. Estas incrustaciones capturan el significado sem\u00e1ntico del texto.<\/p>\n<p>La API tambi\u00e9n aprovecha Amazon OpenSearch para realizar b\u00fasquedas de similitud contextuales, lo que le permite extraer fragmentos de texto relevantes de la gu\u00eda de trabajo del directorio de OpenSearch bas\u00e1ndose en las incrustaciones obtenidas de las consultas de los usuarios. Tras este paso, la API llama al punto de enlace T5 Flan LLM, identificado por la variable de entorno T5FLAN_XXL_ENDPOINT_NAME, que tambi\u00e9n se implementa en Amazon SageMaker. El punto de enlace utiliza los fragmentos de texto obtenidos de Amazon OpenSearch como contexto para generar respuestas. Estos fragmentos de texto obtenidos de Amazon OpenSearch act\u00faan como contexto valioso para el punto de enlace T5 Flan LLM, lo que le permite proporcionar respuestas significativas a las consultas de los usuarios. El c\u00f3digo de la API utiliza LangChain para orquestar todas estas interacciones.<\/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\">Construya y publique la imagen de Docker para la API<\/h5>\n<p>Tras comprender el c\u00f3digo en app.py, procedemos a compilar el Dockerfile desde la carpeta RAG-langchain-questionanswer-t5-llm y a enviar la imagen a Amazon ECR. Usaremos AWS CLI y Docker CLI para compilar y enviar la imagen de Docker a Amazon ECR. En todos los comandos siguientes: Reemplace con el n\u00famero de cuenta de AWS correcto.<\/p>\n<p>Recupere un token de autenticaci\u00f3n y autentique el cliente Docker en el registro en la 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>Construya la imagen de Docker usando el siguiente comando.<\/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>Una vez que se complete la compilaci\u00f3n, etiquete la imagen para que podamos enviarla a este repositorio:<\/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>Ejecute el siguiente comando para enviar esta imagen al nuevo repositorio de Amazon ECR:<\/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>Una vez que la imagen de Docker se carga en el repositorio de Amazon ECR, deber\u00eda verse como la siguiente imagen:<\/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 \/>\nCree una pila de CloudFormation para alojar el punto final de la API<\/h5>\n<p>Utilizaremos la interfaz de l\u00ednea de comandos (CLI) de AWS para crear una pila de CloudFormation para un cl\u00faster de Amazon ECS que aloja una tarea de Fargate para exponer la API. La plantilla de CloudFormation se encuentra en el repositorio de GitHub en Infrastructure\/fargate-api-rag-llm-langchain.yaml. Necesitamos sobrescribir los par\u00e1metros para que coincidan con el entorno de AWS. Estos son los par\u00e1metros clave que se deben actualizar en el comando aws cloudformation create-stack:<\/p>\n<ul>\n<li>DemoVPC: este par\u00e1metro especifica la nube privada virtual (VPC) en la que se ejecutar\u00e1 su servicio.<\/li>\n<li>PublicSubnetIds: este par\u00e1metro requiere una lista de ID de subredes p\u00fablicas donde se ubicar\u00e1n su balanceador de carga y sus tareas.<\/li>\n<li>NOMBREDELAIMAGEN: proporcione el nombre de la imagen de Docker en Amazon Elastic Container Registry (ECR) para el contenedor qa.<\/li>\n<li>TextEmbeddingModelEndpointName: especifique el nombre del punto final del modelo Embeddings implementado en Amazon SageMaker en el paso 1.<\/li>\n<li>T5FlanXXLEndpointName: establece el nombre del punto final T5-FLAN implementado en Amazon SageMaker en el paso 2.<\/li>\n<li>VectorDatabaseEndpoint: especifique la direcci\u00f3n del punto final del dominio de Amazon OpenSearch.<\/li>\n<li>VectorDatabaseUsername y VectorDatabasePassword: estos par\u00e1metros son para las credenciales necesarias para acceder al cl\u00faster OpenSearch creado en el paso 4.<\/li>\n<li>VectorDatabaseIndex: Establezca el nombre del \u00edndice en Amazon OpenSearch donde se almacenar\u00e1n los datos de su servicio. El nombre del \u00edndice que usamos en este ejemplo es carmanual.<\/li>\n<\/ul>\n<p>Para ejecutar la creaci\u00f3n de la pila de CloudFormation, despu\u00e9s de actualizar los valores de los par\u00e1metros, utilizamos el siguiente comando de 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 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>Tras ejecutar correctamente la pila de CloudFormation mencionada anteriormente, acceda a la consola de AWS y a la pesta\u00f1a &quot;Salidas de CloudFormation&quot; de la pila ecs-questionanswer-llm. En esta pesta\u00f1a, encontrar\u00e1 la informaci\u00f3n necesaria, incluido el punto de conexi\u00f3n de la API. A continuaci\u00f3n, se muestra un ejemplo de c\u00f3mo se ver\u00eda la salida:<\/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 \/>\nProbar la API<\/h5>\n<p>Podemos probar el punto final de la API a trav\u00e9s del comando curl de la siguiente manera:<\/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>Veremos una respuesta como la siguiente.<\/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\">Paso 7: Crear e implementar un sitio web con un chatbot integrado<\/h2>\n<p>Luego, pasamos al paso final de nuestra canalizaci\u00f3n completa, que integra la API con el chatbot integrado en un sitio web HTML. Para este sitio web y el chatbot integrado, nuestro c\u00f3digo fuente es una aplicaci\u00f3n Node.js que consta de un archivo index.html integrado con el archivo botkit.js de c\u00f3digo abierto como chatbot. Para simplificar las cosas, he creado un Dockerfile y lo he incluido junto con el c\u00f3digo en la carpeta homegrown_website_and_bot. Usaremos AWS CLI y Docker CLI para compilar y enviar la imagen de Docker a Amazon ECR para el sitio web frontend. En todos los comandos siguientes: Reemplace con el n\u00famero de cuenta de AWS correcto.<\/p>\n<p>Recupere un token de autenticaci\u00f3n y autentique el cliente Docker en el registro en la 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>Construya la imagen de Docker usando el siguiente comando:<\/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>Una vez que se complete la compilaci\u00f3n, etiquete la imagen para que podamos enviarla a este repositorio:<\/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>Ejecute el siguiente comando para enviar esta imagen al nuevo repositorio de Amazon ECR:<\/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>Tras subir la imagen de Docker del sitio web al repositorio de ECR, creamos la pila de CloudFormation para el frontend ejecutando el archivo Infrastructure\\fargate-website-chatbot.yaml. Necesitamos sobrescribir los par\u00e1metros para que coincidan con el entorno de AWS. Estos son los par\u00e1metros clave que se deben actualizar en el comando aws cloudformation create-stack:<\/p>\n<ul>\n<li>DemoVPC: este par\u00e1metro especifica la nube privada virtual (VPC) donde se implementar\u00e1 su sitio web.<\/li>\n<li>PublicSubnetIds: este par\u00e1metro requiere una lista de ID de subredes p\u00fablicas donde se colocar\u00e1n las tareas y el balanceador de carga de su sitio web.<\/li>\n<li>NOMBREDELAIMAGEN: Ingrese el nombre de la imagen de Docker en Amazon Elastic Container Registry (ECR) para su sitio web.<\/li>\n<li>QUESTURL: Especifique la URL del punto final de la API implementado en el paso 6. Su formato es http:\/\/ Es \/qa.<\/li>\n<\/ul>\n<p>Para ejecutar la creaci\u00f3n de la pila de CloudFormation, despu\u00e9s de actualizar los valores de los par\u00e1metros, utilizamos el siguiente comando de 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 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\">Paso 8: Consulta el Asistente de IA de Car Savvy<\/h2>\n<p>Tras crear correctamente la pila de CloudFormation mencionada anteriormente, acceda a la consola de AWS y a la pesta\u00f1a &quot;Salidas de CloudFormation&quot; de la pila ecs-website-chatbot. En esta pesta\u00f1a, encontrar\u00e1 el nombre DNS del balanceador de carga de aplicaciones (ALB) asociado al frontend. A continuaci\u00f3n, se muestra un ejemplo de c\u00f3mo se ver\u00eda la salida:<\/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 \/>\nLlama a la URL del punto final en el navegador para ver el aspecto del sitio web. Haz preguntas en lenguaje natural al chatbot integrado. Algunas preguntas que podemos hacer son: &quot;\u00bfC\u00f3mo limpio mi parabrisas?&quot;, &quot;\u00bfD\u00f3nde puedo encontrar el VIN?&quot;, &quot;\u00bfC\u00f3mo reporto un defecto de seguridad?&quot;.\u201c<\/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 \/>\n\u00bfQu\u00e9 sigue?<\/h5>\n<p>Esperamos que lo anterior te muestre c\u00f3mo puedes crear tus propios pipelines listos para producci\u00f3n para LLM e integrarlos con tus chatbots frontend y NLP integrado. \u00a1Cu\u00e9ntame qu\u00e9 m\u00e1s te gustar\u00eda leer sobre el uso de tecnolog\u00edas de c\u00f3digo abierto, anal\u00edtica, aprendizaje autom\u00e1tico y AWS!<\/p>\n<p>A medida que contin\u00fae su aprendizaje, le animo a profundizar en Embeddings, Bases de Datos Vectoriales, LangChain y otros LLM. Est\u00e1n disponibles en Amazon SageMaker JumpStart, as\u00ed como en las herramientas de AWS que usamos en este tutorial, como Amazon OpenSearch, Docker Containers y Fargate. Estos son algunos pasos a seguir para ayudarle a dominar estas tecnolog\u00edas:<\/p>\n<ol>\n<li>Amazon SageMaker: a medida que avance con SageMaker, familiar\u00edcese con los otros algoritmos que ofrece.<\/li>\n<li>B\u00daSQUEDA ABIERTA DE AMAZON: Conozca el algoritmo K-NN y otros algoritmos de distancia<\/li>\n<li>Langchain: LangChain es un marco dise\u00f1ado para simplificar la creaci\u00f3n de aplicaciones utilizando LLM.<\/li>\n<li>Incrustaciones: una incrustaci\u00f3n es una representaci\u00f3n num\u00e9rica de una pieza de informaci\u00f3n, por ejemplo, texto, documentos, im\u00e1genes, audio, etc.<\/li>\n<li>Amazon SageMaker JumpStart: SageMaker JumpStart ofrece modelos de c\u00f3digo abierto previamente entrenados para una amplia gama de tipos de problemas para ayudarlo a comenzar con el aprendizaje autom\u00e1tico.<\/li>\n<\/ol>\n<h5 id=\"%d9%be%d8%a7%da%a9-%da%a9%d8%b1%d8%af%d9%86\">Borrar<\/h5>\n<ol>\n<li>Inicie sesi\u00f3n en la AWS CLI. Aseg\u00farese de que est\u00e9 configurada correctamente con los permisos necesarios para realizar estas acciones.<\/li>\n<li>Elimine el archivo PDF de su bucket de Amazon S3 ejecutando el siguiente comando. Reemplace el nombre de su bucket con el nombre real de su bucket de Amazon S3 y ajuste la ruta del archivo PDF si es necesario.<\/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>Elimina las pilas de CloudFormation. Reemplaza los nombres de las pilas con los nombres reales de tus pilas de CloudFormation.<\/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\">Elimine los puntos de conexi\u00f3n de SageMaker. Reemplace endpoint-name-1 y endpoint-name-2 con los nombres de los puntos de conexi\u00f3n de SageMaker.<\/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\">Resultado<\/h2>\n<p>En este tutorial, creamos un chatbot de preguntas y respuestas integral con tecnolog\u00edas de AWS y herramientas de c\u00f3digo abierto. Integramos Amazon OpenSearch como base de datos vectorial, un modelo de incrustaci\u00f3n GPT-J 6B FP16 y usamos Langchain con un LLM. El chatbot extrae informaci\u00f3n de documentos no estructurados.<\/p>","protected":false},"excerpt":{"rendered":"Introducci\u00f3n Imagine poder tener una conversaci\u00f3n con sus datos no estructurados y entregarles informaci\u00f3n valiosa\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\/es\/amazon\/fullstack-llm-langchain-chatbot-on-aws\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\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\/es\/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=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"admin\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutos\" \/>\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\":\"es\",\"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\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/amazon\\\/fullstack-llm-langchain-chatbot-on-aws\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@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\":\"es\"},{\"@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\":\"es\",\"@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\\\/es\\\/author\\\/admin\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Creaci\u00f3n de un potente chatbot integral mediante la extracci\u00f3n de informaci\u00f3n de documentos no estructurados - Blog de ITPiran","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\/es\/amazon\/fullstack-llm-langchain-chatbot-on-aws\/","og_locale":"es_ES","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\/es\/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":{"Escrito por":"admin","Tiempo de lectura":"5 minutos"},"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":"es","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":"Creaci\u00f3n de un potente chatbot integral mediante la extracci\u00f3n de informaci\u00f3n de documentos no estructurados - Blog de 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":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.itpiran.net\/blog\/amazon\/fullstack-llm-langchain-chatbot-on-aws\/"]}]},{"@type":"ImageObject","inLanguage":"es","@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":"Blog de ITPiran","description":"Noticias y art\u00edculos sobre comercio sostenible en Ir\u00e1n","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":"es"},{"@type":"Organization","@id":"https:\/\/www.itpiran.net\/blog\/#organization","name":"Blog sobre negocios iran\u00edes sostenibles","alternateName":"ITPIran Blog","url":"https:\/\/www.itpiran.net\/blog\/","logo":{"@type":"ImageObject","inLanguage":"es","@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":"administraci\u00f3n","url":"https:\/\/www.itpiran.net\/blog\/es\/author\/admin\/"}]}},"_links":{"self":[{"href":"https:\/\/www.itpiran.net\/blog\/es\/wp-json\/wp\/v2\/posts\/15132","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.itpiran.net\/blog\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.itpiran.net\/blog\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.itpiran.net\/blog\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.itpiran.net\/blog\/es\/wp-json\/wp\/v2\/comments?post=15132"}],"version-history":[{"count":2,"href":"https:\/\/www.itpiran.net\/blog\/es\/wp-json\/wp\/v2\/posts\/15132\/revisions"}],"predecessor-version":[{"id":15160,"href":"https:\/\/www.itpiran.net\/blog\/es\/wp-json\/wp\/v2\/posts\/15132\/revisions\/15160"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.itpiran.net\/blog\/es\/wp-json\/wp\/v2\/media\/15159"}],"wp:attachment":[{"href":"https:\/\/www.itpiran.net\/blog\/es\/wp-json\/wp\/v2\/media?parent=15132"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.itpiran.net\/blog\/es\/wp-json\/wp\/v2\/categories?post=15132"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.itpiran.net\/blog\/es\/wp-json\/wp\/v2\/tags?post=15132"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}