<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Sinai Rivera</title>
    <description>The latest articles on DEV Community by Sinai Rivera (@sinariver).</description>
    <link>https://dev.to/sinariver</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1257278%2Fff5f4fbe-16ed-48fc-a3e5-75347fefd39c.jpg</url>
      <title>DEV Community: Sinai Rivera</title>
      <link>https://dev.to/sinariver</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sinariver"/>
    <language>en</language>
    <item>
      <title>Mi Agente se Rebeló: Intentando Crear un Bedrock Agent con S3 (y el Famoso Error '[retrieved information]'</title>
      <dc:creator>Sinai Rivera</dc:creator>
      <pubDate>Sat, 22 Nov 2025 01:14:55 +0000</pubDate>
      <link>https://dev.to/sinariver/mi-agente-se-rebelo-intentando-crear-un-bedrock-agent-con-s3-y-el-famoso-error-retrieved-2php</link>
      <guid>https://dev.to/sinariver/mi-agente-se-rebelo-intentando-crear-un-bedrock-agent-con-s3-y-el-famoso-error-retrieved-2php</guid>
      <description>&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;En este lab vas a construir un Bedrock Agent totalmente funcional que puede:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Leer tus documentos en S3&lt;/li&gt;
&lt;li&gt;Extraer información&lt;/li&gt;
&lt;li&gt;Ejecutar funciones&lt;/li&gt;
&lt;li&gt;Responder preguntas de forma estructurada&lt;/li&gt;
&lt;li&gt;Razonar paso a paso usando Amazon Nova Micro&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Todo 100% desde la consola, sin Studio ni código manual.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Aprenderas a:&lt;/strong&gt;&lt;br&gt;
Crear el bucket, subir PDFs, crear un Agent, añadir Actions, conectar S3, probar preguntas reales y validar respuestas con grounding.&lt;/p&gt;

&lt;p&gt;Tiempo estimado: 20–30 min&lt;br&gt;
Servicios: &lt;strong&gt;Bedrock Agents, S3, IAM&lt;/strong&gt;&lt;br&gt;
Costo: Muy bajo (&amp;lt; $0.25)&lt;/p&gt;

&lt;p&gt;Decidí crear este lab porque quiero entender cómo funcionan los agentes de IA en AWS de forma simple, práctica y explicable. Quiero poder guiar a otros, enseñar conceptos de GenAI sin complejidad innecesaria y construir demos útiles para mi portfolio técnico.&lt;/p&gt;


&lt;h2&gt;
  
  
  🧭 Metadatos rápidos
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Campo&lt;/th&gt;
&lt;th&gt;Valor&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Categoría CB&lt;/td&gt;
&lt;td&gt;AI/ML&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Servicios AWS&lt;/td&gt;
&lt;td&gt;Amazon Bedrock Agents, Amazon S3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Requisitos previos&lt;/td&gt;
&lt;td&gt;Cuenta AWS, S3 + Bedrock habilitados, región us-east-1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Costos estimados&lt;/td&gt;
&lt;td&gt;Bajo (&amp;lt; $.25)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Arquitectura&lt;/td&gt;
&lt;td&gt;Ver diagrama&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;


&lt;h2&gt;
  
  
  🗺️ Tabla de contenidos (ToC)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;¿Por qué importa?&lt;/li&gt;
&lt;li&gt;Arquitectura / Qué vas a construir&lt;/li&gt;
&lt;li&gt;Prerrequisitos&lt;/li&gt;
&lt;li&gt;Paso a paso&lt;/li&gt;
&lt;li&gt;
Errores &lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  💡 ¿Por qué importa?
&lt;/h2&gt;

&lt;p&gt;Las empresas están migrando de “solo usar LLMs” a construir agentes inteligentes con pasos bien definidos, acceso a datos y grounding real.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Un agente puede:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Planear&lt;/li&gt;
&lt;li&gt;Razonar&lt;/li&gt;
&lt;li&gt;Recuperar datos&lt;/li&gt;
&lt;li&gt;Ejecutar acciones&lt;/li&gt;
&lt;li&gt;Responder en contexto sin que tú tengas que escribir el pipeline completo.&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  🧰 Arquitectura
&lt;/h2&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;📄 PDFs en S3
⬇️
⚙️ Bedrock Agent Action
⬇️
🤖 Amazon Nova Micro razonando
⬇️
💬 Respuesta final basada en tus documentos
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  🛠️ PASO 1 — Crear el bucket S3 (para tus documentos)
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;En la consola AWS, busca S3&lt;/li&gt;
&lt;li&gt;Clic en Create bucket. &lt;/li&gt;
&lt;li&gt;Configura:&lt;/li&gt;
&lt;li&gt;Bucket name: kb-agent-sina-lab &lt;/li&gt;
&lt;li&gt;Region: us-east-1 &lt;/li&gt;
&lt;li&gt;Block Public Access: ON (todas) &lt;/li&gt;
&lt;li&gt;Versioning: OFF&lt;/li&gt;
&lt;li&gt;Encryption: SSE-S3 (default)&lt;/li&gt;
&lt;li&gt;Clic en Create bucket&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8c20fh62pgvow71c4fa2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8c20fh62pgvow71c4fa2.png" alt="Captura de la consola de Amazon S3 mostrando un archivo PDF dentro de un bucket, con detalles como tamaño del archivo, fecha de modificación y opciones de acciones" width="800" height="409"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  🛠️ PASO 2 — Subir los documentos a tu bucket S3
&lt;/h2&gt;

&lt;p&gt;Vamos a subir los tres PDFs que acabas de crear.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2.1 Ir al bucket&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;En la consola AWS, ve a S3&lt;/li&gt;
&lt;li&gt;Haz clic en tu bucket: kb-sina-agent-lab (o el nombre que hayas puesto)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8s9f52jsxpw9uv28jhke.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8s9f52jsxpw9uv28jhke.png" alt="Vista de un bucket de Amazon S3 completamente vacío, mostrando el mensaje de que no hay objetos en la carpeta actual" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2.2 Subir los archivos&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Haz clic en Upload&lt;/li&gt;
&lt;li&gt;Luego clic en Add files&lt;/li&gt;
&lt;li&gt;Selecciona:

&lt;ul&gt;
&lt;li&gt;company-overview.pdf&lt;/li&gt;
&lt;li&gt;internal-policies.pdf &lt;/li&gt;
&lt;li&gt;service-pricing.pdf &lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Haz clic en Upload&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fucc471gfqe3jj84frvwn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fucc471gfqe3jj84frvwn.png" alt="Captura de documentos en la computadora" width="729" height="244"&gt;&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0qld1ntntujxedix9ttw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0qld1ntntujxedix9ttw.png" alt="Captura de la consola de Amazon S3 mostrando la creación de una nueva carpeta dentro de un bucket, incluyendo el campo para escribir el nombre y las opciones de configuración" width="800" height="311"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2.3 Confirma que están ahí&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;En tu bucket S3 deberías ver ahora los documentos&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsnzmfpa2unp792d37w2s.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsnzmfpa2unp792d37w2s.png" alt="Captura de documentos cargados en el bucket S3" width="800" height="428"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  🛠️ PASO 3 Crear tu Bedrock Agent
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;3.1 Abrir Amazon Bedrock&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;En la consola AWS, en el buscador superior escribe: Bedrock&lt;/li&gt;
&lt;li&gt;En el menú de la izquierda, selecciona: Agents&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;3.2 Crear un agente nuevo&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Haz clic en el botón Create agent&lt;/li&gt;
&lt;li&gt;Llena estos campos:

&lt;ul&gt;
&lt;li&gt;Agent name: sina-agent-rag-lab&lt;/li&gt;
&lt;li&gt;Description: Agente que responde preguntas usando documentos internos almacenados en Amazon S3 mediante acciones automáticas.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Click create.&lt;/li&gt;
&lt;li&gt;Selecciona el modelo del agente.Para este lab usaremos:Amazon Nova Micro (el modelo gratuito + seguro + recomendado por AWS para agents)&lt;/li&gt;
&lt;li&gt;Instrucciones para el agente: Eres un asistente corporativo diseñado para responder preguntas usando exclusivamente la información contenida en los documentos internos de la compañía almacenados en Amazon S3.

&lt;ol&gt;
&lt;li&gt;Clic save.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftl721yk39bgua469zxyp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftl721yk39bgua469zxyp.png" alt="captura de seleccion de modelo para el agente" width="800" height="735"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcorsxpzrvzpoh21zskgj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcorsxpzrvzpoh21zskgj.png" alt="Captura de modelo seleccionado" width="800" height="561"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  🛠️ PASO 4 Crear el Action Group que lee S3
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;4.1. Busca la sección de Action groups:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Haz clic en: Add&lt;/li&gt;
&lt;li&gt;Action group name: read-company-docs&lt;/li&gt;
&lt;li&gt;Description (opcional): read documents from S3 and retrieve relevant content&lt;/li&gt;
&lt;li&gt;Action group type: Select define with function details (tú describes qué hace la función (nombre, descripción, tipo de acceso S3) y Bedrock te genera la Lambda automáticamente)&lt;/li&gt;
&lt;li&gt;Action group invocation: Select quick create a new lambda.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;4.2 Action group function&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;name: get_company_policy&lt;/li&gt;
&lt;li&gt;Description: Function that searches for information within the corporate documents stored in S3. It simulates retrieving internal policies, processes, or relevant details to answer the user’s questions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;4.3 Parameters:&lt;/strong&gt; Tu agent necesita saber qué información debe enviarle a la función Lambda cuando quiera usarla.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Clic en Add parameter&lt;/li&gt;
&lt;li&gt;Name: query&lt;/li&gt;
&lt;li&gt;Description: user question looking info &lt;/li&gt;
&lt;li&gt;Type: String&lt;/li&gt;
&lt;li&gt;Required: True&lt;/li&gt;
&lt;li&gt;Clic Create&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F76zqk57gzy5l14clcabj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F76zqk57gzy5l14clcabj.png" alt="Captura de la seccion de parametros" width="800" height="537"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  🛠️ PASO 5 Guardar y preparar el agente
&lt;/h2&gt;

&lt;p&gt;Una vez creado el Action Group:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Clic arriba en Save&lt;/li&gt;
&lt;li&gt;Luego clic en Prepare (esto valida instrucciones + modelo + actions)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faficr1ypa1fq6lnof7xx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faficr1ypa1fq6lnof7xx.png" alt="Captura del agente ya preparado para el test" width="800" height="458"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  🛠️ PASO 6 Test Agent
&lt;/h2&gt;

&lt;p&gt;En este paso vamos a probar el agente haciendo una serie de preguntas relacionadas al documento de la empresa que tenemos en el bucket S3&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6.1. En la parte derecha de tu pantalla veras test agent&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dentro de tu agente:&lt;/li&gt;
&lt;li&gt;En el recuadro vacio escribe una pregunta real basadas en los PDFs que generaste:

&lt;ul&gt;
&lt;li&gt;"Que dice la compania acerca de la vision o la mision"&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;&lt;strong&gt;ERROR&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiv8bk74v6hh4eyzr8y58.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiv8bk74v6hh4eyzr8y58.png" alt="Captura del error recibido luego de hacer la pregunta al agente" width="484" height="747"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Aqui recibimos un error y gracias a los servicios de AWS podemos investigar el error que nos dio y como resolverlo.&lt;/p&gt;


&lt;h2&gt;
  
  
  🛠️ Paso 7 Resolver el error de respuesta
&lt;/h2&gt;

&lt;p&gt;Podemos resolver el problema de varias maneras. Una forma es buscando el error y leer específicamente donde surgió el error. Sin embargo, si eres nuevo y no tienes mucha experiencia leyendo código, AWS tiene un recurso llamado Amazon Q.&lt;/p&gt;

&lt;p&gt;Amazon Q es chatbox que te permite hacerle preguntas acerca de lo que estás construyendo y te ayuda a resolver.&lt;/p&gt;

&lt;p&gt;Vamos a hacer esa opción primero.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;7.1 En el mensaje de error clic en show trace&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Clic en Trace step 1&lt;/li&gt;
&lt;li&gt;En la parte superior derecha verás el icono de Amazon Q&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F39yx9oc6wvkailxfiq3d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F39yx9oc6wvkailxfiq3d.png" alt="Captura de pasos para resolver error" width="800" height="299"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F27fm5u18cebchfjvwb45.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F27fm5u18cebchfjvwb45.png" alt="Captura de pasos para resolver error2" width="800" height="349"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkldx4txs0c05kc9vrlmm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkldx4txs0c05kc9vrlmm.png" alt="Captura del error y icono de amazon Q" width="800" height="407"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;7.2 Pregunta a Amazon Q&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;En el cuadro en blanco escribe la pregunta "Por qué mi agente dice que no tiene la disponibilidad de ayudarme con mi solicitud"&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4zo4mesvtgnco7j2o8kr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4zo4mesvtgnco7j2o8kr.png" alt="Captura de Amazon Q con respuesta" width="800" height="557"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Segun Amazon Q, las posibles causas son:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Causas Comunes y Soluciones:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Problema de Permisos y roles&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Permisos IAM:&lt;/strong&gt; Verifica que el rol de servicio de tu agente tenga los permisos necesarios para invocar el modelo base.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Problemas de Configuración del Agente&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Claridad en las instrucciones:&lt;/strong&gt; Las instrucciones de tu agente pueden ser demasiado restrictivas o poco claras. Intenta simplificarlas y especificar mejor qué debe hacer el agente.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Nombres de grupos de acciones:&lt;/strong&gt; Si estás usando action groups, evita usar guiones (-) en los nombres; utiliza guiones bajos (_) en su lugar.&lt;/p&gt;


&lt;h2&gt;
  
  
  🛠️ Paso 8 Resolvamos
&lt;/h2&gt;

&lt;p&gt;Vamos a resolver cada una de las recomendaciones de Amazon Q&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;8.1 Identificar el service role de tu agente&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ve a Amazon Bedrock en la consola.&lt;/li&gt;
&lt;li&gt;En el menú izquierdo, entra en Agents.&lt;/li&gt;
&lt;li&gt;Haz clic en tu agente.&lt;/li&gt;
&lt;li&gt;En la pantalla del agente, busca: "Permissions" en azul.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo20op110xyh0h2412oct.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo20op110xyh0h2412oct.png" alt="Captura con el permiso" width="800" height="672"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;8.2 Revisar los permisos del rol&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dentro del rol:Ve a la pestaña Permissions.&lt;/li&gt;
&lt;li&gt;En Permissions policies revisa qué políticas están adjuntas.&lt;/li&gt;
&lt;li&gt;Haz clic&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F016a5moiwmayciebg5tg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F016a5moiwmayciebg5tg.png" alt="Captura con politica actual" width="800" height="553"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;En el capture se ve que:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;AmazonBedrockAgentBedrockFoundationModelPolicy_S1GQAOZ17SK&lt;br&gt;
solo tiene access level limitado a leer unicamente, lo que significa que &lt;/p&gt;

&lt;p&gt;❌ NO puede invocar modelos&lt;br&gt;
❌ NO puede llamar a Nova Micro&lt;br&gt;
❌ NO puede generar respuestas&lt;br&gt;
✔️ Solo puede leer metadata&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;8.3. Vamos a arreglarlo&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Haz clic en "JSON" arriba a la derecha&lt;/li&gt;
&lt;li&gt;En tu screenshot está el botón: JSON&lt;/li&gt;
&lt;li&gt;Haz clic en editar y borra lo politica actual&lt;/li&gt;
&lt;li&gt;Pega la siguiente politica:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"Version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2012-10-17"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"Statement"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"Sid"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"AmazonBedrockAgentBedrockFoundationModelPolicyProd"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"Effect"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Allow"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"Action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
                &lt;/span&gt;&lt;span class="s2"&gt;"bedrock:InvokeModel"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
                &lt;/span&gt;&lt;span class="s2"&gt;"bedrock:InvokeModelWithResponseStream"&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"Resource"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"*"&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzod35dihixtoxol7qq9x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzod35dihixtoxol7qq9x.png" alt="Captura de politica actualizada" width="800" height="409"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Clic Next y luego guarda&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;8.4 Probemos el agente nuevamente&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;En tu agente ve a action details&lt;/li&gt;
&lt;li&gt;Selecciona: Edit in Agent builder&lt;/li&gt;
&lt;li&gt;Clic save and exit&lt;/li&gt;
&lt;li&gt;Clic Prepare&lt;/li&gt;
&lt;li&gt;Formula nuevamente la pregunta&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  ❌ Error😆😆😆😆
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsymz6qtbovpuifrtp3vf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsymz6qtbovpuifrtp3vf.png" alt="Captura con el mismo error" width="520" height="482"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Si esto no solucionó el problema, debemos avanzar a la próxima causa posible&lt;/p&gt;


&lt;h2&gt;
  
  
  🛠️ Paso 9 Resolvamos Causa numero 2:
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Problemas de Configuración del Agente&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;9.1 Revisar y simplificar las Agent instructions&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ve a Amazon Bedrock → Agents.&lt;/li&gt;
&lt;li&gt;Haz clic en tu agente.&lt;/li&gt;
&lt;li&gt;En el panel del agente, busca la sección: Instructions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Solucion 1:&lt;/strong&gt;&lt;br&gt;
La palabra EXCLUSIVELY es la que mata el agente.&lt;/p&gt;

&lt;p&gt;¿Qué pasa? Si el agente NO encuentra información en S3 que responda exactamente la pregunta…por diseño tiene que bloquear la respuesta.&lt;/p&gt;

&lt;p&gt;Y la respuesta por defecto del agente cuando no puede cumplir la instrucción es: “Sorry, I am unable to assist you with this request.”&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cambiar las instrucciones del agente&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Reemplaza tu prompt completo por este:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;You are a helpful corporate assistant. Use information from the company's internal documents stored in Amazon S3 when it is relevant. If the information is not available, provide the best possible answer based on your general reasoning and politely indicate when the exact information is not found.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Solucion 2&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;El action group tiene un nombre inválido. El action group se llama: read-company-docs&lt;br&gt;
Los guiones - causan fallas en Bedrock Agents 2024–2025.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cambia de &lt;strong&gt;read-company-docs&lt;/strong&gt; a &lt;strong&gt;read_company_docs&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Clic save&lt;/li&gt;
&lt;li&gt;Clic Prepare&lt;/li&gt;
&lt;li&gt;Formula nuevamente la pregunta&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd4pah1ob9l4digd2nucq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd4pah1ob9l4digd2nucq.png" alt="Captura con el nombre nuevo del action group" width="800" height="529"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Posible error 😆😆😆😆 Respuesta incompleta
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flgh7ponrmo9ca5giqlqq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flgh7ponrmo9ca5giqlqq.png" alt="Captura del error" width="476" height="536"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A pesar de que el agente respondió la pregunta, estaba incompleta. ¿Qué hacemos en este caso? Veamos el trace para determinar las posibles causas del mensaje recibido&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;En el mensaje de error clic en show trace&lt;/li&gt;
&lt;li&gt;Clic en Trace step 1 &lt;/li&gt;
&lt;li&gt;Copia el código y pégalo nuevamente en Amazon Q&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Basado en Amazon Q, estos son las posibles causas de la respuesta incompleta:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1 . El agente está mostrando "[retrieved information]" porque:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Las instrucciones o prompts internos están escritos como si existiera una Knowledge Base, pero no tenemos una Knowledge Base conectada y además estamos usando Action Groups, que NO necesitan Knowledge Base.&lt;/p&gt;

&lt;p&gt;Por eso, cualquier frase dentro del agente que diga:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“según la información recuperada…”&lt;/li&gt;
&lt;li&gt;“based on the retrieved information…”&lt;/li&gt;
&lt;li&gt;“from the knowledge base…”&lt;/li&gt;
&lt;li&gt;o el placeholder literal "[retrieved information]"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;no se puede reemplazar por nada, porque no hay una fuente de datos para recuperarlo.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. El agente entonces devuelve el placeholder tal cual, creando la confusión.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Entonces, hay algún texto dentro de las instrucciones o en el Prompt templates o en el Action group outputs que contiene placeholders o instrucciones que asumen una Knowledge Base. &lt;/p&gt;




&lt;h2&gt;
  
  
  🛠️Paso 10 Resolvamos
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;10.1 Revisemos la instruccion nuevamente y eliminemos cualquier mención a:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Knowledge Base&lt;/li&gt;
&lt;li&gt;Documentos internos&lt;/li&gt;
&lt;li&gt;Información recuperada&lt;/li&gt;
&lt;li&gt;Placeholders como [retrieved information]&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;El agente debe trabajar solo con Action Groups, no con documentos.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F396fzbaqkc6s7ixsh7ju.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F396fzbaqkc6s7ixsh7ju.png" alt="Captura de instrucciones con la solicitud mal formulada" width="800" height="158"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;¿Qué está mal aquí?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Menciona documentos internos&lt;/li&gt;
&lt;li&gt;Menciona S3&lt;/li&gt;
&lt;li&gt;Le dice al agente que SOLO puede responder usando “documentos”&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Esto obliga al agente a buscar retrieved information → pero no hay Knowledge Base&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Cambiemos la instruccion a:&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;You are a corporate assistant designed to answer questions using the information provided by the system and the available action groups. Do not assume information; always rely on the results returned by the actions.

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F305g0ij3iu88kbokauyk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F305g0ij3iu88kbokauyk.png" alt="Captura con la instruccion nueva" width="800" height="199"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Clic save&lt;/li&gt;
&lt;li&gt;Clic Prepare&lt;/li&gt;
&lt;li&gt;Formula nuevamente la pregunta&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvh551mjz6aabf7vpy9dy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvh551mjz6aabf7vpy9dy.png" alt="Captura nueva respuesta" width="499" height="518"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;El agente deberia de responder, sin embargo esta pidiendo el nombre de la compañía. Vamos a responderle y ver que respuesta genera&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwhvzqduuwombzqyewmjp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwhvzqduuwombzqyewmjp.png" alt="Capture con la respuesta de la mision" width="379" height="610"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hice otra pregunta:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;¿Que dice la compañía acerca de la confidenciabilidad?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2dwm08hmc1h5pnw5sly9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2dwm08hmc1h5pnw5sly9.png" alt="Captura de la pregunta y respuesta de confidenciabilidad" width="427" height="367"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Pregunta acerca de la información de confidenciabilidad&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;¿Que dice acerca de la politica de confidenciabilidad?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F41gdq1pm0tamqavsnsjh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F41gdq1pm0tamqavsnsjh.png" alt=" " width="458" height="445"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A este punto, a pesar de que respondió la pregunta, debería ser mas sencillo y es probable que haya un error.&lt;/p&gt;

&lt;p&gt;Aunque este lab no terminó con una solución perfecta, decidí dejar el último error abierto a propósito. La comunidad crece cuando compartimos no solo lo que logramos, sino también lo que nos reta. &lt;/p&gt;

&lt;p&gt;Para mí, tambien es valioso abrir el proceso, mostrar los aprendizajes reales y crear espacios donde otros también puedan aprender, aportar y mejorar este camino juntos. &lt;/p&gt;

&lt;p&gt;Más adelante les mostraré l aparte dos de este proyecto, pero por ahora, lo importante es construir comunidad a través de la transparencia y el aprendizaje compartido.&lt;/p&gt;

&lt;h2&gt;
  
  
  🧯 Errores que se presentaron:
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Síntoma&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Causa probable&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Solución aplicada / aprendida&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;“Sorry, I am unable to assist with this request.”&lt;/td&gt;
&lt;td&gt;El rol del agente no tenía permisos para &lt;code&gt;bedrock:InvokeModel&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Ajustar política IAM en JSON para permitir invocación del modelo.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;El agente pide aclaraciones (ej. “¿Cuál es el nombre de la compañía?”)&lt;/td&gt;
&lt;td&gt;Activación automática de &lt;code&gt;user__askuser&lt;/code&gt; por orquestación interna&lt;/td&gt;
&lt;td&gt;Añadir reglas en las instrucciones del agente para evitar clarificaciones.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Placeholder &lt;code&gt;[retrieved information]&lt;/code&gt; aparece en la respuesta&lt;/td&gt;
&lt;td&gt;Instrucciones asumían un Knowledge Base inexistente&lt;/td&gt;
&lt;td&gt;Actualizar instrucciones para usar únicamente Action Groups.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Action Group no se ejecuta&lt;/td&gt;
&lt;td&gt;Parámetro obligatorio o nombre inválido con guiones&lt;/td&gt;
&lt;td&gt;Marcar &lt;code&gt;required = false&lt;/code&gt; y renombrar con &lt;code&gt;_&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Respuestas incompletas&lt;/td&gt;
&lt;td&gt;Doble &lt;code&gt;&amp;lt;thinking&amp;gt;&lt;/code&gt; o estructura inválida&lt;/td&gt;
&lt;td&gt;Forzar un solo &lt;code&gt;&amp;lt;thinking&amp;gt;&lt;/code&gt; seguido de un &lt;code&gt;&amp;lt;answer&amp;gt;&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Lambda sin devolver contenido útil&lt;/td&gt;
&lt;td&gt;Lambda auto-generada sin lógica&lt;/td&gt;
&lt;td&gt;Reemplazar con una función que lea archivos del bucket.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  📚 Recursos oficiales
&lt;/h2&gt;

&lt;p&gt;Amazon Bedrock Agents&lt;br&gt;
&lt;a href="https://docs.aws.amazon.com/bedrock/latest/userguide/agents.html" rel="noopener noreferrer"&gt;https://docs.aws.amazon.com/bedrock/latest/userguide/agents.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Action Groups&lt;br&gt;
&lt;a href="https://docs.aws.amazon.com/bedrock/latest/userguide/agents-actions.html" rel="noopener noreferrer"&gt;https://docs.aws.amazon.com/bedrock/latest/userguide/agents-actions.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;S3 — Developer Guide&lt;br&gt;
&lt;a href="https://docs.aws.amazon.com/AmazonS3/latest/dev/Welcome.html" rel="noopener noreferrer"&gt;https://docs.aws.amazon.com/AmazonS3/latest/dev/Welcome.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;IAM Policies&lt;br&gt;
&lt;a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html" rel="noopener noreferrer"&gt;https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;AWS Samples Repository&lt;br&gt;
&lt;a href="https://github.com/aws-samples" rel="noopener noreferrer"&gt;https://github.com/aws-samples&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>cloud</category>
      <category>beginners</category>
      <category>aws</category>
    </item>
    <item>
      <title>Breaking Bedrock: What Really Happens When Your Agent Doesn’t Work</title>
      <dc:creator>Sinai Rivera</dc:creator>
      <pubDate>Sat, 22 Nov 2025 01:14:48 +0000</pubDate>
      <link>https://dev.to/sinariver/i-built-a-bedrock-agent-for-learning-and-it-definitely-took-that-mission-seriously-kf3</link>
      <guid>https://dev.to/sinariver/i-built-a-bedrock-agent-for-learning-and-it-definitely-took-that-mission-seriously-kf3</guid>
      <description>&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In this lab you’re going to build a fully functional Bedrock Agent that can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Read your documents in S3&lt;/li&gt;
&lt;li&gt;Extract information&lt;/li&gt;
&lt;li&gt;Execute functions&lt;/li&gt;
&lt;li&gt;Answer questions in a structured way&lt;/li&gt;
&lt;li&gt;Reason step by step using Amazon Nova Micro&lt;/li&gt;
&lt;li&gt;All 100% from the console, no Studio and no manual code.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;You will learn to:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Create a bucket, upload PDFs, create an Agent, add Actions, connect S3, test with real questions, and validate responses using grounding.&lt;/p&gt;

&lt;p&gt;Estimated time: 20–30 min&lt;br&gt;
Services: Bedrock Agents, S3, IAM&lt;br&gt;
Cost: Very low (&amp;lt; $0.25)&lt;/p&gt;

&lt;p&gt;When I decided to build a Bedrock Agent, I wasn’t trying to be fancy, I just wanted to truly understand how this thing worked instead of relying on wizards and hoping for the best.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Spoiler&lt;/strong&gt;: The agent took its job way too seriously.&lt;/p&gt;

&lt;p&gt;I ran into random errors, confusing IAM messages, and moments where I literally asked myself, “Why does AWS behave differently depending on the day of the week?”&lt;br&gt;
But instead of giving up, I treated every issue like part of the learning process.&lt;/p&gt;

&lt;p&gt;That’s why I wrote this: not a perfect guide, but the real story of what actually happened, what confused me, what I learned, and how you can avoid the same pain.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧭 Quick Metadata
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;CB Category&lt;/td&gt;
&lt;td&gt;AI/ML&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AWS Services&lt;/td&gt;
&lt;td&gt;Amazon Bedrock Agents, Amazon S3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Prerequisites&lt;/td&gt;
&lt;td&gt;AWS account, S3 + Bedrock enabled, region &lt;code&gt;us-east-1&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Estimated costs&lt;/td&gt;
&lt;td&gt;Low (&amp;lt; $0.25)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Architecture&lt;/td&gt;
&lt;td&gt;See diagram&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  🗺️ Table of Contents (ToC)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;💡Why It Matters
&lt;/li&gt;
&lt;li&gt;🧰Architecture / What You Will Build
&lt;/li&gt;
&lt;li&gt;📌Prerequisites
&lt;/li&gt;
&lt;li&gt;🛠️Step by Step
&lt;/li&gt;
&lt;li&gt;❌Errors
&lt;/li&gt;
&lt;li&gt;🚧What I would do differently next time
&lt;/li&gt;
&lt;li&gt;📚 Official Resources
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  💡 Why It Matters
&lt;/h2&gt;

&lt;p&gt;Companies are moving from “just using LLMs” to building intelligent agents with structure, reasoning, and real data access.&lt;/p&gt;

&lt;p&gt;A well-designed agent can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Plan&lt;/li&gt;
&lt;li&gt;Reason&lt;/li&gt;
&lt;li&gt;Retrieve data&lt;/li&gt;
&lt;li&gt;Execute actions&lt;/li&gt;
&lt;li&gt;Respond in context…without you having to manually code the entire pipeline.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That’s why understanding this now isn’t just helpful — it’s a skill that’s becoming essential.&lt;/p&gt;

&lt;h2&gt;
  
  
  🧰 Architecture
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;📄 PDFs in S3
⬇️
⚙️ Bedrock Agent Action
⬇️
🤖 Amazon Nova Micro reasoning
⬇️
💬 Final answer based on your documents
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🧱 Prerequisites
&lt;/h2&gt;

&lt;p&gt;AWS account with billing enabled&lt;br&gt;
Amazon Bedrock enabled in us-east-1&lt;br&gt;
Access to create:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;S3 buckets&lt;/li&gt;
&lt;li&gt;IAM roles / policies&lt;/li&gt;
&lt;li&gt;Bedrock Agents&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🪜 Step by Step
&lt;/h2&gt;

&lt;h2&gt;
  
  
  🛠️ STEP 1 — Create the S3 Bucket (for your documents)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;In the AWS Console, search for S3&lt;/li&gt;
&lt;li&gt;Click &lt;em&gt;Create bucket&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Configure:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Bucket name: &lt;code&gt;kb-agent-sina-lab&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Region: &lt;code&gt;us-east-1&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Block Public Access: ON (all options)&lt;/li&gt;
&lt;li&gt;Versioning: OFF&lt;/li&gt;
&lt;li&gt;Encryption: SSE-S3 (default)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;&lt;p&gt;Click &lt;em&gt;Create bucket&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8c20fh62pgvow71c4fa2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8c20fh62pgvow71c4fa2.png" alt="Screenshot of amazon S3 console showing PDF file" width="800" height="409"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🛠️ STEP 2 — Upload the Documents to Your S3 Bucket
&lt;/h2&gt;

&lt;p&gt;We’re going to upload the three PDFs you just created.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2.1 Go to the bucket&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In the AWS Console, go to S3&lt;/li&gt;
&lt;li&gt;Click your bucket: &lt;code&gt;kb-agent-sina-lab&lt;/code&gt; (or the name you used)
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8s9f52jsxpw9uv28jhke.png" alt="Screenshot of S3 bucket with no files" width="800" height="450"&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;2.2 Upload the files&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Click &lt;em&gt;Upload&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;Then click &lt;em&gt;Add files&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;I selected:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;company-overview.pdf&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;internal-policies.pdf&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;service-pricing.pdf&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;&lt;p&gt;Click &lt;em&gt;Upload&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fucc471gfqe3jj84frvwn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fucc471gfqe3jj84frvwn.png" alt="Screenshot of AWS  S3 console showing uploaded files" width="729" height="244"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0qld1ntntujxedix9ttw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0qld1ntntujxedix9ttw.png" alt="Screenshot of console showing uploaded files" width="800" height="311"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;2.3 Confirm they’re there&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In your S3 bucket you should now see the documents:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsnzmfpa2unp792d37w2s.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsnzmfpa2unp792d37w2s.png" alt="Screenshot of files in bucket S3" width="800" height="428"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🛠️ STEP 3 — Create Your Bedrock Agent
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;3.1 Open Amazon Bedrock&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In the AWS Console search bar, type: &lt;em&gt;Bedrock&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;In the left menu, select Agents&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;3.2 Create a new Agent&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Click Create agent&lt;/li&gt;
&lt;li&gt;Fill in the fields:

&lt;ul&gt;
&lt;li&gt;Agent name: &lt;code&gt;sina-agent-rag-lab&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Description: Agent that answers questions using internal documents stored in Amazon S3 via automatic actions.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Click &lt;em&gt;Create&lt;/em&gt;
&lt;/li&gt;

&lt;li&gt;Select the Agent model. For this lab, we’ll use: Amazon Nova Micro (the free + secure model recommended by AWS for agents).&lt;/li&gt;

&lt;li&gt;Agent instructions: "You are a corporate assistant designed to answer questions using exclusively the information stored in the company’s internal documents in Amazon S3."&lt;/li&gt;

&lt;li&gt;Click Save&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftl721yk39bgua469zxyp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftl721yk39bgua469zxyp.png" alt="Screenshot showing model to select" width="800" height="735"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcorsxpzrvzpoh21zskgj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcorsxpzrvzpoh21zskgj.png" alt="Screenshot of model already selected and agent created" width="800" height="561"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🛠️ STEP 4 — Create the Action Group That Reads from S3
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;4.1 Find the “Action groups” section&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Click Add&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Action group name: &lt;code&gt;read-company-docs&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Description (optional): "read documents from S3 and retrieve relevant content"&lt;/li&gt;
&lt;li&gt;Action group type: select &lt;em&gt;Define with function details&lt;/em&gt;

&lt;ul&gt;
&lt;li&gt;Here you describe what the function does (name, description, S3 access type) and Bedrock auto-generates the Lambda for you.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Action group invocation: select &lt;em&gt;create a new Lambda&lt;/em&gt;
&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;4.2 Action group function&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Name: &lt;code&gt;get_company_policy&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Description: "Function that searches for information within the corporate documents stored in S3. It simulates retrieving internal policies, processes, or relevant details to answer the user’s questions."&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;4.3 Parameters&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Your agent needs to know what information to send to the Lambda function when it wants to use it.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Click &lt;strong&gt;Add parameter&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Name: &lt;code&gt;query&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Description: &lt;em&gt;user question looking for information&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;Type: &lt;code&gt;String&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Required: &lt;code&gt;True&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Click &lt;em&gt;Create&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F76zqk57gzy5l14clcabj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F76zqk57gzy5l14clcabj.png" alt="Screenshot of parameters" width="800" height="537"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🛠️ STEP 5 — Save and Prepare the Agent
&lt;/h2&gt;

&lt;p&gt;Once the Action Group is created:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Click &lt;strong&gt;Save&lt;/strong&gt; at the top&lt;/li&gt;
&lt;li&gt;Then click &lt;strong&gt;Prepare&lt;/strong&gt; (this validates instructions + model + actions)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faficr1ypa1fq6lnof7xx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faficr1ypa1fq6lnof7xx.png" alt="Screenshot of agent prepared for test" width="800" height="458"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🛠️ STEP 6 — Test the Agent
&lt;/h2&gt;

&lt;p&gt;In this step we’re going to test the Agent by asking questions related to the company document stored in the S3 bucket.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6.1 Use Test agent on the right side&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Inside your Agent view, on the right panel, in the text box, type a real question based on the PDFs you created, for example:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;“What does the company say about its mission or vision?”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ERROR&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiv8bk74v6hh4eyzr8y58.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiv8bk74v6hh4eyzr8y58.png" alt="Screenshot of error after test" width="484" height="747"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We got an error – and thanks to AWS services, we can investigate that error and fix it.&lt;/p&gt;




&lt;h2&gt;
  
  
  🛠️ STEP 7 Fix the Response Error
&lt;/h2&gt;

&lt;p&gt;We can solve this problem in different ways.&lt;/p&gt;

&lt;p&gt;One option is to look at the detailed error and read exactly where it failed.&lt;/p&gt;

&lt;p&gt;However, if you’re new and don’t have much experience reading code, AWS has a resource called &lt;strong&gt;Amazon Q.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Amazon Q is a chatbot that lets you ask questions about what you’re building and helps you debug.&lt;/p&gt;

&lt;p&gt;Let’s use that option first.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;7.1 In the error message, click Show trace&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Click Trace step 1&lt;/li&gt;
&lt;li&gt;In the upper-right corner, you’ll see the &lt;strong&gt;Amazon Q&lt;/strong&gt; icon&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F39yx9oc6wvkailxfiq3d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F39yx9oc6wvkailxfiq3d.png" alt="Screehshot of the steps to fix the error" width="800" height="299"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F27fm5u18cebchfjvwb45.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F27fm5u18cebchfjvwb45.png" alt="Screehshot of the steps to fix the error2" width="800" height="349"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkldx4txs0c05kc9vrlmm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkldx4txs0c05kc9vrlmm.png" alt="Screenshot of steps and Amazon Q" width="800" height="407"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;7.2 Ask Amazon Q&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In the chat box, type:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;“Why is my agent saying it is unable to help me with my request?”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4zo4mesvtgnco7j2o8kr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4zo4mesvtgnco7j2o8kr.png" alt="Screenshot of Amazon Q with the response" width="800" height="557"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;According to Amazon Q, the possible causes are:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Common Causes and Fixes&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Permissions and roles&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;IAM permissions:&lt;/strong&gt;We need to verify that the service role of the agent has the necessary permissions to invoke the base model.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Agent configuration issues&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Instructions:&lt;/strong&gt; The agent instructions may be too restrictive or unclear. We need try to simplifying them and specifying more clearly what the agent should do.&lt;br&gt;
&lt;strong&gt;Action group names:&lt;/strong&gt; if we’re using action groups, we need to avoid using hyphens (-) in the names; use underscores (_) instead.&lt;/p&gt;

&lt;h2&gt;
  
  
  🛠️ STEP 8 Let’s Fix It
&lt;/h2&gt;

&lt;p&gt;We’re going to apply each recommendation from Amazon Q.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;8.1 Identify the service role of your Agent&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Go to Amazon Bedrock in the console&lt;/li&gt;
&lt;li&gt;In the left menu, click &lt;strong&gt;Agents&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Click your Agent&lt;/li&gt;
&lt;li&gt;On the Agent screen, look for the blue Permissions link&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo20op110xyh0h2412oct.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo20op110xyh0h2412oct.png" alt="Screenshot with permissions" width="800" height="672"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;8.2 Check the role permissions&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Inside the role, go to the Permissions tab&lt;/li&gt;
&lt;li&gt;In Permissions policies, review the attached policies&lt;/li&gt;
&lt;li&gt;Click the policy to open it&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F016a5moiwmayciebg5tg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F016a5moiwmayciebg5tg.png" alt="Screenshot with current permissions" width="800" height="553"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;From the screenshot, we can see that:&lt;/p&gt;

&lt;p&gt;AmazonBedrockAgentBedrockFoundationModelPolicy_S1GQAOZ17SK&lt;br&gt;
has a limited access level – read-only. That means:&lt;/p&gt;

&lt;p&gt;❌ It cannot invoke models&lt;br&gt;
❌ It cannot call Nova Micro&lt;br&gt;
❌ It cannot generate responses&lt;br&gt;
✔️ It can only read metadata&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;8.3 Let’s fix it&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Click the JSON tab on the top right&lt;/li&gt;
&lt;li&gt;Click Edit, remove the existing policy content&lt;/li&gt;
&lt;li&gt;Paste the following policy:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"Version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2012-10-17"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"Statement"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Sid"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"AmazonBedrockAgentBedrockFoundationModelPolicyProd"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Effect"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Allow"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"bedrock:InvokeModel"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"bedrock:InvokeModelWithResponseStream"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Resource"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"*"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzod35dihixtoxol7qq9x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzod35dihixtoxol7qq9x.png" alt="Screenshot with permission updated" width="800" height="409"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Click Next, then Save&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;8.4 Test the Agent again&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In your Agent, go to Action details&lt;/li&gt;
&lt;li&gt;Select Edit in Agent builder&lt;/li&gt;
&lt;li&gt;Click Save and exit&lt;/li&gt;
&lt;li&gt;Click Prepare&lt;/li&gt;
&lt;li&gt;Ask the same question again&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  ❌ Still Error 😆😆😆😆
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsymz6qtbovpuifrtp3vf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsymz6qtbovpuifrtp3vf.png" alt="Screenshot with same error" width="520" height="482"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If this didn’t fix the problem, we move to the next likely cause.&lt;/p&gt;

&lt;h2&gt;
  
  
  🛠️ STEP 9 Fix Cause #2: Agent Configuration
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;9.1 Review and simplify Agent instructions&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Go to Amazon &lt;strong&gt;Bedrock&lt;/strong&gt; then &lt;strong&gt;Agents&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Click your Agent&lt;/li&gt;
&lt;li&gt;In the Agent panel, look for the Instructions section&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Solution 1:&lt;/strong&gt; The word “EXCLUSIVELY” is killing the Agent&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What happens?&lt;/strong&gt;&lt;br&gt;
If the Agent does not find information in S3 that exactly answers the question… by design it must block the response.&lt;/p&gt;

&lt;p&gt;And the default answer in that case is:“ Sorry, I am unable to assist you with this request.”&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Update the Agent instructions&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Let's replace the entire prompt with:&lt;/p&gt;

&lt;p&gt;"You are a helpful corporate assistant. Use information from the company's internal documents stored in Amazon S3 when it is relevant. If the information is not available, provide the best possible answer based on your general reasoning and politely indicate when the exact information is not found."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Solution 2:&lt;/strong&gt; Invalid Action Group name&lt;/p&gt;

&lt;p&gt;The Action Group is called: &lt;code&gt;read-company-docs&lt;/code&gt;&lt;br&gt;
The hyphens - can cause failures in Bedrock Agents (2024–2025).&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Change &lt;code&gt;read-company-docs&lt;/code&gt; to  &lt;code&gt;read_company_docs&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Click Save&lt;/li&gt;
&lt;li&gt;Click Prepare&lt;/li&gt;
&lt;li&gt;Ask the question again&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd4pah1ob9l4digd2nucq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd4pah1ob9l4digd2nucq.png" alt="Screenshot with the new name for the action group" width="800" height="529"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Possible error 😆😆😆😆 — Incomplete response
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flgh7ponrmo9ca5giqlqq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flgh7ponrmo9ca5giqlqq.png" alt="Screenshot of error" width="476" height="536"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Even though the Agent responded, the answer was incomplete.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What do we do now?&lt;/strong&gt; Let’s check the trace to understand the possible causes.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In the error message, click Show trace&lt;/li&gt;
&lt;li&gt;Click Trace step 1&lt;/li&gt;
&lt;li&gt;Copy the code and paste it again into Amazon Q&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Based on Amazon Q, these are the possible causes of the incomplete response:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. The Agent is showing [retrieved information] because:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The instructions or internal prompts are written as if a Knowledge Base existed, but we do not have a Knowledge Base connected and we are using Action Groups, which do not need a Knowledge Base.&lt;/p&gt;

&lt;p&gt;So any phrase inside the Agent, like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;“according to the retrieved information…”&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;“based on the retrieved information…”&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;“from the knowledge base…”&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;or the literal placeholder &lt;code&gt;[retrieved information]&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;…cannot be replaced with anything, because there is no data source to fill it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. The Agent then returns the placeholder as-is, causing confusion.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;So there is some text either in Agent instructions,  Prompt templates, or Action group outputs that contains placeholders or assumptions about a Knowledge Base.&lt;/p&gt;




&lt;h2&gt;
  
  
  🛠️ STEP 10 — Let’s Fix That
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;10.1 Review the instructions again and remove any mention of:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Knowledge Base&lt;/li&gt;
&lt;li&gt;Internal documents (as a hard requirement)&lt;/li&gt;
&lt;li&gt;“Retrieved information”&lt;/li&gt;
&lt;li&gt;Placeholders like [retrieved information]&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For this part of the lab, the Agent should work only with Action Groups, not with a Knowledge Base.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F396fzbaqkc6s7ixsh7ju.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F396fzbaqkc6s7ixsh7ju.png" alt="Screenshot with old instructions" width="800" height="158"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What’s wrong here?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It mentions internal documents&lt;/li&gt;
&lt;li&gt;It mentions S3 explicitly&lt;/li&gt;
&lt;li&gt;It tells the Agent it can ONLY respond using “documents”&lt;/li&gt;
&lt;li&gt;That forces the Agent to look for retrieved information → but there is no Knowledge Base&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let’s change the instruction to:&lt;/p&gt;

&lt;p&gt;"You are a corporate assistant designed to answer questions using the information provided by the system and the available action groups. Do not assume information; always rely on the results returned by the actions."&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F305g0ij3iu88kbokauyk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F305g0ij3iu88kbokauyk.png" alt="Screenshot with new instructions" width="800" height="199"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Click Save&lt;/li&gt;
&lt;li&gt;Click Prepare&lt;/li&gt;
&lt;li&gt;Ask the question again&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvh551mjz6aabf7vpy9dy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvh551mjz6aabf7vpy9dy.png" alt="Screenshot of new response" width="499" height="518"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The Agent should now respond, but it's  asking for the company name.&lt;br&gt;
Let’s answer and see the response&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwhvzqduuwombzqyewmjp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwhvzqduuwombzqyewmjp.png" alt="Screenshot with response" width="379" height="610"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I asked another question:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;“What does the company say about confidentiality?”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2dwm08hmc1h5pnw5sly9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2dwm08hmc1h5pnw5sly9.png" alt="Screenshot with response about confidentiality" width="427" height="367"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;“What does it say about the confidentiality policy?”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F41gdq1pm0tamqavsnsjh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F41gdq1pm0tamqavsnsjh.png" alt=" " width="458" height="445"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;At this point, even though the Agent answered the question, it should have been simpler, so there’s probably still something off.&lt;/p&gt;

&lt;p&gt;And that’s okay.For me, it’s valuable to open the process, show real learnings, and create spaces where others can also learn, contribute, and improve this path together.&lt;/p&gt;

&lt;h2&gt;
  
  
  🧯 Errors
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Symptom&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Probable cause&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Fix / Lesson learned&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;“Sorry, I am unable to assist with this request.”&lt;/td&gt;
&lt;td&gt;Agent role didn’t have permission for &lt;code&gt;bedrock:InvokeModel&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Update IAM policy JSON to allow model invocation.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Agent asks for clarification (e.g., “What is the company name?”)&lt;/td&gt;
&lt;td&gt;Automatic &lt;code&gt;user__askuser&lt;/code&gt; triggered by internal orchestration&lt;/td&gt;
&lt;td&gt;Add rules in Agent instructions to avoid unnecessary clarifications.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Placeholder &lt;code&gt;[retrieved information]&lt;/code&gt; appears in the response&lt;/td&gt;
&lt;td&gt;Instructions assume a non-existing Knowledge Base&lt;/td&gt;
&lt;td&gt;Update instructions to use only Action Groups.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Action Group doesn’t execute&lt;/td&gt;
&lt;td&gt;Required parameter / invalid name with hyphens&lt;/td&gt;
&lt;td&gt;Set &lt;code&gt;required = false&lt;/code&gt; and rename using &lt;code&gt;_&lt;/code&gt; instead of &lt;code&gt;-&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Incomplete responses&lt;/td&gt;
&lt;td&gt;Double &lt;code&gt;&amp;lt;thinking&amp;gt;&lt;/code&gt; or invalid structure&lt;/td&gt;
&lt;td&gt;Enforce a single &lt;code&gt;&amp;lt;thinking&amp;gt;&lt;/code&gt; followed by a single &lt;code&gt;&amp;lt;answer&amp;gt;&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Lambda not returning useful content&lt;/td&gt;
&lt;td&gt;Auto-generated Lambda has no actual logic&lt;/td&gt;
&lt;td&gt;Replace it with a function that reads files from the S3 bucket.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  🚧 What I Would Do Differently Next Time
&lt;/h2&gt;

&lt;p&gt;Even though this project didn’t end in a perfect “everything works on the first try” moment (nothing in AWS ever does), it showed me exactly where I want to improve on the next iteration.&lt;/p&gt;

&lt;p&gt;Here’s what I would approach differently moving forward:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Start with the IAM permissions first&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Most of my errors came from missing or half-complete IAM policies.&lt;br&gt;
Next time, I’ll begin by writing a clean, minimal policy before touching the agent.&lt;/p&gt;

&lt;p&gt;It would have saved me more than a hour of detective work.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Keep the instructions extremely explicit&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I learned that Agents love to ask unnecessary clarifying questions.&lt;br&gt;
Next time, I’ll write more direct rules to force the agent to act instead of overthinking.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Basically&lt;/strong&gt;: Fewer “what do you mean?” and more “this is what I’m doing.”&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Build and test the Lambda function manually first&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The auto-generated Lambda is a nice idea… but useless in real scenarios.&lt;br&gt;
Next time, I’ll be careful when buildings the function, test it with sample inputs, and then plug it into the Action Group.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Don’t rely on assumptions about the Knowledge Base&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If the Agent expects a KB but you’re not using one, it will hallucinate placeholders like [retrieved information].&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Next time:&lt;/strong&gt; I willl remove all KB references from the instructions if the project doesn’t include one.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Document the failures as I go&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This write-up felt much easier because I documented the errors while I hit them, so next time, I’ll keep a dedicated “error journal” open from the beginning.&lt;/p&gt;




&lt;h2&gt;
  
  
  📚 Official Resources
&lt;/h2&gt;

&lt;p&gt;Amazon Bedrock Agents&lt;br&gt;
&lt;a href="https://docs.aws.amazon.com/bedrock/latest/userguide/agents.html" rel="noopener noreferrer"&gt;https://docs.aws.amazon.com/bedrock/latest/userguide/agents.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Action Groups&lt;br&gt;
&lt;a href="https://docs.aws.amazon.com/bedrock/latest/userguide/agents-actions.html" rel="noopener noreferrer"&gt;https://docs.aws.amazon.com/bedrock/latest/userguide/agents-actions.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;S3 — Developer Guide&lt;br&gt;
&lt;a href="https://docs.aws.amazon.com/AmazonS3/latest/dev/Welcome.html" rel="noopener noreferrer"&gt;https://docs.aws.amazon.com/AmazonS3/latest/dev/Welcome.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;IAM Policies&lt;br&gt;
&lt;a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html" rel="noopener noreferrer"&gt;https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>cloud</category>
      <category>beginners</category>
      <category>aws</category>
    </item>
    <item>
      <title>Dejé de hablar de AI y empecé a construir: Construye un RAG simple con Amazon Bedrock Knowledge Bases.</title>
      <dc:creator>Sinai Rivera</dc:creator>
      <pubDate>Mon, 17 Nov 2025 13:52:51 +0000</pubDate>
      <link>https://dev.to/sinariver/deje-de-hablar-de-ai-y-empece-a-construir-construye-un-rag-simple-con-amazon-bedrock-knowledge-3j42</link>
      <guid>https://dev.to/sinariver/deje-de-hablar-de-ai-y-empece-a-construir-construye-un-rag-simple-con-amazon-bedrock-knowledge-3j42</guid>
      <description>&lt;p&gt;TL;DR:&lt;br&gt;
En este lab vas a construir, paso a paso, un &lt;strong&gt;RAG&lt;/strong&gt; completo con &lt;strong&gt;Amazon Bedrock Knowledge Bases&lt;/strong&gt; sobre tus propios PDFs en &lt;strong&gt;S3&lt;/strong&gt;, usando Titan Embeddings para crear el índice vectorial y hacer consultas naturales con grounding en tus documentos. En ~25–35 minutos montas la arquitectura en us-east-1, validas respuestas, revisas costos, monitoreo y seguridad, y te llevas un blueprint sencillo para entender GenAI “de verdad” y poder explicarla a otros.&lt;/p&gt;

&lt;p&gt;Veremos: Creación del bucket S3, ingestión de documentos, generación de embeddings, configuración del índice vectorial y consultas inteligentes.&lt;br&gt;&lt;br&gt;
Tiempo estimado: &lt;strong&gt;25–35 min&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Decidí crear este lab porque quiero entender GenAI de verdad —no solo para un examen, sino para poder &lt;strong&gt;explicarlo&lt;/strong&gt;, &lt;strong&gt;documentarlo&lt;/strong&gt; y &lt;strong&gt;ayudar a otros&lt;/strong&gt; que están empezando como yo.  &lt;/p&gt;

&lt;p&gt;Este post es parte de mi proceso para crecer en AWS, reforzar mi base en IA, mejorar mi habilidad de enseñar y construir contenido útil para la comunidad técnica.&lt;/p&gt;


&lt;h2&gt;
  
  
  🧭 Metadatos rápidos
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Campo&lt;/th&gt;
&lt;th&gt;Valor&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Categoría CB&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;AI/ML&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Servicios AWS&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Amazon Bedrock, Knowledge Bases, Amazon S3, Titan Embeddings&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Requisitos previos&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Cuenta AWS, permisos para Bedrock + S3, región &lt;code&gt;us-east-1&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Costos estimados&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Bajo (menos de \$0.50)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Arquitectura&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Ver diagrama abajo&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;


&lt;h2&gt;
  
  
  🗺️ Tabla de contenidos (ToC)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;¿Por qué importa?&lt;/li&gt;
&lt;li&gt;Arquitectura / Qué vas a construir&lt;/li&gt;
&lt;li&gt;Prerrequisitos&lt;/li&gt;
&lt;li&gt;Paso a paso&lt;/li&gt;
&lt;li&gt;Validación y pruebas&lt;/li&gt;
&lt;li&gt;Observabilidad (CloudWatch)&lt;/li&gt;
&lt;li&gt;Seguridad y buenas-prácticas&lt;/li&gt;
&lt;li&gt;Costos y optimización&lt;/li&gt;
&lt;li&gt;Errores comunes (Troubleshooting)&lt;/li&gt;
&lt;li&gt;Qué sigue&lt;/li&gt;
&lt;li&gt;Recursos oficiales&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  💡 ¿Por qué importa?
&lt;/h2&gt;

&lt;p&gt;Hoy casi todas las empresas quieren agregar &lt;strong&gt;IA generativa&lt;/strong&gt; a sus aplicaciones, pero no basta con “preguntarle” a un modelo:&lt;br&gt;&lt;br&gt;
necesitan respuestas basadas en &lt;strong&gt;su propio conocimiento&lt;/strong&gt;, documentos internos, políticas, PDFs, etc.&lt;/p&gt;

&lt;p&gt;Eso es &lt;strong&gt;RAG&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;AWS lo simplifica con &lt;strong&gt;Knowledge Bases for Amazon Bedrock&lt;/strong&gt;, que hace por ti:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Extracción
&lt;/li&gt;
&lt;li&gt;Vectorización (Titan Embeddings)
&lt;/li&gt;
&lt;li&gt;Indexación
&lt;/li&gt;
&lt;li&gt;Orquestación de RAG
&lt;/li&gt;
&lt;li&gt;Consultas con grounding seguro
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Mi motivación:&lt;/strong&gt; Este fue uno de los labs que más me costaba crear con sandboxes. Así que lo reconstruí desde cero en una cuenta AWS Free Tier real, y quiero dejar los pasos exactos para que otros no sufran como yo.&lt;/p&gt;


&lt;h2&gt;
  
  
  🧰 Arquitectura / Qué vas a construir
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Diagrama simple del flujo:
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;📄 **Documentos (PDF/Markdown/TXT)**  
⬇️  
🪣 **S3 Bucket (raw docs)**  
⬇️  
🧠 **Knowledge Base**  
- Titan Embeddings  
- Vector Index  
⬇️  
🤖 **Modelo en Amazon Bedrock** (ej. Claude 3 Haiku)  
⬇️  
💬 **Respuesta aumentada con contexto**
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Puntos clave
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Titan hace los &lt;strong&gt;embeddings&lt;/strong&gt; de forma automática.
&lt;/li&gt;
&lt;li&gt;No necesitas manejar el índice vectorial manualmente (AWS lo gestiona).
&lt;/li&gt;
&lt;li&gt;El modelo genera respuestas basadas en tus documentos, no solamente en lo que ya trae “pre-entrenado”.&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  ✅ Prerrequisitos
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Cuenta AWS Free Tier
&lt;/li&gt;
&lt;li&gt;Región: &lt;strong&gt;us-east-1&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Amazon Bedrock habilitado (primer uso requiere activarlo)
&lt;/li&gt;
&lt;li&gt;Permisos IAM de laboratorio:

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;AmazonBedrockFullAccess&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;AmazonS3FullAccess&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  🛠️ Paso a paso
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Este lab se realiza 100% desde la consola de AWS.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h3&gt;
  
  
  &lt;strong&gt;1) Crear un bucket S3&lt;/strong&gt;
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;En tu consola AWS, busca: S3&lt;/li&gt;
&lt;li&gt;Clic en Create bucket&lt;/li&gt;
&lt;li&gt;Configura:&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Bucket name:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;pre class="highlight plaintext"&gt;&lt;code&gt; kb-sina-rag-lab
&lt;/code&gt;&lt;/pre&gt;




