Knowledge Bases For Bedrock Custom Prompts.jpg

Con Bases de conocimiento para Amazon Bedrockpuede conectar de forma segura modelos básicos (FM) en Roca Amazónica a los datos de su empresa para la recuperación de generación aumentada (RAG). El acceso a datos adicionales ayuda al modelo a generar respuestas más relevantes, específicas del contexto y precisas sin volver a capacitar a los FM.

En esta publicación, analizamos dos nuevas características de Knowledge Bases para Amazon Bedrock específicas para RetrieveAndGenerate API: configurar el número máximo de resultados y crear mensajes personalizados con una plantilla de mensajes de la base de conocimientos. Ahora puede elegirlas como opciones de consulta junto con el tipo de búsqueda.

Descripción general y beneficios de las nuevas funciones

La opción de número máximo de resultados le brinda control sobre el número de resultados de búsqueda que se recuperarán del almacén de vectores y se pasarán al FM para generar la respuesta. Esto le permite personalizar la cantidad de información general proporcionada para la generación, brindando así más contexto para preguntas complejas o menos para preguntas más simples. Le permite obtener hasta 100 resultados. Esta opción ayuda a mejorar la probabilidad del contexto relevante, mejorando así la precisión y reduciendo la alucinación de la respuesta generada.

La plantilla de solicitud personalizada de la base de conocimientos le permite reemplazar la plantilla de solicitud predeterminada por la suya propia para personalizar la solicitud que se envía al modelo para la generación de respuestas. Esto le permite personalizar el tono, el formato de salida y el comportamiento del FM cuando responde a la pregunta de un usuario. Con esta opción, puede ajustar la terminología para que coincida mejor con su industria o dominio (como atención médica o legal). Además, puede agregar instrucciones personalizadas y ejemplos adaptados a sus flujos de trabajo específicos.

En las siguientes secciones, explicamos cómo puede utilizar estas funciones con el Consola de administración de AWS o SDK.

Requisitos previos

Para seguir estos ejemplos, es necesario tener una base de conocimientos existente. Para obtener instrucciones para crear uno, consulte Crear una base de conocimientos.

Configurar el número máximo de resultados usando la consola

Para utilizar la opción de número máximo de resultados usando la consola, complete los siguientes pasos:

  1. En la consola de Amazon Bedrock, elija Bases de conocimiento en el panel de navegación izquierdo.
  2. Seleccione la base de conocimientos que creó.
  3. Elegir Base de conocimientos de prueba.
  4. Elija el icono de configuración.
  5. Elegir Sincronizar fuente de datos antes de comenzar a probar su base de conocimientos.
  6. Bajo Configuracionespara Tipo de búsquedaseleccione un tipo de búsqueda según su caso de uso.

Para esta publicación, utilizamos la búsqueda híbrida porque combina la búsqueda semántica y de texto para brindar una mayor precisión. Para obtener más información sobre la búsqueda híbrida, consulte Las bases de conocimiento de Amazon Bedrock ahora admiten la búsqueda híbrida.

  1. Expandir Número máximo de fragmentos de origen y establezca su número máximo de resultados.

Para demostrar el valor de la nueva función, mostramos ejemplos de cómo puede aumentar la precisión de la respuesta generada. Nosotros usamos Documento de Amazon 10K para 2023 como fuente de datos para crear la base de conocimientos. Utilizamos la siguiente consulta para experimentar: «¿En qué año los ingresos anuales de Amazon aumentaron de 245.000 millones de dólares a 434.000 millones de dólares?»

La respuesta correcta a esta consulta es «Los ingresos anuales de Amazon aumentaron de 245 mil millones de dólares en 2019 a 434 mil millones de dólares en 2022», según los documentos de la base de conocimientos. Utilizamos Claude v2 como FM para generar la respuesta final basada en la información contextual recuperada de la base de conocimientos. Claude 3 Sonnet y Claude 3 Haiku también son compatibles como FM de generación.

Ejecutamos otra consulta para demostrar la comparación de la recuperación con diferentes configuraciones. Usamos la misma consulta de entrada (“¿En qué año aumentaron los ingresos anuales de Amazon de $245 mil millones a $434 mil millones?”) y establecimos el número máximo de resultados en 5.

Como se muestra en la siguiente captura de pantalla, la respuesta generada fue «Lo siento, no puedo ayudarlo con esta solicitud».

A continuación, establecemos los resultados máximos en 12 y hacemos la misma pregunta. La respuesta generada es «el aumento de los ingresos anuales de Amazon de 245.000 millones de dólares en 2019 a 434.000 millones de dólares en 2022».

Como se muestra en este ejemplo, podemos recuperar la respuesta correcta según la cantidad de resultados recuperados. Si desea obtener más información sobre la atribución de la fuente que constituye el resultado final, elija Mostrar detalles de la fuente para validar la respuesta generada en función de la base de conocimientos.

