Nota
O acceso a esta páxina require autorización. Pode tentar iniciar sesión ou modificar os directorios.
O acceso a esta páxina require autorización. Pode tentar modificar os directorios.
En este inicio rápido, creará una aplicación de chat que solicita una respuesta con salida estructurada. Una respuesta de salida estructurada es una respuesta de chat que es de un tipo que se especifica en lugar de solo texto sin formato. La aplicación de chat que crea en este inicio rápido analiza la opinión de varias revisiones de productos, clasificando cada revisión según los valores de una enumeración personalizada.
Prerrequisitos
- .NET 8 o una versión posterior
- Visual Studio Code (opcional)
Configuración del servicio de IA
Para aprovisionar un servicio y un modelo de Azure OpenAI mediante Azure Portal, complete los pasos descritos en el artículo Creación e implementación de un recurso de Azure OpenAI Service. En el paso "Implementar un modelo", seleccione el modelo gpt-4o.
Creación de la aplicación de chat
Complete los pasos siguientes para crear una aplicación de consola que se conecte al modelo de gpt-4o IA.
En una ventana de terminal, vaya al directorio donde desea crear la aplicación y cree una aplicación de consola con el
dotnet newcomando :dotnet new console -o SOChatVaya al directorio
SOChaty agregue los paquetes necesarios a la aplicación:dotnet add package Azure.AI.OpenAI dotnet add package Azure.Identity dotnet add package Microsoft.Extensions.AI dotnet add package Microsoft.Extensions.AI.OpenAI --prerelease dotnet add package Microsoft.Extensions.Configuration dotnet add package Microsoft.Extensions.Configuration.UserSecretsEjecute los siguientes comandos para agregar secretos de aplicación para el punto de conexión de Azure OpenAI, el nombre del modelo y el ID de inquilino:
dotnet user-secrets init dotnet user-secrets set AZURE_OPENAI_ENDPOINT <your-Azure-OpenAI-endpoint> dotnet user-secrets set AZURE_OPENAI_GPT_NAME gpt-4o dotnet user-secrets set AZURE_TENANT_ID <your-tenant-ID>Nota:
En función de su entorno, es posible que no se necesite el identificador de inquilino. En ese caso, elímínelo del código que crea una instancia de DefaultAzureCredential.
Abra la nueva aplicación en el editor que prefiera.
Agregar el código
Defina la enumeración que describe las distintas opiniones.
public enum Sentiment { Positive, Negative, Neutral }Cree el objeto IChatClient que se comunicará con el modelo.
IConfigurationRoot config = new ConfigurationBuilder() .AddUserSecrets<Program>() .Build(); string endpoint = config["AZURE_OPENAI_ENDPOINT"]; string model = config["AZURE_OPENAI_GPT_NAME"]; string tenantId = config["AZURE_TENANT_ID"]; // Get a chat client for the Azure OpenAI endpoint. AzureOpenAIClient azureClient = new( new Uri(endpoint), new DefaultAzureCredential(new DefaultAzureCredentialOptions() { TenantId = tenantId })); IChatClient chatClient = azureClient .GetChatClient(deploymentName: model) .AsIChatClient();Nota:
DefaultAzureCredential busca las credenciales de autenticación en el entorno o en las herramientas locales. Deberá asignar el
Azure AI Developerrol a la cuenta que usó para iniciar sesión en Visual Studio o en la CLI de Azure. Para obtener más información, consulte Autenticación de Servicios de Azure AI con .NET.Envíe una solicitud al modelo con una única revisión del producto y, a continuación, imprima la opinión analizada en la consola. Para declarar el tipo de salida estructurado que se solicita, debe pasarlo como argumento de tipo al método de extensión ChatClientStructuredOutputExtensions.GetResponseAsync<T>(IChatClient, String, ChatOptions, Nullable<Boolean>, CancellationToken).
string review = "I'm happy with the product!"; var response = await chatClient.GetResponseAsync<Sentiment>($"What's the sentiment of this review? {review}"); Console.WriteLine($"Sentiment: {response.Result}");Este código genera una salida similar a la siguiente:
Sentiment: PositiveEn lugar de analizar una sola revisión, puede analizar una colección de revisiones.
string[] inputs = [ "Best purchase ever!", "Returned it immediately.", "Hello", "It works as advertised.", "The packaging was damaged but otherwise okay." ]; foreach (var i in inputs) { var response2 = await chatClient.GetResponseAsync<Sentiment>($"What's the sentiment of this review? {i}"); Console.WriteLine($"Review: {i} | Sentiment: {response2.Result}"); }Este código genera una salida similar a la siguiente:
Review: Best purchase ever! | Sentiment: Positive Review: Returned it immediately. | Sentiment: Negative Review: Hello | Sentiment: Neutral Review: It works as advertised. | Sentiment: Neutral Review: The packaging was damaged but otherwise okay. | Sentiment: NeutralY en lugar de solicitar solo el valor de enumeración analizado, puede solicitar la respuesta de texto junto con el valor analizado.
Defina un tipo de registro para que contenga la respuesta de texto y la opinión analizada:
record SentimentRecord(string ResponseText, Sentiment ReviewSentiment);(Este tipo de registro se define mediante la sintaxis del constructor principal . Los constructores principales combinan la definición de tipo con los parámetros necesarios para crear instancias de cualquier instancia de la clase. El compilador de C# genera propiedades públicas para los parámetros del constructor principal).
Envía la solicitud usando el tipo de registro como argumento de tipo para
GetResponseAsync<T>.var review3 = "This product worked okay."; var response3 = await chatClient.GetResponseAsync<SentimentRecord>($"What's the sentiment of this review? {review3}"); Console.WriteLine($"Response text: {response3.Result.ResponseText}"); Console.WriteLine($"Sentiment: {response3.Result.ReviewSentiment}");Este código genera una salida similar a la siguiente:
Response text: Certainly, I have analyzed the sentiment of the review you provided. Sentiment: Neutral
Limpieza de recursos
Si ya no los necesita, elimine el recurso de Azure OpenAI y la implementación del modelo GPT-4.
- En Azure Portal, vaya al recurso de Azure OpenAI.
- Seleccione el recurso Azure OpenAI y, a continuación, seleccione Eliminar.