&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;Region:&lt;/strong&gt; &lt;code&gt;us-east-1&lt;/code&gt;  &lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;Block Public Access:&lt;/strong&gt; todas ON  &lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;Versioning:&lt;/strong&gt; opcional (dejalo off) &lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;Encryption:&lt;/strong&gt; Deja lo que viene por defecto (SSE-S3)&lt;/p&gt;&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh3fj528j54zh7wtz8o1d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh3fj528j54zh7wtz8o1d.png" alt="Captura de pantalla del panel de Amazon Bedrock Knowledge Bases mostrando un mensaje que indica la creación exitosa de un nuevo Knowledge Base y la opción para continuar con la configuración." width="800" height="409"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fksag5gourdkeqowwqmhi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fksag5gourdkeqowwqmhi.png" alt="Captura de pantalla del panel de Amazon S3 mostrando la creación de un bucket nuevo, con campos para asignar el nombre del bucket, región y configuraciones opcionales de seguridad y versionado." width="800" height="386"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;2) Subir documentos&lt;/strong&gt;
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Ve a S3 en tu consola AWS &lt;/li&gt;
&lt;li&gt;Abre tu bucket: kb-sina-rag-lab&lt;/li&gt;
&lt;li&gt;Haz clic en Upload&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw2ez8c9iuk5ao3ue5lmm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw2ez8c9iuk5ao3ue5lmm.png" alt="Captura de pantalla de la consola de Amazon S3 mostrando un bucket recién creado con la sección “Objects” vacía, lista para subir archivos." width="800" height="315"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Clic en Add files&lt;/li&gt;
&lt;li&gt;Selecciona tus 3 PDFs recién creados&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgjnnn5obzoisj274q9on.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgjnnn5obzoisj274q9on.png" alt="Captura de pantalla de la consola de Amazon S3 mostrando la opción “Upload” dentro de un bucket, con botones para agregar archivos o carpetas y configurar las propiedades de la carga." width="637" height="95"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Clic en Upload&lt;/li&gt;
&lt;li&gt;Espera a que todos aparezcan con “Upload succeeded”&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6cx4zix86k15175lxza5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6cx4zix86k15175lxza5.png" alt="Captura de pantalla del proceso de carga en Amazon S3 mostrando un archivo seleccionado para subir, incluyendo su nombre, tamaño y las opciones de permisos y propiedades antes de confirmar la subida." width="800" height="382"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;3) Crear la Knowledge Base&lt;/strong&gt;
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Ve a Amazon Bedrock en la consola&lt;/li&gt;
&lt;li&gt;En el menú lateral, selecciona: Knowledge bases&lt;/li&gt;
&lt;li&gt;Clic en Create knowledge base&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;3.1 Basic settings&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Knowledge base name&lt;/strong&gt;: En la pantalla de creación indica el nombre de tu  Knowledge base
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;rag-lab-sina-kb
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Description&lt;/strong&gt;: (opcional) RAG Knowledge Base para pruebas de GenAI usando mis documentos en S3.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1fw6zfnmh02s4hk4ak96.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1fw6zfnmh02s4hk4ak96.png" alt="Captura de pantalla de Amazon S3 mostrando el archivo subido dentro del bucket, con detalles como nombre, fecha de modificación, tamaño y tipo de almacenamiento." width="800" height="301"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3.2 Data source: Amazon S3.&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqoqsuqsea7hklygy5g0p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqoqsuqsea7hklygy5g0p.png" alt="Captura de pantalla del panel de Amazon Bedrock Knowledge Bases mostrando la sección para seleccionar el origen de datos desde Amazon S3, con opciones para elegir el bucket y configurar el acceso." width="800" height="389"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Bucket&lt;/strong&gt;: Selecciona kb-sina-rag-lab. Clic next&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fikzkiiz2bb3ffxm3h8vc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fikzkiiz2bb3ffxm3h8vc.png" alt="Captura de pantalla de Amazon Bedrock mostrando la opción para seleccionar el bucket de S3 como fuente de datos, con un menú desplegable que permite elegir el bucket previamente creado." width="800" height="407"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3.3 Embeddings model:&lt;/strong&gt; Titan Text Embeddings v2. Este modelo genera los embeddings para el vector store.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqwt7fu7ew6awct5ptf31.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqwt7fu7ew6awct5ptf31.png" alt="Captura de pantalla de Amazon Bedrock mostrando la configuración del rol IAM necesario para que Knowledge Bases acceda a los datos de S3, incluyendo el ARN del rol y las políticas asociadas." width="800" height="416"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3.4 Vector store:&lt;/strong&gt; OpenSearch Serverless (auto-configurado). Y deja la configuración automática (es perfecta para este lab).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8d7kc89f5rflgyzr39rr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8d7kc89f5rflgyzr39rr.png" alt="Captura de pantalla de Amazon Bedrock Knowledge Bases mostrando los detalles del rol IAM creado automáticamente, incluyendo su ARN, políticas adjuntas y permisos otorgados para acceder al bucket de S3." width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Knowledge Base creado&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqs2xnwmucskwg8od740w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqs2xnwmucskwg8od740w.png" alt="Captura de pantalla de Amazon Bedrock mostrando la creación automática de un rol IAM exitoso, con un mensaje de confirmación y opciones para continuar configurando el Knowledge Base." width="800" height="340"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;4) Sincronizar e indexar&lt;/strong&gt;
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;En tu pantalla actual, ve abajo a la sección: Data source (1)
&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Sync&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3etixm718qfka3ye2t0d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3etixm718qfka3ye2t0d.png" alt="Captura de pantalla de Amazon Bedrock Knowledge Bases mostrando el paso para seleccionar el modelo de embeddings, con Titan Embeddings como opción destacada y configuraciones de índice vectorial." width="800" height="423"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Espera a que el estado cambie a:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sync successful&lt;/li&gt;
&lt;li&gt;Status: Up to date&lt;/li&gt;
&lt;li&gt;o simplemente green check ✔️&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;⏳ Esto puede tardar entre 30 segundos y 2 minutos dependiendo del tamaño de los PDFs.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbtdpsvhyafk02x7qdrs2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbtdpsvhyafk02x7qdrs2.png" alt="Captura de pantalla de Amazon Bedrock mostrando la selección del modelo Titan Embeddings y la configuración del tipo de almacenamiento para el índice vectorial dentro del Knowledge Base." width="800" height="379"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;5) Probar tu RAG en la consola&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Aquí vas a ver:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cómo la KB busca contexto en tus documentos&lt;/li&gt;
&lt;li&gt;Cómo selecciona los fragmentos relevantes&lt;/li&gt;
&lt;li&gt;Cómo el modelo responde usando solo lo que tú subiste&lt;/li&gt;
&lt;li&gt;Cero alucinaciones (si el documento está claro)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;1. En tu pantalla actual (rag-lab-sina-kb)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Busca el botón:Test Knowledge Base (y haz clic). Esto te abrirá una consola de chat simple.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnqaf5xqawop6ql9u8dhn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnqaf5xqawop6ql9u8dhn.png" alt="Captura de pantalla del panel de Amazon Bedrock Knowledge Bases mostrando la validación exitosa de la configuración, incluyendo el origen de datos en S3, el modelo de embeddings seleccionado y el tipo de índice vectorial." width="800" height="379"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;📝 &lt;strong&gt;Nota importante&lt;/strong&gt; Activar modelos generativos en Bedrock&lt;/p&gt;

