Inicio rápido: chatee con modelos de Azure OpenAI usando sus propios datos
En este inicio rápido puede usar sus propios datos con modelos de Azure OpenAI. Usar modelos de Azure OpenAI con sus los datos puede proporcionarle una potente plataforma de inteligencia artificial conversacional que permita una comunicación más rápida y precisa.
Requisitos previos
Los siguientes recursos:
- Azure OpenAI
- Azure Blob Storage
- Azure AI Search
- Un recurso de Azure OpenAI implementado en una región compatible y con un modelo compatible.
- Asegúrese de que tiene asignado al menos el rol de Colaborador de Cognitive Services para el recurso de Azure OpenAI.
- Descargue los datos de ejemplo de GitHub si no tiene sus propios datos.
Añada datos mediante Azure OpenAI Studio
Sugerencia
Puede usar Azure Developer CLI para desarrolladores de Azure para crear mediante programación los recursos necesarios para Azure OpenAI en sus datos
Vaya a Azure OpenAI Studio e inicie sesión con credenciales que le permitan acceder al recurso de Azure OpenAI. Durante o después del flujo de trabajo de inicio de sesión, seleccione el directorio, la suscripción de Azure y el recurso de Azure OpenAI adecuados.
Seleccione el icono de Bring your own data
En el Área de juegos de chat, seleccione Agregue sus datos y luego Agregar una fuente de datos
En el panel que aparece, seleccione Cargar archivos (versión preliminar) en Seleccionar origen de datos. Azure OpenAI necesita un recurso de almacenamiento y un recurso de búsqueda para acceder a los datos e indexarlos.
Sugerencia
- Consulte los recursos siguientes para más información:
- Para documentos y conjuntos de datos con texto largo, se recomienda usar el script de preparación de datos disponible.
Para que Azure OpenAI acceda a la cuenta de almacenamiento, deberá activar Uso compartido de recursos entre orígenes (CORS). Si CORS aún no está activado para el recurso de Azure Blob Storage, seleccione Activar CORS.
Seleccione el recurso de búsqueda de Azure AI y confirme que la conexión supondrá el uso de su cuenta. Luego, seleccione Siguiente.
En el panel Cargar archivos, seleccione Examinar un archivo y seleccione los archivos que ha descargado en la sección de requisitos previos o sus propios datos. A continuación, seleccione Cargar archivos. Seleccione Siguiente.
En el panel Administración de datos, puede elegir si desea habilitar la búsqueda semántica o el vector de búsqueda del índice.
Importante
- La búsqueda semántica y el vector de búsqueda están sujetas a precios adicionales. Debe elegir SKU Básico o superior para habilitar la búsqueda semántica o la búsqueda vectorial. Para más información, vea diferencias de planes de tarifa y límites de servicio.
- Para ayudar a mejorar la calidad de la recuperación de la información y la respuesta del modelo, se recomienda habilitar la búsqueda semántica para los siguientes idiomas de origen de los datos: inglés, francés, español, portugués, italiano, alemán, chino (Zh), japonés, coreano, ruso, y árabe.
Revise los detalles que ingresó y seleccione Guardar y cerrar. Ahora puede chatear con el modelo, que usará la información de sus datos para construir la respuesta.
Área de juegos de chat
Comience a explorar las funcionalidades de Azure OpenAI con un enfoque sin código a través del área de juegos de chat. Se trata simplemente de un cuadro de texto donde puede enviar un mensaje para generar una finalización. Desde esta página puede iterar y experimentar rápidamente con las funcionalidades.
El área de juegos le ofrece opciones para adaptar su experiencia de chat. A la derecha, puede seleccionar Implementación para determinar qué modelo genera una respuesta mediante los resultados de búsqueda del índice. Usted elige el número de mensajes anteriores que se van a incluir como historial de conversaciones para las respuestas generadas en el futuro. El historial de conversaciones proporciona contexto para generar respuestas relacionadas, pero también consume el uso de tokens. El indicador de progreso del token de entrada realiza un seguimiento del recuento de tokens de la pregunta que envía.
La configuración avanzada de la izquierda consiste de parámetros en tiempo de ejecución, que proporcionan control sobre la recuperación y búsqueda de información relevante de los datos. Un buen caso de uso es cuando desea asegurarse de que las respuestas solo se generan en función de los datos o que el modelo no puede generar una respuesta basada en la información existente de los datos.
Rigurosidad determina la agresividad del sistema en el filtrado de los documentos de búsqueda en función de sus puntuaciones de similitud. Establecer un valor de rigurosidad de 5 indica que el sistema filtrará los documentos de forma agresiva, aplicando un umbral de similitud muy alto. La búsqueda semántica puede resultar útil en este escenario porque los modelos de clasificación realizan un mejor trabajo de deducir la intención de la consulta. Los niveles de rigor más bajos producen respuestas más detalladas, pero también podrían incluir información que no está en su índice. Se establece en 3 de manera predeterminada.
Documentos recuperados es un entero que se puede establecer en 3, 5, 10 o 20, y controla el número de fragmentos del documento proporcionados al modelo de lenguaje grande para formular la respuesta final. De forma predeterminada, está establecida en 5.
Cuando se habilita Limitar respuestas a los datos, el modelo intenta confiar solo en los documentos para las respuestas. Esto se establece en true de forma predeterminada.
Envíe la primera consulta. Los modelos de chat funcionan mejor en ejercicios de preguntas y respuestas. Por ejemplo, "¿Cuáles son mis planes de salud disponibles?" o "¿Cuál es la opción prémium de salud?".
Es probable que se produzcan errores en las consultas que requieran análisis de datos, como "¿Qué plan de salud es más popular?". Es probable que se produzca un error en las consultas que requieren información sobre todos los datos, como "¿Cuántos documentos he cargado?". Recuerde que el motor de búsqueda busca fragmentos que tengan términos, frases o construcciones exactos o similares a la consulta. Y aunque el modelo puede comprender la pregunta, si los resultados de búsqueda son fragmentos del conjunto de datos, no es la información adecuada para responder a ese tipo de pregunta.
Los chats están restringidos por el número de documentos (fragmentos) devueltos en la respuesta (limitado a 3-20 en el área de juegos de Azure OpenAI Studio). Como puede imaginar, plantear una pregunta sobre "todos los títulos" requiere un examen completo de todo el almacén de vectores.
Implementación del modelo
Una vez que esté satisfecho con la experiencia de Azure OpenAI Studio, podría implementar una aplicación web directamente desde Studio seleccionando el botón Implementar en.
Esto le ofrece la opción de implementar en una aplicación web independiente o un copiloto en Copilot Studio (versión preliminar) si está usando sus propios datos en el modelo.
Por ejemplo, si decide implementar una aplicación web:
La primera vez que implemente una aplicación web, debería seleccionar Crear una nueva aplicación web. Elija un nombre para la aplicación, que pasará a formar parte de la dirección URL de la aplicación. Por ejemplo, https://<appname>.azurewebsites.net
.
Seleccione la suscripción, el grupo de recursos, la ubicación y el plan de precios de la aplicación publicada. Para actualizar una aplicación existente, seleccione Publicar en una aplicación web existente y elija el nombre de la aplicación anterior en el menú desplegable.
Si decide implementar una aplicación web, vea las consideraciones importantes para usarla.
Requisitos previos
Los siguientes recursos:
- Azure OpenAI
- Azure Blob Storage
- Azure AI Search
- Un recurso de Azure OpenAI implementado en una región compatible y con un modelo compatible.
- Asegúrese de que tiene asignado al menos el rol de Colaborador de Cognitive Services para el recurso de Azure OpenAI.
- Descargue los datos de ejemplo de GitHub si no tiene sus propios datos.
- SDK de .NET 8
Añada datos mediante Azure OpenAI Studio
Sugerencia
Puede usar Azure Developer CLI para desarrolladores de Azure para crear mediante programación los recursos necesarios para Azure OpenAI en sus datos
Vaya a Azure OpenAI Studio e inicie sesión con credenciales que le permitan acceder al recurso de Azure OpenAI. Durante o después del flujo de trabajo de inicio de sesión, seleccione el directorio, la suscripción de Azure y el recurso de Azure OpenAI adecuados.
Seleccione el icono de Bring your own data
En el Área de juegos de chat, seleccione Agregue sus datos y luego Agregar una fuente de datos
En el panel que aparece, seleccione Cargar archivos (versión preliminar) en Seleccionar origen de datos. Azure OpenAI necesita un recurso de almacenamiento y un recurso de búsqueda para acceder a los datos e indexarlos.
Sugerencia
- Consulte los recursos siguientes para más información:
- Para documentos y conjuntos de datos con texto largo, se recomienda usar el script de preparación de datos disponible.
Para que Azure OpenAI acceda a la cuenta de almacenamiento, deberá activar Uso compartido de recursos entre orígenes (CORS). Si CORS aún no está activado para el recurso de Azure Blob Storage, seleccione Activar CORS.
Seleccione el recurso de búsqueda de Azure AI y confirme que la conexión supondrá el uso de su cuenta. Luego, seleccione Siguiente.
En el panel Cargar archivos, seleccione Examinar un archivo y seleccione los archivos que ha descargado en la sección de requisitos previos o sus propios datos. A continuación, seleccione Cargar archivos. Seleccione Siguiente.
En el panel Administración de datos, puede elegir si desea habilitar la búsqueda semántica o el vector de búsqueda del índice.
Importante
- La búsqueda semántica y el vector de búsqueda están sujetas a precios adicionales. Debe elegir SKU Básico o superior para habilitar la búsqueda semántica o la búsqueda vectorial. Para más información, vea diferencias de planes de tarifa y límites de servicio.
- Para ayudar a mejorar la calidad de la recuperación de la información y la respuesta del modelo, se recomienda habilitar la búsqueda semántica para los siguientes idiomas de origen de los datos: inglés, francés, español, portugués, italiano, alemán, chino (Zh), japonés, coreano, ruso, y árabe.
Revise los detalles que ingresó y seleccione Guardar y cerrar. Ahora puede chatear con el modelo, que usará la información de sus datos para construir la respuesta.
Recuperación de variables necesarias
Para realizar correctamente una llamada a Azure OpenAI, necesitará las siguientes variables. Este inicio rápido supone que cargó los datos en una cuenta de Azure Blob Storage y que creó un índice de Azure AI Search. Consulte Añada sus datos mediante Azure AI Studio
Nombre de la variable | Value |
---|---|
AZURE_OPENAI_ENDPOINT |
Este valor se puede encontrar en la sección Claves y Punto de conexión al examinar su recurso de Azure OpenAI en Azure Portal. Como alternativa, puede encontrar el valor en Azure AI Studio>Área de juegos de chat>Vista Código. Punto de conexión de ejemplo: https://my-resoruce.openai.azure.com . |
AZURE_OPENAI_API_KEY |
Este valor se puede encontrar en la sección Administración de recursos>Claves y Punto de conexión al examinar su recurso de Azure OpenAI en Azure Portal. Puede usar KEY1 o KEY2 . Tener siempre dos claves permite rotar y regenerar las claves de forma segura sin provocar una interrupción del servicio. |
AZURE_OPENAI_DEPLOYMENT_ID |
Este valor se corresponde con el nombre personalizado que eligió para la implementación al implementar un modelo. Este valor se puede encontrar en Administración de recursos>Implementaciones en Azure Portal, o bien en Administración>Implementaciones en Azure AI Studio. |
AZURE_AI_SEARCH_ENDPOINT |
Este valor se puede encontrar en la sección Información general al examinar su recurso de Azure AI Search de Azure Portal. |
AZURE_AI_SEARCH_API_KEY |
Este valor se puede encontrar en la sección Configuración>Claves al examinar su recurso de Azure AI Search en Azure Portal. Puede usar la clave de administrador principal o la clave de administrador secundaria. Tener siempre dos claves permite rotar y regenerar las claves de forma segura sin provocar una interrupción del servicio. |
AZURE_AI_SEARCH_INDEX |
Este valor se corresponde con el nombre del índice que creó para almacenar los datos. Puede encontrarlo en la sección Información general, al examinar el recurso de Azure AI Search desde Azure Portal. |
Variables de entorno
Cree y asigne variables de entorno persistentes para la clave y el punto de conexión.
Importante
Si usa una clave de API, almacénela de forma segura en otro lugar, como en Azure Key Vault. No incluya la clave de API directamente en el código ni la exponga nunca públicamente.
Para más información sobre la seguridad de los servicios de AI, consulte Autenticación de solicitudes a los servicios de Azure AI.
setx AZURE_OPENAI_ENDPOINT REPLACE_WITH_YOUR_AOAI_ENDPOINT_VALUE_HERE
setx AZURE_OPENAI_API_KEY REPLACE_WITH_YOUR_AOAI_KEY_VALUE_HERE
setx AZURE_OPENAI_DEPLOYMENT_ID REPLACE_WITH_YOUR_AOAI_DEPLOYMENT_VALUE_HERE
setx AZURE_AI_SEARCH_ENDPOINT REPLACE_WITH_YOUR_AZURE_SEARCH_RESOURCE_VALUE_HERE
setx AZURE_AI_SEARCH_API_KEY REPLACE_WITH_YOUR_AZURE_SEARCH_RESOURCE_KEY_VALUE_HERE
setx AZURE_AI_SEARCH_INDEX REPLACE_WITH_YOUR_INDEX_NAME_HERE
Creación de una aplicación de .NET Core
En una ventana de consola (por ejemplo, cmd, PowerShell o Bash), use el comando dotnet new
para crear una nueva aplicación de consola con el nombre azure-openai-quickstart
. Este comando crea un sencillo proyecto "Hola mundo" con un solo archivo de origen de C#: Program.cs.
dotnet new console -n azure-openai-quickstart
Cambie el directorio a la carpeta de aplicaciones recién creada. Para compilar la aplicación:
dotnet build
La salida de la compilación no debe contener advertencias ni errores.
...
Build succeeded.
0 Warning(s)
0 Error(s)
...
Instalar la biblioteca cliente de OpenAI .NET con:
dotnet add package Azure.AI.OpenAI --prerelease
En el directorio del proyecto, abra el archivo Program.cs y reemplace el contenido con el código siguiente:
Sin transmisión de respuesta
using Azure;
using Azure.AI.OpenAI;
using Azure.AI.OpenAI.Chat;
using OpenAI.Chat;
using System.Text.Json;
using static System.Environment;
string azureOpenAIEndpoint = GetEnvironmentVariable("AZURE_OPENAI_ENDPOINT");
string azureOpenAIKey = GetEnvironmentVariable("AZURE_OPENAI_API_KEY");
string deploymentName = GetEnvironmentVariable("AZURE_OPENAI_DEPLOYMENT_ID");
string searchEndpoint = GetEnvironmentVariable("AZURE_AI_SEARCH_ENDPOINT");
string searchKey = GetEnvironmentVariable("AZURE_AI_SEARCH_API_KEY");
string searchIndex = GetEnvironmentVariable("AZURE_AI_SEARCH_INDEX");
#pragma warning disable AOAI001
AzureOpenAIClient azureClient = new(
new Uri(azureOpenAIEndpoint),
new AzureKeyCredential(azureOpenAIKey));
ChatClient chatClient = azureClient.GetChatClient(deploymentName);
ChatCompletionOptions options = new();
options.AddDataSource(new AzureSearchChatDataSource()
{
Endpoint = new Uri(searchEndpoint),
IndexName = searchIndex,
Authentication = DataSourceAuthentication.FromApiKey(searchKey),
});
ChatCompletion completion = chatClient.CompleteChat(
[
new UserChatMessage("What are my available health plans?"),
], options);
Console.WriteLine(completion.Content[0].Text);
AzureChatMessageContext onYourDataContext = completion.GetAzureMessageContext();
if (onYourDataContext?.Intent is not null)
{
Console.WriteLine($"Intent: {onYourDataContext.Intent}");
}
foreach (AzureChatCitation citation in onYourDataContext?.Citations ?? [])
{
Console.WriteLine($"Citation: {citation.Content}");
}
Importante
En el caso de producción, use una forma segura de almacenar sus credenciales y acceder a ellas, como Azure Key Vault. Para obtener más información sobre la seguridad de las credenciales, consulte el artículo Seguridad de servicios de Azure AI.
dotnet run program.cs
Output
Contoso Electronics offers two health plans: Northwind Health Plus and Northwind Standard [doc1]. Northwind Health Plus is a comprehensive plan that provides coverage for medical, vision, and dental services, prescription drug coverage, mental health and substance abuse coverage, and coverage for preventive care services. It also offers coverage for emergency services, both in-network and out-of-network. On the other hand, Northwind Standard is a basic plan that provides coverage for medical, vision, and dental services, prescription drug coverage, and coverage for preventive care services. However, it does not offer coverage for emergency services, mental health and substance abuse coverage, or out-of-network services [doc1].
Intent: ["What are the available health plans?", "List of health plans available", "Health insurance options", "Types of health plans offered"]
Citation:
Contoso Electronics plan and benefit packages
Thank you for your interest in the Contoso electronics plan and benefit packages. Use this document to
learn more about the various options available to you...// Omitted for brevity
Esto esperará hasta que el modelo haya generado toda su respuesta antes de imprimir los resultados. Como alternativa, si desea transmitir de forma asincrónica la respuesta e imprimir los resultados, puede reemplazar el contenido de Program.cs por el código del ejemplo siguiente.
Asincrónico con transmisión
using Azure;
using Azure.AI.OpenAI;
using Azure.AI.OpenAI.Chat;
using OpenAI.Chat;
using static System.Environment;
string azureOpenAIEndpoint = GetEnvironmentVariable("AZURE_OPENAI_ENDPOINT");
string azureOpenAIKey = GetEnvironmentVariable("AZURE_OPENAI_API_KEY");
string deploymentName = GetEnvironmentVariable("AZURE_OPENAI_DEPLOYMENT_ID");
string searchEndpoint = GetEnvironmentVariable("AZURE_AI_SEARCH_ENDPOINT");
string searchKey = GetEnvironmentVariable("AZURE_AI_SEARCH_API_KEY");
string searchIndex = GetEnvironmentVariable("AZURE_AI_SEARCH_INDEX");
#pragma warning disable AOAI001
AzureOpenAIClient azureClient = new(
new Uri(azureOpenAIEndpoint),
new AzureKeyCredential(azureOpenAIKey));
ChatClient chatClient = azureClient.GetChatClient(deploymentName);
ChatCompletionOptions options = new();
options.AddDataSource(new AzureSearchChatDataSource()
{
Endpoint = new Uri(searchEndpoint),
IndexName = searchIndex,
Authentication = DataSourceAuthentication.FromApiKey(searchKey),
});
var chatUpdates = chatClient.CompleteChatStreamingAsync(
[
new UserChatMessage("What are my available health plans?"),
], options);
AzureChatMessageContext onYourDataContext = null;
await foreach (var chatUpdate in chatUpdates)
{
if (chatUpdate.Role.HasValue)
{
Console.WriteLine($"{chatUpdate.Role}: ");
}
foreach (var contentPart in chatUpdate.ContentUpdate)
{
Console.Write(contentPart.Text);
}
if (onYourDataContext == null)
{
onYourDataContext = chatUpdate.GetAzureMessageContext();
}
}
Console.WriteLine();
if (onYourDataContext?.Intent is not null)
{
Console.WriteLine($"Intent: {onYourDataContext.Intent}");
}
foreach (AzureChatCitation citation in onYourDataContext?.Citations ?? [])
{
Console.Write($"Citation: {citation.Content}");
}
Código fuente| Código fuente | Ejemplo
Requisitos previos
Los siguientes recursos:
- Azure OpenAI
- Azure Blob Storage
- Azure AI Search
- Un recurso de Azure OpenAI implementado en una región compatible y con un modelo compatible.
- Asegúrese de que tiene asignado al menos el rol de Colaborador de Cognitive Services para el recurso de Azure OpenAI.
- Descargue los datos de ejemplo de GitHub si no tiene sus propios datos.
Añada datos mediante Azure OpenAI Studio
Sugerencia
Puede usar Azure Developer CLI para desarrolladores de Azure para crear mediante programación los recursos necesarios para Azure OpenAI en sus datos
Vaya a Azure OpenAI Studio e inicie sesión con credenciales que le permitan acceder al recurso de Azure OpenAI. Durante o después del flujo de trabajo de inicio de sesión, seleccione el directorio, la suscripción de Azure y el recurso de Azure OpenAI adecuados.
Seleccione el icono de Bring your own data
En el Área de juegos de chat, seleccione Agregue sus datos y luego Agregar una fuente de datos
En el panel que aparece, seleccione Cargar archivos (versión preliminar) en Seleccionar origen de datos. Azure OpenAI necesita un recurso de almacenamiento y un recurso de búsqueda para acceder a los datos e indexarlos.
Sugerencia
- Consulte los recursos siguientes para más información:
- Para documentos y conjuntos de datos con texto largo, se recomienda usar el script de preparación de datos disponible.
Para que Azure OpenAI acceda a la cuenta de almacenamiento, deberá activar Uso compartido de recursos entre orígenes (CORS). Si CORS aún no está activado para el recurso de Azure Blob Storage, seleccione Activar CORS.
Seleccione el recurso de búsqueda de Azure AI y confirme que la conexión supondrá el uso de su cuenta. Luego, seleccione Siguiente.
En el panel Cargar archivos, seleccione Examinar un archivo y seleccione los archivos que ha descargado en la sección de requisitos previos o sus propios datos. A continuación, seleccione Cargar archivos. Seleccione Siguiente.
En el panel Administración de datos, puede elegir si desea habilitar la búsqueda semántica o el vector de búsqueda del índice.
Importante
- La búsqueda semántica y el vector de búsqueda están sujetas a precios adicionales. Debe elegir SKU Básico o superior para habilitar la búsqueda semántica o la búsqueda vectorial. Para más información, vea diferencias de planes de tarifa y límites de servicio.
- Para ayudar a mejorar la calidad de la recuperación de la información y la respuesta del modelo, se recomienda habilitar la búsqueda semántica para los siguientes idiomas de origen de los datos: inglés, francés, español, portugués, italiano, alemán, chino (Zh), japonés, coreano, ruso, y árabe.
Revise los detalles que ingresó y seleccione Guardar y cerrar. Ahora puede chatear con el modelo, que usará la información de sus datos para construir la respuesta.
Recuperación de variables necesarias
Para realizar correctamente una llamada a Azure OpenAI, necesitará las siguientes variables. Este inicio rápido supone que cargó los datos en una cuenta de Azure Blob Storage y que creó un índice de Azure AI Search. Para más información, consulte Incorporación de datos mediante Azure AI Studio.
Nombre de la variable | Value |
---|---|
AZURE_OPENAI_ENDPOINT |
Puede encontrar este valor en la sección Claves y Punto de conexión al examinar su recurso de Azure OpenAI desde Azure Portal. Como alternativa, puede encontrar el valor en Azure AI Studio>Área de juegos de chat>Vista Código. Punto de conexión de ejemplo: https://my-resource.openai.azure.com . |
AZURE_OPENAI_API_KEY |
Puede encontrar este valor en la sección Administración de recursos>Claves y Punto de conexión al examinar su recurso de Azure OpenAI en Azure Portal. Puede usar KEY1 o KEY2 . Tener siempre dos claves permite rotar y regenerar las claves de forma segura sin provocar una interrupción del servicio. |
AZURE_OPEN_AI_DEPLOYMENT_ID |
Este valor se corresponde con el nombre personalizado que eligió para la implementación al implementar un modelo. Este valor se puede encontrar en Administración de recursos>Implementaciones en Azure Portal, o bien, en Administración>Implementaciones en Azure AI Studio. |
AZURE_AI_SEARCH_ENDPOINT |
Puede encontrar este valor en la sección Información general, al examinar el recurso de Azure AI Search desde Azure Portal. |
AZURE_AI_SEARCH_API_KEY |
Puede encontrar este valor en la sección Configuración>Claves al examinar su recurso de Azure AI Search en Azure Portal. Puede usar la clave de administrador principal o la clave de administrador secundaria. Tener siempre dos claves permite rotar y regenerar las claves de forma segura sin provocar una interrupción del servicio. |
AZURE_AI_SEARCH_INDEX |
Este valor se corresponde con el nombre del índice que creó para almacenar los datos. Puede encontrarlo en la sección Información general, al examinar el recurso de Azure AI Search desde Azure Portal. |
Variables de entorno
Cree y asigne variables de entorno persistentes para la clave y el punto de conexión.
Importante
Si usa una clave de API, almacénela de forma segura en otro lugar, como en Azure Key Vault. No incluya la clave de API directamente en el código ni la exponga nunca públicamente.
Para más información acerca de la seguridad de los servicios de AI, consulte Autenticación de solicitudes a los servicios de Azure AI.
Nota:
Spring AI tiene como valor predeterminado el nombre del modelo en gpt-35-turbo
. Solo es necesario proporcionar el valor SPRING_AI_AZURE_OPENAI_MODEL
si ha implementado un modelo con otro nombre.
export SPRING_AI_AZURE_OPENAI_ENDPOINT=REPLACE_WITH_YOUR_AOAI_ENDPOINT_VALUE_HERE
export SPRING_AI_AZURE_OPENAI_API_KEY=REPLACE_WITH_YOUR_AOAI_KEY_VALUE_HERE
export SPRING_AI_AZURE_COGNITIVE_SEARCH_ENDPOINT=REPLACE_WITH_YOUR_AZURE_SEARCH_RESOURCE_VALUE_HERE
export SPRING_AI_AZURE_COGNITIVE_SEARCH_API_KEY=REPLACE_WITH_YOUR_AZURE_SEARCH_RESOURCE_KEY_VALUE_HERE
export SPRING_AI_AZURE_COGNITIVE_SEARCH_INDEX=REPLACE_WITH_YOUR_INDEX_NAME_HERE
export SPRING_AI_AZURE_OPENAI_MODEL=REPLACE_WITH_YOUR_MODEL_NAME_HERE
Creación de una nueva aplicación de Spring
Actualmente, Spring AI no admite las opciones AzureCognitiveSearchChatExtensionConfiguration
que permiten que una consulta de Azure AI encapsule el método de Generación aumentada de recuperación (RAG), y oculta los detalles del usuario. Como alternativa, todavía puede invocar el método RAG directamente en la aplicación para consultar datos en el índice de Búsqueda de Azure AI y usar documentos recuperados para aumentar la consulta.
Spring AI admite una abstracción de VectorStore y puede encapsular Búsqueda de Azure AI en una implementación de Spring AI VectorStore para consultar los datos personalizados. El siguiente proyecto implementa un VectorStore personalizado respaldado por Búsqueda de Azure AI y ejecuta directamente operaciones RAG.
En una ventana de Bash, cree un directorio para la aplicación y vaya a ese directorio.
mkdir ai-custom-data-demo && cd ai-custom-data-demo
Ejecute el comando spring init
desde el directorio de trabajo. Este comando crea una estructura de directorio estándar para el proyecto de Spring, incluido el archivo de origen de la clase Java principal y el archivo pom.xml que se usa para administrar proyectos basados en Maven.
spring init -a ai-custom-data-demo -n AICustomData --force --build maven -x
Los archivos y carpetas generados son similares a la estructura siguiente:
ai-custom-data-demo/
|-- pom.xml
|-- mvn
|-- mvn.cmd
|-- HELP.md
|-- src/
|-- main/
| |-- resources/
| | |-- application.properties
| |-- java/
| |-- com/
| |-- example/
| |-- aicustomdatademo/
| |-- AiCustomDataApplication.java
|-- test/
|-- java/
|-- com/
|-- example/
|-- aicustomdatademo/
|-- AiCustomDataApplicationTests.java
Edición de la aplicación de Spring
Edite el archivo pom.xml.
Desde la raíz del directorio del proyecto, abra el archivo pom.xml en su editor o IDE preferido y sobrescriba el archivo con el siguiente contenido:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>3.2.0</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.example</groupId> <artifactId>ai-custom-data-demo</artifactId> <version>0.0.1-SNAPSHOT</version> <name>AICustomData</name> <description>Demo project for Spring Boot</description> <properties> <java.version>17</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.experimental.ai</groupId> <artifactId>spring-ai-azure-openai-spring-boot-starter</artifactId> <version>0.7.0-SNAPSHOT</version> </dependency> <dependency> <groupId>com.azure</groupId> <artifactId>azure-search-documents</artifactId> <version>11.6.0-beta.10</version> <exclusions> <!-- exclude this to avoid changing the default serializer and the null-value behavior --> <exclusion> <groupId>com.azure</groupId> <artifactId>azure-core-serializer-json-jackson</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> <repositories> <repository> <id>spring-snapshots</id> <name>Spring Snapshots</name> <url>https://repo.spring.io/snapshot</url> <releases> <enabled>false</enabled> </releases> </repository> </repositories> </project>
En la carpeta src/main/java/com/example/aicustomdatademo, abra AiCustomDataApplication.java en el editor o IDE preferido, y pegue el código siguiente:
package com.example.aicustomdatademo; import java.util.Collections; import java.util.List; import java.util.Map; import java.util.Optional; import java.util.stream.Collectors; import org.springframework.ai.client.AiClient; import org.springframework.ai.document.Document; import org.springframework.ai.embedding.EmbeddingClient; import org.springframework.ai.prompt.Prompt; import org.springframework.ai.prompt.SystemPromptTemplate; import org.springframework.ai.prompt.messages.MessageType; import org.springframework.ai.prompt.messages.UserMessage; import org.springframework.ai.vectorstore.VectorStore; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.Bean; import com.azure.core.credential.AzureKeyCredential; import com.azure.core.util.Context; import com.azure.search.documents.SearchClient; import com.azure.search.documents.SearchClientBuilder; import com.azure.search.documents.models.IndexingResult; import com.azure.search.documents.models.SearchOptions; import com.azure.search.documents.models.RawVectorQuery; import lombok.AllArgsConstructor; import lombok.NoArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.extern.jackson.Jacksonized; @SpringBootApplication public class AiCustomDataApplication implements CommandLineRunner { private static final String ROLE_INFO_KEY = "role"; private static final String template = """ You are a helpful assistant. Use the information from the DOCUMENTS section to augment answers. DOCUMENTS: {documents} """; @Value("${spring.ai.azure.cognitive-search.endpoint}") private String acsEndpoint; @Value("${spring.ai.azure.cognitive-search.api-key}") private String acsApiKey; @Value("${spring.ai.azure.cognitive-search.index}") private String acsIndexName; @Autowired private AiClient aiClient; @Autowired private EmbeddingClient embeddingClient; public static void main(String[] args) { SpringApplication.run(AiCustomDataApplication.class, args); } @Override public void run(String... args) throws Exception { System.out.println(String.format("Sending custom data prompt to AI service. One moment please...\r\n")); final var store = vectorStore(embeddingClient); final String question = "What are my available health plans?"; final var candidateDocs = store.similaritySearch(question); final var userMessage = new UserMessage(question); final String docPrompts = candidateDocs.stream().map(entry -> entry.getContent()).collect(Collectors.joining("\n")); final SystemPromptTemplate promptTemplate = new SystemPromptTemplate(template); final var systemMessage = promptTemplate.createMessage(Map.of("documents", docPrompts)); final var prompt = new Prompt(List.of(systemMessage, userMessage)); final var resps = aiClient.generate(prompt); System.out.println(String.format("Prompt created %d generated response(s).", resps.getGenerations().size())); resps.getGenerations().stream() .forEach(gen -> { final var role = gen.getInfo().getOrDefault(ROLE_INFO_KEY, MessageType.ASSISTANT.getValue()); System.out.println(String.format("Generated respose from \"%s\": %s", role, gen.getText())); }); } @Bean public VectorStore vectorStore(EmbeddingClient embeddingClient) { final SearchClient searchClient = new SearchClientBuilder() .endpoint(acsEndpoint) .credential(new AzureKeyCredential(acsApiKey)) .indexName(acsIndexName) .buildClient(); return new AzureCognitiveSearchVectorStore(searchClient, embeddingClient); } public static class AzureCognitiveSearchVectorStore implements VectorStore { private static final int DEFAULT_TOP_K = 4; private static final Double DEFAULT_SIMILARITY_THRESHOLD = 0.0; private SearchClient searchClient; private final EmbeddingClient embeddingClient; public AzureCognitiveSearchVectorStore(SearchClient searchClient, EmbeddingClient embeddingClient) { this.searchClient = searchClient; this.embeddingClient = embeddingClient; } @Override public void add(List<Document> documents) { final var docs = documents.stream().map(document -> { final var embeddings = embeddingClient.embed(document); return new DocEntry(document.getId(), "", document.getContent(), embeddings); }).toList(); searchClient.uploadDocuments(docs); } @Override public Optional<Boolean> delete(List<String> idList) { final List<DocEntry> docIds = idList.stream().map(id -> DocEntry.builder().id(id).build()) .toList(); var results = searchClient.deleteDocuments(docIds); boolean resSuccess = true; for (IndexingResult result : results.getResults()) if (!result.isSucceeded()) { resSuccess = false; break; } return Optional.of(resSuccess); } @Override public List<Document> similaritySearch(String query) { return similaritySearch(query, DEFAULT_TOP_K); } @Override public List<Document> similaritySearch(String query, int k) { return similaritySearch(query, k, DEFAULT_SIMILARITY_THRESHOLD); } @Override public List<Document> similaritySearch(String query, int k, double threshold) { final var searchQueryVector = new RawVectorQuery() .setVector(toFloatList(embeddingClient.embed(query))) .setKNearestNeighborsCount(k) .setFields("contentVector"); final var searchResults = searchClient.search(null, new SearchOptions().setVectorQueries(searchQueryVector), Context.NONE); return searchResults.stream() .filter(r -> r.getScore() >= threshold) .map(r -> { final DocEntry entry = r.getDocument(DocEntry.class); final Document doc = new Document(entry.getId(), entry.getContent(), Collections.emptyMap()); doc.setEmbedding(entry.getContentVector()); return doc; }) .collect(Collectors.toList()); } private List<Float> toFloatList(List<Double> doubleList) { return doubleList.stream().map(Double::floatValue).toList(); } } @Data @Builder @Jacksonized @AllArgsConstructor @NoArgsConstructor static class DocEntry { private String id; private String hash; private String content; private List<Double> contentVector; } }
Importante
En el caso de producción, use una forma segura de almacenar sus credenciales y acceder a ellas, como Azure Key Vault. Para obtener más información sobre la seguridad de las credenciales, consulte el artículo Seguridad de servicios de Azure AI.
Vuelva a la carpeta raíz del proyecto y ejecute la aplicación mediante el comando siguiente:
./mvnw spring-boot:run
Output
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v3.1.5)
2023-11-07T14:40:45.250-06:00 INFO 18557 --- [ main] c.e.a.AiCustomDataApplication : No active profile set, falling back to 1 default profile: "default"
2023-11-07T14:40:46.035-06:00 INFO 18557 --- [ main] c.e.a.AiCustomDataApplication : Started AiCustomDataApplication in 1.095 seconds (process running for 1.397)
Sending custom data prompt to AI service. One moment please...
Prompt created 1 generated response(s).
Generated response from "assistant": The available health plans in the Contoso Electronics plan and benefit packages are the Northwind Health Plus and Northwind Standard plans.
Requisitos previos
Una suscripción a Azure (cree una cuenta gratuita).
La CLI de Azure se ha usado para la autenticación sin contraseña en un entorno de desarrollo local, cree el contexto necesario iniciando sesión con la CLI de Azure.
Un recurso de Azure OpenAI implementado en una región admitida y con un modelo admitido.
Asegúrese de que tiene asignado al menos el rol de Colaborador de Cognitive Services para el recurso de Azure OpenAI.
Descargue los datos de ejemplo de GitHub si no tiene sus propios datos.
Documentación de referencia | Código fuente | Paquete (npm) | Ejemplos
Añada datos mediante Azure OpenAI Studio
Sugerencia
Puede usar Azure Developer CLI para desarrolladores de Azure para crear mediante programación los recursos necesarios para Azure OpenAI en sus datos
Vaya a Azure OpenAI Studio e inicie sesión con credenciales que le permitan acceder al recurso de Azure OpenAI. Durante o después del flujo de trabajo de inicio de sesión, seleccione el directorio, la suscripción de Azure y el recurso de Azure OpenAI adecuados.
Seleccione el icono de Bring your own data
En el Área de juegos de chat, seleccione Agregue sus datos y luego Agregar una fuente de datos
En el panel que aparece, seleccione Cargar archivos (versión preliminar) en Seleccionar origen de datos. Azure OpenAI necesita un recurso de almacenamiento y un recurso de búsqueda para acceder a los datos e indexarlos.
Sugerencia
- Consulte los recursos siguientes para más información:
- Para documentos y conjuntos de datos con texto largo, se recomienda usar el script de preparación de datos disponible.
Para que Azure OpenAI acceda a la cuenta de almacenamiento, deberá activar Uso compartido de recursos entre orígenes (CORS). Si CORS aún no está activado para el recurso de Azure Blob Storage, seleccione Activar CORS.
Seleccione el recurso de búsqueda de Azure AI y confirme que la conexión supondrá el uso de su cuenta. Luego, seleccione Siguiente.
En el panel Cargar archivos, seleccione Examinar un archivo y seleccione los archivos que ha descargado en la sección de requisitos previos o sus propios datos. A continuación, seleccione Cargar archivos. Seleccione Siguiente.
En el panel Administración de datos, puede elegir si desea habilitar la búsqueda semántica o el vector de búsqueda del índice.
Importante
- La búsqueda semántica y el vector de búsqueda están sujetas a precios adicionales. Debe elegir SKU Básico o superior para habilitar la búsqueda semántica o la búsqueda vectorial. Para más información, vea diferencias de planes de tarifa y límites de servicio.
- Para ayudar a mejorar la calidad de la recuperación de la información y la respuesta del modelo, se recomienda habilitar la búsqueda semántica para los siguientes idiomas de origen de los datos: inglés, francés, español, portugués, italiano, alemán, chino (Zh), japonés, coreano, ruso, y árabe.
Revise los detalles que ingresó y seleccione Guardar y cerrar. Ahora puede chatear con el modelo, que usará la información de sus datos para construir la respuesta.
Recuperación de variables necesarias
Para realizar correctamente una llamada a Azure OpenAI, necesitará las siguientes variables. Este inicio rápido supone que cargó los datos en una cuenta de Azure Blob Storage y que creó un índice de Azure AI Search. Consulte Añada sus datos mediante Azure AI Studio
Nombre de la variable | Value |
---|---|
AZURE_OPENAI_ENDPOINT |
Este valor se puede encontrar en la sección Claves y Punto de conexión al examinar su recurso de Azure OpenAI en Azure Portal. Como alternativa, puede encontrar el valor en Azure AI Studio>Área de juegos de chat>Vista Código. Punto de conexión de ejemplo: https://my-resoruce.openai.azure.com . |
AZURE_OPENAI_API_KEY |
Este valor se puede encontrar en la sección Administración de recursos>Claves y Punto de conexión al examinar su recurso de Azure OpenAI en Azure Portal. Puede usar KEY1 o KEY2 . Tener siempre dos claves permite rotar y regenerar las claves de forma segura sin provocar una interrupción del servicio. |
AZURE_OPENAI_DEPLOYMENT_ID |
Este valor se corresponde con el nombre personalizado que eligió para la implementación al implementar un modelo. Este valor se puede encontrar en Administración de recursos>Implementaciones en Azure Portal, o bien en Administración>Implementaciones en Azure AI Studio. |
AZURE_AI_SEARCH_ENDPOINT |
Este valor se puede encontrar en la sección Información general al examinar su recurso de Azure AI Search de Azure Portal. |
AZURE_AI_SEARCH_API_KEY |
Este valor se puede encontrar en la sección Configuración>Claves al examinar su recurso de Azure AI Search en Azure Portal. Puede usar la clave de administrador principal o la clave de administrador secundaria. Tener siempre dos claves permite rotar y regenerar las claves de forma segura sin provocar una interrupción del servicio. |
AZURE_AI_SEARCH_INDEX |
Este valor se corresponde con el nombre del índice que creó para almacenar los datos. Puede encontrarlo en la sección Información general, al examinar el recurso de Azure AI Search desde Azure Portal. |
Variables de entorno
Cree y asigne variables de entorno persistentes para la clave y el punto de conexión.
Importante
Si usa una clave de API, almacénela de forma segura en otro lugar, como en Azure Key Vault. No incluya la clave de API directamente en el código ni la exponga nunca públicamente.
Para más información sobre la seguridad de los servicios de AI, consulte Autenticación de solicitudes a los servicios de Azure AI.
setx AZURE_OPENAI_ENDPOINT REPLACE_WITH_YOUR_AOAI_ENDPOINT_VALUE_HERE
setx AZURE_OPENAI_API_KEY REPLACE_WITH_YOUR_AOAI_KEY_VALUE_HERE
setx AZURE_OPENAI_DEPLOYMENT_ID REPLACE_WITH_YOUR_AOAI_DEPLOYMENT_VALUE_HERE
setx AZURE_AI_SEARCH_ENDPOINT REPLACE_WITH_YOUR_AZURE_SEARCH_RESOURCE_VALUE_HERE
setx AZURE_AI_SEARCH_API_KEY REPLACE_WITH_YOUR_AZURE_SEARCH_RESOURCE_KEY_VALUE_HERE
setx AZURE_AI_SEARCH_INDEX REPLACE_WITH_YOUR_INDEX_NAME_HERE
Inicializar una aplicación Node.js
En una ventana de la consola (como cmd, PowerShell o Bash), cree un directorio para la aplicación y vaya a él. Ejecute el comando npm init
para crear una aplicación de nodo con un archivo package.json.
npm init
Instalación de la biblioteca cliente
Instale el cliente de Azure OpenAI y las bibliotecas de Identidad de Azure para JavaScript con npm:
npm install @azure/openai @azure/identity
El archivo package.json de la aplicación se actualizará con las dependencias.
Adición del código de JavaScript
Abra un símbolo del sistema donde quiera el nuevo proyecto y cree un archivo llamado
ChatWithOwnData.js
. Copie el código siguiente en el archivoChatWithOwnData.js
.const { DefaultAzureCredential, getBearerTokenProvider } = require("@azure/identity"); const { AzureOpenAI } = require("openai"); // Set the Azure and AI Search values from environment variables const endpoint = process.env["AZURE_OPENAI_ENDPOINT"]; const searchEndpoint = process.env["AZURE_AI_SEARCH_ENDPOINT"]; const searchIndex = process.env["AZURE_AI_SEARCH_INDEX"]; // keyless authentication const credential = new DefaultAzureCredential(); const scope = "https://cognitiveservices.azure.com/.default"; const azureADTokenProvider = getBearerTokenProvider(credential, scope); // Required Azure OpenAI deployment name and API version const deploymentName = "gpt-4"; const apiVersion = "2024-07-01-preview"; function getClient() { return new AzureOpenAI({ endpoint, azureADTokenProvider, deployment: deploymentName, apiVersion, }); } async function main() { const client = getClient(); const messages = [ { role: "user", content: "What are my available health plans?" }, ]; console.log(`Message: ${messages.map((m) => m.content).join("\n")}`); const events = await client.chat.completions.create({ stream: true, messages: [ { role: "user", content: "What's the most common feedback we received from our customers about the product?", }, ], max_tokens: 128, model: "", data_sources: [ { type: "azure_search", parameters: { endpoint: searchEndpoint, index_name: searchIndex, authentication: { type: "api_key", key: searchKey, }, }, }, ], }); let response = ""; for await (const event of events) { for (const choice of event.choices) { const newText = choice.delta?.content; if (newText) { response += newText; // To see streaming results as they arrive, uncomment line below // console.log(newText); } } } console.log(response); } main().catch((err) => { console.error("The sample encountered an error:", err); });
Ejecute la aplicación con el comando siguiente:
node ChatWithOwnData.js
Importante
En el caso de producción, use una forma segura de almacenar sus credenciales y acceder a ellas, como Azure Key Vault. Para obtener más información sobre la seguridad de las credenciales, consulte el artículo Seguridad de servicios de Azure AI.
Resultados
Message: What are my available health plans?
The available health plans in the Contoso Electronics plan and benefit packages are the Northwind Health Plus and Northwind Standard plans.
Requisitos previos
Una suscripción a Azure (cree una cuenta gratuita).
La CLI de Azure se ha usado para la autenticación sin contraseña en un entorno de desarrollo local, cree el contexto necesario iniciando sesión con la CLI de Azure.
Un recurso de Azure OpenAI implementado en una región admitida y con un modelo admitido.
Asegúrese de que tiene asignado al menos el rol de Colaborador de Cognitive Services para el recurso de Azure OpenAI.
Descargue los datos de ejemplo de GitHub si no tiene sus propios datos.
Documentación de referencia | Código fuente | Paquete (npm) | Ejemplos
Añada datos mediante Azure OpenAI Studio
Sugerencia
Puede usar Azure Developer CLI para desarrolladores de Azure para crear mediante programación los recursos necesarios para Azure OpenAI en sus datos
Vaya a Azure OpenAI Studio e inicie sesión con credenciales que le permitan acceder al recurso de Azure OpenAI. Durante o después del flujo de trabajo de inicio de sesión, seleccione el directorio, la suscripción de Azure y el recurso de Azure OpenAI adecuados.
Seleccione el icono de Bring your own data
En el Área de juegos de chat, seleccione Agregue sus datos y luego Agregar una fuente de datos
En el panel que aparece, seleccione Cargar archivos (versión preliminar) en Seleccionar origen de datos. Azure OpenAI necesita un recurso de almacenamiento y un recurso de búsqueda para acceder a los datos e indexarlos.
Sugerencia
- Consulte los recursos siguientes para más información:
- Para documentos y conjuntos de datos con texto largo, se recomienda usar el script de preparación de datos disponible.
Para que Azure OpenAI acceda a la cuenta de almacenamiento, deberá activar Uso compartido de recursos entre orígenes (CORS). Si CORS aún no está activado para el recurso de Azure Blob Storage, seleccione Activar CORS.
Seleccione el recurso de búsqueda de Azure AI y confirme que la conexión supondrá el uso de su cuenta. Luego, seleccione Siguiente.
En el panel Cargar archivos, seleccione Examinar un archivo y seleccione los archivos que ha descargado en la sección de requisitos previos o sus propios datos. A continuación, seleccione Cargar archivos. Seleccione Siguiente.
En el panel Administración de datos, puede elegir si desea habilitar la búsqueda semántica o el vector de búsqueda del índice.
Importante
- La búsqueda semántica y el vector de búsqueda están sujetas a precios adicionales. Debe elegir SKU Básico o superior para habilitar la búsqueda semántica o la búsqueda vectorial. Para más información, vea diferencias de planes de tarifa y límites de servicio.
- Para ayudar a mejorar la calidad de la recuperación de la información y la respuesta del modelo, se recomienda habilitar la búsqueda semántica para los siguientes idiomas de origen de los datos: inglés, francés, español, portugués, italiano, alemán, chino (Zh), japonés, coreano, ruso, y árabe.
Revise los detalles que ingresó y seleccione Guardar y cerrar. Ahora puede chatear con el modelo, que usará la información de sus datos para construir la respuesta.
Recuperación de variables necesarias
Para realizar correctamente una llamada a Azure OpenAI, necesitará las siguientes variables. Este inicio rápido supone que cargó los datos en una cuenta de Azure Blob Storage y que creó un índice de Azure AI Search. Consulte Añada sus datos mediante Azure AI Studio
Nombre de la variable | Value |
---|---|
AZURE_OPENAI_ENDPOINT |
Este valor se puede encontrar en la sección Claves y Punto de conexión al examinar su recurso de Azure OpenAI en Azure Portal. Como alternativa, puede encontrar el valor en Azure AI Studio>Área de juegos de chat>Vista Código. Punto de conexión de ejemplo: https://my-resoruce.openai.azure.com . |
AZURE_OPENAI_API_KEY |
Este valor se puede encontrar en la sección Administración de recursos>Claves y Punto de conexión al examinar su recurso de Azure OpenAI en Azure Portal. Puede usar KEY1 o KEY2 . Tener siempre dos claves permite rotar y regenerar las claves de forma segura sin provocar una interrupción del servicio. |
AZURE_OPENAI_DEPLOYMENT_ID |
Este valor se corresponde con el nombre personalizado que eligió para la implementación al implementar un modelo. Este valor se puede encontrar en Administración de recursos>Implementaciones en Azure Portal, o bien en Administración>Implementaciones en Azure AI Studio. |
AZURE_AI_SEARCH_ENDPOINT |
Este valor se puede encontrar en la sección Información general al examinar su recurso de Azure AI Search de Azure Portal. |
AZURE_AI_SEARCH_API_KEY |
Este valor se puede encontrar en la sección Configuración>Claves al examinar su recurso de Azure AI Search en Azure Portal. Puede usar la clave de administrador principal o la clave de administrador secundaria. Tener siempre dos claves permite rotar y regenerar las claves de forma segura sin provocar una interrupción del servicio. |
AZURE_AI_SEARCH_INDEX |
Este valor se corresponde con el nombre del índice que creó para almacenar los datos. Puede encontrarlo en la sección Información general, al examinar el recurso de Azure AI Search desde Azure Portal. |
Variables de entorno
Cree y asigne variables de entorno persistentes para la clave y el punto de conexión.
Importante
Si usa una clave de API, almacénela de forma segura en otro lugar, como en Azure Key Vault. No incluya la clave de API directamente en el código ni la exponga nunca públicamente.
Para más información sobre la seguridad de los servicios de AI, consulte Autenticación de solicitudes a los servicios de Azure AI.
setx AZURE_OPENAI_ENDPOINT REPLACE_WITH_YOUR_AOAI_ENDPOINT_VALUE_HERE
setx AZURE_OPENAI_API_KEY REPLACE_WITH_YOUR_AOAI_KEY_VALUE_HERE
setx AZURE_OPENAI_DEPLOYMENT_ID REPLACE_WITH_YOUR_AOAI_DEPLOYMENT_VALUE_HERE
setx AZURE_AI_SEARCH_ENDPOINT REPLACE_WITH_YOUR_AZURE_SEARCH_RESOURCE_VALUE_HERE
setx AZURE_AI_SEARCH_API_KEY REPLACE_WITH_YOUR_AZURE_SEARCH_RESOURCE_KEY_VALUE_HERE
setx AZURE_AI_SEARCH_INDEX REPLACE_WITH_YOUR_INDEX_NAME_HERE
Inicializar una aplicación Node.js
En una ventana de la consola (como cmd, PowerShell o Bash), cree un directorio para la aplicación y vaya a él. Ejecute el comando npm init
para crear una aplicación de nodo con un archivo package.json.
npm init
Instalación de la biblioteca cliente
Instale el cliente de Azure OpenAI y las bibliotecas de Identidad de Azure para JavaScript con npm:
npm install openai @azure/identity @azure/openai
La dependencia @azure/openai/types
se incluye para ampliar el modelo de Azure OpenAI para la propiedad data_sources
. Esta importación solo es necesaria para TypeScript.
El archivo package.json de la aplicación se actualizará con las dependencias.
Este es el código TypeScript
Abra un símbolo del sistema donde quiera el nuevo proyecto y cree un archivo llamado
ChatWithOwnData.ts
. Copie el código siguiente en el archivoChatWithOwnData.ts
.import { AzureOpenAI } from "openai"; import { DefaultAzureCredential, getBearerTokenProvider } from "@azure/identity"; import "@azure/openai/types"; // Set the Azure and AI Search values from environment variables const endpoint = process.env["AZURE_OPENAI_ENDPOINT"]; const searchEndpoint = process.env["AZURE_AI_SEARCH_ENDPOINT"]; const searchIndex = process.env["AZURE_AI_SEARCH_INDEX"]; // keyless authentication const credential = new DefaultAzureCredential(); const scope = "https://cognitiveservices.azure.com/.default"; const azureADTokenProvider = getBearerTokenProvider(credential, scope); // Required Azure OpenAI deployment name and API version const deploymentName = "gpt-4"; const apiVersion = "2024-07-01-preview"; function getClient(): AzureOpenAI { return new AzureOpenAI({ endpoint, azureADTokenProvider, deployment: deploymentName, apiVersion, }); } async function main() { const client = getClient(); const messages = [ { role: "user", content: "What are my available health plans?" }, ]; console.log(`Message: ${messages.map((m) => m.content).join("\n")}`); const events = await client.chat.completions.create({ stream: true, messages: [ { role: "user", content: "What's the most common feedback we received from our customers about the product?", }, ], max_tokens: 128, model: "", data_sources: [ { type: "azure_search", parameters: { endpoint: searchEndpoint, index_name: searchIndex, authentication: { type: "api_key", key: searchKey, }, }, }, ], }); let response = ""; for await (const event of events) { for (const choice of event.choices) { const newText = choice.delta?.content; if (newText) { response += newText; // To see streaming results as they arrive, uncomment line below // console.log(newText); } } } console.log(response); } main().catch((err) => { console.error("The sample encountered an error:", err); });
Compile la aplicación con el siguiente comando:
tsc
Ejecute la aplicación con el comando siguiente:
node ChatWithOwnData.js
Importante
En el caso de producción, use una forma segura de almacenar sus credenciales y acceder a ellas, como Azure Key Vault. Para obtener más información sobre la seguridad de las credenciales, consulte el artículo Seguridad de servicios de Azure AI.
Output
Message: What are my available health plans?
The available health plans in the Contoso Electronics plan and benefit packages are the Northwind Health Plus and Northwind Standard plans.
Requisitos previos
Los siguientes recursos:
- Azure OpenAI
- Azure Blob Storage
- Azure AI Search
- Un recurso de Azure OpenAI implementado en una región compatible y con un modelo compatible.
- Asegúrese de que tiene asignado al menos el rol de Colaborador de Cognitive Services para el recurso de Azure OpenAI.
- Descargue los datos de ejemplo de GitHub si no tiene sus propios datos.
Referencia | Código fuente | Paquete (pypi) | Muestras
Los vínculos hacen referencia a OpenAI API para Python. No hay ningún SDK de Python de OpenAI específico de Azure. Aprenda a cambiar entre los servicios de OpenAI y los servicios de Azure OpenAI.
Añada datos mediante Azure OpenAI Studio
Sugerencia
Puede usar Azure Developer CLI para desarrolladores de Azure para crear mediante programación los recursos necesarios para Azure OpenAI en sus datos
Vaya a Azure OpenAI Studio e inicie sesión con credenciales que le permitan acceder al recurso de Azure OpenAI. Durante o después del flujo de trabajo de inicio de sesión, seleccione el directorio, la suscripción de Azure y el recurso de Azure OpenAI adecuados.
Seleccione el icono de Bring your own data
En el Área de juegos de chat, seleccione Agregue sus datos y luego Agregar una fuente de datos
En el panel que aparece, seleccione Cargar archivos (versión preliminar) en Seleccionar origen de datos. Azure OpenAI necesita un recurso de almacenamiento y un recurso de búsqueda para acceder a los datos e indexarlos.
Sugerencia
- Consulte los recursos siguientes para más información:
- Para documentos y conjuntos de datos con texto largo, se recomienda usar el script de preparación de datos disponible.
Para que Azure OpenAI acceda a la cuenta de almacenamiento, deberá activar Uso compartido de recursos entre orígenes (CORS). Si CORS aún no está activado para el recurso de Azure Blob Storage, seleccione Activar CORS.
Seleccione el recurso de búsqueda de Azure AI y confirme que la conexión supondrá el uso de su cuenta. Luego, seleccione Siguiente.
En el panel Cargar archivos, seleccione Examinar un archivo y seleccione los archivos que ha descargado en la sección de requisitos previos o sus propios datos. A continuación, seleccione Cargar archivos. Seleccione Siguiente.
En el panel Administración de datos, puede elegir si desea habilitar la búsqueda semántica o el vector de búsqueda del índice.
Importante
- La búsqueda semántica y el vector de búsqueda están sujetas a precios adicionales. Debe elegir SKU Básico o superior para habilitar la búsqueda semántica o la búsqueda vectorial. Para más información, vea diferencias de planes de tarifa y límites de servicio.
- Para ayudar a mejorar la calidad de la recuperación de la información y la respuesta del modelo, se recomienda habilitar la búsqueda semántica para los siguientes idiomas de origen de los datos: inglés, francés, español, portugués, italiano, alemán, chino (Zh), japonés, coreano, ruso, y árabe.
Revise los detalles que ingresó y seleccione Guardar y cerrar. Ahora puede chatear con el modelo, que usará la información de sus datos para construir la respuesta.
Recuperación de variables necesarias
Para realizar correctamente una llamada a Azure OpenAI, necesitará las siguientes variables. Este inicio rápido supone que cargó los datos en una cuenta de Azure Blob Storage y que creó un índice de Azure AI Search. Consulte Añada sus datos mediante Azure AI Studio
Nombre de la variable | Value |
---|---|
AZURE_OPENAI_ENDPOINT |
Este valor se puede encontrar en la sección Claves y Punto de conexión al examinar su recurso de Azure OpenAI en Azure Portal. Como alternativa, puede encontrar el valor en Azure AI Studio>Área de juegos de chat>Vista Código. Punto de conexión de ejemplo: https://my-resoruce.openai.azure.com . |
AZURE_OPENAI_API_KEY |
Este valor se puede encontrar en la sección Administración de recursos>Claves y Punto de conexión al examinar su recurso de Azure OpenAI en Azure Portal. Puede usar KEY1 o KEY2 . Tener siempre dos claves permite rotar y regenerar las claves de forma segura sin provocar una interrupción del servicio. |
AZURE_OPENAI_DEPLOYMENT_ID |
Este valor se corresponde con el nombre personalizado que eligió para la implementación al implementar un modelo. Este valor se puede encontrar en Administración de recursos>Implementaciones en Azure Portal, o bien en Administración>Implementaciones en Azure AI Studio. |
AZURE_AI_SEARCH_ENDPOINT |
Este valor se puede encontrar en la sección Información general al examinar su recurso de Azure AI Search de Azure Portal. |
AZURE_AI_SEARCH_API_KEY |
Este valor se puede encontrar en la sección Configuración>Claves al examinar su recurso de Azure AI Search en Azure Portal. Puede usar la clave de administrador principal o la clave de administrador secundaria. Tener siempre dos claves permite rotar y regenerar las claves de forma segura sin provocar una interrupción del servicio. |
AZURE_AI_SEARCH_INDEX |
Este valor se corresponde con el nombre del índice que creó para almacenar los datos. Puede encontrarlo en la sección Información general, al examinar el recurso de Azure AI Search desde Azure Portal. |
Variables de entorno
Cree y asigne variables de entorno persistentes para la clave y el punto de conexión.
Importante
Si usa una clave de API, almacénela de forma segura en otro lugar, como en Azure Key Vault. No incluya la clave de API directamente en el código ni la exponga nunca públicamente.
Para más información sobre la seguridad de los servicios de AI, consulte Autenticación de solicitudes a los servicios de Azure AI.
setx AZURE_OPENAI_ENDPOINT REPLACE_WITH_YOUR_AOAI_ENDPOINT_VALUE_HERE
setx AZURE_OPENAI_API_KEY REPLACE_WITH_YOUR_AOAI_KEY_VALUE_HERE
setx AZURE_OPENAI_DEPLOYMENT_ID REPLACE_WITH_YOUR_AOAI_DEPLOYMENT_VALUE_HERE
setx AZURE_AI_SEARCH_ENDPOINT REPLACE_WITH_YOUR_AZURE_SEARCH_RESOURCE_VALUE_HERE
setx AZURE_AI_SEARCH_API_KEY REPLACE_WITH_YOUR_AZURE_SEARCH_RESOURCE_KEY_VALUE_HERE
setx AZURE_AI_SEARCH_INDEX REPLACE_WITH_YOUR_INDEX_NAME_HERE
Crear un entorno de Python
- Cree una carpeta denominada openai-python para el proyecto y un nuevo archivo de código de Python denominado main.py. Cambie a ese directorio:
mkdir openai-python
cd openai-python
- Instale las siguientes bibliotecas de Python:
pip install openai
pip install python-dotenv
Crear la aplicación de Python
- En el directorio del proyecto, abra el archivo main.py y agregue el código siguiente:
import os
import openai
import dotenv
dotenv.load_dotenv()
endpoint = os.environ.get("AZURE_OPENAI_ENDPOINT")
api_key = os.environ.get("AZURE_OPENAI_API_KEY")
deployment = os.environ.get("AZURE_OPENAI_DEPLOYMENT_ID")
client = openai.AzureOpenAI(
azure_endpoint=endpoint,
api_key=api_key,
api_version="2024-02-01",
)
completion = client.chat.completions.create(
model=deployment,
messages=[
{
"role": "user",
"content": "What are my available health plans?",
},
],
extra_body={
"data_sources":[
{
"type": "azure_search",
"parameters": {
"endpoint": os.environ["AZURE_AI_SEARCH_ENDPOINT"],
"index_name": os.environ["AZURE_AI_SEARCH_INDEX"],
"authentication": {
"type": "api_key",
"key": os.environ["AZURE_AI_SEARCH_API_KEY"],
}
}
}
],
}
)
print(completion.model_dump_json(indent=2))
Importante
En el caso de producción, use una forma segura de almacenar sus credenciales y acceder a ellas, como Azure Key Vault. Para obtener más información sobre la seguridad de las credenciales, consulte el artículo Seguridad de servicios de Azure AI.
- Ejecute el siguiente comando:
python main.py
La aplicación imprime la respuesta en un formato JSON adecuado para su uso en muchos escenarios. Incluye tanto respuestas a su consulta como citas de los archivos cargados.
Requisitos previos
Los siguientes recursos:
- Azure OpenAI
- Azure Blob Storage
- Azure AI Search
- Un recurso de Azure OpenAI implementado en una región compatible y con un modelo compatible.
- Asegúrese de que tiene asignado al menos el rol de Colaborador de Cognitive Services para el recurso de Azure OpenAI.
- Descargue los datos de ejemplo de GitHub si no tiene sus propios datos.
Añada datos mediante Azure OpenAI Studio
Sugerencia
Puede usar Azure Developer CLI para desarrolladores de Azure para crear mediante programación los recursos necesarios para Azure OpenAI en sus datos
Vaya a Azure OpenAI Studio e inicie sesión con credenciales que le permitan acceder al recurso de Azure OpenAI. Durante o después del flujo de trabajo de inicio de sesión, seleccione el directorio, la suscripción de Azure y el recurso de Azure OpenAI adecuados.
Seleccione el icono de Bring your own data
En el Área de juegos de chat, seleccione Agregue sus datos y luego Agregar una fuente de datos
En el panel que aparece, seleccione Cargar archivos (versión preliminar) en Seleccionar origen de datos. Azure OpenAI necesita un recurso de almacenamiento y un recurso de búsqueda para acceder a los datos e indexarlos.
Sugerencia
- Consulte los recursos siguientes para más información:
- Para documentos y conjuntos de datos con texto largo, se recomienda usar el script de preparación de datos disponible.
Para que Azure OpenAI acceda a la cuenta de almacenamiento, deberá activar Uso compartido de recursos entre orígenes (CORS). Si CORS aún no está activado para el recurso de Azure Blob Storage, seleccione Activar CORS.
Seleccione el recurso de búsqueda de Azure AI y confirme que la conexión supondrá el uso de su cuenta. Luego, seleccione Siguiente.
En el panel Cargar archivos, seleccione Examinar un archivo y seleccione los archivos que ha descargado en la sección de requisitos previos o sus propios datos. A continuación, seleccione Cargar archivos. Seleccione Siguiente.
En el panel Administración de datos, puede elegir si desea habilitar la búsqueda semántica o el vector de búsqueda del índice.
Importante
- La búsqueda semántica y el vector de búsqueda están sujetas a precios adicionales. Debe elegir SKU Básico o superior para habilitar la búsqueda semántica o la búsqueda vectorial. Para más información, vea diferencias de planes de tarifa y límites de servicio.
- Para ayudar a mejorar la calidad de la recuperación de la información y la respuesta del modelo, se recomienda habilitar la búsqueda semántica para los siguientes idiomas de origen de los datos: inglés, francés, español, portugués, italiano, alemán, chino (Zh), japonés, coreano, ruso, y árabe.
Revise los detalles que ingresó y seleccione Guardar y cerrar. Ahora puede chatear con el modelo, que usará la información de sus datos para construir la respuesta.
Recuperación de variables necesarias
Para realizar correctamente una llamada a Azure OpenAI, necesitará las siguientes variables. Este inicio rápido supone que cargó los datos en una cuenta de Azure Blob Storage y que creó un índice de Azure AI Search. Consulte Añada sus datos mediante Azure AI Studio
Nombre de la variable | Value |
---|---|
AZURE_OPENAI_ENDPOINT |
Este valor se puede encontrar en la sección Claves y Punto de conexión al examinar su recurso de Azure OpenAI en Azure Portal. Como alternativa, puede encontrar el valor en Azure AI Studio>Área de juegos de chat>Vista Código. Punto de conexión de ejemplo: https://my-resoruce.openai.azure.com . |
AZURE_OPENAI_API_KEY |
Este valor se puede encontrar en la sección Administración de recursos>Claves y Punto de conexión al examinar su recurso de Azure OpenAI en Azure Portal. Puede usar KEY1 o KEY2 . Tener siempre dos claves permite rotar y regenerar las claves de forma segura sin provocar una interrupción del servicio. |
AZURE_OPENAI_DEPLOYMENT_ID |
Este valor se corresponde con el nombre personalizado que eligió para la implementación al implementar un modelo. Este valor se puede encontrar en Administración de recursos>Implementaciones en Azure Portal, o bien en Administración>Implementaciones en Azure AI Studio. |
AZURE_AI_SEARCH_ENDPOINT |
Este valor se puede encontrar en la sección Información general al examinar su recurso de Azure AI Search de Azure Portal. |
AZURE_AI_SEARCH_API_KEY |
Este valor se puede encontrar en la sección Configuración>Claves al examinar su recurso de Azure AI Search en Azure Portal. Puede usar la clave de administrador principal o la clave de administrador secundaria. Tener siempre dos claves permite rotar y regenerar las claves de forma segura sin provocar una interrupción del servicio. |
AZURE_AI_SEARCH_INDEX |
Este valor se corresponde con el nombre del índice que creó para almacenar los datos. Puede encontrarlo en la sección Información general, al examinar el recurso de Azure AI Search desde Azure Portal. |
Variables de entorno
Cree y asigne variables de entorno persistentes para la clave y el punto de conexión.
Importante
Si usa una clave de API, almacénela de forma segura en otro lugar, como en Azure Key Vault. No incluya la clave de API directamente en el código ni la exponga nunca públicamente.
Para más información sobre la seguridad de los servicios de AI, consulte Autenticación de solicitudes a los servicios de Azure AI.
setx AZURE_OPENAI_ENDPOINT REPLACE_WITH_YOUR_AOAI_ENDPOINT_VALUE_HERE
setx AZURE_OPENAI_API_KEY REPLACE_WITH_YOUR_AOAI_KEY_VALUE_HERE
setx AZURE_OPENAI_DEPLOYMENT_ID REPLACE_WITH_YOUR_AOAI_DEPLOYMENT_VALUE_HERE
setx AZURE_AI_SEARCH_ENDPOINT REPLACE_WITH_YOUR_AZURE_SEARCH_RESOURCE_VALUE_HERE
setx AZURE_AI_SEARCH_API_KEY REPLACE_WITH_YOUR_AZURE_SEARCH_RESOURCE_KEY_VALUE_HERE
setx AZURE_AI_SEARCH_INDEX REPLACE_WITH_YOUR_INDEX_NAME_HERE
Comandos de PowerShell de ejemplo
Los modelos de chat de Azure OpenAI están optimizados para trabajar con entradas con formato de conversación. La variable messages
pasa una matriz de diccionarios con distintos roles en la conversación, delineada por sistemas, usuarios y asistentes. La variable dataSources
se conecta al índice de Azure Cognitive Search y permite a los modelos de Azure OpenAI responder usando sus datos.
Para desencadenar una respuesta del modelo, debe terminar con un mensaje de usuario indicando que es el turno de responder del asistente.
Sugerencia
Hay varios parámetros que puede usar para cambiar la respuesta del modelo, como temperature
o top_p
. Vea la documentación de referencia para más información.
# Azure OpenAI metadata variables
$openai = @{
api_key = $Env:AZURE_OPENAI_API_KEY
api_base = $Env:AZURE_OPENAI_ENDPOINT # your endpoint should look like the following https://YOUR_RESOURCE_NAME.openai.azure.com/
api_version = '2023-07-01-preview' # this may change in the future
name = 'YOUR-DEPLOYMENT-NAME-HERE' #This will correspond to the custom name you chose for your deployment when you deployed a model.
}
$acs = @{
search_endpoint = 'YOUR ACS ENDPOINT' # your endpoint should look like the following https://YOUR_RESOURCE_NAME.search.windows.net/
search_key = 'YOUR-ACS-KEY-HERE' # or use the Get-Secret cmdlet to retrieve the value
search_index = 'YOUR-INDEX-NAME-HERE' # the name of your ACS index
}
# Completion text
$body = @{
dataSources = @(
@{
type = 'AzureCognitiveSearch'
parameters = @{
endpoint = $acs.search_endpoint
key = $acs.search_key
indexName = $acs.search_index
}
}
)
messages = @(
@{
role = 'user'
content = 'What are my available health plans?'
}
)
} | convertto-json -depth 5
# Header for authentication
$headers = [ordered]@{
'api-key' = $openai.api_key
}
# Send a completion call to generate an answer
$url = "$($openai.api_base)/openai/deployments/$($openai.name)/extensions/chat/completions?api-version=$($openai.api_version)"
$response = Invoke-RestMethod -Uri $url -Headers $headers -Body $body -Method Post -ContentType 'application/json'
return $response.choices.messages[1].content
Salida de ejemplo
The available health plans in the Contoso Electronics plan and benefit packages are the Northwind Health Plus and Northwind Standard plans.
Importante
En entornos de producción, use una forma segura de almacenar sus credenciales y acceder a ellas, como PowerShell Secret Management con Azure Key Vault. Para obtener más información sobre la seguridad de las credenciales, consulte el artículo Seguridad de servicios de Azure AI.
Chatee con el modelo a través de una aplicación web
Para empezar a chatear con el modelo de Azure OpenAI que usa sus datos, podría implementar una aplicación web mediante Azure OpenAI Studio o el código de ejemplo que proporcionamos en GitHub. Esta aplicación se implementa con Azure App Service y proporciona una interfaz de usuario para enviar consultas. Esta aplicación se puede usar por modelos de Azure OpenAI que usen sus datos o modelos que no los usen. Consulte el archivo Léame del repositorio para obtener instrucciones sobre los requisitos, la configuración y la implementación. Opcionalmente, puede personalizar la lógica de front-end y back-end de la aplicación web realizando cambios en el código fuente.
Requisitos previos
Los siguientes recursos:
- Azure OpenAI
- Azure Blob Storage
- Azure AI Search
- Un recurso de Azure OpenAI implementado en una región compatible y con un modelo compatible.
- Asegúrese de que tiene asignado al menos el rol de Colaborador de Cognitive Services para el recurso de Azure OpenAI.
- Descargue los datos de ejemplo de GitHub si no tiene sus propios datos.
Referencia | Código fuente | Paquete (Go) | Muestras
Añada datos mediante Azure OpenAI Studio
Sugerencia
Puede usar Azure Developer CLI para desarrolladores de Azure para crear mediante programación los recursos necesarios para Azure OpenAI en sus datos
Vaya a Azure OpenAI Studio e inicie sesión con credenciales que le permitan acceder al recurso de Azure OpenAI. Durante o después del flujo de trabajo de inicio de sesión, seleccione el directorio, la suscripción de Azure y el recurso de Azure OpenAI adecuados.
Seleccione el icono de Bring your own data
En el Área de juegos de chat, seleccione Agregue sus datos y luego Agregar una fuente de datos
En el panel que aparece, seleccione Cargar archivos (versión preliminar) en Seleccionar origen de datos. Azure OpenAI necesita un recurso de almacenamiento y un recurso de búsqueda para acceder a los datos e indexarlos.
Sugerencia
- Consulte los recursos siguientes para más información:
- Para documentos y conjuntos de datos con texto largo, se recomienda usar el script de preparación de datos disponible.
Para que Azure OpenAI acceda a la cuenta de almacenamiento, deberá activar Uso compartido de recursos entre orígenes (CORS). Si CORS aún no está activado para el recurso de Azure Blob Storage, seleccione Activar CORS.
Seleccione el recurso de búsqueda de Azure AI y confirme que la conexión supondrá el uso de su cuenta. Luego, seleccione Siguiente.
En el panel Cargar archivos, seleccione Examinar un archivo y seleccione los archivos que ha descargado en la sección de requisitos previos o sus propios datos. A continuación, seleccione Cargar archivos. Seleccione Siguiente.
En el panel Administración de datos, puede elegir si desea habilitar la búsqueda semántica o el vector de búsqueda del índice.
Importante
- La búsqueda semántica y el vector de búsqueda están sujetas a precios adicionales. Debe elegir SKU Básico o superior para habilitar la búsqueda semántica o la búsqueda vectorial. Para más información, vea diferencias de planes de tarifa y límites de servicio.
- Para ayudar a mejorar la calidad de la recuperación de la información y la respuesta del modelo, se recomienda habilitar la búsqueda semántica para los siguientes idiomas de origen de los datos: inglés, francés, español, portugués, italiano, alemán, chino (Zh), japonés, coreano, ruso, y árabe.
Revise los detalles que ingresó y seleccione Guardar y cerrar. Ahora puede chatear con el modelo, que usará la información de sus datos para construir la respuesta.
Recuperación de variables necesarias
Para realizar correctamente una llamada a Azure OpenAI, necesitará las siguientes variables. Este inicio rápido supone que cargó los datos en una cuenta de Azure Blob Storage y que creó un índice de Azure AI Search. Consulte Añada sus datos mediante Azure AI Studio
Nombre de la variable | Value |
---|---|
AZURE_OPENAI_ENDPOINT |
Este valor se puede encontrar en la sección Claves y Punto de conexión al examinar su recurso de Azure OpenAI en Azure Portal. Como alternativa, puede encontrar el valor en Azure AI Studio>Área de juegos de chat>Vista Código. Punto de conexión de ejemplo: https://my-resoruce.openai.azure.com . |
AZURE_OPENAI_API_KEY |
Este valor se puede encontrar en la sección Administración de recursos>Claves y Punto de conexión al examinar su recurso de Azure OpenAI en Azure Portal. Puede usar KEY1 o KEY2 . Tener siempre dos claves permite rotar y regenerar las claves de forma segura sin provocar una interrupción del servicio. |
AZURE_OPENAI_DEPLOYMENT_ID |
Este valor se corresponde con el nombre personalizado que eligió para la implementación al implementar un modelo. Este valor se puede encontrar en Administración de recursos>Implementaciones en Azure Portal, o bien en Administración>Implementaciones en Azure AI Studio. |
AZURE_AI_SEARCH_ENDPOINT |
Este valor se puede encontrar en la sección Información general al examinar su recurso de Azure AI Search de Azure Portal. |
AZURE_AI_SEARCH_API_KEY |
Este valor se puede encontrar en la sección Configuración>Claves al examinar su recurso de Azure AI Search en Azure Portal. Puede usar la clave de administrador principal o la clave de administrador secundaria. Tener siempre dos claves permite rotar y regenerar las claves de forma segura sin provocar una interrupción del servicio. |
AZURE_AI_SEARCH_INDEX |
Este valor se corresponde con el nombre del índice que creó para almacenar los datos. Puede encontrarlo en la sección Información general, al examinar el recurso de Azure AI Search desde Azure Portal. |
Variables de entorno
Cree y asigne variables de entorno persistentes para la clave y el punto de conexión.
Importante
Si usa una clave de API, almacénela de forma segura en otro lugar, como en Azure Key Vault. No incluya la clave de API directamente en el código ni la exponga nunca públicamente.
Para más información sobre la seguridad de los servicios de AI, consulte Autenticación de solicitudes a los servicios de Azure AI.
setx AZURE_OPENAI_ENDPOINT REPLACE_WITH_YOUR_AOAI_ENDPOINT_VALUE_HERE
setx AZURE_OPENAI_API_KEY REPLACE_WITH_YOUR_AOAI_KEY_VALUE_HERE
setx AZURE_OPENAI_DEPLOYMENT_ID REPLACE_WITH_YOUR_AOAI_DEPLOYMENT_VALUE_HERE
setx AZURE_AI_SEARCH_ENDPOINT REPLACE_WITH_YOUR_AZURE_SEARCH_RESOURCE_VALUE_HERE
setx AZURE_AI_SEARCH_API_KEY REPLACE_WITH_YOUR_AZURE_SEARCH_RESOURCE_KEY_VALUE_HERE
setx AZURE_AI_SEARCH_INDEX REPLACE_WITH_YOUR_INDEX_NAME_HERE
Crear un entorno de Go
Crear una nueva carpeta denominada openai-go para el proyecto y un nuevo archivo de código de Go denominado sample.go. Cambie a ese directorio:
mkdir openai-go cd openai-go
Instale los siguientes paquetes de Go:
go get github.com/Azure/azure-sdk-for-go/sdk/ai/azopenai
Habilite el seguimiento de dependencias para el código.
go mod init example/azure-openai
Crear la aplicación Go
En el directorio del proyecto, abra el archivo sample.go y agregue el código siguiente:
package main import ( "context" "fmt" "log" "os" "github.com/Azure/azure-sdk-for-go/sdk/ai/azopenai" "github.com/Azure/azure-sdk-for-go/sdk/azcore" "github.com/Azure/azure-sdk-for-go/sdk/azcore/to" ) func main() { azureOpenAIKey := os.Getenv("AZURE_OPENAI_API_KEY") modelDeploymentID := os.Getenv("AZURE_OPENAI_DEPLOYMENT_ID") // Ex: "https://<your-azure-openai-host>.openai.azure.com" azureOpenAIEndpoint := os.Getenv("AZURE_OPENAI_ENDPOINT") // Azure AI Search configuration searchIndex := os.Getenv("AZURE_AI_SEARCH_INDEX") searchEndpoint := os.Getenv("AZURE_AI_SEARCH_ENDPOINT") searchAPIKey := os.Getenv("AZURE_AI_SEARCH_API_KEY") if azureOpenAIKey == "" || modelDeploymentID == "" || azureOpenAIEndpoint == "" || searchIndex == "" || searchEndpoint == "" || searchAPIKey == "" { fmt.Fprintf(os.Stderr, "Skipping example, environment variables missing\n") return } keyCredential := azcore.NewKeyCredential(azureOpenAIKey) // In Azure OpenAI you must deploy a model before you can use it in your client. For more information // see here: https://learn.microsoft.com/azure/cognitive-services/openai/how-to/create-resource client, err := azopenai.NewClientWithKeyCredential(azureOpenAIEndpoint, keyCredential, nil) if err != nil { // TODO: Update the following line with your application specific error handling logic log.Fatalf("ERROR: %s", err) } resp, err := client.GetChatCompletions(context.TODO(), azopenai.ChatCompletionsOptions{ Messages: []azopenai.ChatRequestMessageClassification{ &azopenai.ChatRequestUserMessage{Content: azopenai.NewChatRequestUserMessageContent("What are my available health plans?")}, }, MaxTokens: to.Ptr[int32](512), AzureExtensionsOptions: []azopenai.AzureChatExtensionConfigurationClassification{ &azopenai.AzureSearchChatExtensionConfiguration{ // This allows Azure OpenAI to use an Azure AI Search index. // // > Because the model has access to, and can reference specific sources to support its responses, answers are not only based on its pretrained knowledge // > but also on the latest information available in the designated data source. This grounding data also helps the model avoid generating responses // > based on outdated or incorrect information. // // Quote from here: https://learn.microsoft.com/en-us/azure/ai-services/openai/concepts/use-your-data Parameters: &azopenai.AzureSearchChatExtensionParameters{ Endpoint: &searchEndpoint, IndexName: &searchIndex, Authentication: &azopenai.OnYourDataAPIKeyAuthenticationOptions{ Key: &searchAPIKey, }, }, }, }, DeploymentName: &modelDeploymentID, }, nil) if err != nil { // TODO: Update the following line with your application specific error handling logic log.Fatalf("ERROR: %s", err) } fmt.Fprintf(os.Stderr, "Extensions Context Role: %s\nExtensions Context (length): %d\n", *resp.Choices[0].Message.Role, len(*resp.Choices[0].Message.Content)) fmt.Fprintf(os.Stderr, "ChatRole: %s\nChat content: %s\n", *resp.Choices[0].Message.Role, *resp.Choices[0].Message.Content, ) }
Importante
En el caso de producción, use una forma segura de almacenar sus credenciales y acceder a ellas, como Azure Key Vault. Para obtener más información sobre la seguridad de las credenciales, consulte el artículo Seguridad de servicios de Azure AI.
Ejecute el siguiente comando:
go run sample.go
La aplicación imprime la respuesta, que incluye tanto las respuestas a la consulta como las citas de los archivos cargados.
Requisitos previos
Los siguientes recursos:
- Azure OpenAI
- Azure Blob Storage
- Azure AI Search
- Un recurso de Azure OpenAI implementado en una región compatible y con un modelo compatible.
- Asegúrese de que tiene asignado al menos el rol de Colaborador de Cognitive Services para el recurso de Azure OpenAI.
- Descargue los datos de ejemplo de GitHub si no tiene sus propios datos.
Añada datos mediante Azure OpenAI Studio
Sugerencia
Puede usar Azure Developer CLI para desarrolladores de Azure para crear mediante programación los recursos necesarios para Azure OpenAI en sus datos
Vaya a Azure OpenAI Studio e inicie sesión con credenciales que le permitan acceder al recurso de Azure OpenAI. Durante o después del flujo de trabajo de inicio de sesión, seleccione el directorio, la suscripción de Azure y el recurso de Azure OpenAI adecuados.
Seleccione el icono de Bring your own data
En el Área de juegos de chat, seleccione Agregue sus datos y luego Agregar una fuente de datos
En el panel que aparece, seleccione Cargar archivos (versión preliminar) en Seleccionar origen de datos. Azure OpenAI necesita un recurso de almacenamiento y un recurso de búsqueda para acceder a los datos e indexarlos.
Sugerencia
- Consulte los recursos siguientes para más información:
- Para documentos y conjuntos de datos con texto largo, se recomienda usar el script de preparación de datos disponible.
Para que Azure OpenAI acceda a la cuenta de almacenamiento, deberá activar Uso compartido de recursos entre orígenes (CORS). Si CORS aún no está activado para el recurso de Azure Blob Storage, seleccione Activar CORS.
Seleccione el recurso de búsqueda de Azure AI y confirme que la conexión supondrá el uso de su cuenta. Luego, seleccione Siguiente.
En el panel Cargar archivos, seleccione Examinar un archivo y seleccione los archivos que ha descargado en la sección de requisitos previos o sus propios datos. A continuación, seleccione Cargar archivos. Seleccione Siguiente.
En el panel Administración de datos, puede elegir si desea habilitar la búsqueda semántica o el vector de búsqueda del índice.
Importante
- La búsqueda semántica y el vector de búsqueda están sujetas a precios adicionales. Debe elegir SKU Básico o superior para habilitar la búsqueda semántica o la búsqueda vectorial. Para más información, vea diferencias de planes de tarifa y límites de servicio.
- Para ayudar a mejorar la calidad de la recuperación de la información y la respuesta del modelo, se recomienda habilitar la búsqueda semántica para los siguientes idiomas de origen de los datos: inglés, francés, español, portugués, italiano, alemán, chino (Zh), japonés, coreano, ruso, y árabe.
Revise los detalles que ingresó y seleccione Guardar y cerrar. Ahora puede chatear con el modelo, que usará la información de sus datos para construir la respuesta.
Recuperación de variables necesarias
Para realizar correctamente una llamada a Azure OpenAI, necesitará las siguientes variables. Este inicio rápido supone que cargó los datos en una cuenta de Azure Blob Storage y que creó un índice de Azure AI Search. Consulte Añada sus datos mediante Azure AI Studio
Nombre de la variable | Value |
---|---|
AZURE_OPENAI_ENDPOINT |
Este valor se puede encontrar en la sección Claves y Punto de conexión al examinar su recurso de Azure OpenAI en Azure Portal. Como alternativa, puede encontrar el valor en Azure AI Studio>Área de juegos de chat>Vista Código. Punto de conexión de ejemplo: https://my-resoruce.openai.azure.com . |
AZURE_OPENAI_API_KEY |
Este valor se puede encontrar en la sección Administración de recursos>Claves y Punto de conexión al examinar su recurso de Azure OpenAI en Azure Portal. Puede usar KEY1 o KEY2 . Tener siempre dos claves permite rotar y regenerar las claves de forma segura sin provocar una interrupción del servicio. |
AZURE_OPENAI_DEPLOYMENT_ID |
Este valor se corresponde con el nombre personalizado que eligió para la implementación al implementar un modelo. Este valor se puede encontrar en Administración de recursos>Implementaciones en Azure Portal, o bien en Administración>Implementaciones en Azure AI Studio. |
AZURE_AI_SEARCH_ENDPOINT |
Este valor se puede encontrar en la sección Información general al examinar su recurso de Azure AI Search de Azure Portal. |
AZURE_AI_SEARCH_API_KEY |
Este valor se puede encontrar en la sección Configuración>Claves al examinar su recurso de Azure AI Search en Azure Portal. Puede usar la clave de administrador principal o la clave de administrador secundaria. Tener siempre dos claves permite rotar y regenerar las claves de forma segura sin provocar una interrupción del servicio. |
AZURE_AI_SEARCH_INDEX |
Este valor se corresponde con el nombre del índice que creó para almacenar los datos. Puede encontrarlo en la sección Información general, al examinar el recurso de Azure AI Search desde Azure Portal. |
Variables de entorno
Cree y asigne variables de entorno persistentes para la clave y el punto de conexión.
Importante
Si usa una clave de API, almacénela de forma segura en otro lugar, como en Azure Key Vault. No incluya la clave de API directamente en el código ni la exponga nunca públicamente.
Para más información sobre la seguridad de los servicios de AI, consulte Autenticación de solicitudes a los servicios de Azure AI.
setx AZURE_OPENAI_ENDPOINT REPLACE_WITH_YOUR_AOAI_ENDPOINT_VALUE_HERE
setx AZURE_OPENAI_API_KEY REPLACE_WITH_YOUR_AOAI_KEY_VALUE_HERE
setx AZURE_OPENAI_DEPLOYMENT_ID REPLACE_WITH_YOUR_AOAI_DEPLOYMENT_VALUE_HERE
setx AZURE_AI_SEARCH_ENDPOINT REPLACE_WITH_YOUR_AZURE_SEARCH_RESOURCE_VALUE_HERE
setx AZURE_AI_SEARCH_API_KEY REPLACE_WITH_YOUR_AZURE_SEARCH_RESOURCE_KEY_VALUE_HERE
setx AZURE_AI_SEARCH_INDEX REPLACE_WITH_YOUR_INDEX_NAME_HERE
Comandos cURL de ejemplo
Los modelos de chat de Azure OpenAI están optimizados para trabajar con entradas con formato de conversación. La variable messages
pasa una matriz de diccionarios con distintos roles en la conversación, delineada por sistemas, usuarios y asistentes. La variable dataSources
se conecta al índice de Azure AI Search y permite a los modelos de Azure OpenAI responder usando sus datos.
Para desencadenar una respuesta del modelo, debe terminar con un mensaje de usuario indicando que es el turno de responder del asistente.
Sugerencia
Hay varios parámetros que puede usar para cambiar la respuesta del modelo, como temperature
o top_p
. Vea la documentación de referencia para más información.
curl -i -X POST $AZURE_OPENAI_ENDPOINT/openai/deployments/$AZURE_OPENAI_DEPLOYMENT_ID/chat/completions?api-version=2024-02-15-preview \
-H "Content-Type: application/json" \
-H "api-key: $AZURE_OPENAI_API_KEY" \
-d \
'
{
"data_sources": [
{
"type": "azure_search",
"parameters": {
"endpoint": "'$AZURE_AI_SEARCH_ENDPOINT'",
"key": "'$AZURE_AI_SEARCH_API_KEY'",
"index_name": "'$AZURE_AI_SEARCH_INDEX'"
}
}
],
"messages": [
{
"role": "user",
"content": "What are my available health plans?"
}
]
}
'
Salida de ejemplo
{
"id": "12345678-1a2b-3c4e5f-a123-12345678abcd",
"model": "gpt-4",
"created": 1709835345,
"object": "extensions.chat.completion",
"choices": [
{
"index": 0,
"finish_reason": "stop",
"message": {
"role": "assistant",
"content": "The available health plans in the Contoso Electronics plan and benefit packages are the Northwind Health Plus and Northwind Standard plans. [doc1].",
"end_turn": true,
"context": {
"citations": [
{
"content": "...",
"title": "...",
"url": "https://mysearch.blob.core.windows.net/xyz/001.txt",
"filepath": "001.txt",
"chunk_id": "0"
}
],
"intent": "[\"Available health plans\"]"
}
}
}
],
"usage": {
"prompt_tokens": 3779,
"completion_tokens": 105,
"total_tokens": 3884
}
}
Chatee con el modelo a través de una aplicación web
Para empezar a chatear con el modelo de Azure OpenAI que usa sus datos, podría implementar una aplicación web mediante Azure OpenAI Studio o el código de ejemplo que proporcionamos en GitHub. Esta aplicación se implementa con Azure App Service y proporciona una interfaz de usuario para enviar consultas. Esta aplicación se puede usar por modelos de Azure OpenAI que usen sus datos o modelos que no los usen. Consulte el archivo Léame del repositorio para obtener instrucciones sobre los requisitos, la configuración y la implementación. Opcionalmente, puede personalizar la lógica de front-end y back-end de la aplicación web realizando cambios en el código fuente.
Limpieza de recursos
Si quiere limpiar y quitar un recurso de Azure OpenAI o Azure AI Search, puede eliminar el recurso o el grupo de recursos. Al eliminar el grupo de recursos, también se elimina cualquier otro recurso que esté asociado a él.
Pasos siguientes
- Más información sobre el uso de sus datos en Azure OpenAI Service
- Código de ejemplo de la aplicación de chat en GitHub.