Ejercicio - Instale el SDK de .NET para Azure OpenAI y cree su primera aplicación

Completado

Ahora que tenemos un conocimiento de las finalizaciones de texto y chat, vamos a crear una aplicación básica que las use.

Digamos que trabaja para una organización que recomienda senderos a excursionistas para explorar la naturaleza. Se plantea agregar una inteligencia artificial conversacional a la funcionalidad de recomendación y desea crear un prototipo.

Decide que debe usar la API de finalización de chat proporcionada por el modelo GPT-35-Turbo.

Creación de un recurso de Azure OpenAI

El primer paso es crear el recurso de Azure OpenAI e implementar el modelo. Vamos a usar el modelo GPT-3 Turbo en este ejercicio. Como se indica en la documentación, GPT-3.5 Turbo usa la API de finalizaciones de chat y es ideal para nuestro caso de uso.

Requisitos previos

  • Una suscripción de Azure

  • Acceso concedido a Azure OpenAI en la suscripción que quiera

    Actualmente, solo la aplicación concede acceso a este servicio. Para solicitar acceso a Azure OpenAI, rellene el formulario en https://aka.ms/oai/access.

  • CLI de Azure instalada

Creación de un recurso e implementación del modelo

La creación del recurso e implementación del modelo es un proceso de varios pasos. Recomendamos usar la CLI de Azure, ya que es más rápida que Azure Portal. Pero tenga en cuenta que puede usar el Azure Portal si lo desea.

  1. Ejecute el comando az login para iniciar sesión si aún no lo ha hecho.

  2. Al crear un nuevo recurso de Azure, puede elegir entre crear un grupo de recursos o usar uno existente. Este comando muestra cómo crear un nuevo grupo de recursos. Se usa el nombre HikingConversations-RG, pero puede sustituirlo por el nombre que quiera o usar el nombre de un grupo existente.

    az group create \
    --name HikingConversations-RG \
    --location eastus
    
    az group create `
    --name HikingConversations-RG `
    --location eastus
    
  3. Ejecute el siguiente comando para crear un recurso OpenAI en el grupo de recursos HikingConversations-RG. Asigne al recurso de OpenAI el nombre HikingConversationsAI.

    az cognitiveservices account create \
    -n HikingConversationsAI \
    -g HikingConversations-RG \
    -l eastus \
    --kind OpenAI \
    --sku s0
    
    az cognitiveservices account create `
    -n HikingConversationsAI `
    -g HikingConversations-RG `
    -l eastus `
    --kind OpenAI `
    --sku s0
    
  4. A continuación, queremos implementar el modelo GPT-35-Turbo en el recurso de OpenAI que hemos creado. Llame HikingRecommendationTurbo a la implementación del modelo. Tenga en cuenta que hemos usado HikingConversations-RG como nombre del grupo de recursos y HikingConversationsAI como nombre del recurso de OpenAI. Si ha usado valores diferentes, asegúrese de sustituirlos por ellos aquí.

    az cognitiveservices account deployment create \
    -g HikingConversations-RG \
    -n HikingConversationsAI \
    --deployment-name HikingRecommendationTurbo \
    --model-name gpt-35-turbo \
    --model-version "0301" \
    --model-format OpenAI \
    --scale-settings-scale-type "Standard"
    
    az cognitiveservices account deployment create `
    -g HikingConversations-RG `
    -n HikingConversationsAI `
    --deployment-name HikingRecommendationTurbo `
    --model-name gpt-35-turbo `
    --model-version "0301" `
    --model-format OpenAI `
    --scale-settings-scale-type "Standard"
    
  5. Una vez creado el recurso y el modelo, es necesario obtener la dirección URL base y las claves de acceso para que el SDK de .NET pueda acceder al recurso de Azure OpenAI. Use estos comandos para obtener el punto de conexión y las claves de API principales y tome nota de ellos para su uso posterior:

    El punto de conexión

    az cognitiveservices account show \
    -g HikingConversations-RG \
    -n HikingConversationsAI \
    --query "properties.endpoint"
    
    az cognitiveservices account show `
    -g HikingConversations-RG `
    -n HikingConversationsAI `
    --query "properties.endpoint"
    

    Clave de API principal

    az cognitiveservices account keys list \
    -g HikingConversations-RG \
    -n HikingConversationsAI \
    --query "key1"
    
    az cognitiveservices account keys list `
    -g HikingConversations-RG `
    -n HikingConversationsAI `
    --query "key1"
    

Crear aplicación de consola y agregar el SDK de OpenAI

A continuación, queremos crear una aplicación de consola de .NET básica y agregar el SDK de Azure OpenAI.

  1. Ejecute lo siguiente para crear una nueva aplicación de .NET llamada HikingConversationsAI.

    dotnet new console -n HikingConversationsAI
    
  2. Cambie al directorio HikingConversationsAI que se acaba de crear.

    cd HikingConversationsAI
    
  3. A continuación, agregue el SDK de Azure Open AI.

    dotnet add package Azure.AI.OpenAI --prerelease
    
  4. Abra el proyecto en VS Code o Visual Studio.

  5. En el archivo Program.cs, elimine todo el código existente.

  6. Agregue using Azure.AI.OpenAI; a la parte superior del archivo Program.cs.

  7. Agregue using Azure; a la parte superior del archivo Program.cs.

  8. Agregue tres variables de nivel de clase que contengan referencias al punto de conexión del recurso de Azure OpenAI, la clave de API principal y el nombre del modelo que implementó.

    string openAIEndpoint = "<YOUR ENDPOINT URL VALUE>";
    string openAIAPIKey = "<YOUR PRIMARY API KEY VALUE>";
    string openAIDeploymentName = "HikingRecommendationTurbo";
    

    En los pasos anteriores, llamamos a la implementación HikingRecommendationTurbo, si usó un nombre diferente, use el que creó usted.

  9. Por último, cree una instancia de clase necesaria para comunicarse con el recurso de Azure OpenAI.

    var endpoint = new Uri(openAIEndpoint);
    var credentials = new AzureKeyCredential(openAIAPIKey);
    var openAIClient = new AzureOpenAIClient(endpoint, credentials);
    