&lt;p&gt;Antes de probar la Knowledge Base, asegúrate de tener habilitado al menos un modelo generativo en Amazon Bedrock.&lt;/p&gt;

&lt;p&gt;Para usar la pestaña Test de la Knowledge Base, necesitas seleccionar un modelo generativo. En cuentas nuevas de AWS (incluyendo Free Tier), los modelos Titan y Claude pueden no estar disponibles de inmediato.&lt;/p&gt;

&lt;p&gt;La opción compatible y disponible por defecto es: &lt;strong&gt;Amazon Nova Micro&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fle5mq80f5btdpza6p8fw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fle5mq80f5btdpza6p8fw.png" alt="Captura de pantalla de Amazon Bedrock mostrando la opción “Retrieve and Generate”, con un campo para introducir una consulta y botones para ejecutar la búsqueda usando el Knowledge Base configurado." width="800" height="669"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Después de habilitarlo, ya podrás probar tus consultas.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Escribe un prompt como&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Que dicen los documentos acerca de Bedrock?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftv4u5p2vm2kbpx6g3183.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftv4u5p2vm2kbpx6g3183.png" alt="Captura de pantalla de Amazon Bedrock Knowledge Bases mostrando el proceso de ingesta de datos en progreso, con indicadores que confirman que el bucket de S3 ha sido conectado y que el índice está siendo construido exitosamente." width="800" height="393"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;3. Verifica que el modelo responde con grounding en tus archivos&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7abfzf6rrnzeb86h4qeh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7abfzf6rrnzeb86h4qeh.png" alt="Captura de pantalla de Amazon Bedrock Knowledge Bases mostrando el estado del índice completado, indicando que la ingesta de datos terminó correctamente y que el Knowledge Base está listo para recibir consultas." width="800" height="403"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv89p91dcsgtv7jq3ymgs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv89p91dcsgtv7jq3ymgs.png" alt="Captura de pantalla de Amazon Bedrock mostrando la consola de pruebas del Knowledge Base, con un cuadro de texto para enviar consultas y un área de resultados donde se muestran las respuestas generadas con contexto recuperado." width="800" height="365"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  📊 Observabilidad (CloudWatch)
&lt;/h2&gt;

