Introducción a la evaluación de respuestas en una aplicación de chat en JavaScript

Este artículo muestra cómo evaluar las respuestas de una aplicación de chat comparándolas con un conjunto de respuestas correctas o ideales (conocidas como verdad básica). Siempre que modifique su aplicación de chat de forma que afecte a las respuestas, realice una evaluación para comparar los cambios. Esta aplicación de demostración ofrece herramientas que puede usar hoy mismo para facilitar la realización de evaluaciones.

Siguiendo las instrucciones de este artículo, podrá:

  • Use las solicitudes de ejemplo que se proporcionan adaptadas al ámbito temático. Estas solicitudes ya están en el repositorio.
  • Genere preguntas de usuario de ejemplo y respuestas de verdad básica a partir de sus propios documentos.
  • Ejecute las evaluaciones usando un ejemplo de solicitud con las preguntas de usuario generadas.
  • Revise el análisis de las respuestas.

Nota:

En este artículo se usan una o varias plantillas de aplicaciones de IA como base para los ejemplos e instrucciones del artículo. Las plantillas de aplicaciones de IA le proporcionan implementaciones de referencia bien mantenidas y fáciles de implementar que le ayudan a garantizar un punto inicial de alta calidad para sus aplicaciones de IA.

Introducción a la arquitectura

Entre los componentes clave de la arquitectura se incluyen:

  • Aplicación de chat hospedada en Azure: La aplicación de chat se ejecuta en Azure App Service.
  • Microsoft AI Chat Protocol proporciona contratos DE API estandarizados en todas las soluciones y lenguajes de IA. La aplicación de chat se ajusta al protocolo Microsoft AI Chat Protocol, que permite que la aplicación de evaluaciones se ejecute en cualquier aplicación de chat que se ajuste al protocolo.
  • Azure AI Search: La aplicación de chat usa Azure AI Search para almacenar los datos de sus propios documentos.
  • Generador de preguntas de ejemplo: Puede generar muchas preguntas para cada documento junto con la respuesta de verdad básica. Cuantas más preguntas, más larga será la evaluación.
  • El evaluador ejecuta preguntas y solicitudes de ejemplo en la aplicación de chat y devuelve los resultados.
  • La herramienta de revisión le permite revisar los resultados de las evaluaciones.
  • La herramienta de comparación le permite comparar las respuestas entre evaluaciones.

Al implementar esta evaluación en Azure, se crea el punto de conexión Azure OpenAI para el modelo GPT-4 con su propia capacidad. Al evaluar aplicaciones de chat, es importante que el evaluador disponga de su propio recurso de OpenAI usando GPT-4 con su propia capacidad.

Requisitos previos

  • Suscripción de Azure. Crear una cuenta gratuita

  • Acceso concedido a Azure OpenAI en la suscripción de Azure que quiera.

    Actualmente, solo la aplicación concede acceso a este servicio. Para solicitar acceso a Azure OpenAI, rellene el formulario en https://aka.ms/oai/access.

  • Implementación de una aplicación de chat

  • Estas aplicaciones de chat cargan los datos en el recurso de Azure AI Search. Este recurso es necesario para que funcione la aplicación de evaluaciones. No complete la sección Limpieza de recursos del procedimiento anterior.

    Necesitará la siguiente información de recursos de Azure de esa implementación, a la que se denomina aplicación de chat en este artículo:

    • URI de la API de chat: El punto de conexión del back-end del servicio que se muestra al final del proceso azd up.
    • Azure AI Search. Se requieren los siguientes valores:
      • Nombre del recurso: El nombre del recurso Azure AI Search, indicado como Search service durante el proceso azd up.
      • Nombre del índice: El nombre del índice de Azure AI Search donde se almacenan sus documentos. Esto se puede encontrar en Azure Portal para el servicio de Búsqueda.

    La URL de la API de chat permite que las evaluaciones realicen solicitudes a través de su aplicación de back-end. La información de Azure AI Search permite que los scripts de evaluación usen la misma implementación que su back-end, cargado con los documentos.

    Una vez recopilada esta información, no debería necesitar volver a usar el entorno de desarrollo de la aplicación de chat. Más adelante en este artículo se hace referencia a ella en varias ocasiones para indicar cómo la aplicación de evaluaciones usa la aplicación de chat. No elimine los recursos de la aplicación de chat hasta que haya completado todo el procedimiento de este artículo.

  • Hay disponible un entorno contenedor de desarrollo con todas las dependencias necesarias para completar este artículo. Puede ejecutar el contenedor de desarrollo en GitHub Codespaces (en un navegador) o localmente utilizando Visual Studio Code.

Entorno de desarrollo abierto

