Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Traduce el lenguaje natural a consultas (DSL) para consultas de Elasticsearch OpenSearch y consultas de Elasticsearch
Tabby Ward, Nicholas Switzer y Breanne Warner, Amazon Web Services
Resumen
Este patrón demuestra cómo utilizar modelos de lenguaje grandes (LLMs) para convertir las consultas en lenguaje natural en un lenguaje específico del dominio de consulta (consulta DSL), lo que facilita a los usuarios la interacción con los servicios de búsqueda, como OpenSearch Elasticsearch, sin un conocimiento exhaustivo del lenguaje de consulta. Este recurso es especialmente valioso para los desarrolladores y científicos de datos que quieren mejorar las aplicaciones basadas en búsquedas con funcionalidades de consulta en lenguaje natural y, en última instancia, mejorar la experiencia del usuario y la funcionalidad de búsqueda.
El patrón ilustra las técnicas de ingeniería de peticiones, el perfeccionamiento iterativo y la incorporación de conocimientos especializados, todas fundamentales en la generación de datos sintéticos. Si bien este enfoque se centra principalmente en la conversión de consultas, demuestra de manera implícita el potencial del aumento de datos y la producción escalable de datos sintéticos. Esta base podría ampliarse a tareas de generación de datos sintéticos más exhaustivas, a fin de resaltar el poder de unir las entradas de lenguaje natural no LLMs estructuradas con las salidas estructuradas y específicas de la aplicación.
Esta solución no implica herramientas de migración ni implementación en el sentido tradicional. En cambio, se centra en demostrar una prueba de concepto (PoC) para convertir consultas en lenguaje natural en consultas de DSL mediante el uso de. LLMs
El patrón utiliza un cuaderno de Jupyter como step-by-step guía para configurar el entorno e implementar la conversión. text-to-query
Utiliza Amazon Bedrock para acceder LLMs, que es crucial para interpretar el lenguaje natural y generar las consultas adecuadas.
La solución está diseñada para funcionar con Amazon OpenSearch Service. Puede seguir un proceso similar para Elasticsearch y las consultas generadas podrían adaptarse a los motores de búsqueda similares.
Query DSL
Para la conversión de DSL, este patrón utiliza técnicas como la generación de mensajes en pocos pasos, las solicitudes del sistema, la salida estructurada, el encadenamiento de solicitudes, el suministro de contexto y las solicitudes específicas para tareas específicas. text-to-query Para definiciones y ejemplos de estas técnicas, consulte la sección Información adicional.
Requisitos previos y limitaciones
Requisitos previos
Para utilizar de manera eficaz el cuaderno de Jupyter para convertir consultas en lenguaje natural en DSL de consultas, necesita lo siguiente:
Conocimientos de los cuadernos de Jupyter. Comprensión básica de cómo navegar y ejecutar código en un entorno de cuadernos de Jupyter.
Entorno de Python. Un entorno de Python que funcione, de preferencia Python 3.x, con las bibliotecas necesarias instaladas.
OpenSearch Elasticsearch o conocimiento. Conocimientos básicos de Elasticsearch o OpenSearch, incluida su arquitectura y cómo realizar consultas.
Cuenta de AWS. Un activo Cuenta de AWS para acceder a Amazon Bedrock y otros servicios relacionados.
Bibliotecas y dependencias. Instalación de bibliotecas específicas mencionadas en el cuaderno, por ejemplo,
boto3para la AWS interacción, y cualquier otra dependencia necesaria para la integración con LLM.Acceso a modelos en Amazon Bedrock. Este patrón usa tres Claude LLMs de Anthropic. Abra la consola de Amazon Bedrock
y elija Acceso a modelos. En la pantalla siguiente, elija Activar modelos específicos y seleccione estos tres modelos: Claude 3 Sonnet
Claude 3.5 Sonnet
Claude 3 Haiku
Políticas de IAM y rol de IAM adecuados. Para ejecutar el cuaderno en una función AWS Identity and Access Management (de IAM) Cuenta de AWS, es necesaria la
SagemakerFullAccesspolítica, así como la política que se proporciona en la sección de información adicional, a la que puede dar un nombre.APGtext2querydslpolicyEsta política incluye la suscripción a los tres modelos de Claude que se indican.
Contar con estos requisitos previos garantiza una experiencia fluida a la hora de trabajar con el portátil e implementar la text-to-query funcionalidad.
Limitaciones
Estado de la prueba de concepto. Este proyecto pretende principalmente ser una prueba de concepto (PoC). Demuestra el potencial de su uso LLMs para convertir consultas en lenguaje natural en consultas DSL, pero es posible que no esté completamente optimizado o preparado para la producción.
Limitaciones del modelo:
Restricciones de la ventana de contexto. Cuando utilice las LLMs que están disponibles en Amazon Bedrock, tenga en cuenta las limitaciones de la ventana de contexto:
Modelos de Claude (a partir de septiembre de 2024):
Claude 3 Opus: 200.000 tokens
Claude 3 Sonnet: 200.000 tokens
Claude 3 Haiku: 200.000 tokens
Es posible que otros modelos de Amazon Bedrock tengan tamaños de ventana de contexto distintos. Consulte siempre la documentación más reciente para obtener la información más actualizada.
Disponibilidad de modelos. La disponibilidad de modelos específicos en Amazon Bedrock puede variar. Asegúrese de tener acceso a los modelos necesarios antes de implementar esta solución.
Limitaciones adicionales
Complejidad de la consulta. La eficacia de la conversión del lenguaje natural a DSL de consulta puede variar según la complejidad de la consulta introducida.
Compatibilidad de versiones. Es posible que el DSL de consulta generado necesite ajustes en función de la versión específica de Elasticsearch o OpenSearch de la que utilice.
Rendimiento. Este patrón proporciona una implementación de PoC, por lo que la velocidad y precisión de la generación de consultas podrían no ser óptimas la producción a gran escala.
Costo. Su uso LLMs en Amazon Bedrock conlleva costes. Tenga en cuenta la estructura de precios del modelo que elija. Para obtener más información, consulte Precios de Amazon Bedrock.
Mantenimiento. Es posible que sea necesario actualizar de manera periódica las peticiones y la selección de modelos para mantenerse al día con los avances de la tecnología de los LLM y los cambios en la sintaxis del DSL de consultas.
Versiones de producto
Esta solución se probó en Amazon OpenSearch Service. Si quiere utilizar Elasticsearch, es posible que tenga que hacer algunos cambios para replicar la funcionalidad exacta de este patrón.
OpenSearch compatibilidad de versiones. OpenSearch mantiene la compatibilidad con versiones anteriores en las principales versiones. Por ejemplo:
OpenSearch Los clientes 1.x son generalmente compatibles con los clústeres OpenSearch 1.x.
OpenSearch Los clientes 2.x son generalmente compatibles con OpenSearch los clústeres 2.x.
Sin embargo, siempre que sea posible, es mejor utilizar la misma versión secundaria para el cliente y para el clúster.
OpenSearch Compatibilidad con las API. OpenSearch mantiene la compatibilidad de la API con Elasticsearch OSS 7.10.2 para la mayoría de las operaciones. Sin embargo, existen algunas diferencias, sobre todo en las versiones más recientes.
OpenSearch consideraciones sobre la actualización:
No se admiten las versiones de nivel inferior directas. Utilice instantáneas para la reversión si es necesario.
Cuando actualice, consulte la matriz de compatibilidad y notas de la versión para ver si hay cambios importantes.
Consideraciones sobre Elasticsearch
Versión de Elasticsearch. La versión principal de Elasticsearch que utilice es crucial, ya que la sintaxis y las características de las consultas pueden cambiar entre las versiones principales. Actualmente, la última versión estable es Elasticsearch 8.x. Asegúrese de que las consultas sean compatibles con la versión específica de Elasticsearch.
Versión de la biblioteca de DSL de consultas de Elasticsearch. Si utiliza la biblioteca de Python de DSL de consultas de Elasticsearch, asegúrese de que la versión coincida con la versión de Elasticsearch. Por ejemplo:
Para Elasticsearch 8.x, utilice una versión de
elasticsearch-dslsuperior o igual a la versión 8.0.0, pero inferior a la versión 9.0.0.Para Elasticsearch 7.x, utilice una versión de
elasticsearch-dslsuperior o igual a la versión 7.0.0, pero inferior a la versión 8.0.0.
Versión de la biblioteca del cliente. Ya sea que utilice el cliente oficial de Elasticsearch o un cliente para un lenguaje específico, asegúrese de que sea compatible con la versión de Elasticsearch.
Versión de Query DSL. Query DSL evoluciona con las versiones de Elasticsearch. Es posible que algunos tipos o parámetros de consulta estén en desuso o se hayan introducido en versiones diferentes.
Asignación de versión. La manera en que define las asignaciones de los índices y cambia de una versión a otra. Consulte siempre la documentación de asignación de la versión específica de Elasticsearch.
Versiones de herramientas de análisis. Si utiliza analizadores, tokenizadores u otras herramientas de análisis de texto, su comportamiento o disponibilidad podrían cambiar de una versión a otra.
Arquitectura
Arquitectura de destino
El siguiente diagrama ilustra la arquitectura de este patrón.