&lt;p&gt;En este laboratorio trabajamos con OpenSearch Serverless, que es administrado por AWS. A diferencia de OpenSearch tradicional, esta versión no crea log groups automáticamente a menos que habilitemos políticas de logging específicas.&lt;/p&gt;

&lt;p&gt;En CloudWatch → Log groups verás que no se generan logs por defecto, lo cual es normal para este tipo de servicio administrado y además ayuda a mantener el laboratorio dentro del Free Tier.&lt;/p&gt;

&lt;p&gt;Sin embargo, sí podemos observar actividad del laboratorio en:&lt;/p&gt;

&lt;p&gt;✔️ &lt;strong&gt;Bedrock Metrics&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;CloudWatch → Metrics → Bedrock&lt;br&gt;
Aquí se registran las invocaciones del modelo y la latencia de cada llamada.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;En AWS Console → escribe CloudWatch&lt;/li&gt;
&lt;li&gt;Menú izquierdo → Metrics&lt;/li&gt;
&lt;li&gt;Selecciona Bedrock&lt;/li&gt;
&lt;li&gt;Luego seleccion All Models Lds&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcgbryl9g014ebp26ldaj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcgbryl9g014ebp26ldaj.png" alt="Captura de pantalla de la consola de Amazon Bedrock mostrando una prueba de consulta en el Knowledge Base, con una pregunta escrita por el usuario y una respuesta generada que incluye contexto recuperado desde el índice vectorial." width="800" height="431"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq80s3dxd5kzuoaot6gz3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq80s3dxd5kzuoaot6gz3.png" alt="Captura de pantalla de Amazon Bedrock mostrando la sección de resultados de búsqueda del Knowledge Base, donde se visualizan documentos recuperados del bucket S3 junto con sus niveles de relevancia o puntuación." width="800" height="470"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Click en todas las metricas&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxpt5wmulomn4xshy0a49.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxpt5wmulomn4xshy0a49.png" alt="Captura de pantalla de Amazon Bedrock mostrando la consola del Knowledge Base con opciones para ejecutar nuevas consultas, ver resultados recuperados y explorar el contenido indexado desde S3." width="800" height="342"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;✔️ &lt;strong&gt;CloudTrail (auditoría)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;En la consola busca CloudTrail&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Entra en el servicio&lt;/li&gt;
&lt;li&gt;En el menú izquierdo, selecciona:Event history&lt;/li&gt;
&lt;li&gt;En la barra de filtros selecciona: Event Source&lt;/li&gt;
&lt;li&gt;En el buscador escribe: bedrock.amazonaws.com&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw3qmpdjd4vb9p6nsw5ve.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw3qmpdjd4vb9p6nsw5ve.png" alt="Captura de pantalla de Amazon Bedrock mostrando la vista final del Knowledge Base configurado, con detalles del estado, fuente de datos en S3, modelo de embeddings utilizado y opciones para realizar consultas y administrar la ingesta de datos." width="800" height="416"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Esto confirma que la KB está funcionando incluso si los logs de OpenSearch no se generan automáticamente.&lt;/p&gt;