Comience ahora con un entorno de desarrollo que tenga todas las dependencias instaladas para completar este artículo. Debe organizar el espacio de trabajo de su monitor de forma que pueda ver esta documentación y el entorno de desarrollo al mismo tiempo.

Este artículo se probó con la región switzerlandnorth para la implementación de evaluación.

GitHub Codespaces ejecuta un contenedor de desarrollo administrado por GitHub con Visual Studio Code para la web como interfaz de usuario. Para obtener el entorno de desarrollo más sencillo, utilice Codespaces de GitHub de modo que tenga las herramientas y dependencias de desarrollador correctas preinstaladas para completar este artículo.

Importante

Todas las cuentas de GitHub pueden usar Codespaces durante un máximo de 60 horas gratis cada mes con 2 instancias principales. Para obtener más información, consulte Almacenamiento y horas de núcleo incluidas mensualmente en GitHub Codespaces.

  1. Inicie el proceso para crear una nueva instancia de GitHub Codespace en la rama main del repositorio de GitHub Azure-Samples/ai-rag-chat-evaluator.

  2. Para visualizar el entorno de desarrollo y la documentación disponible al mismo tiempo, haga clic con el botón derecho del ratón en el botón siguiente y seleccione Abrir vínculo en una ventana nueva.

    Abrir en GitHub Codespaces

  3. En la página Crear codespace, revise las opciones de configuración de codespace y, después, seleccione Crear nuevo codespace.

    Captura de pantalla de la pantalla de confirmación antes de crear un nuevo codespace.

  4. Espere a que se inicie Codespace. Este proceso de startup puede tardar unos minutos.

  5. En el terminal de la parte inferior de la pantalla, inicie sesión en Azure con la CLI de Azure Developer.

    azd auth login --use-device-code
    
  6. Copie el código del terminal y péguelo en un navegador. Siga las instrucciones para autenticarse con su cuenta Azure.

  7. Aprovisione el recurso de Azure necesario, Azure OpenAI, para la aplicación de evaluaciones.

    azd up
    

    Este AZD command no implementa la aplicación de evaluaciones, pero sí crea el recurso Azure OpenAI con un implementación GPT-4 necesaria para ejecutar las evaluaciones en el entorno de desarrollo local.

  8. Las tareas restantes de este artículo tienen lugar en el contexto de este contenedor de desarrollo.

  9. El nombre del repositorio de GitHub aparece en la barra de búsqueda. Este indicador visual le ayuda a distinguir la aplicación de evaluaciones de la aplicación de chat. En este artículo se hace referencia a este repositorio de ai-rag-chat-evaluator como la aplicación de evaluaciones.

Preparación de los valores de entorno y la información de configuración

Actualice los valores de entorno y la información de configuración con la información que recopiló durante los Requisitos previos para la aplicación de evaluaciones.

  1. Use el siguiente comando para obtener la información de los recursos de la aplicación de evaluaciones en un archivo .env:

    azd env get-values > .env
    
  2. Agregue los siguientes valores de la aplicación de chat para su instancia de Azure AI Search a .env, que obtuvo en la sección Requisitos previos:

    AZURE_SEARCH_SERVICE="<service-name>"
    AZURE_SEARCH_INDEX="<index-name>"
    

    El valor AZURE_SEARCH_KEY es la clave de consulta para la instancia de Azure AI Search.

Uso del protocolo de chat de Microsoft AI para obtener información sobre la configuración

La aplicación de chat y la aplicación de evaluaciones implementan Microsoft AI Chat Protocol specification, un contrato de API de punto de conexión de IA de código abierto, en la nube y con independencia del idioma que se usa para el consumo y la evaluación. Cuando sus puntos de conexión de cliente y de nivel intermedio se ajusten a esta especificación de API, podrá consumir y ejecutar evaluaciones de forma coherente en sus back-ends de IA.

  1. Cree un nuevo archivo llamado my_config.json y copie en él el siguiente contenido:

    {
        "testdata_path": "my_input/qa.jsonl",
        "results_dir": "my_results/experiment<TIMESTAMP>",
        "target_url": "http://localhost:50505/chat",
        "target_parameters": {
            "overrides": {
                "semantic_ranker": false,
                "prompt_template": "<READFILE>my_input/prompt_refined.txt"
            }
        }
    }
    

    El script de evaluación crea la carpeta my_results.

    El objeto overrides contiene cualquier ajuste de configuración necesario para la aplicación. Cada aplicación define su propio conjunto de propiedades de configuración.

  2. Use la siguiente tabla para comprender el significado de las propiedades de configuración usadas para la aplicación de evaluación.

    Settings (propiedad) Descripción
    semantic_ranker Use el clasificador semántico un modelo que vuelve a clasificar los resultados de búsqueda en función de la similitud semántica con la consulta del usuario.
    prompt_template Invalida la solicitud usada para generar la respuesta en función de la pregunta y los resultados de búsqueda.
  3. Cambie target_url al valor de URI de su aplicación de chat, que recopiló en la sección Requisitos previos. La aplicación de chat debe ajustarse al protocolo de chat. El URI tiene el siguiente formato https://CHAT-APP-URL/chat. Asegúrese de que el protocolo y la ruta chat forman parte del URI.

