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

En este artículo se muestra cómo evaluar las respuestas de una aplicación de chat con un conjunto de respuestas correctas o ideales (conocidas como verdad básica). Siempre que cambie la aplicación de chat de una manera que afecte a las respuestas, ejecute una evaluación para comparar los cambios. Esta aplicación de demostración ofrece herramientas que puede usar hoy para facilitar la ejecución de evaluaciones.

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

  • Use las indicaciones de ejemplo proporcionadas adaptadas al dominio del firmante. 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 evaluaciones mediante un mensaje de ejemplo con las preguntas del usuario generadas.
  • Revise el análisis de respuestas.

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 App de Azure Service. La aplicación de chat se ajusta al protocolo de chat, lo 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 una serie de preguntas para cada documento junto con la respuesta de verdad básica. Cuantos más preguntas, más larga será la evaluación.
  • El evaluador ejecuta preguntas y preguntas de ejemplo en la aplicación de chat y devuelve los resultados.
  • La herramienta de revisión permite revisar los resultados de las evaluaciones.
  • La herramienta Diff permite comparar las respuestas entre evaluaciones.

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.

  • Complete el procedimiento de aplicación de chat anterior para implementar la aplicación de chat en Azure. Este procedimiento carga 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, lo que se conoce como la aplicación de chat de este artículo:

    • URI de API web: el URI de la API de aplicación de chat implementada.
    • Búsqueda de Azure AI. Se requieren los siguientes valores:
      • Nombre del recurso: nombre del recurso de Azure AI Search.
      • Nombre del índice: el nombre del índice de Azure AI Search donde se almacenan los documentos.
      • Clave de consulta: clave para consultar el índice de búsqueda.
    • Si experimentó con la autenticación de la aplicación de chat, debe deshabilitar la autenticación de usuario para que la aplicación de evaluación pueda acceder a la aplicación de chat.

    Una vez recopilada esta información, no debe volver a usar el entorno de desarrollo de aplicaciones de chat . Se hace referencia más adelante en este artículo varias veces para indicar cómo usa la aplicación de chat la aplicación Evaluations. No elimine los recursos de la aplicación de chat hasta que complete 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 área de trabajo de supervisión para que pueda ver tanto esta documentación como el entorno de desarrollo al mismo tiempo.

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. Haga clic con el botón derecho en el botón siguiente y seleccione Abrir vínculo en una nueva ventana para tener el entorno de desarrollo y la documentación disponible al mismo tiempo.

  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 Azure Developer CLI.

    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
    

    Esto no implementa la aplicación de evaluaciones, pero crea el recurso de Azure OpenAI con una implementación gpT-4 necesaria para ejecutar las evaluaciones localmente en el entorno de desarrollo.

  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 se muestra en la barra de búsqueda. Esto le ayuda a distinguir entre esta aplicación de evaluaciones de la aplicación de chat. Este ai-rag-chat-evaluator repositorio se conoce como la aplicación Evaluaciones de este artículo.

Preparación de los valores de entorno e información de configuración

Actualice los valores de entorno y la información de configuración con la información recopilada durante los requisitos previos de la aplicación de evaluaciones.

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

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

    AZURE_SEARCH_SERVICE="<service-name>"
    AZURE_SEARCH_INDEX="<index-name>"
    AZURE_SEARCH_KEY="<query-key>"
    

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

  3. Copie el example_config.json archivo en la raíz de la carpeta de la aplicación Evaluations en un nuevo archivo my_config.json.

  4. Reemplace el contenido existente de my_config.json por 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"
            }
        }
    }
    
  5. Cambie al target_url valor de URI de la aplicación de chat, que ha recopilado en la sección de requisitos previos. La aplicación de chat debe cumplir el protocolo de chat. El URI tiene el formato https://CHAT-APP-URL/chatsiguiente. Asegúrese de que el protocolo y la chat ruta forman parte del URI.

Generación de datos de ejemplo

Para evaluar las nuevas respuestas, deben compararse con una respuesta "verdad en el terreno", que es la respuesta ideal para una pregunta determinada. Genere preguntas y respuestas a partir de documentos almacenados en Azure AI Search para la aplicación de chat.

  1. Copie la example_input carpeta en una nueva carpeta denominadamy_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 de preguntas y respuestas se generan y almacenan en (en my_input/qa.jsonlformato JSONL) como entrada para el evaluador usado en el paso siguiente. Para una evaluación de producción, generaría más pares de control de calidad, quizás más de 200 para este conjunto de datos.

Nota:

El número de preguntas y respuestas por origen está pensado para permitirle completar rápidamente este procedimiento. No está pensado para ser una evaluación de producción que debe tener más preguntas y respuestas por origen.

Ejecución de la primera evaluación con un mensaje refinado

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

    • Cambie results_dir para incluir el nombre del símbolo del sistema: my_results/experiment_refined.
    • Cambie prompt_template a: <READFILE>my_input/experiment_refined.txt para usar la plantilla de solicitud refinada en la evaluación.

    El mensaje refinado es muy específico sobre el dominio del sujeto.

    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
    

    Esto creó una nueva carpeta de experimentos en my_results con la evaluación. La carpeta contiene los resultados de la evaluación, entre los que se incluyen:

    • eval_results.jsonl: cada pregunta y respuesta, junto con las métricas de GPT para cada par de control de calidad.
    • summary.json: los resultados generales, como las métricas de GPT medias.

Ejecución de la segunda evaluación con un mensaje débil

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

    • Cambie results_dir a: my_results/experiment_weak
    • Cambie prompt_template a: <READFILE>my_input/prompt_weak.txt para usar la plantilla de aviso débil en la siguiente evaluación.

    Ese mensaje débil no tiene contexto sobre el dominio del sujeto:

    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 un aviso que permita más creatividad.

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

    • Cambie results_dir a: my_results/experiment_ignoresources_temp09
    • Cambie prompt_template a: <READFILE>my_input/prompt_ignoresources.txt
    • Agregue una nueva invalidación: "temperature": 0.9 la temperatura predeterminada es 0,7. Cuanto mayor sea la temperatura, más creativas son las respuestas.

    El mensaje de omisión es corto:

    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 config debe ser similar al siguiente, excepto use su propio results_dir:

    {
        "testdata_path": "my_input/qa.jsonl",
        "results_dir": "my_results/experiment_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 en función de diferentes avisos y configuraciones de la aplicación. Los resultados se almacenan en la my_results carpeta . Revise cómo difieren los resultados en función de la configuración.

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

    python3 -m review_tools summary my_results
    
  2. Los resultados tienen el siguiente aspecto:

    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 tabla siguiente para comprender el significado de los valores.

    Valor Descripción
    Base Esto hace referencia a la forma en que las respuestas del modelo se basan en información fáctica y verificable. Una respuesta se considera fundamentada si es ciertamente precisa y refleja la realidad.
    Relevancia Esto mide la estrecha alineación de las respuestas del modelo con el contexto o el mensaje. Una respuesta pertinente aborda directamente la consulta o instrucción del usuario.
    Coherencia Esto hace referencia a la coherencia lógica de las respuestas del modelo. Una respuesta coherente mantiene un flujo lógico y no se contradiga.
    Referencia bibliográfica Esto indica si la respuesta se devolvió en el formato solicitado en el símbolo del sistema.
    Length Esto mide la longitud de la respuesta.
  4. Los resultados deberían indicar que las 3 evaluaciones tenían gran relevancia, mientras experiment_ignoresources_temp09 que tenían la menor relevancia.

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

  6. Escriba Ctrl + C salga de la aplicación y vuelva al terminal.

Comparación de las respuestas

Compare las respuestas devueltas de las evaluaciones.

  1. Seleccione dos de las evaluaciones que se van a comparar 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. Consulte los resultados.

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

  3. Escriba Ctrl + C salga de la aplicación y vuelva al terminal.

Sugerencias para evaluaciones adicionales

  • Edite las indicaciones en my_input para adaptar las respuestas, como el dominio del sujeto, la longitud y otros factores.
  • Edite el my_config.json archivo para cambiar los parámetros, como temperature, y semantic_ranker y vuelva a ejecutar experimentos.
  • Compare diferentes respuestas para comprender cómo afecta la pregunta y la solicitud a la calidad de la respuesta.
  • Genere un conjunto independiente de preguntas y respuestas de verdad básicas para cada documento del índice de Azure AI Search. A continuación, vuelva a ejecutar las evaluaciones para ver cómo difieren las respuestas.
  • Modifique las indicaciones para indicar respuestas más cortas o más largas agregando el requisito al final del mensaje. Por ejemplo: Please answer in about 3 sentences.

Limpieza de recursos

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.

Ejecute el siguiente comando de la Azure Developer CLI para eliminar los recursos de Azure y eliminar el código de origen:

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