&lt;h2&gt;
  
  
  🔐 Seguridad y buenas prácticas
&lt;/h2&gt;

&lt;p&gt;Aunque este es un laboratorio simple, es importante seguir buenas prácticas desde el inicio. Aquí están las recomendaciones aplicables específicamente a una Knowledge Base de Bedrock:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Nunca expongas tu bucket (mantén Block Public Access ON).
&lt;/li&gt;
&lt;li&gt;Crea roles separados si piensas conectar la KB a aplicaciones.
&lt;/li&gt;
&lt;li&gt;Usa documentos en texto claro cuando sea posible (mejor chunking).
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  💸 Costos y optimización
&lt;/h2&gt;

&lt;p&gt;Costo estimado del lab:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Titan Embeddings → unos centavos por la generación de embeddings (muy barato).&lt;/li&gt;
&lt;li&gt;Bedrock – Invocations → solo un par de llamadas (menos de 1 centavo cada una).&lt;/li&gt;
&lt;li&gt;OpenSearch Serverless (Vector Store) → modo on-demand, el costo mínimo posible.&lt;/li&gt;
&lt;li&gt;Amazon S3 → almacenamiento muy pequeño (tus PDFs y TXT), prácticamente $0.&lt;/li&gt;
&lt;li&gt;Total aproximado: &lt;strong&gt;$0.20–$0.50&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🧯 Errores comunes
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Síntoma&lt;/th&gt;
&lt;th&gt;Causa&lt;/th&gt;
&lt;th&gt;Solución&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;KB no sincroniza&lt;/td&gt;
&lt;td&gt;Ruta de S3 incorrecta&lt;/td&gt;
&lt;td&gt;Revisar bucket y prefijo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;No aparecen documentos&lt;/td&gt;
&lt;td&gt;IAM insuficiente&lt;/td&gt;
&lt;td&gt;Revisar permisos en rol de KB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Respuestas sin grounding&lt;/td&gt;
&lt;td&gt;PDFs mal parseados&lt;/td&gt;
&lt;td&gt;Usar formato TXT/Markdown o PDFs limpios&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  🚀 Qué sigue
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Conectar esta KB a un &lt;strong&gt;Bedrock Agent&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Crear una &lt;strong&gt;API de RAG&lt;/strong&gt; con Lambda + API Gateway
&lt;/li&gt;
&lt;li&gt;Integrar identidad con &lt;strong&gt;Amazon Cognito&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  📚 Recursos oficiales
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base.html" rel="noopener noreferrer"&gt;https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base.html&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://aws.amazon.com/bedrock/" rel="noopener noreferrer"&gt;https://aws.amazon.com/bedrock/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://aws.amazon.com/opensearch-service/serverless/" rel="noopener noreferrer"&gt;https://aws.amazon.com/opensearch-service/serverless/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>aws</category>
      <category>rag</category>
      <category>ai</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>I stopped talking about AI and started to build: Build a RAG System with Amazon Bedrock, Titan Embeddings &amp; Knowledge Bases</title>
      <dc:creator>Sinai Rivera</dc:creator>
      <pubDate>Mon, 17 Nov 2025 13:52:33 +0000</pubDate>
      <link>https://dev.to/sinariver/i-stopped-talking-about-ai-and-started-to-build-build-a-rag-system-with-amazon-bedrock-titan-2ke6</link>
      <guid>https://dev.to/sinariver/i-stopped-talking-about-ai-and-started-to-build-build-a-rag-system-with-amazon-bedrock-titan-2ke6</guid>
      <description>&lt;p&gt;TL;DR:&lt;br&gt;