Generación de datos de ejemplo

Para evaluar las nuevas respuestas, hay que compararlas con una respuesta de "verdad básica", que es la respuesta ideal para una pregunta concreta. Genere preguntas y respuestas a partir de documentos almacenados en Azure AI Search para la aplicación de chat.

  1. Copie la carpeta example_input en una nueva carpeta llamadamy_input.

  2. En un terminal, ejecute el siguiente comando para generar los datos de ejemplo:

    python3 -m scripts generate --output=my_input/qa.jsonl --numquestions=14 --persource=2
    

Los pares pregunta/respuesta se generan y almacenan en my_input/qa.jsonl (en formato JSONL) como entrada para el evaluador usado en el siguiente paso. Para una evaluación de producción, generaría más pares de preguntas y respuestas, más de 200 para este conjunto de datos.

Nota:

El escaso número de preguntas y respuestas por fuente tiene por objeto permitirle completar rápidamente este procedimiento. No pretende ser una evaluación de producción, que debería tener más preguntas y respuestas por fuente.

Ejecución de la primera evaluación con una solicitud refinada

  1. Edite las propiedades del archivo de configuración my_config.json:

    Propiedad Valor nuevo
    results_dir my_results/experiment_refined
    prompt_template <READFILE>my_input/prompt_refined.txt

    La solicitud refinada es específica del dominio del tema.

    If there isn't enough information below, say you don't know. Do not generate answers that don't use the sources below. If asking a clarifying question to the user would help, ask the question.
    
    Use clear and concise language and write in a confident yet friendly tone. In your answers ensure the employee understands how your response connects to the information in the sources and include all citations necessary to help the employee validate the answer provided.
    
    For tabular information return it as an html table. Do not return markdown format. If the question is not in English, answer in the language used in the question.
    
    Each source has a name followed by colon and the actual information, always include the source name for each fact you use in the response. Use square brackets to reference the source, e.g. [info1.txt]. Don't combine sources, list each source separately, e.g. [info1.txt][info2.pdf].
    
  2. En un terminal, ejecute el siguiente comando para ejecutar la evaluación:

    python3 -m scripts evaluate --config=my_config.json --numquestions=14
    

    Este script creó una nueva carpeta de experimentos en my_results/ con la evaluación. La carpeta contiene los resultados de la evaluación, incluidos:

    Nombre de archivo Descripción
    eval_results.jsonl Cada pregunta y respuesta, junto con las métricas de GPT para cada par de preguntas y respuestas.
    summary.json Los resultados generales, como la media de las métricas de GPT.

Ejecución de la secunda evaluación con una solicitud débil

  1. Edite las propiedades del archivo de configuración my_config.json:

    Propiedad Valor nuevo
    results_dir my_results/experiment_weak
    prompt_template <READFILE>my_input/prompt_weak.txt

    Esa solicitud débil no tiene contexto del dominio del tema:

    You are a helpful assistant.
    
  2. En un terminal, ejecute el siguiente comando para ejecutar la evaluación:

    python3 -m scripts evaluate --config=my_config.json --numquestions=14
    

Ejecución de la tercera evaluación con una temperatura específica

Use una solicitud que permita más creatividad.

  1. Edite las propiedades del archivo de configuración my_config.json:

    Existing Propiedad Valor nuevo
    Existing results_dir my_results/experiment_ignoresources_temp09
    Existing prompt_template <READFILE>my_input/prompt_ignoresources.txt
    Nuevo temperatura 0.9

    El valor predeterminado de temperature es 0.7. Cuanto mayor sea la temperatura, más creativas serán las respuestas.

    La solicitud ignore es breve:

    Your job is to answer questions to the best of your ability. You will be given sources but you should IGNORE them. Be creative!
    
  2. El objeto de configuración debe parecerse a lo siguiente, excepto que debe sustituir results_dir por su ruta:

    {
        "testdata_path": "my_input/qa.jsonl",
        "results_dir": "my_results/prompt_ignoresources_temp09",
        "target_url": "https://YOUR-CHAT-APP/chat",
        "target_parameters": {
            "overrides": {
                "temperature": 0.9,
                "semantic_ranker": false,
                "prompt_template": "<READFILE>my_input/prompt_ignoresources.txt"
            }
        }
    }
    
  3. En un terminal, ejecute el siguiente comando para ejecutar la evaluación:

    python3 -m scripts evaluate --config=my_config.json --numquestions=14
    