Creación del sistema de solicitudes

Vamos a crear la solicitud de rol del sistema inicial que proporcionará las instrucciones iniciales para el modelo.

  1. Primero, cree una solicitud que indique al modelo cómo desea que actúe durante la conversación al recomendar senderos.

    var systemPrompt = 
    """
    You are a hiking enthusiast who helps people discover fun hikes. You are upbeat and friendly. 
    You ask people what type of hikes they like to take and then suggest some.
    """;
    
  2. A continuación, cree un List<ChatMessage> para contener todos los mensajes que se enviarán a y desde el modelo.

    List<ChatMessage> chatHistory = new();
    
  3. A continuación, cree un objeto SystemChatMessage nuevo y agréguelo a la lista chatHistory. Estableceremos que ChatMessage procede del rol Sistema.

    SystemChatMessage systemMessage = ChatMessage.CreateSystemMessage(systemPrompt);
    
    chatHistory.Add(systemMessage);
    

Iniciar la conversación

A continuación, enviaremos el primer mensaje al modelo, iniciando la conversación.

  1. Cree una solicitud para el usuario y agréguela a chatHistory como mensaje de usuario.

    string userGreeting = """
    Hi there hiking recommendation bot! 
    Can't wait to hear what you have in store for me!
    """;
    
    UserChatMessage userGreetingMessage = ChatMessage.CreateUserMessage(userGreeting);
    chatHistory.Add(userGreetingMessage);
    
    Console.WriteLine($"User >>> {userGreeting}");
    
  2. Ahora deberá obtener una referencia al objeto ChatClient. Este objeto es responsable de facilitar las conversaciones de chat con el modelo. Por lo tanto, deberá indicar al objeto cliente de Azure OpenAI qué modelo implementó desea usar.

    var chatClient = openAIClient.GetChatClient(openAIDeploymentName);
    
  3. A continuación, llame a la función CompleteChatAsync de la clase ChatClient pasando el chatHistory.

    var response = await chatClient.CompleteChatAsync(chatHistory);
    
  4. Después, lea el valor que ha devuelto el modelo.

    Console.WriteLine($"AI >>> {response.Value.Content.Last().Text}");
    
  5. Veamos lo que tenemos hasta ahora. Puede ejecutar la aplicación si escribe dotnet run en el terminal.

  6. Cambie el valor de userGreetingMessage para ver cómo el modelo puede responder de forma diferente.

En una ejecución de ejemplo, vemos lo siguiente:

Hello! Great to hear from you. What type of hikes are you interested in? Do you enjoy easy scenic walks, challenging trails, or something in between? Do you prefer hikes with waterfalls, mountain views, or unique geological formations?

El modelo no es determinista, por lo que puede ver algo diferente o producir una salida diferente incluso con la misma entrada.

Continuar la conversación

Para continuar vamos a responder a la conversación y, a continuación, generar la respuesta.

  1. Asegúrese de conservar el contexto de la conversación. Para ello, agregue la respuesta que se devolvió directamente a la lista chatHistory.

    var assistantMessage = ChatMessage.CreateAssistantMessage(response.Value.Content.Last().Text);
    
    chatHistory.Add(assistantMessage); 
    
  2. A continuación, cree otra solicitud de usuario y envíela al modelo.

    var hikeRequest = 
    """
    I would like a strenuous hike near where I live that ends with
    a view that is amazing.
    """;
    
    Console.WriteLine($"User >>> {hikeRequest}");
    
    UserChatMessage hikeMessage = ChatMessage.CreateUserMessage(hikeRequest);
    
    chatHistory.Add(hikeMessage);
    
    response = await chatClient.CompleteChatAsync(chatHistory); 
    
    Console.WriteLine($"AI >>> {response.Value.Content.Last().Text}");
    
  3. Puede experimentar cambiando la variable hikeRequest para solicitar diferentes tipos de senderos. En un ejemplo de ejecución recibimos lo siguiente:

    Great choice! If you're up for a challenge, I recommend checking out the hike to Poo Poo Point in Issaquah, Washington. The hike is 7.2 miles roundtrip, with an elevation gain of 1,858 feet, so it's definitely a workout. But the stunning views of Mount Rainier and the Cascade Mountains make it all worthwhile. Plus, you'll get to see paragliders taking off from Poo Poo Point. It's a popular hike, so I recommend going early to avoid crowds. Let me know if you need more information!
    

Resumen

Ahora podemos usar el SDK de Azure OpenAI junto con el modelo gpt-35-turbo para crear conversaciones que ayuden a proporcionar recomendaciones de senderismo. A continuación, veamos cómo podemos mejorar las solicitudes que se envían al modelo.