In this lab, you’ll build a complete RAG workflow using Amazon Bedrock Knowledge Bases on top of your own PDFs stored in S3. Titan Embeddings will automatically create the vector index so you can run grounded, document-aware queries with a Bedrock model. In about 25–35 minutes, you’ll deploy the full architecture in us-east-1, validate responses, review costs, monitoring, and security, and walk away with a clean blueprint to truly understand GenAI—and explain it to others.&lt;/p&gt;

&lt;p&gt;I built this lab because I want to truly understand GenAI — not just for an exam, but to &lt;strong&gt;teach it&lt;/strong&gt;, &lt;strong&gt;document it&lt;/strong&gt;, and &lt;strong&gt;help others&lt;/strong&gt; who are starting like me.&lt;br&gt;&lt;br&gt;
These topics were tricky inside sandboxes, so now I’m rebuilding everything from scratch in a real AWS account to see how things work internally.  &lt;/p&gt;


&lt;h2&gt;
  
  
  🧭 Quick Metadata
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;CB Category&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;AI/ML&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;AWS Services&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Amazon Bedrock, Knowledge Bases, Amazon S3, Titan Embeddings&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Prerequisites&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;AWS account, Bedrock enabled, S3 permissions, region: &lt;code&gt;us-east-1&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Estimated Cost&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Under \$0.50&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Architecture&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;See diagram below&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;