Revisión de los resultados de la evaluación

Ha realizado tres evaluaciones basadas en diferentes solicitudes y configuraciones de la aplicación. Los resultados se almacenan en la carpeta my_results. Revise cómo difieren los resultados en función de los ajustes.

  1. Use la herramienta de revisión para ver los resultados de las evaluaciones:

    python3 -m review_tools summary my_results
    
  2. Los resultados son algo así:

    Captura de pantalla de la herramienta de revisión de evaluaciones que muestra las tres evaluaciones.

    Cada valor se devuelve como un número y un porcentaje.

  3. Use la siguiente tabla para comprender el significado de los valores.

    Valor Descripción
    Base Se refiere a lo bien que se basan las respuestas del modelo en información fáctica y verificable. Una respuesta se considera fundamentada si es objetivamente exacta y refleja la realidad.
    Relevancia Mide hasta qué punto las respuestas del modelo se ajustan al contexto o a la solicitud. Una respuesta pertinente aborda directamente la consulta o afirmación del usuario.
    Coherencia Se refiere a la coherencia lógica de las respuestas del modelo. Una respuesta coherente mantiene un flujo lógico y no se contradice.
    Referencia bibliográfica Indica si la respuesta se ha devuelto en el formato requerido en la solicitud.
    Length Mide la longitud de la respuesta.
  4. Los resultados deberían indicar que las tres evaluaciones tuvieron una relevancia alta, mientras que experiment_ignoresources_temp09 tuvo la relevancia más baja.

  5. Seleccione la carpeta para ver la configuración de la evaluación.

  6. Con Ctrl + C se sale de la aplicación y se vuelve al terminal.

Comparación de respuestas

Compare las respuestas de las evaluaciones.

  1. Seleccione dos de las evaluaciones para compararlas y, a continuación, use la misma herramienta de revisión para comparar las respuestas:

    python3 -m review_tools diff my_results/experiment_refined my_results/experiment_ignoresources_temp09
    
  2. Revise los resultados. Sus resultados pueden variar.

    Captura de pantalla de la comparación de respuestas de evaluación entre evaluaciones.

  3. Con Ctrl + C se sale de la aplicación y se vuelve al terminal.

Sugerencias para futuras evaluaciones

  • Edite las solicitudes en my_input para adaptar las respuestas en función del ámbito temático, la longitud y otros factores.
  • Edite el archivo my_config.json para cambiar los parámetros como temperature y semantic_ranker, y vuelva a ejecutar los experimentos.
  • Compare diferentes respuestas para comprender cómo afectan la solicitud y la pregunta a la calidad de la respuesta.
  • Genere un conjunto separado de preguntas y respuestas de verdad básica para cada documento del índice de Azure AI Search. A continuación, vuelva a realizar las evaluaciones para ver en qué difieren las respuestas.
  • Modifique las solicitudes para indicar respuestas más cortas o más largas añadiendo el requisito al final de la solicitud. Por ejemplo, Please answer in about 3 sentences..

Limpieza de recursos y dependencias

Limpieza de los recursos de Azure

Los recursos Azure creados en este artículo se facturan a su suscripción Azure. Si no espera necesitar estos recursos en el futuro, elimínelos para evitar incurrir en más gastos.

Para borrar los recursos de Azure y eliminar el código fuente, ejecute el siguiente comando de Azure Developer CLI:

azd down --purge

Limpiar GitHub Codespaces

La eliminación del entorno de GitHub Codespaces garantiza que pueda maximizar la cantidad de derechos de horas gratuitas por núcleo que obtiene para su cuenta.

Importante

Para obtener más información sobre los derechos de la cuenta de GitHub, consulte Almacenamiento y horas de núcleo incluidas mensualmente en GitHub Codespaces.

  1. Inicie sesión en el panel de GitHub Codespaces (https://github.com/codespaces).

  2. Busque los espacios de código que se ejecutan actualmente procedentes del repositorio de GitHub Azure-Samples/ai-rag-chat-evaluator.

    Captura de pantalla de todos los espacios de código en ejecución, incluidos su estado y las plantillas.

  3. Abra el menú contextual del codespace y, a continuación, seleccione Eliminar.

    Captura de pantalla del menú contextual de un solo codespace con la opción para eliminar resaltada.

Vuelva al artículo de la aplicación de chat para limpiar esos recursos.

Pasos siguientes