donde:
Entrada de usuario y petición del sistema con algunos ejemplos de solicitudes de pocos pasos. El proceso comienza con un usuario que proporciona una consulta en lenguaje natural o una solicitud de generación de esquemas.
Amazon Bedrock La entrada se envía a Amazon Bedrock, que sirve como interfaz para acceder al LLM de Claude.
LLM de Claude 3 Sonnet. Amazon Bedrock utiliza el soneto Claude 3 de la familia Claude 3 LLMs para procesar la entrada. Interpreta y genera el DSL de Elasticsearch o consulta adecuado. OpenSearch Para las solicitudes de esquemas, genera Elasticsearch o mapeos sintéticos. OpenSearch
Generación de DSL de consultas. En el caso de las consultas en lenguaje natural, la aplicación toma el resultado del LLM y lo formatea en un DSL válido para consultas de Elasticsearch o Service. OpenSearch
Generación de datos sintéticos. La aplicación también utiliza esquemas para crear Elasticsearch sintético o OpenSearch datos para cargarlos en una colección Serverless con fines de prueba. OpenSearch
OpenSearch o Elasticsearch. La consulta DSL generada se consulta con una colección OpenSearch Serverless en todos los índices. La salida de JSON contiene los datos relevantes y el número de visitas de los datos que residen en la colección Serverless. OpenSearch
Automatización y escala
El código que se proporciona con este patrón está diseñado estrictamente para fines de PoC. En la lista siguiente se proporcionan algunas sugerencias para automatizar y escalar aún más la solución y pasar el código a producción. Estas mejoras quedan fuera del alcance de este patrón.
Creación de contenedores:
Utilice Docker para la aplicación a fin de garantizar la coherencia entre los diversos entornos.
Utilice plataformas de orquestación de contenedores como Amazon Elastic Container Service (Amazon ECS) o Kubernetes para las implementaciones escalables.
Arquitectura sin servidor:
Convierta la funcionalidad principal en AWS Lambda funciones.
Utilice Amazon API Gateway para crear RESTful puntos de enlace para la entrada de consultas en lenguaje natural.
Proceso asíncrono:
Implemente Amazon Simple Queue Service (Amazon SQS) para poner en cola las consultas entrantes.
Úselo AWS Step Functions para organizar el flujo de trabajo de procesamiento de consultas y generación del DSL de consultas.
Almacenamiento en caché:
Implemente un mecanismo para almacenar las peticiones en la memoria caché.
Supervisión y registro:
Usa Amazon CloudWatch para monitorizar y emitir alertas.
Implemente el registro centralizado con Amazon CloudWatch Logs o Amazon OpenSearch Service para el análisis de registros.
Mejoras de seguridad:
Implemente los roles de IAM para el control de acceso específico.
Úselo AWS Secrets Manager para almacenar y administrar de forma segura las claves y credenciales de la API.
Implementación multirregional
Considere la posibilidad de implementar la solución en varios Regiones de AWS para mejorar la latencia y la recuperación ante desastres.
Utilice Amazon Route 53 para el enrutamiento de solicitudes inteligente.
Al implementar estas sugerencias, puede transformar esta PoC en una solución sólida, escalable y lista para la producción. Recomendamos que pruebe exhaustivamente cada componente y todo el sistema antes de la implementación completa.
Tools (Herramientas)
Herramientas
Los cuadernos Amazon SageMaker AI son cuadernos
Jupyter totalmente gestionados para el desarrollo del aprendizaje automático. Este patrón utiliza las libretas como un entorno interactivo para la exploración de datos, el desarrollo de modelos y la experimentación en Amazon SageMaker AI. Los cuadernos proporcionan una integración perfecta con otras funciones de SageMaker IA y. Servicios de AWS Python
es un lenguaje de programación informático de uso general. Este patrón utiliza Python como lenguaje principal para implementar la solución. Amazon Bedrock
es un servicio totalmente gestionado que pone a su disposición modelos básicos de alto rendimiento (FMs) de las principales empresas emergentes de IA y Amazon a través de una API unificada. Amazon Bedrock proporciona acceso al procesamiento LLMs del lenguaje natural. Este patrón utiliza modelos Anthropic Claude 3. AWS SDK para Python (Boto3)
es un kit de desarrollo de software que le ayuda a integrar su aplicación, biblioteca o script de Python con Servicios de AWS, incluido Amazon Bedrock. Amazon OpenSearch Service es un servicio gestionado que le ayuda a implementar, operar y escalar clústeres de OpenSearch servicios en la nube de AWS. Este patrón utiliza OpenSearch Service como sistema de destino para generar el DSL de consultas.
Repositorio de código
El código de este patrón está disponible en el repositorio GitHub Prompt Engineering Text-to-QueryDSL Using Claude 3 Models
Prácticas recomendadas
Al trabajar con esta solución, tenga en cuenta lo siguiente:
La necesidad de contar con AWS las credenciales y los permisos adecuados para acceder a Amazon Bedrock
Los posibles costos asociados con el uso Servicios de AWS y LLMs
La importancia de comprender el DSL de consultas para validar y, posiblemente, modificar las consultas generadas
Epics
| Tarea | Descripción | Habilidades requeridas |
|---|---|---|
Configure el entorno de desarrollo. | notaPara obtener instrucciones detalladas y el código para este y los demás pasos de este patrón, consulte el tutorial completo en el GitHub repositorio
| Python, pip, AWS SDK |
Configura el AWS acceso. | Configure el cliente de Amazon Bedrock y la sesión de SageMaker IA. Recupera el nombre del recurso de Amazon (ARN) del rol de ejecución de SageMaker IA para usarlo más adelante en la creación de la colección OpenSearch Serverless. | IAM, AWS CLI, Amazon Bedrock, Amazon SageMaker |
Cargue esquemas de aplicaciones de salud. | Lea y analice los esquemas JSON de las publicaciones de salud y perfiles de usuario a partir de archivos predefinidos. Convierta los esquemas en cadenas para utilizarlos más adelante en las peticiones. | DevOps ingeniero, AWS general, Python, JSON |
| Tarea | Descripción | Habilidades requeridas |
|---|---|---|
Cree un generador de datos basado en LLM. | Implemente la función generate_data() para llamar a la API de Converse de Amazon Bedrock con los modelos Claude 3. Modelo de configuración IDs para Sonnet, Sonnet 3.5 y Haiku:
| Python, API de Amazon Bedrock, peticiones de LLM |
Cree publicaciones de salud sintéticas. | Utilice la función generate_data() con una petición específica para crear entradas sintéticas de publicaciones de salud basadas en el esquema proporcionado. Una llamada a la función tiene un aspecto similar al siguiente:
| Python, JSON |
Cree perfiles de usuario sintéticos. | Utilice la función generate_data() con una petición específica para crear entradas sintéticas de perfiles de usuario basadas en el esquema proporcionado. Esto es similar a la generación de publicaciones de salud, pero utiliza una petición distinta. | Python, JSON |
| Tarea | Descripción | Habilidades requeridas |
|---|---|---|
Configure una colección OpenSearch sin servidor. | Utilice Boto3 para crear una colección OpenSearch sin servidor con las políticas de cifrado, red y acceso adecuadas. La creación de la colección tiene un aspecto como el siguiente:
Para obtener más información sobre OpenSearch Serverless, consulte la documentación.AWS | OpenSearch Sin servidor, IAM |
Defina los índices OpenSearch . | Cree índices para publicaciones de salud y perfiles de usuario mediante el OpenSearch cliente, en función de las asignaciones de esquemas predefinidas. La creación del índice tiene un aspecto como este:
| OpenSearch, JSON |
Cargue datos en OpenSearch. | Ejecuta la función ingest_data () para insertar de forma masiva las publicaciones sintéticas sobre salud y los perfiles de usuario en sus índices respectivos. OpenSearch La función utiliza el asistente masivo de
| Python, OpenSearch API, operaciones de datos masivos |
| Tarea | Descripción | Habilidades requeridas |
|---|---|---|
Diseñe ejemplos de peticiones con pocos pasos. | Genere consultas de ejemplo y las preguntas correspondientes en lenguaje natural con los modelos de Claude 3 como ejemplos con pocos pasos para la generación de consultas. La petición del sistema incluye los ejemplos siguientes:
| Petición de LLM, DSL de consultas |
Crea un conversor text-to-query DSL. | Implemente la petición del sistema, que incluye esquemas, datos y ejemplos con pocos pasos, para la generación de consultas. Utilice la petición del sistema para convertir las consultas en lenguaje natural en DSL de consultas. Una llamada a la función tiene un aspecto similar al siguiente:
| Python, API de Amazon Bedrock, peticiones de LLM |
Pruebe la consulta DSL activada. OpenSearch | Ejecute la función query_oss () para ejecutar la consulta DSL generada en la colección OpenSearch Serverless y obtener resultados. La función utiliza el método de búsqueda del cliente OpenSearch :
| Python, OpenSearch API, consulta DSL |
| Tarea | Descripción | Habilidades requeridas |
|---|---|---|
Cree un conjunto de consultas de prueba. | Utilice Claude 3 para generar un conjunto diverso de preguntas de prueba basadas en los datos y esquemas sintéticos:
| Peticiones de LLM |
Evalúe la precisión de la conversión de DSL de consultas. | Pruebe la consulta DSL generada mediante la ejecución de consultas OpenSearch y el análisis de los resultados devueltos para comprobar su relevancia y precisión. Esto implica ejecutar la consulta e inspeccionar los resultados:
| Python, análisis de datos, DSL de consultas |
Modelos Claude 3 de referencia. | Compare el rendimiento de los distintos modelos de Claude 3 (Haiku, Sonnet, Sonnet 3.5) para la generación de consultas en términos de precisión y latencia. Para comparar, cambie | Python, análisis comparativo de rendimiento |
| Tarea | Descripción | Habilidades requeridas |
|---|---|---|
Desarrolle un proceso de limpieza. | Elimine todos los índices de la colección OpenSearch Serverless después de usarlos. | Python, SDK de AWS, OpenSearch API |
Recursos relacionados
Información adicional
Política de IAM
Esta es la política APGtext2querydslpolicy para el rol de IAM que se utiliza en este patrón:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "bedrock:InvokeModel", "bedrock:InvokeModelWithResponseStream" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:PutObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::sagemaker-*", "arn:aws:s3:::sagemaker-*/*" ] }, { "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": "arn:aws:logs:*:*:log-group:/aws/sagemaker/*" }, { "Effect": "Allow", "Action": [ "ec2:CreateNetworkInterface", "ec2:DescribeNetworkInterfaces", "ec2:DeleteNetworkInterface" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "aoss:*" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "iam:PassRole", "sagemaker:*" ], "Resource": [ "arn:aws:iam::*:role/*", "*" ], "Condition": { "StringEquals": { "iam:PassedToService": "sagemaker.amazonaws.com" } } }, { "Effect": "Allow", "Action": [ "codecommit:GetBranch", "codecommit:GetCommit", "codecommit:GetRepository", "codecommit:ListBranches", "codecommit:ListRepositories" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "aws-marketplace:Subscribe" ], "Resource": "*", "Condition": { "ForAnyValue:StringEquals": { "aws-marketplace:ProductId": [ "prod-6dw3qvchef7zy", "prod-m5ilt4siql27k", "prod-ozonys2hmmpeu" ] } } }, { "Effect": "Allow", "Action": [ "aws-marketplace:Unsubscribe", "aws-marketplace:ViewSubscriptions" ], "Resource": "*" }, { "Effect": "Allow", "Action": "iam:*", "Resource": "*" } ] }
Técnicas de peticiones con modelos Anthropic Claude 3
Este patrón muestra las siguientes técnicas de solicitud para la conversión text-to-query DSL utilizando los modelos Claude 3.
Petición con pocos pasos: las peticiones con pocos pasos es una técnica eficiente para mejorar el rendimiento de los modelos de Claude 3 en Amazon Bedrock. Este enfoque implica proporcionar al modelo un pequeño número de ejemplos que demuestren el input/output comportamiento deseado antes de pedirle que realice una tarea similar. Al utilizar los modelos de Claude 3 en Amazon Bedrock, las peticiones con pocos pasos pueden resultar muy eficaces para las tareas que requieren un formato específico, patrones de razonamiento o conocimientos del dominio. Para implementar esta técnica, en general, se estructura la petición con dos componentes principales: la sección de ejemplos y la consulta propiamente dicha. La sección de ejemplos contiene uno o más input/output pares que ilustran la tarea y la sección de consultas presenta la nueva entrada para la que desea obtener una respuesta. Este método ayuda a Claude 3 a entender el contexto y el formato de salida esperado y, a menudo, da como resultado una respuesta más precisa y coherente.
Ejemplo:
"query": { "bool": { "must": [ {"match": {"post_type": "recipe"}}, {"range": {"likes_count": {"gte": 100}}}, {"exists": {"field": "media_urls"}} ] } } Question: Find all recipe posts that have at least 100 likes and include media URLs.
Peticiones del sistema: además de las peticiones con pocos pasos, los modelos de Claude 3 de Amazon Bedrock también admiten el uso de peticiones del sistema. Las peticiones del sistema son una manera de proporcionar un contexto general, instrucciones o directrices al modelo antes de presentarlo con entradas específicas del usuario. Son muy útiles para definir el tono, establecer el papel del modelo o establecer las limitaciones de toda la conversación. Para utilizar una petición del sistema con Claude 3 en Amazon Bedrock, debe incluirlo en el parámetro
systemde su solicitud de API. Esto es independiente de los mensajes de usuario y se aplica a toda la interacción. Las peticiones detalladas del sistema se utilizan para establecer el contexto y proporcionar pautas para el modelo.Ejemplo:
You are an expert query dsl generator. Your task is to take an input question and generate a query dsl to answer the question. Use the schemas and data below to generate the query. Schemas: [schema details] Data: [sample data] Guidelines: - Ensure the generated query adheres to DSL query syntax - Do not create new mappings or other items that aren't included in the provided schemas.Salida estructurada: puede indicar al modelo que proporcione la salida en formatos específicos, como JSON o en etiquetas XML.
Ejemplo:
Put the query in json tagsEncadenamiento de peticiones: el cuaderno utiliza el resultado de una llamada al LLM como entrada para otra, por ejemplo, utiliza los datos sintéticos generados para crear preguntas de ejemplo.
Aprovisionamiento de contexto: en las peticiones se proporciona el contexto correspondiente, como los esquemas y los datos de muestra.
Ejemplo:
Schemas: [schema details] Data: [sample data]Peticiones específicas para cada tarea: se diseñan peticiones distintas para tareas específicas, como generar datos sintéticos, crear preguntas de ejemplo y convertir consultas en lenguaje natural en DSL de consultas.
Ejemplo de generación de preguntas de prueba:
Your task is to generate 5 example questions users can ask the health app based on provided schemas and data. Only include the questions generated in the response.