&lt;h2&gt;
  
  
  🗺️ Table of Contents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Why it matters&lt;/li&gt;
&lt;li&gt;Architecture / What you will build&lt;/li&gt;
&lt;li&gt;Prerequisites&lt;/li&gt;
&lt;li&gt;Step-by-step&lt;/li&gt;
&lt;li&gt;Validation &amp;amp; Testing&lt;/li&gt;
&lt;li&gt;Observability (CloudWatch)&lt;/li&gt;
&lt;li&gt;Security Best Practices&lt;/li&gt;
&lt;li&gt;Cost Analysis&lt;/li&gt;
&lt;li&gt;Troubleshooting&lt;/li&gt;
&lt;li&gt;What’s Next&lt;/li&gt;
&lt;li&gt;Official Resources&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  💡 Why it matters
&lt;/h2&gt;

&lt;p&gt;Companies want to integrate &lt;strong&gt;generative AI&lt;/strong&gt; into their apps, but raw models aren’t enough. They need answers based on &lt;strong&gt;internal knowledge&lt;/strong&gt;: PDFs, manuals, policies, emails, reports.&lt;/p&gt;

&lt;p&gt;That’s what &lt;strong&gt;RAG&lt;/strong&gt; does. AWS makes this easier with &lt;strong&gt;Knowledge Bases for Amazon Bedrock&lt;/strong&gt;, which handles:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Document extraction
&lt;/li&gt;
&lt;li&gt;Embedding generation (Titan)
&lt;/li&gt;
&lt;li&gt;Vector indexing
&lt;/li&gt;
&lt;li&gt;RAG orchestration
&lt;/li&gt;
&lt;li&gt;Grounded responses
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This lab was hard for me when using sandboxes, so I rebuilt it from scratch in a AWS Free Tier, and now I’m sharing the exact steps.&lt;/p&gt;


&lt;h2&gt;
  
  
  🧰 Architecture / What you will build
&lt;/h2&gt;
&lt;h2&gt;
  
  
  Simple flow diagram:
&lt;/h2&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
📄 Documents (PDF/Markdown/TXT)
⬇️
🪣 Amazon S3 (raw documents)
⬇️
🧠 Knowledge Base

Titan Embeddings

OpenSearch Vector Index
⬇️
🤖 Amazon Bedrock Model (Nova Micro / Claude)
⬇️
💬 Grounded, context-aware answer
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  Key Notes
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Titan automatically generates embeddings.&lt;/li&gt;
&lt;li&gt;Vector store is fully managed (OpenSearch Serverless).&lt;/li&gt;
&lt;li&gt;Bedrock uses ONLY your documents to answer.&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  ✅ Prerequisites
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;AWS Free Tier account
&lt;/li&gt;
&lt;li&gt;Region &lt;strong&gt;us-east-1&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Bedrock enabled
&lt;/li&gt;
&lt;li&gt;IAM permissions:

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;AmazonBedrockFullAccess&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;AmazonS3FullAccess&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  🛠️ Step-by-step
&lt;/h2&gt;


&lt;h2&gt;
  
  
  &lt;strong&gt;1) Create an S3 bucket&lt;/strong&gt;
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Open AWS Console → search &lt;strong&gt;S3&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Create bucket&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Use:&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Bucket name:&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kb-sina-rag-lab
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Region:&lt;/strong&gt; &lt;code&gt;us-east-1&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Block Public Access:&lt;/strong&gt; ALL ON
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Encryption:&lt;/strong&gt; default (SSE-S3)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fksag5gourdkeqowwqmhi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fksag5gourdkeqowwqmhi.png" alt="Captura de pantalla del panel de Amazon S3 mostrando la creación de un bucket nuevo, con campos para asignar el nombre del bucket, región y configuraciones opcionales de seguridad y versionado." width="800" height="386"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fksag5gourdkeqowwqmhi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fksag5gourdkeqowwqmhi.png" alt="Screenshot of the Amazon S3 console showing the creation of a new bucket, including fields for bucket name, AWS Region, and block public access settings." width="800" height="386"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  &lt;strong&gt;2) Upload your documents&lt;/strong&gt;
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Go to your bucket: &lt;code&gt;kb-sina-rag-lab&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Upload&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Add files&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Choose your PDFs or TXT files&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Upload&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw2ez8c9iuk5ao3ue5lmm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw2ez8c9iuk5ao3ue5lmm.png" alt="Screenshot of the Amazon S3 console showing the bucket configuration settings, including versioning, server-side encryption (SSE-S3), and default data protection options before creating the bucket." width="800" height="315"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgjnnn5obzoisj274q9on.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgjnnn5obzoisj274q9on.png" alt="Screenshot of the Amazon Bedrock Knowledge Bases console showing the configuration page where you select the data source type (S3), choose an existing S3 bucket, and optionally specify a prefix for document ingestion." width="637" height="95"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6cx4zix86k15175lxza5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6cx4zix86k15175lxza5.png" alt="Screenshot of the Amazon Bedrock Knowledge Bases console showing the configuration step to select the embedding model, with " width="800" height="382"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  &lt;strong&gt;3) Create the Knowledge Base&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Go to &lt;strong&gt;Amazon Bedrock → Knowledge Bases → Create knowledge base&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  &lt;strong&gt;3.1 Basic settings&lt;/strong&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Knowledge Base Name:&lt;/strong&gt;: Type the name of your Kb
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;rag-lab-sina-kb
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;(Optional) Description:&lt;/strong&gt;  “RAG Knowledge Base for GenAI testing.”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1fw6zfnmh02s4hk4ak96.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1fw6zfnmh02s4hk4ak96.png" alt="Screenshot of the Amazon Bedrock Knowledge Bases console showing the option to enable or disable S3 object metadata filtering, with the toggle set to “Off” before continuing to the next configuration step." width="800" height="301"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  &lt;strong&gt;3.2 Data source → Amazon S3&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqoqsuqsea7hklygy5g0p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqoqsuqsea7hklygy5g0p.png" alt="Screenshot of the Amazon Bedrock Knowledge Bases console showing the vector index configuration page, including the selection of the vector database type and the option to create or use an existing index." width="800" height="389"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Select your S3 bucket.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxflylzf2eksfegq42ti5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxflylzf2eksfegq42ti5.png" alt="Screenshot of the vector index creation step in Amazon Bedrock Knowledge Bases, showing the selection of OpenSearch Serverless as the engine and configuration details such as collection name, vector dimensions, and field mappings." width="800" height="407"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  &lt;strong&gt;3.3 Embeddings model&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Choose:&lt;/p&gt;

