Introducción al ejemplo de chat de .NET Enterprise mediante RAG

En este artículo se muestra cómo implementar y ejecutar el ejemplo de aplicación de chat Enterprise para .NET. En este ejemplo se implementa una aplicación de chat mediante C#, Azure OpenAI Service y Generación aumentada de recuperación (RAG) en Búsqueda de Azure AI para obtener respuestas sobre las ventajas de los empleados en una empresa ficticia. La aplicación de chat sobre beneficios para empleados contiene archivos PDF como un manual del empleado, un documento sobre beneficios y una lista de funciones y expectativas de la empresa.

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

  • Implemente una aplicación de chat en Azure.
  • Obtenga respuestas sobre los beneficios para empleados.
  • Cambie la configuración para modificar el comportamiento de las respuestas.

Una vez completado este procedimiento, puede empezar a modificar el nuevo proyecto con su código personalizado.

Este artículo forma parte de una colección de artículos que muestran cómo crear una aplicación de chat mediante Azure Open AI Service y Búsqueda de Azure AI.

Otros artículos de la colección son:

Introducción a la arquitectura

En esta aplicación de ejemplo, una empresa ficticia denominada Contoso Electronics proporciona la experiencia de la aplicación de chat a sus empleados para formular preguntas sobre las ventajas, las directivas internas, así como las descripciones y los roles del trabajo.

La arquitectura de la aplicación de chat se muestra en el diagrama siguiente:

Diagrama que muestra la arquitectura del cliente a la aplicación back-end.

  • Interfaz de usuario: la interfaz de chat de la aplicación es una aplicación WebAssembly de Blazor. Esta interfaz es lo que acepta consultas de usuario, enruta la solicitud al back-end de la aplicación y muestra las respuestas generadas.
  • Back-end: el back-end de la aplicación es una API mínima de ASP.NET Core. El back-end hospeda la aplicación web estática Blazor y es lo que organiza las interacciones entre los distintos servicios. Entre los servicios usados en esta aplicación se incluyen:
    • Azure Cognitive Search: indexa documentos de los datos almacenados en una cuenta de Azure Storage. Esto hace que los documentos se puedan buscar mediante funcionalidades de vectores de búsqueda.
    • Servicio Azure OpenAI: proporciona los modelos de lenguaje grande (LLM) para generar respuestas. El Kernel semántico se usa junto con el servicio Azure OpenAI para organizar los flujos de trabajo de inteligencia artificial más complejos.

Costee

La mayoría de los recursos de esta arquitectura utilizan un nivel de precios básico o de consumo. La tarifa del consumo se basa en el uso, lo que significa que solo paga por lo que utiliza. Para completar este artículo, habrá que pagar una tasa, pero será mínima. Cuando haya terminado con el artículo, puede eliminar los recursos para dejar de incurrir en gastos.

Para obtener más información, consulte Azure Samples: Cost en el repositorio de muestras.

Requisitos previos

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.

Para seguir este artículo, necesita los siguientes requisitos previos:

  1. Una suscripción a Azure: cree una cuenta gratuita.
  2. Permisos de la cuenta Azure: Su cuenta Azure debe tener permisos Microsoft.Authorization/roleAssignments/write, como Administrador de acceso de usuario o Propietario.
  3. Acceso concedido a Azure OpenAl 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. Si tiene algún problema, abra una incidencia en este repositorio para ponerse en contacto con nosotros.
  4. GitHub

Entorno de desarrollo abierto

Comience ahora con un entorno de desarrollo que tenga todas las dependencias instaladas para completar este artículo.

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/azure-search-openai-demo-csharp.

  2. Haga clic con el botón derecho del ratón en el botón siguiente y seleccione Abrir vínculo en ventanas nuevas para disponer al mismo tiempo del entorno de desarrollo y de la documentación.

  3. En la página Crear Codespace, revise los ajustes de configuración del Codespace, y luego, 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
    
  6. Copie el código del terminal y péguelo en un navegador. Siga las instrucciones para autenticarse con su cuenta Azure.

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

Implementación y ejecución

El repositorio de ejemplo contiene todo el código y los archivos de configuración necesarios para implementar una aplicación de chat en Azure. Los siguientes pasos le guiarán a través del proceso de implementación de la muestra en Azure.

Implementación de la aplicación de chat en Azure

Importante

Los recursos Azure creados en esta sección incurren en costes inmediatos, principalmente del recurso Azure AI Search. Estos recursos pueden acumular costes incluso si interrumpe el comando antes de que se ejecute por completo.

  1. Ejecute el siguiente comando de la Azure Developer CLI para aprovisionar los recursos de Azure e implementar el código fuente:

    azd up
    
  2. Cuando se le pida que introduzca un nombre de entorno, manténgalo corto y en minúsculas. Por ejemplo, myenv. Se utiliza como parte del nombre del grupo de recursos.

  3. Cuando se le solicite, seleccione una suscripción en la que crear los recursos.

  4. Cuando se le pida que seleccione una ubicación la primera vez, seleccione una ubicación cercana. Esta ubicación se utiliza para la mayoría de los recursos, incluido el hospedaje.

  5. Si se le pide una ubicación para el modelo OpenAI, seleccione una ubicación que esté cerca de usted. Si está disponible la misma ubicación que la primera, selecciónela.

  6. Espere hasta que se implemente la aplicación. La implementación puede tardar hasta 20 minutos en completarse.

  7. Una vez que la aplicación se ha implementado correctamente, aparece una URL en el terminal.

  8. Seleccione esa URL etiquetada Deploying service web para abrir la aplicación de chat en un navegador.

    Captura de pantalla de la aplicación de chat en el explorador que muestra varias sugerencias para la entrada de chat y el cuadro de texto de chat para escribir una pregunta.

Utilice la aplicación de chat para obtener respuestas de archivos PDF

La aplicación de chat está precargada con información sobre los beneficios de los empleados a partir de archivos PDF. Puede utilizar la aplicación de chat para hacer preguntas sobre los beneficios. Los siguientes pasos le guiarán a través del proceso de uso de la aplicación de chat.

  1. En el navegador, desplácese a la página Chat utilizando la navegación de la izquierda.

  2. Seleccione o introduzca "¿Qué incluye mi plan Northwind Health Plus que no esté en el estándar?" en el cuadro de texto del chat.

    Captura de pantalla de la primera respuesta de la aplicación de chat.

  3. De la respuesta, seleccione una cita. Se abrirá una ventana emergente con el origen de la información.

    Captura de pantalla de la primera respuesta de la aplicación de chat con su cita resaltada en un cuadro rojo.

  4. Navegue entre las pestañas de la parte superior del cuadro de respuesta para comprender cómo se ha generado la respuesta.

    Tab Descripción
    Proceso de ideas Este es un script de las interacciones en el chat. Puede ver la pregunta del sistema (content) y su pregunta de usuario (content).
    Contenido adicional Esto incluye la información para responder a su pregunta y el material de origen. El número de citas del material fuente se indica en los Configuración de desarrollador. El valor predeterminado es 3.
    Referencia bibliográfica Esto muestra la página de la fuente que contiene la cita.
  5. Cuando haya terminado, vuelva a la pestaña de respuestas.

Utilice la configuración de la aplicación de chat para cambiar el comportamiento de las respuestas

La inteligencia del chat viene determinada por el modelo OpenAI y los ajustes que se utilizan para interactuar con el modelo.

Captura de pantalla de la configuración del desarrollador de chat.

Configuración Descripción
Anular plantilla de solicitud Esta es la pregunta que se utiliza para generar la respuesta.
Recuperar esta cantidad de resultados Es el número de resultados de búsqueda que se utilizan para generar la respuesta. Puede ver estas fuentes devueltas en las pestañas Proceso de ideas y Contenido de soporte de la cita.
Excluir categoría Es la categoría de documentos que se excluyen de los resultados de la búsqueda.
Utilizar un clasificador semántico para la recuperación Se trata de una característica de Búsqueda de Azure AI que utiliza el aprendizaje automático para mejorar la relevancia de los resultados de búsqueda.
Modo de recuperación Vectores + Texto significa que los resultados de la búsqueda se basan en el texto de los documentos y en las incrustaciones de los mismos. Vectores significa que los resultados de la búsqueda se basan en las incrustaciones de los documentos. Texto significa que los resultados de la búsqueda se basan en el texto de los documentos.
Utilizar resúmenes contextuales de consultas en lugar de documentos completos Cuando Use semantic ranker y Use query-contextual summaries están marcadas, el LLM utiliza subtítulos extraídos de pasajes clave, en lugar de todos los pasajes, en los documentos mejor clasificados.
Sugerir preguntas de seguimiento Haga que la aplicación de chat sugiera preguntas de seguimiento en función de la respuesta.

Los siguientes pasos le guiarán a través del proceso de cambio de la configuración.

  1. En el navegador, seleccione el icono del engranaje en la parte superior derecha de la página.

  2. Active la casilla Sugerir preguntas de seguimiento y vuelva a formular la misma pregunta.

    What is my deductible?
    

    El chat devuelve sugerencias de preguntas de seguimiento como las siguientes:

    • "¿Cuál es el coste compartido de los servicios fuera de la red?"
    • "¿Los servicios de atención preventiva están sujetos al deducible?.
    • "¿Cómo funciona la franquicia de los medicamentos recetados?"
  3. En la pestaña Configuración, anule la selección de Utilizar el clasificador semántico para la recuperación.

  4. Vuelva a hacer la misma pregunta.

    What is my deductible?
    
  5. ¿Cuál es la diferencia entre las respuestas?

    La respuesta que utilizó el clasificador semántico proporcionó una única respuesta: The deductible for the Northwind Health Plus plan is $2,000 per year.

    La respuesta sin clasificación semántica devolvía una respuesta menos directa: Based on the information provided, it is unclear what your specific deductible is. The Northwind Health Plus plan has different deductible amounts for in-network and out-of-network services, and there is also a separate prescription drug deductible. I would recommend checking with your provider or referring to the specific benefits details for your plan to determine your deductible amount.

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 codespaces en ejecución actualmente procedentes del repositorio de GitHub Azure-Samples/azure-search-openai-demo-csharp.

    Captura de pantalla de todos los codespaces en ejecución, incluidos sus estados y 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.

Obtener ayuda

Este repositorio de muestras ofrece información para la resolución de problemas.

Si su problema no se resuelve, regístrelo en el apartado de problemas del repositorio.

Pasos siguientes