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 para facilitar la ejecución de evaluaciones.
Siguiendo las instrucciones de este artículo, puede:
- 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 evaluaciones mediante un mensaje de ejemplo con las preguntas del 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 aplicación de IA proporcionan implementaciones de referencia bien mantenidas que son fáciles de implementar. Ayudan a garantizar un punto de partida de alta calidad para las aplicaciones de inteligencia artificial.
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.
- protocolo de chat de Microsoft AI: el protocolo proporciona contratos de API estandarizados en 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: La herramienta puede generar muchas preguntas para cada documento junto con la respuesta de verdad básica. Cuantas más preguntas haya, más larga será la evaluación.
- El evaluador: La herramienta ejecuta preguntas y solicitudes de ejemplo en la aplicación de chat y devuelve los resultados.
- herramienta de revisión: la herramienta revisa los resultados de las evaluaciones.
- Herramienta de comparación de diferencias: La herramienta compara las respuestas entre evaluaciones.
Al implementar esta evaluación en Azure, se crea el punto de conexión del estudio de Azure OpenAI Service 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 de Azure usando GPT-4
con su propia capacidad.
Requisitos previos
Suscripción de Azure. Crear una cuenta gratuita
Implementar 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 procesoazd 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.
- Nombre del recurso: El nombre del recurso Azure AI Search, indicado como
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.
- URI de la API de chat: El punto de conexión del back-end del servicio que se muestra al final del proceso
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.
- Cuenta de GitHub
Apertura de un entorno de desarrollo
Comience ahora con un entorno de desarrollo que tenga todas las dependencias instaladas para completar este artículo. Organice el área de trabajo de supervisión para 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 GitHub Codespaces durante hasta 60 horas gratuitas cada mes con dos instancias principales. Para obtener más información, consulte Almacenamiento y horas de núcleo incluidas mensualmente en GitHub Codespaces.
Inicie el proceso para crear un nuevo espacio de código GitHub en la rama
main
del repositorio GitHub Azure-Samples/ai-rag-chat-evaluator.Para mostrar el entorno de desarrollo y la documentación disponible al mismo tiempo, haga clic con el botón derecho en el botón siguiente y seleccione vínculo Abrir en la nueva ventana.
En la página Crear espacio de código, revise la configuración del espacio de código y, a continuación, seleccione Crear nuevo espacio de código.
Espere a que se inicie Codespace. Este proceso de startup puede tardar unos minutos.
En el terminal de la parte inferior de la pantalla, inicie sesión en Azure con la CLI para desarrolladores de Azure:
azd auth login --use-device-code
Copie el código del terminal y péguelo en un navegador. Siga las instrucciones para autenticarse con su cuenta Azure.
Aprovisione el recurso de Azure necesario, Azure OpenAI Service, para la aplicación de evaluaciones:
azd up
Este comando
AZD
no implementa la aplicación de evaluaciones, pero crea el recurso de Azure OpenAI con una implementación deGPT-4
necesaria para ejecutar las evaluaciones en el entorno de desarrollo local.
Las tareas restantes de este artículo tienen lugar en el contexto de este contenedor de desarrollo.
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. Este repositorio ai-rag-chat-evaluator
se denomina app de evaluaciones en este artículo.
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.
Cree un archivo de
.env
basado en.env.sample
.cp .env.sample .env
Ejecute este comando para obtener los valores necesarios para
AZURE_OPENAI_EVAL_DEPLOYMENT
yAZURE_OPENAI_SERVICE
del grupo de recursos implementado. Pegue esos valores en el archivo.env
.azd env get-value AZURE_OPENAI_EVAL_DEPLOYMENT azd env get-value AZURE_OPENAI_SERVICE
Agregue los siguientes valores de la aplicación de chat para su instancia de Azure AI Search al archivo
.env
, que ha recopilado en la sección de Prerrequisitos .AZURE_SEARCH_SERVICE="<service-name>" AZURE_SEARCH_INDEX="<index-name>"
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 la especificación del protocolo de chat de Microsoft AI, un contrato de API de punto de conexión de IA independiente del lenguaje, de la nube y de código abierto que se usa para su consumo y evaluación. Cuando los puntos de conexión del cliente y de nivel intermedio siguen estas especificaciones de API, puedes consumir y ejecutar evaluaciones de manera coherente en tus sistemas backend de IA.
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": { "top": 3, "temperature": 0.3, "retrieval_mode": "hybrid", "semantic_ranker": false, "prompt_template": "<READFILE>my_input/prompt_refined.txt", "seed": 1 } } }
El script de evaluación crea la carpeta
my_results
.El objeto
overrides
contiene las opciones de configuración necesarias para la aplicación. Cada aplicación define su propio conjunto de propiedades de configuración.Use la tabla siguiente para comprender el significado de las propiedades de configuración que se envían a la aplicación de chat.
Propiedad Configuraciones Descripción semantic_ranker
Si se va a usar el clasificador semántico, un modelo que vuelve a generar resultados de búsqueda en función de la similitud semántica con la consulta del usuario. Lo deshabilitamos para este tutorial para reducir los costos. retrieval_mode
Modo de recuperación que se va a usar. El valor predeterminado es hybrid
.temperature
Configuración de temperatura del modelo. El valor predeterminado es 0.3
.top
El número de resultados de búsqueda a devolver. El valor predeterminado es 3
.prompt_template
Invalidación del mensaje usado para generar la respuesta en función de la pregunta y los resultados de búsqueda. seed
Valor de inicialización de las llamadas a modelos GPT. Establecer un valor de inicialización da como resultado resultados más coherentes en las evaluaciones. Cambie el valor
target_url
por el valor URI de su aplicación de chat, que recopiló en la sección Requisitos previos. La aplicación de chat debe cumplir el protocolo de chat. El URI tiene el siguiente formato:https://CHAT-APP-URL/chat
. Asegúrese de que el protocolo y la rutachat
forman parte del URI.
Generación de datos de ejemplo
Para evaluar nuevas respuestas, deben compararse con una respuesta verdadera, 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.
Copie la carpeta
example_input
en una nueva carpeta denominadamy_input
.En un terminal, ejecute el siguiente comando para generar los datos de ejemplo:
python -m evaltools generate --output=my_input/qa.jsonl --persource=2 --numquestions=14
Los pares de preguntas y respuestas se generan y almacenan en my_input/qa.jsonl
(en formato JSONL) como entrada para el evaluador que se usa en el paso siguiente. Para una evaluación de producción, usted generaría más pares de preguntas y respuestas. Para este conjunto de datos se generan más de 200.
Nota:
Solo se generan unas pocas preguntas y respuestas por cada fuente para que puedas completar este procedimiento rápidamente. No está pensado para ser una evaluación de producción, que debe tener más preguntas y respuestas por origen.
Ejecuta la primera evaluación con una instrucción refinada
Edite las propiedades del archivo de configuración de
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 a 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].
En un terminal, ejecute el siguiente comando para ejecutar la evaluación:
python -m evaltools 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.Nombre del archivo Descripción config.json
Copia del archivo de configuración usado para la evaluación. evaluate_parameters.json
Parámetros usados para la evaluación. Similar a config.json
, pero incluye otros metadatos, como la marca de tiempo.eval_results.jsonl
Cada pregunta y respuesta, junto con las métricas GPT para cada par de pregunta y respuesta. summary.json
Los resultados generales, como la media de las métricas de GPT.
Realice la segunda evaluación con una solicitud débil
Edite las propiedades del archivo de configuración de
my_config.json
.Propiedad Valor nuevo results_dir
my_results/experiment_weak
prompt_template
<READFILE>my_input/prompt_weak.txt
Ese mensaje débil carece de contexto acerca del área temática.
You are a helpful assistant.
En un terminal, ejecute el siguiente comando para ejecutar la evaluación:
python -m evaltools 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.
Edite las propiedades del archivo de configuración de
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 temperature
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 corta.Your job is to answer questions to the best of your ability. You will be given sources but you should IGNORE them. Be creative!
El objeto de configuración debe tener un aspecto similar al del ejemplo siguiente, excepto que ha reemplazado
results_dir
por la ruta de acceso:{ "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" } } }
En un terminal, ejecute el siguiente comando para ejecutar la evaluación:
python -m evaltools 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.
Use la herramienta de revisión para ver los resultados de las evaluaciones.
python -m evaltools summary my_results
Los resultados son algo así:
Cada valor se devuelve como un número y un porcentaje.
Use la siguiente tabla para comprender el significado de los valores.
Valor Descripción Base Comprueba qué tan bien 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 la estrecha alineación de las respuestas del modelo con el contexto o el mensaje. Una respuesta pertinente aborda directamente la consulta o afirmación del usuario. Coherencia Comprueba 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 fue devuelta en el formato solicitado en la solicitud. Length Mide la longitud de la respuesta. Los resultados deberían indicar que las tres evaluaciones tenían gran relevancia, mientras que el
experiment_ignoresources_temp09
tenía la relevancia más baja.Seleccione la carpeta para ver la configuración de la evaluación.
Escriba Ctrl + C para salir de la aplicación y volver al terminal.
Comparación de respuestas
Compare las respuestas de las evaluaciones.
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.
python -m evaltools diff my_results/experiment_refined my_results/experiment_ignoresources_temp09
Revise los resultados. Sus resultados pueden variar.
Escriba Ctrl + C para salir de la aplicación y volver 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 comotemperature
ysemantic_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 independiente de preguntas y respuestas de verdad básicas 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. Un ejemplo es
Please answer in about 3 sentences.
Limpieza de recursos y dependencias
Los pasos siguientes le guiarán por el proceso de limpieza de los recursos que usó.
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 eliminar los recursos de Azure y quitar el código fuente, ejecute el siguiente comando de la CLI para desarrolladores de Azure:
azd down --purge
Limpieza de GitHub Codespaces y Visual Studio Code
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.
Inicie sesión en el panel de GitHub Codespaces.
Busque los codespaces que se ejecutan actualmente a partir del repositorio de GitHub Azure-Samples/ai-rag-chat-evaluator.
Abra el menú contextual del espacio de código y seleccione Eliminar.
Vuelva al artículo de la aplicación de chat para limpiar esos recursos.
Contenido relacionado
- Consulte el repositorio de evaluaciones.
- Consulte el repositorio de GitHub de la aplicación de chat empresarial .
- Construir una aplicación de chat con la arquitectura de soluciones de mejores prácticas de Azure OpenAI.
- Descubra el control de acceso en aplicaciones de inteligencia artificial generativa con Azure AI Search.
- Cree una solución de Azure OpenAI preparada para la empresa con Azure API Management.
- Consulte Búsqueda de Azure AI: Superar el vector de búsqueda con capacidades híbridas de recuperación y clasificación.