&lt;p&gt;Titan Text Embeddings v2: 3.3 Embeddings model: Titan Text Embeddings v2. Este modelo genera los embeddings para el vector store.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqwt7fu7ew6awct5ptf31.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqwt7fu7ew6awct5ptf31.png" alt="Screenshot of the Amazon Bedrock Knowledge Bases permissions page, showing the IAM role auto-generated by Bedrock with access to the selected S3 bucket and OpenSearch Serverless collection, before proceeding to create the Knowledge Base." width="800" height="416"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  &lt;strong&gt;3.4 Vector store&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Choose:&lt;/p&gt;

&lt;p&gt;OpenSearch Serverless: OpenSearch Serverless (auto-configured). And leave the automatic configuration (it’s perfect for this lab).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8d7kc89f5rflgyzr39rr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8d7kc89f5rflgyzr39rr.png" alt="Screenshot of the Amazon Bedrock Knowledge Bases console showing the final review screen, summarizing the S3 data source, embedding model, vector index configuration, and IAM role before creating the Knowledge Base." width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;Knowledge Base created:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqs2xnwmucskwg8od740w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqs2xnwmucskwg8od740w.png" alt="Screenshot of the Amazon Bedrock Knowledge Bases console after successful creation, showing a confirmation message and options to proceed with data ingestion or further configuration." width="800" height="340"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  &lt;strong&gt;4) Sync your data&lt;/strong&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;On the same screen, scroll to &lt;strong&gt;Data source&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Click: Sync&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3etixm718qfka3ye2t0d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3etixm718qfka3ye2t0d.png" alt="Screenshot of the Amazon Bedrock Knowledge Bases console showing the ingestion page, where you can upload or sync documents from the configured S3 bucket to populate the Knowledge Base." width="800" height="423"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Status should show:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✔️ Sync successful
&lt;/li&gt;
&lt;li&gt;✔️ Status: Up to date
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This may take between 30 seconds and 2 minutes depending on the size of the PDFs.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbtdpsvhyafk02x7qdrs2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbtdpsvhyafk02x7qdrs2.png" alt="Screenshot of the Amazon Bedrock Knowledge Bases ingestion history, displaying a successful ingestion job with details such as ID, status, start time, and duration." width="800" height="379"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  &lt;strong&gt;5) Test your RAG system&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Here you will see:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How the Knowledge Base searches for context in your documents&lt;/li&gt;
&lt;li&gt;How it selects the relevant chunks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;1. On your current screen (rag-lab-sina-kb)&lt;/strong&gt; &lt;br&gt;
Look for the button:  Test Knowledge Base (and click it). This will open a simple chat console.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm3tv02aoaf8j0a4p35ej.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm3tv02aoaf8j0a4p35ej.png" alt="Screenshot of the Amazon Bedrock Knowledge Bases query console showing a natural language question being asked against the indexed documents, with the model returning a grounded answer based on the ingested PDF content." width="800" height="379"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;⚠️ &lt;strong&gt;Important:&lt;/strong&gt; Before testing the Knowledge Base, make sure you have at least one generative model enabled in Amazon Bedrock.&lt;/p&gt;

&lt;p&gt;To use the Test tab of the Knowledge Base, you need to select a generative model. In new AWS accounts (including Free Tier), Titan and Claude models may not be available immediately.&lt;/p&gt;

&lt;p&gt;The compatible option that is enabled by default is: &lt;strong&gt;Amazon Nova Micro&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fle5mq80f5btdpza6p8fw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fle5mq80f5btdpza6p8fw.png" alt="Screenshot of the Amazon Bedrock Playground showing a chat interface where a natural language query is sent to the Knowledge Base, and the model returns an inline grounded response based on the ingested documents." width="800" height="669"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After enabling it, you'll be able to test your queries.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;2.Test with a prompt&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;What do the documents say about Amazon Bedrock?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftv4u5p2vm2kbpx6g3183.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftv4u5p2vm2kbpx6g3183.png" alt="Screenshot from the Amazon Bedrock Playground showing a natural language query sent to a Knowledge Base, with the model returning a grounded answer along with a citations panel that references the exact PDF and page used to generate the response." width="800" height="393"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;3.Verify grounding&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7abfzf6rrnzeb86h4qeh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7abfzf6rrnzeb86h4qeh.png" alt="Screenshot of the citations panel in the Amazon Bedrock Playground, showing the source PDF used for grounding, including the file name and the highlighted page reference from which the model retrieved its answer." width="800" height="403"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv89p91dcsgtv7jq3ymgs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv89p91dcsgtv7jq3ymgs.png" alt="Screenshot of the Amazon CloudWatch console showing log groups related to Amazon Bedrock Knowledge Bases operations, including ingestion and query logs, which can be expanded for troubleshooting and monitoring." width="800" height="365"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  📊 Observability (CloudWatch)
&lt;/h2&gt;

&lt;p&gt;In this lab, we work with OpenSearch Serverless, which is managed by AWS. Unlike traditional OpenSearch, this version does not create log groups automatically unless we enable specific logging policies.&lt;/p&gt;

&lt;p&gt;In CloudWatch → Log groups, you’ll notice that no logs are generated by default. This is normal for this type of managed service and also helps keep the lab within the Free Tier.&lt;/p&gt;

&lt;p&gt;However, we can observe lab activity in:&lt;br&gt;
✔️ &lt;strong&gt;Bedrock Metrics&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;CloudWatch → Metrics → Bedrock&lt;br&gt;
Here you can see model invocations and the latency of each request.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In the AWS Console → search for CloudWatch&lt;/li&gt;
&lt;li&gt;Left menu → Metrics&lt;/li&gt;
&lt;li&gt;Select Bedrock&lt;/li&gt;
&lt;li&gt;Then choose All Models Lds&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcgbryl9g014ebp26ldaj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcgbryl9g014ebp26ldaj.png" alt="Screenshot of the CloudWatch Logs viewer showing detailed log events for a Bedrock Knowledge Base ingestion job, including timestamps, status updates, and processing information for troubleshooting purposes." width="800" height="431"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq80s3dxd5kzuoaot6gz3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq80s3dxd5kzuoaot6gz3.png" alt="Screenshot of the Amazon CloudWatch Logs interface displaying the execution details of a Bedrock Knowledge Base query, including the model used, request parameters, latency metrics, and grounding information for observability and debugging." width="800" height="470"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click on all metrics&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxpt5wmulomn4xshy0a49.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxpt5wmulomn4xshy0a49.png" alt="Screenshot of the Amazon S3 console showing a PDF document stored in the bucket used as the data source for the Bedrock Knowledge Base, including file metadata such as size, last modified date, and object URL." width="800" height="342"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  ✔️ CloudTrail
&lt;/h2&gt;

&lt;p&gt;In the console, search for CloudTrail.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Open the service&lt;/li&gt;
&lt;li&gt;In the left menu, select Event history&lt;/li&gt;
&lt;li&gt;In the filter bar, choose Event Source&lt;/li&gt;
&lt;li&gt;In the search box, type: bedrock.amazonaws.com&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw3qmpdjd4vb9p6nsw5ve.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw3qmpdjd4vb9p6nsw5ve.png" alt="Screenshot of the PDF opened in the Amazon S3 object preview, displaying the original source document used for the Bedrock Knowledge Base ingestion, confirming the content grounding origin." width="800" height="416"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  This confirms that the Knowledge Base is working even if OpenSearch logs are not generated automatically.
&lt;/h2&gt;

&lt;h2&gt;
  
  
  🔐 Security Best Practices
&lt;/h2&gt;

&lt;p&gt;Even though this is a simple lab, it’s important to follow best practices from the start. Here are the recommendations specifically for a Bedrock Knowledge Base:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ever expose your bucket (keep Block Public Access ON).&lt;/li&gt;
&lt;li&gt;Create separate roles if you plan to connect the Knowledge Base to applications.&lt;/li&gt;
&lt;li&gt;Use plain-text documents whenever possible (better chunking).&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  💸 Cost Analysis
&lt;/h2&gt;

&lt;p&gt;Estimated cost of the lab:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Titan Embeddings → a few cents for generating embeddings (very cheap).&lt;/li&gt;
&lt;li&gt;Bedrock – Invocations → only a couple of calls (less than 1 cent each).&lt;/li&gt;
&lt;li&gt;OpenSearch Serverless (Vector Store) → on-demand mode, the lowest possible cost.&lt;/li&gt;
&lt;li&gt;Amazon S3 → very small storage (your PDFs and TXT files), practically $0.&lt;/li&gt;
&lt;li&gt;Approximate total: $0.20–$0.50&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🧯 Troubleshooting
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Issue&lt;/th&gt;
&lt;th&gt;Cause&lt;/th&gt;
&lt;th&gt;Fix&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;KB doesn’t sync&lt;/td&gt;
&lt;td&gt;Wrong S3 prefix/path&lt;/td&gt;
&lt;td&gt;Re-check bucket&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Missing documents&lt;/td&gt;
&lt;td&gt;Missing IAM permissions&lt;/td&gt;
&lt;td&gt;Update KB execution role&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;No grounding&lt;/td&gt;
&lt;td&gt;Bad PDF parsing&lt;/td&gt;
&lt;td&gt;Prefer TXT/Markdown&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  🚀 What’s Next
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Connect this KB to a &lt;strong&gt;Bedrock Agent&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Build a &lt;strong&gt;serverless RAG API&lt;/strong&gt; using Lambda + API Gateway
&lt;/li&gt;
&lt;li&gt;Add authentication with &lt;strong&gt;Amazon Cognito&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  📚 Official Resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base.html" rel="noopener noreferrer"&gt;https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base.html&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://aws.amazon.com/bedrock/" rel="noopener noreferrer"&gt;https://aws.amazon.com/bedrock/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://aws.amazon.com/opensearch-service/serverless/" rel="noopener noreferrer"&gt;https://aws.amazon.com/opensearch-service/serverless/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>aws</category>
      <category>rag</category>
      <category>ai</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
