Si trabaja en la industria aeroespacial, automotriz o de fabricación pesada, es probable que su organización mantenga vastos depósitos de documentos técnicos. Estos documentos combinan especificaciones escritas con diagramas de ingeniería, dibujos CAD, fotografías de inspección, trazados de análisis térmico y curvas de fatiga. Una consulta de texto sobre la temperatura máxima de la pared en la garganta de la boquilla podría tener su respuesta encerrada dentro de un gráfico de contorno térmico en lugar de en prosa escrita. Los sistemas de recuperación de sólo texto no pueden mostrar esa información porque no ven el contenido de la imagen.
Amazon Nova Multimodal Embeddings aborda esta brecha asignando texto, imágenes y páginas de documentos en un espacio vectorial compartido. Una consulta de texto puede recuperar un diagrama de ingeniería y una consulta de imagen puede recuperar una especificación escrita, porque ambas modalidades comparten el mismo sistema de coordenadas.
En esta publicación, creamos un sistema de recuperación multimodal para documentos de fabricación aeroespacial utilizando Amazon Nova Multimodal Embeddings en Amazon Bedrock y Amazon S3 Vectors. Evaluamos el sistema en 26 consultas de fabricación y comparamos la calidad de generación entre una tubería de solo texto y una tubería multimodal.
Por qué la recuperación multimodal es importante para la fabricación
La mayoría de los documentos de fabricación combinan texto, diagramas e imágenes. Una sola orden de trabajo puede contener procedimientos de ensamblaje escritos junto con fotografías comentadas de los pasos completados. Un informe de inspección combina mediciones de pasa/falla con imágenes radiográficas de uniones soldadas. Una certificación de material incluye propiedades mecánicas tabulares y curvas de fatiga SN a las que un ingeniero debe hacer referencia durante la revisión del diseño.
Considere algunos ejemplos concretos de información visual del conjunto de datos utilizado en esta publicación: una tabla de especificaciones de torque se muestra dentro de un dibujo de ingeniería en lugar de almacenarse como texto independiente. Se utiliza un gráfico de contorno térmico codificado por colores para visualizar las temperaturas máximas en la tobera de un motor de cohete. Un diagrama de flujo del proceso de fabricación etiqueta visualmente los puntos de control de calidad con diamantes de decisión y puertas codificadas por colores, y los tiempos de ciclo asociados aparecen como anotaciones en el diagrama mismo.
Los sistemas de recuperación de sólo texto manejan estos documentos extrayendo texto mediante OCR y luego incrustando e indexando las cadenas extraídas. Esto funciona cuando las respuestas aparecen en las partes escritas de un documento, pero los sistemas de solo texto omiten las relaciones espaciales en los diagramas, los patrones visuales en las imágenes de inspección y la información cuantitativa codificada en diagramas y tablas. Cuando realiza una búsqueda del tipo de rodamientos utilizados en la turbobomba, la respuesta puede aparecer como una leyenda etiquetada en un diagrama de sección transversal que el OCR malinterpreta o elimina su contexto espacial.
Las incorporaciones multimodales adoptan un enfoque diferente. En lugar de convertir imágenes en texto y luego incrustar el texto, el modelo procesa la imagen directamente y produce un vector en el mismo espacio que las incrustaciones de texto. Una consulta de texto sobre cojinetes de turbobomba puede coincidir con el diagrama de sección transversal de nuestro conjunto de datos basándose en la comprensión visual, no solo con cualquier texto que OCR haya logrado extraer.
Descripción general de las incorporaciones multimodales de Amazon Nova
Amazon Nova Multimodal Embeddings está disponible en Amazon Bedrock y genera incrustaciones para texto, imágenes y documentos de varias páginas. Las modalidades de texto, imagen y documento se proyectan en un único espacio vectorial compartido, lo que significa que puede calcular la similitud de coseno entre una incrustación de texto y una incrustación de imagen directamente.
Puede configurar dimensiones de incrustación de 256, 384, 1024 o 3072. Las dimensiones más altas capturan más detalles semánticos, pero requieren más almacenamiento y cálculo para la búsqueda de similitudes. Para la evaluación en esta publicación, utilizamos 1024 dimensiones como un equilibrio práctico entre la calidad de recuperación y el costo. El modelo también admite un nivel de detalle DOCUMENT_IMAGE, un modo de procesamiento diseñado para páginas que contienen contenido mixto, como gráficos, tablas y diagramas anotados.
Para cargas de trabajo de recuperación, el modelo acepta un parámetro de propósito establecido en GENERIC_INDEX (para documentos que se indexan) o GENERIC_RETRIEVAL (para consultas). Este enfoque de incrustación asimétrica mejora el espacio vectorial para la recuperación sin requerir formato de consulta manual.
Descripción general de la solución
Construimos dos canales de recuperación paralelos en el mismo conjunto de datos para comparar su calidad de generación posterior.
Conjunto de datos: 15 imágenes técnicas independientes (diagramas CAD, informes de inspección, trazados de prueba, especificaciones de materiales, diagramas de flujo de procesos) y cinco archivos PDF de varias páginas (procedimientos de ensamblaje, informes de pruebas de fuego caliente, avisos de cambios de ingeniería, certificaciones de materiales, informes de no conformidad). Estos documentos contienen datos sintéticos de fabricación aeroespacial.
Canalización A, multimodal: incruste cada imagen directamente y cada página PDF como una imagen de documento utilizando Amazon Nova Multimodal Embeddings y luego ingiera en un índice de vectores de Amazon Simple Storage Service (Amazon S3).
Canalización B, línea base de solo texto: envíe cada imagen y página PDF a Amazon Nova 2 Lite para la extracción de texto OCR, incruste el texto extraído usando Amazon Nova Multimodal Embeddings (entrada de solo texto) y luego ingiera en un índice de vectores de Amazon S3 separado. El siguiente mensaje se utiliza para el paso de OCR:
Nota: Solicitud de OCR para extracción de texto "Extraiga TODO el texto visible de esta imagen exactamente como aparece. Incluya todos los números, etiquetas, anotaciones, contenidos de tablas, encabezados y notas al pie. Conserve la estructura (tablas, listas, secciones) tanto como sea posible. Devuelva solo el texto extraído, sin comentarios".
Evaluación: ejecute 26 consultas de fabricación contra el índice multimodal para obtener métricas de recuperación (Recall@K, rango recíproco medio (MRR), NDCG@K). Luego, para ambas canalizaciones, recupere el contexto y genere respuestas utilizando Amazon Nova 2 Lite, calificando cada respuesta según la verdad básica con un juez de modelo de lenguaje grande (LLM).
El siguiente diagrama muestra la arquitectura de canalización de un extremo a otro. Los documentos de origen fluyen a través de dos rutas paralelas: Pipeline A incrusta imágenes directamente con Amazon Nova Multimodal Embeddings, mientras que Pipeline B extrae texto a través de OCR antes de incrustarlo. Ambas canalizaciones almacenan vectores en Amazon S3 Vectors. En el momento de la consulta, el contexto recuperado ingresa a Amazon Nova 2 Lite para generar respuestas, y un juez de LLM califica cada respuesta comparándola con la verdad básica.
La siguiente figura muestra tres documentos de muestra del conjunto de datos. De izquierda a derecha: un diagrama CAD del conjunto de boquillas, un informe de inspección de soldadura y una curva SN de fatiga de Inconel 718. Cada tipo de documento presenta información que es difícil de capturar únicamente mediante la extracción de texto.
Tutorial de la solución
Esta sección recorre los pasos clave de implementación, desde generar incrustaciones hasta crear el índice de vectores y ejecutar consultas. El código completo está disponible en el cuaderno complementario en GitHub.
Requisitos previos
Para seguir esta publicación, necesita los siguientes recursos y acceso configurados en su cuenta de AWS:
Una cuenta de AWS con acceso a Amazon Bedrock en us-east-1 Acceso al modelo habilitado para amazon.nova-2-multimodal-embeddings-v1:0 y us.amazon.nova-2-lite-v1:0 Una instancia de cuaderno de IA de Amazon SageMaker o un entorno Python local Python 3.10+ con permisos de boto3, numpy, pandas, matplotlib, Pillow, pdf2image y tqdm IAM para Amazon Bedrock InvokeModel, Amazon API de vectores de S3 y Amazon S3
El código de muestra de esta publicación se proporciona con fines educativos y no ha sido revisado para uso en producción. Revíselo y pruébelo según los requisitos de seguridad de su organización antes de implementarlo en entornos de producción.
Generando incrustaciones multimodales
Generar una incrustación para una imagen de fabricación requiere una única llamada de InvokeModel a Amazon Bedrock. La solicitud especifica los bytes de la imagen, la dimensión de incrustación deseada y el nivel de detalle. Para imágenes independientes como diagramas CAD, utilizamos STANDARD_IMAGE. Para páginas PDF con texto y gráficos combinados, DOCUMENT_IMAGE produce mejores resultados porque el modelo aplica procesamiento adicional para contenido tabular y de gráficos.
importar base64, json, boto3 bedrock_runtime = boto3.client("bedrock-runtime", region_name="us-east-1") MODEL_ID = "amazon.nova-2-multimodal-embeddings-v1:0" con open("dataset/nozzle_assembly_diagram.png", "rb") como f: b64_data = base64.b64encode(f.read()).decode("utf-8") request_body = { "taskType": "SINGLE_EMBEDING", "singleEmbeddingParams": { "embeddingPurpose": "GENERIC_INDEX", "embeddingDimension": 1024, "image": { "format": "png", "detailLevel": "STANDARD_IMAGE", "source": {"bytes": b64_data}, }, }, } respuesta = bedrock_runtime.invoke_model( modelId=MODEL_ID, body=json.dumps(request_body), aceptar="aplicación/json", contentType="aplicación/json", ) incrustación = json.loads(respuesta["cuerpo"].read())["incrustaciones"][0]["incrustar"] print(f"Dimensión de incrustación: {len(incrustar)}") # 1024
Creación del índice de vectores de Amazon S3
Amazon S3 Vectors proporciona una capa de consultas y almacenamiento de vectores administrados. Creamos un depósito de vectores y un índice configurado para similitud de coseno, luego ingerimos incorporaciones en lotes de 50.
s3vectors = boto3.client("s3vectors", region_name="us-east-1") # Crear depósito de vectores e indexar s3vectors.create_vector_bucket(vectorBucketName="manufacturing-vectors") s3vectors.create_index( vectorBucketName="manufacturing-vectors", indexName="manufacturing-multimodal", dataType="float32", dimension=1024, distanciaMetric="coseno", ) # Ingerir un lote de incrustaciones con vectores de metadatos = [ { "key": "img-nozzle_assembly_diagram", "data": {"float32": embedding}, "metadata": { "source_file": "nozzle_assembly_diagram.png", "type": "image", }, } ] s3vectors.put_vectors( vectorBucketName="fabricación-vectores", indexName="fabricación-multimodal", vectores=vectores, )
Consultando el índice
En el momento de la consulta, generamos una incrustación de texto con el propósito GENERIC_RETRIEVAL, luego llamamos a query_vectors para recuperar los documentos más similares. El propósito de GENERIC_RETRIEVAL le dice al modelo que mejore la incrustación para la coincidencia de documentos de consulta.
query = "¿Cuál es la especificación de torque para los pernos de la brida de la cámara?" request_body = { "taskType": "SINGLE_EMBEDDING", "singleEmbeddingParams": { "embeddingPurpose": "GENERIC_RETRIEVAL", "embeddingDimension": 1024, "text": {"truncationMode": "END", "value": consulta}, }, } respuesta = bedrock_runtime.invoke_model( modelId=MODEL_ID, body=json.dumps(request_body), aceptar="aplicación/json", contentType="aplicación/json", ) query_embedding = json.loads(respuesta["cuerpo"].read())["incrustaciones"][0]["incrustación"] resultados = s3vectors.query_vectors( vectorBucketName="manufacturing-vectors", indexName="manufacturing-multimodal", queryVector={"float32": query_embedding}, topK=5, returnDistance=True, returnMetadata=True, ) para v en resultados["vectors"]: print(f" {v['key']} (distancia: {v['distancia']:.4f})")
Esta consulta recupera la imagen de las especificaciones de torsión y el diagrama del patrón de pernos de la brida como resultados principales, los cuales contienen la respuesta. Un sistema de solo texto necesitaría que la extracción OCR haya capturado correctamente los valores de torque del dibujo de ingeniería, lo que no siempre es confiable para diagramas técnicos complejos.
Metodología de evaluación
Evaluamos el sistema en dos etapas: calidad de recuperación (¿el sistema encuentra los documentos correctos?) y calidad de generación (¿puede un modelo de lenguaje producir una respuesta correcta a partir del contexto recuperado?). El conjunto de datos de evaluación contiene 26 consultas derivadas de los documentos de fabricación aeroespacial, cada una con identificaciones de documentos relevantes y una respuesta de referencia. Las siguientes subsecciones describen cómo funciona cada etapa.
Evaluación de recuperación
Para cada consulta, generamos una incrustación de texto con el propósito GENERIC_RETRIEVAL, consultamos el índice multimodal de vectores S3 y comparamos los documentos devueltos con los ID de documentos relevantes.
query = "¿Cuál es la especificación de torque para los pernos de la brida de la cámara?" query_embed = generate_text_embedding( consulta, dim=1024, propósito="GENERIC_RETRIEVAL" ) resultados = s3vectors.query_vectors( vectorBucketName="fabricación-vectores", indexName="fabricación-multimodal", queryVector={"float32": query_embed}, topK=10, returnDistance=True, returnMetadata=True,) retrieved_ids = [v["key"] para v en resultados["vectors"]]
Calculamos tres métricas en K=3, 5 y 10: Recall@K (fracción de documentos relevantes que se encuentran en los K resultados principales), MRR (que mide qué tan alto aparece el primer resultado relevante) y NDCG@K (ganancia acumulativa descontada normalizada, que otorga más crédito cuando los documentos relevantes tienen una clasificación más alta).
Evaluación de generación con LLM-as-Judge
Para la evaluación de generación, ambas canalizaciones recuperan los cinco resultados principales de cada consulta. La canalización multimodal pasa las imágenes recuperadas directamente a Amazon Nova 2 Lite como contexto multimodal. La canalización de solo texto pasa el texto extraído por OCR como contexto de cadena.
def generate_answer_multimodal(query, retrieved_keys): """Pasar las imágenes recuperadas directamente como contexto multimodal.""" content_blocks =[]para la clave en recuperadas_keys[:5]: img_path = vector_key_to_image_path(key) con open(img_path, "rb") como f: img_bytes = f.read() content_blocks.append({"text": f"Documento recuperado:"}) content_blocks.append({ "image": {"format": "png", "source": {"bytes": img_bytes}} }) content_blocks.append({ "text": ( f"Revise cada imagen de arriba cuidadosamente. " f"Responda la siguiente pregunta de manera concisa y precisa.nn" f"Pregunta: {consulta}nnRespuesta:" ) }) respuesta = bedrock_runtime.converse( modelId="us.amazon.nova-2-lite-v1:0", mensajes=[{"role": "usuario", "contenido": content_blocks}], inferenceConfig={"maxTokens": 500, "temperature": 0.1}, ) devuelve respuesta["salida"]["mensaje"]["contenido"][0]["texto"]
Cada respuesta generada se califica según la referencia de la verdad fundamental utilizando Anthropic Claude Sonnet 4.5 como juez de LLM. El juez recibe la consulta, la respuesta verdadera y la respuesta generada, luego asigna una puntuación del 1 al 5 con una breve explicación.
def Judge_correctness(query, generate_answer, ground_truth): Prompt = ( "Usted es un juez de evaluación. Califique la respuesta generada en comparación " "con la verdad fundamental en una escala de 1 a 5.nn" "1 = Completamente incorrecto o irrelevanten" "2 = Parcialmente relevante pero mayoritariamente incorrecton" "3 = Algo correcto pero falta información claven" "4 = Mayormente correcto con omisiones menoresn" "5 = Totalmente correcto y completenn" f"Pregunta: {consulta}n" f"Verdad fundamental: {ground_truth}n" f"Respuesta generada: {generated_answer}nn" 'Responder SÓLO con un objeto JSON: ' '{"score": <1-5>, "reason": ""}' ) respuesta = bedrock_runtime.converse( modelId="us.anthropic.claude-sonnet-4-5-20250929-v1:0", mensajes=[{"role": "usuario", "contenido": [{"text": solicitud}]}], inferenceConfig={"maxTokens": 200, "temperature": 0.0}, ) devuelve respuesta["salida"]["mensaje"]["contenido"][0]["texto"]
Al evaluar la recuperación y la generación por separado, puede determinar dónde tiene éxito o falla cada canalización. Una canalización puede recuperar el documento correcto pero aun así producir una respuesta incorrecta si el generador no puede extraer la información del formato de contexto proporcionado.
Resultados de la evaluación
Evaluamos el proceso multimodal en 26 consultas derivadas del conjunto de datos de fabricación aeroespacial. Cada consulta tiene uno o más ID de documentos relevantes para la verdad fundamental. Las métricas de recuperación miden qué tan bien el sistema muestra los documentos correctos en diferentes valores de K (el número de resultados devueltos).
Métricas de recuperación multimodal
El oleoducto multimodal logra un 90 por ciento de recuperación en K=5, lo que significa que muestra los documentos más relevantes dentro de los primeros cinco resultados, aumentando al 96 por ciento en K=10. Un MRR de 0,92 indica que el primer resultado relevante suele aparecer en la posición 1. Las dos consultas en las que el recuerdo cae por debajo de 1,0 en K=10 involucran documentos con información relevante dividida en un PDF y una imagen independiente, donde una de las dos fuentes relevantes aparece fuera del top 10.
El siguiente cuadro muestra métricas de recuperación multimodal en K=3, 5 y 10. MRR mide qué tan alto aparece el primer resultado relevante. Recall@K mide la fracción de documentos relevantes que se encuentran en los K resultados principales. NDCG@K mide la calidad de la clasificación y otorga más crédito cuando los documentos relevantes aparecen más arriba en la lista.
Calidad de generación: solo texto versus multimodal
Las métricas de recuperación miden si el sistema encuentra los documentos correctos. Las métricas de generación miden si un modelo de lenguaje posterior puede producir una respuesta correcta a partir del contexto recuperado. Pasamos los cinco resultados principales recuperados de cada canalización a Amazon Nova 2 Lite para generar respuestas, luego calificamos cada respuesta según la verdad fundamental utilizando Anthropic Claude Sonnet 4.5 como juez de LLM en una escala de 1 a 5.
Pipeline Puntuación promedio del juez Normalizado (0–1) Multimodal (MME) 4,88 / 5 0,977 Sólo texto (OCR) 2,00 / 5 0,400
Tabla 2: Calidad de generación calificada por LLM-as-Judge. La canalización multimodal recupera y pasa imágenes directamente al generador, mientras que la canalización de solo texto pasa texto extraído mediante OCR.
El canal multimodal obtuvo una mejor puntuación en el 88 por ciento de las consultas (23 de 26), con un promedio de 4,88 sobre 5. El canal de solo texto tiene un promedio de 2,00, con 17 de 26 consultas con una puntuación de 1 (completamente incorrecta). El contenido visual como gráficos de contornos de análisis térmico, curvas de fatiga, diagramas de flujo de procesos y etiquetas de llamadas CAD mostraron la mayor mejora. Para las pocas consultas en las que ambos canales obtienen una buena puntuación (4 o 5), la respuesta aparece como texto claramente formateado que el OCR captura de forma fiable, como nombres de materiales o valores numéricos en diseños tabulares.
El siguiente cuadro muestra la distribución de las puntuaciones de los jueces de LLM (1 a 5) para ambos canales. El canal multimodal se agrupa en 5, mientras que el canal de solo texto se agrupa en 1 para consultas que requieren comprensión del contenido visual.
Estos resultados muestran que la calidad de la recuperación afecta directamente la calidad de las respuestas. Cuando el sistema recupera los documentos correctos pero pasa solo texto OCR al generador, pierde la información visual de la que depende la respuesta. La canalización multimodal evita esta conversión con pérdidas al pasar las imágenes originales a un generador multimodal.
Complejidad y costo de implementación
Más allá de la precisión, el oleoducto multimodal es más sencillo de construir y más barato de operar. La canalización de solo texto requiere dos llamadas de modelo por documento (una para extracción de texto OCR y otra para incrustación de texto) además de ingeniería rápida para manejar diversos diseños de documentos. La canalización multimodal requiere una única llamada de incorporación por documento sin ningún paso de extracción intermedio, lo que reduce tanto la complejidad de la implementación como el costo de ingesta por documento a aproximadamente la mitad.
Limpieza
Para evitar costos continuos, elimine los índices y el depósito de S3 Vectors después de completar la evaluación. El cuaderno complementario en GitHub incluye estos comandos de limpieza (comentados por seguridad). El siguiente fragmento muestra cómo eliminar los índices y el depósito de vectores:
# Eliminar índices s3vectors.delete_index(vectorBucketName=S3_VECTOR_BUCKET, indexName=MME_INDEX) s3vectors.delete_index(vectorBucketName=S3_VECTOR_BUCKET, indexName=TEXT_ONLY_INDEX) # Eliminar depósito de vectores s3vectors.delete_vector_bucket(vectorBucketName=S3_VECTOR_BUCKET)
La inferencia de incorporación de Amazon Bedrock tiene un precio por solicitud sin necesidad de administrar una infraestructura persistente.
Conclusión
Las incorporaciones multimodales cierran una brecha de recuperación que los sistemas de solo texto no pueden abordar para colecciones de documentos con contenido visual significativo. En el conjunto de datos de fabricación aeroespacial de esta publicación, el oleoducto multimodal logró una recuperación del 90 por ciento en K=5 (96 por ciento en K=10) y una calidad de generación casi perfecta (4,88/5), mientras que el oleoducto de solo texto obtuvo una puntuación de 2,00/5 porque el OCR no pudo capturar de manera confiable información de diagramas de ingeniería, diagramas térmicos y diagramas de flujo de procesos.
Con Amazon Nova Multimodal Embeddings en Amazon Bedrock, puede crear esta capacidad sin administrar la infraestructura del modelo de integración. Amazon S3 Vectors proporciona una capa de consultas y almacenamiento vectorial que no requiere administración de clústeres ni planificación de capacidad.
Para probarlo usted mismo, clone el código complementario de muestra de GitHub y ejecútelo en Amazon SageMaker AI o en su entorno local. Puede adaptar la canalización a sus propios documentos de fabricación reemplazando el conjunto de datos de muestra y las consultas. Para obtener más patrones y ejemplos, consulte los siguientes recursos: