| page_type | lenguas | productos | urlfragment | nombre | descripción | ||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
muestra |
|
| Azure-Search-Openai-Demo-Csharp | CHATGPT + Datos Enterprise (CSHARP) | Una aplicación de muestra CSHARP que chatea con sus datos utilizando la búsqueda de OpenAI y AI. |
Esta muestra demuestra algunos enfoques para crear experiencias similares a ChatGPT sobre sus propios datos utilizando el patrón de generación aumentada de recuperación. Utiliza el servicio Azure OpenAI para acceder al modelo CHATGPT ( gpt-4o-mini ) y Azure AI Buscando la indexación y recuperación de datos.
El repositorio incluye datos de muestra, por lo que está listo para probar de extremo a extremo. En esta aplicación de muestra, utilizamos una compañía ficticia llamada Contoso Electronics, y la experiencia permite a sus empleados hacer preguntas sobre los beneficios, las políticas internas, así como las descripciones y roles de trabajo.

Para obtener más detalles sobre cómo se construyó esta aplicación, consulte:
¡Queremos saber de ti! ¿Está interesado en construir o actualmente construir aplicaciones inteligentes? Tómese unos minutos para completar esta encuesta.
Tomar la encuesta

Para implementar y ejecutar este ejemplo, necesitará
Microsoft.Authorization/roleAssignments/write permisos, como el administrador o propietario de acceso de usuario. Advertencia
Por defecto, esta muestra creará una aplicación de contenedor Azure y un recurso de búsqueda de AI Azure que tiene un costo mensual, así como un recurso de inteligencia de documentos Azure AI que tiene costo por página de documento. Puede cambiarlos a versiones gratuitas de cada uno de ellos si desea evitar este costo cambiando el archivo de parámetros en la carpeta infra (aunque hay algunos límites a considerar; por ejemplo, puede tener hasta 1 recurso de búsqueda de AI de Azure gratuito por suscripción, y el recurso de inteligencia de documentos de AI AIA gratuito solo analiza las primeras 2 páginas de cada documento).
El precio varía por región y uso, por lo que no es posible predecir los costos exactos para su uso. Sin embargo, puede probar la calculadora de precios de Azure para los recursos a continuación:
Para reducir los costos, puede cambiar a SKU gratuitos para varios servicios, pero esos SKU tienen limitaciones. Consulte esta guía sobre la implementación con costos mínimos para más detalles.
azd down .
Tiene algunas opciones para configurar este proyecto. La forma más fácil de comenzar es GitHub CodeSpaces, ya que configurará todas las herramientas para usted, pero también puede configurarlo localmente si lo desea.
Puede ejecutar este repositorio prácticamente utilizando GitHub CodesPaces, que abrirá un código VS basado en la web en su navegador:
Una opción relacionada son los contenedores remotos VS Code, que abrirán el proyecto en su código VS local utilizando la extensión de contenedores Dev:
Instale los siguientes requisitos previos:
Desarrollador de Azure CLI
.NET 8
Git
PowerShell 7+ (PWSH): solo para usuarios de Windows.
IMPORTANTE : Asegúrese de poder ejecutar
pwsh.exedesde un comando PowerShell. Si esto falla, es probable que necesite actualizar PowerShell.
Estibador
IMPORTANTE : Asegúrese de que Docker se esté ejecutando antes de ejecutar cualquier comando de aprovisionamiento / implementación
azd.
Luego, ejecute los siguientes comandos para obtener el proyecto en su entorno local:
azd auth loginazd init -t azure-search-openai-demo-csharpazd env new azure-search-openai-demo-csharpTransmisión en vivo: Implementación desde cero en CodeSpaces Stream en vivo: Implementación desde cero en Windows 11
IMPORTANTE : Asegúrese de que Docker se esté ejecutando antes de ejecutar cualquier comando de aprovisionamiento / implementación
azd.
Ejecute el siguiente comando, si no tiene ningún servicio de Azure preexistente y desea comenzar desde una nueva implementación.
Ejecute azd up : esto provocará recursos de Azure e implementará esta muestra en esos recursos, incluida la construcción del índice de búsqueda basado en los archivos encontrados en la carpeta ./data .
Nota : Esta aplicación utiliza el modelo
gpt-4o-mini. Al elegir a qué región desplegarse, asegúrese de estar disponibles en esa región (es decir, Eastus). Para obtener más información, consulte la documentación del servicio Azure OpenAI.
Después de que la aplicación se haya implementado con éxito, verá una URL impresa en la consola. Haga clic en esa URL para interactuar con la aplicación en su navegador.
Se verá como lo siguiente:

[! Nota]: La aplicación puede tardar unos minutos en implementarse por completo. Después de implementar la aplicación, también tomará unos minutos procesar los documentos que se agregarán a la base de datos Vector.
Si tiene recursos existentes en Azure que desea usar, puede configurar azd para usarlos configurando las siguientes variables de entorno azd :
azd env set AZURE_OPENAI_SERVICE {Name of existing OpenAI service}azd env set AZURE_OPENAI_RESOURCE_GROUP {Name of existing resource group that OpenAI service is provisioned to}azd env set AZURE_OPENAI_CHATGPT_DEPLOYMENT {Name of existing ChatGPT deployment} . Solo necesario si su implementación de chatgpt no es el 'chat' predeterminado.azd env set AZURE_OPENAI_EMBEDDING_DEPLOYMENT {Name of existing embedding model deployment} . Solo es necesario si su implementación del modelo de incrustación no es la embedding predeterminada.azd up Nota
También puede usar cuentas de búsqueda y almacenamiento existentes. Consulte ./infra/main.parameters.json para una lista de variables de entorno para pasar a azd env set para configurar esos recursos existentes.
Importante
Asegúrese de que Docker se esté ejecutando antes de ejecutar cualquier comando de aprovisionamiento / implementación azd .
azd up Nota
Asegúrese de tener archivos BICEP compatibles con AZD en su repositorio y agregue un archivo de flujo de trabajo de acciones de GitHub inicial que se pueda activar manualmente (para la implementación inicial) o en el cambio de código (redeploqueando automáticamente con los últimos cambios) para que su repositorio sea compatible con los espacios de la aplicación, debe realizar cambios en los cambios principales y los parámetros principales para permitir que AZD a AZD a la despliegue existente desplegable a un recurso existente con un recurso existente con el grupo de recursos existentes con un recurso existente.
"resourceGroupName" : {
"value" : " ${AZURE_RESOURCE_GROUP} "
} "tags" : {
"value" : " ${AZURE_TAGS} "
} param resourceGroupName string = ''
param tags string = '' var baseTags = { 'azd-env-name' : environmentName }
var updatedTags = union ( empty ( tags ) ? {} : base64ToJson ( tags ), baseTags )
Make sure to use " updatedTags " when assigning " tags " to resource group created in your bicep file and update the other resources to use " baseTags " instead of " tags ". For example -
``` json
resource rg 'Microsoft.Resources/resourceGroups@2021-04-01' = {
name : ! empty ( resourceGroupName ) ? resourceGroupName : '${ abbrs . resourcesResourceGroups }${ environmentName }'
location : location
tags : updatedTags
}Importante
Asegúrese de que Docker se esté ejecutando antes de ejecutar cualquier comando de aprovisionamiento / implementación azd .
Ejecutar azd auth login
Después de que la aplicación se implementa, establezca la variable de entorno AZURE_KEY_VAULT_ENDPOINT . Puede encontrar el valor en el archivo .Azure/Your-Environment-Name/.env o el portal Azure.
Ejecute el siguiente comando .NET CLI para iniciar el servidor API mínimo ASP.NET Core (host del cliente):
dotnet run --project ./app/backend/MinimalApi.csproj --urls=http://localhost:7181/
Navegue a http: // localhost: 7181, y pruebe la aplicación.
Esta muestra incluye un cliente .NET Maui, empaquetando la experiencia como una aplicación que puede ejecutarse en un escritorio de Windows/MacOS o en dispositivos Android e iOS. El cliente Maui aquí se implementa utilizando Blazor Hybrid, lo que le permite compartir la mayoría de los códigos con el sitio web frontend.
Abra App/App-Maui.sln para abrir la solución que incluye al cliente Maui
Editar aplicación/maui-blazor/mauiprogram.cs , actualizar client.BaseAddress con la URL para el backend.
Si se está ejecutando en Azure, use la URL para el backend del servicio desde los pasos anteriores. Si se ejecuta localmente, use http: // localhost: 7181.
Establezca Mauiblazor como el proyecto de inicio y ejecute la aplicación
Ejecute lo siguiente si desea dar a alguien más acceso al entorno implementado y existente.
azd init -t azure-search-openai-demo-csharpazd env refresh -e {environment name} : tenga en cuenta que necesitarán el nombre del entorno AZD, la identificación de suscripción y la ubicación para ejecutar este comando: puede encontrar esos valores en su archivo ./azure/{env name}/.env . Esto llenará el archivo .env de su entorno AZD con todas las configuraciones necesarias para ejecutar la aplicación localmente.pwsh ./scripts/roles.ps1 : esto asignará todos los roles necesarios al usuario para que puedan ejecutar la aplicación localmente. Si no tienen el permiso necesario para crear roles en la suscripción, es posible que deba ejecutar este script para ellos. Solo asegúrese de establecer la variable de entorno AZURE_PRINCIPAL_ID en el archivo AZD .env o en el shell activo a su ID de Azure, que pueden obtener con az account show . Correr azd down
azd . La URL se imprime cuando azd se completa (como "punto final"), o puede encontrarla en el portal de Azure.Una vez en la aplicación web:
Para habilitar las ideas de la aplicación y el rastreo de cada solicitud, junto con el registro de errores, establezca la variable AZURE_USE_APPLICATION_INSIGHTS en verdadero antes de ejecutar azd up
azd env set AZURE_USE_APPLICATION_INSIGHTS trueazd upPara ver los datos de rendimiento, vaya al recurso de información de la aplicación en su grupo de recursos, haga clic en la cuchilla "Investigar -> Rendimiento" y navegue a cualquier solicitud HTTP para ver los datos de tiempo. Para inspeccionar el rendimiento de las solicitudes de chat, use el botón "perforar en muestras" para ver trazas de extremo a extremo de todas las llamadas de API realizadas para cualquier solicitud de chat:

Para ver cualquier excepción y error del servidor, navegue a la cuchilla "Investigar -> fallas" y use las herramientas de filtrado para localizar una excepción específica. Puedes ver trazas de pitón de pitón en el lado derecho.
De manera predeterminada, la aplicación de contenedor Azure implementada no tendrá habilitadas restricciones de autenticación o acceso, lo que significa que cualquier persona con acceso de red enrutable a la aplicación Contenedor puede chatear con sus datos indexados. Puede requerir autenticación a su Azure Active Directory siguiendo el tutorial de autenticación de la aplicación Agregar contenedor y establecerlo con la aplicación de contenedor implementada.
Para luego limitar el acceso a un conjunto específico de usuarios o grupos, puede seguir los pasos de restringir su aplicación de anuncios de Azure a un conjunto de usuarios cambiando "asignación requerida"? Opción debajo de la aplicación Enterprise y luego asignando acceso a usuarios/grupos. Los usuarios no otorgados el acceso explícito recibirá el mensaje de error -AADSTS50105: su administrador ha configurado la aplicación <PPP_NAME> para bloquear a los usuarios a menos que se les otorgue específicamente el acceso ('asignado') a la aplicación.
Con GPT-4o-mini , es posible admitir una generación aumentada de recuperación enriquecida al proporcionar texto y imagen como contenido de origen. Para habilitar el soporte de la visión, debe habilitar USE_VISION y usar el modelo GPT-4o o GPT-4o-mini al aprovisionarse.
Nota
Debería reintegrar el material de soporte y volver a implementar la aplicación después de habilitar el soporte GPT-4O si ya ha implementado la aplicación antes. Esto se debe a que habilitar el soporte GPT-4O requiere que se agregen nuevos campos al índice de búsqueda.
Para habilitar el soporte GPT-4V con el servicio Azure OpenAI, ejecute los siguientes comandos:
azd env set USE_VISION true
azd env set USE_AOAI true
azd env set AZURE_OPENAI_CHATGPT_MODEL_NAME gpt-4o-mini
azd env set AZURE_OPENAI_RESOURCE_LOCATION eastus # Please check the gpt model availability for more details.
azd upPara habilitar el soporte de la visión con OpenAI, ejecute los siguientes comandos:
azd env set USE_VISION true
azd env set USE_AOAI false
azd env set OPENAI_CHATGPT_DEPLOYMENT gpt-4o
azd upPara limpiar los recursos implementados previamente, ejecute el siguiente comando:
azd down --purge
azd env set AZD_PREPDOCS_RAN false # This is to ensure that the documents are re-indexed with the new fields. Además de los consejos a continuación, puede encontrar una documentación extensa en la carpeta Docs.
Esta muestra está diseñada para ser un punto de partida para su propia aplicación de producción, pero debe hacer una revisión exhaustiva de la seguridad y el rendimiento antes de implementar la producción. Aquí hay algunas cosas a considerar:
Capacidad de OpenAI : el TPM predeterminado (tokens por minuto) se establece en 30k. Eso es equivalente a aproximadamente 30 conversaciones por minuto (suponiendo 1k por mensaje/respuesta del usuario). Puede aumentar la capacidad cambiando los parámetros chatGptDeploymentCapacity e embeddingDeploymentCapacity en infra/main.bicep a la capacidad máxima de su cuenta. También puede ver la pestaña Cuotas en Azure OpenAI Studio para comprender cuánta capacidad tiene.
Almacenamiento de Azure : la cuenta de almacenamiento predeterminada utiliza el sku Standard_LRS . Para mejorar su resiliencia, recomendamos usar Standard_ZRS para implementaciones de producción, que puede especificar utilizando la propiedad sku bajo el módulo storage en infra/main.bicep .
Azure AI Search : si ve errores sobre la capacidad del servicio de búsqueda que se excede, puede encontrar útil aumentar el número de réplicas cambiando replicaCount en infra/core/search/search-services.bicep .
Aplicaciones de contenedores Azure : de forma predeterminada, esta aplicación implementa contenedores con 0.5 núcleos de CPU y 1 GB de memoria. Las réplicas mínimas son 1 y máximo 10. Para esta aplicación, puede establecer valores como containerCpuCoreCount , containerMaxReplicas , containerMemory , containerMinReplicas en el archivo infra/core/host/container-app.bicep para satisfacer sus necesidades. Puede usar reglas de escala automática o reglas de escala programadas, y ampliar el máximo/mínimo según la carga.
Autenticación : de forma predeterminada, la aplicación implementada se puede acceder públicamente. Recomendamos restringir el acceso a usuarios autenticados. Vea habilitar la autenticación anterior sobre cómo habilitar la autenticación.
Redes : recomendamos implementar dentro de una red virtual. Si la aplicación es solo para uso interno de la empresa, use una zona DNS privada. También considere el uso de Azure API Management (APIM) para firewalls y otras formas de protección. Para más detalles, lea la arquitectura de referencia de la zona de aterrizaje de Azure OpenAI.
LoadTesting : Recomendamos ejecutar una prueba de carga para su número esperado de usuarios.
Azure.AI.OpenAI nuget paqueteNota
Los documentos PDF utilizados en esta demostración contienen información generada utilizando un modelo de idioma (servicio Azure OpenAI). La información contenida en estos documentos es solo para fines de demostración y no refleja las opiniones o creencias de Microsoft. Microsoft no hace representaciones o garantías de ningún tipo, expresas o implícitas, sobre la integridad, precisión, confiabilidad, idoneidad o disponibilidad con respecto a la información contenida en este documento. Todos los derechos reservados para Microsoft.
Pregunta : ¿Por qué necesitamos dividir los PDF en trozos cuando Azure AI Search admite la búsqueda de documentos grandes?
Respuesta : Chunking nos permite limitar la cantidad de información que enviamos a OpenAI debido a los límites de token. Al romper el contenido, nos permite encontrar fácilmente fragmentos potenciales de texto que podemos inyectar en OpenAI. El método de fragmentación que usamos aprovecha una ventana deslizante de texto de tal manera que las oraciones que terminan un fragmento comenzarán la siguiente. Esto nos permite reducir la posibilidad de perder el contexto del texto.