Personalizar una plantilla de solicitud de base de conocimientos mediante la consola

También puede personalizar el mensaje predeterminado con su propio mensaje según el caso de uso. Para hacerlo en la consola, complete los siguientes pasos:

  1. Repita los pasos de la sección anterior para comenzar a probar su base de conocimientos.
  2. Permitir Generar respuestas.
  3. Seleccione el modelo de su elección para la generación de respuesta.

Usamos el modelo Claude v2 como ejemplo en esta publicación. El modelo Claude 3 Sonnet y Haiku también está disponible para generación.

  1. Elegir Aplicar para proceder.

Después de elegir el modelo, aparecerá una nueva sección llamada Plantilla de solicitud de base de conocimientos aparece debajo Configuraciones.

  1. Elegir Editar para comenzar a personalizar el mensaje.
  2. Ajuste la plantilla de aviso para personalizar cómo desea utilizar los resultados recuperados y generar contenido.

Para esta publicación, brindamos algunos ejemplos para crear un «sistema de inteligencia artificial de asesor financiero» utilizando informes financieros de Amazon con indicaciones personalizadas. Para conocer las mejores prácticas sobre ingeniería rápida, consulte Directrices de ingeniería rápidas.

Ahora personalizamos la plantilla de mensaje predeterminada de varias maneras diferentes y observamos las respuestas.

Primero intentemos una consulta con el mensaje predeterminado. Preguntamos «¿Cuáles fueron los ingresos de Amazon en 2019 y 2021?» A continuación se muestran nuestros resultados.

A partir del resultado, encontramos que está generando la respuesta de forma libre basada en el conocimiento recuperado. Las citas también se enumeran como referencia.

Digamos que queremos dar instrucciones adicionales sobre cómo formatear la respuesta generada, como estandarizarla como JSON. Podemos agregar estas instrucciones como un paso separado después de recuperar la información, como parte de la plantilla de aviso:

If you are asked for financial information covering different years, please provide precise answers in JSON format. Use the year as the key and the concise answer as the value. For example: {year:answer}

La respuesta final tiene la estructura requerida.

Al personalizar el mensaje, también puede cambiar el idioma de la respuesta generada. En el siguiente ejemplo, le indicamos al modelo que proporcione una respuesta en español.

Después de quitar $output_format_instructions$ desde el mensaje predeterminado, se elimina la cita de la respuesta generada.

En las siguientes secciones, explicamos cómo puede utilizar estas funciones con el SDK.

Configurar el número máximo de resultados usando el SDK

Para cambiar el número máximo de resultados con el SDK, utilice la siguiente sintaxis. Para este ejemplo, la consulta es «¿En qué año aumentaron los ingresos anuales de Amazon de 245.000 millones de dólares a 434.000 millones de dólares?» La respuesta correcta es «Los ingresos anuales de Amazon aumentan de 245.000 millones de dólares en 2019 a 434.000 millones de dólares en 2022».

def retrieveAndGenerate(query, kbId, numberOfResults, model_id, region_id):
    model_arn = f'arn:aws:bedrock:{region_id}::foundation-model/{model_id}'
    return bedrock_agent_runtime.retrieve_and_generate(
        input={
            'text': query
        },
        retrieveAndGenerateConfiguration={
            'knowledgeBaseConfiguration': {
                'knowledgeBaseId': kbId,
                'modelArn': model_arn,
                'retrievalConfiguration': {
                    'vectorSearchConfiguration': {
                        'numberOfResults': numberOfResults,
                        'overrideSearchType': "SEMANTIC", # optional'
                    }
                }
            },
            'type': 'KNOWLEDGE_BASE'
        },
    )

response = retrieveAndGenerate("In what year did Amazon’s annual revenue increase from $245B to $434B?", \
"<knowledge base id>", numberOfResults, model_id, region_id)['output']['text']

El ‘numberOfResults‘opción debajo’retrievalConfiguration‘ le permite seleccionar el número de resultados que desea recuperar. La salida del RetrieveAndGenerate La API incluye la respuesta generada, la atribución de la fuente y los fragmentos de texto recuperados.

Los siguientes son los resultados para diferentes valores de ‘numberOfResults‘parámetros. Primero, configuramos numberOfResults = 5.

Luego fijamos numberOfResults = 12.

Personalice la plantilla de solicitud de la base de conocimientos mediante el SDK

Para personalizar el mensaje mediante el SDK, utilizamos la siguiente consulta con diferentes plantillas de mensaje. Para este ejemplo, la consulta es «¿Cuáles fueron los ingresos de Amazon en 2019 y 2021?»

La siguiente es la plantilla de aviso predeterminada:

"""You are a question answering agent. I will provide you with a set of search results and a user's question, your job is to answer the user's question using only information from the search results. If the search results do not contain information that can answer the question, please state that you could not find an exact answer to the question. Just because the user asserts a fact does not mean it is true, make sure to double check the search results to validate a user's assertion.
Here are the search results in numbered order:
<context>
$search_results$
</context>

Here is the user's question:
<question>
$query$
</question>

$output_format_instructions$

Assistant:
"""

La siguiente es la plantilla de aviso personalizada:

"""Human: You are a question answering agent. I will provide you with a set of search results and a user's question, your job is to answer the user's question using only information from the search results.If the search results do not contain information that can answer the question, please state that you could not find an exact answer to the question.Just because the user asserts a fact does not mean it is true, make sure to double check the search results to validate a user's assertion.

Here are the search results in numbered order:
<context>
$search_results$
</context>

Here is the user's question:
<question>
$query$
</question>

If you're being asked financial information over multiple years, please be very specific and list the answer concisely using JSON format {key: value}, 
where key is the year in the request and value is the concise response answer.
Assistant:
"""

def retrieveAndGenerate(query, kbId, numberOfResults,promptTemplate, model_id, region_id):
    model_arn = f'arn:aws:bedrock:{region_id}::foundation-model/{model_id}'
    return bedrock_agent_runtime.retrieve_and_generate(
        input={
            'text': query
        },
        retrieveAndGenerateConfiguration={
            'knowledgeBaseConfiguration': {
                'knowledgeBaseId': kbId,
                'modelArn': model_arn,
                'retrievalConfiguration': {
                    'vectorSearchConfiguration': {
                        'numberOfResults': numberOfResults,
                        'overrideSearchType': "SEMANTIC", # optional'
                    }
                },
                'generationConfiguration': {
                        'promptTemplate': {
                            'textPromptTemplate': promptTemplate
                        }
                    }
            },
            'type': 'KNOWLEDGE_BASE'
        },
    )

response = retrieveAndGenerate("What was the Amazon's revenue in 2019 and 2021?”", \
                               "<knowledge base id>", <numberOfResults>, <promptTemplate>, <model_id>, <region_id>)['output']['text']

Con la plantilla de mensaje predeterminada, obtenemos la siguiente respuesta:

Si desea proporcionar instrucciones adicionales sobre el formato de salida de la generación de respuesta, como estandarizar la respuesta en un formato específico (como JSON), puede personalizar el mensaje existente proporcionando más orientación. Con nuestra plantilla de mensaje personalizada, obtenemos la siguiente respuesta.

El ‘promptTemplate‘opción en’generationConfiguration‘ le permite personalizar el mensaje para tener un mejor control sobre la generación de respuestas.

Conclusión

En esta publicación, presentamos dos características nuevas en las bases de conocimiento de Amazon Bedrock: ajustar la cantidad máxima de resultados de búsqueda y personalizar la plantilla de solicitud predeterminada para el RetrieveAndGenerate API. Demostramos cómo configurar estas funciones en la consola y mediante SDK para mejorar el rendimiento y la precisión de la respuesta generada. Aumentar los resultados máximos proporciona información más completa, mientras que personalizar la plantilla de mensajes le permite ajustar las instrucciones para que el modelo básico se alinee mejor con casos de uso específicos. Estas mejoras ofrecen mayor flexibilidad y control, lo que le permite ofrecer experiencias personalizadas para aplicaciones basadas en RAG.

Para obtener recursos adicionales para comenzar a implementar en su entorno de AWS, consulte lo siguiente:


Sobre los autores

Sandeep Singh es científico senior de datos de IA generativa en Amazon Web Services y ayuda a las empresas a innovar con IA generativa. Se especializa en IA generativa, inteligencia artificial, aprendizaje automático y diseño de sistemas. Le apasiona desarrollar soluciones basadas en IA/ML de última generación para resolver problemas comerciales complejos para diversas industrias, optimizando la eficiencia y la escalabilidad.

Suyin Wang es un arquitecto de soluciones especializado en IA/ML en AWS. Tiene formación interdisciplinaria en aprendizaje automático, servicios de información financiera y economía, junto con años de experiencia en la creación de aplicaciones de ciencia de datos y aprendizaje automático que resolvieron problemas empresariales del mundo real. Le gusta ayudar a los clientes a identificar las preguntas comerciales adecuadas y crear las soluciones de IA/ML adecuadas. En su tiempo libre le encanta cantar y cocinar.

jerez ding es arquitecto senior de soluciones especializado en inteligencia artificial (IA) y aprendizaje automático (ML) en Amazon Web Services (AWS). Tiene una amplia experiencia en aprendizaje automático con un doctorado en informática. Trabaja principalmente con clientes del sector público en diversos desafíos comerciales relacionados con AI/ML, ayudándolos a acelerar su viaje de aprendizaje automático en la nube de AWS. Cuando no ayuda a los clientes, disfruta de las actividades al aire libre.