Comparteix a través de


Obtención de información sobre los datos desde una aplicación de chat de IA de .NET

Introducción al desarrollo de inteligencia artificial mediante una aplicación de consola de .NET 8 para conectarse a un modelo gpt-3.5-turbo de OpenAI. Se conectará al modelo de IA mediante el kernel semántico para analizar los datos de senderismo y proporcionar información.

Requisitos previos

  • SDK de .NET 8.0: Instalación del SDK de .NET 8.0.
  • Una clave de API de OpenAI para poder ejecutar este ejemplo.
  • En Windows, se requiere PowerShell v7+. Para validar la versión, ejecute pwsh en un terminal. Debe devolver la versión actual. Si devuelve un error, ejecute el siguiente comando: dotnet tool update --global PowerShell.

Introducción al desarrollo de inteligencia artificial mediante una aplicación de consola de .NET 8 para conectarse a un modelo gpt-3.5-turbo de OpenAI implementado en Azure. Se conectará al modelo de IA mediante el kernel semántico para analizar los datos de senderismo y proporcionar información.

Requisitos previos

Obtención del proyecto de ejemplo

Clone el repositorio de GitHub que contiene las aplicaciones de ejemplo para todas las guías de inicio rápido:

git clone https://github.com/dotnet/ai-samples.git

Creación de Azure OpenAI Service

El repositorio de GitHub de ejemplo se estructura como una plantilla de Azure Developer CLI (azd), que azd puede usar para aprovisionar automáticamente el servicio y el modelo de Azure OpenAI.

  1. Desde un terminal o símbolo del sistema, vaya al directorio src\quickstarts\azure-openai del repositorio de ejemplo.

  2. Ejecute el comando azd up para aprovisionar los recursos de Azure OpenAI. Puede tardar varios minutos en crear el servicio Azure OpenAI e implementar el modelo.

    azd up
    

    azd también configura los secretos de usuario necesarios para la aplicación de ejemplo, como la clave de acceso de OpenAI.

    Nota:

    Si se produce un error durante la implementación de azd up, visite la sección Solución de problemas.

Prueba de la muestra de chat de senderismo

  1. Desde un terminal o símbolo del sistema, vaya al directorio openai\03-ChattingAboutMyHikes.

  2. Ejecute los siguientes comandos para configurar la clave de API de OpenAI como un secreto para la aplicación de ejemplo:

    dotnet user-secrets init
    dotnet user-secrets set OpenAIKey <your-openai-key>
    
  3. Use el comando dotnet run para ejecutar la aplicación:

    dotnet run
    
  1. Desde un terminal o símbolo del sistema, vaya al directorio azure-openai\02-HikerAI.

  2. Use el comando dotnet run para ejecutar la aplicación:

    dotnet run
    

    Sugerencia

    Si recibe un mensaje de error, es posible que los recursos de Azure OpenAI no hayan terminado de implementarse. Espere un par de minutos e inténtelo de nuevo.

Exploración del código

La aplicación usa el paquete Microsoft.SemanticKernel para enviar y recibir solicitudes a un servicio OpenAI.

Toda la aplicación está contenida en el archivo Program.cs. En las primeras líneas del código se establecen valores de configuración y obtiene la clave de OpenAI que se ha establecido antes mediante el comando dotnet user-secrets.

var config = new ConfigurationBuilder().AddUserSecrets<Program>().Build();
string model = "gpt-3.5-turbo";
string key = config["OpenAIKey"];

El servicio OpenAIChatCompletionService facilita las solicitudes y respuestas.

// Create the OpenAI Chat Completion Service
OpenAIChatCompletionService service = new(model, key);

Una vez creado el cliente OpenAIChatCompletionService, la aplicación lee el contenido del archivo hikes.md y lo usa para proporcionar más contexto al modelo agregando un símbolo del sistema. Esto influye en el comportamiento del modelo y las finalizaciones generadas durante la conversación.

La aplicación usa el paquete Microsoft.SemanticKernel para enviar y recibir solicitudes a un servicio de Azure OpenAI implementado en Azure.

Toda la aplicación se encuentra dentro del archivo Program.cs. Las primeras líneas de código cargan secretos y valores de configuración que se establecieron en dotnet user-secrets automáticamente durante el aprovisionamiento de aplicaciones.

// == Retrieve the local secrets saved during the Azure deployment ==========
var config = new ConfigurationBuilder().AddUserSecrets<Program>().Build();
string endpoint = config["AZURE_OPENAI_ENDPOINT"];
string deployment = config["AZURE_OPENAI_GPT_NAME"];
string key = config["AZURE_OPENAI_KEY"];

El servicio AzureOpenAIChatCompletionService facilita las solicitudes y respuestas.

// == Create the Azure OpenAI Chat Completion Service  ==========
AzureOpenAIChatCompletionService service = new(deployment, endpoint, key);

Una vez creado el cliente OpenAIChatCompletionService, la aplicación lee el contenido del archivo hikes.md y lo usa para proporcionar más contexto al modelo agregando un símbolo del sistema. Esto influye en el comportamiento del modelo y las finalizaciones generadas durante la conversación.

// Provide context for the AI model
ChatHistory chatHistory = new($"""
    You are upbeat and friendly. You introduce yourself when first saying hello. 
    Provide a short answer only based on the user hiking records below:  

    {File.ReadAllText("hikes.md")}
    """);
Console.WriteLine($"{chatHistory.Last().Role} >>> {chatHistory.Last().Content}");

El siguiente código agrega un mensaje de usuario al modelo mediante la función AddUserMessage. La función GetChatMessageContentAsync indica al modelo para generar una respuesta basada en los mensajes del sistema y del usuario.

// Start the conversation
chatHistory.AddUserMessage("Hi!");
Console.WriteLine($"{chatHistory.Last().Role} >>> {chatHistory.Last().Content}");

chatHistory.Add(
    await service.GetChatMessageContentAsync(
        chatHistory,
        new OpenAIPromptExecutionSettings()
        { 
            MaxTokens = 400 
        }));
Console.WriteLine($"{chatHistory.Last().Role} >>> {chatHistory.Last().Content}");

La aplicación agrega la respuesta del modelo al chatHistory para mantener el historial de chat o el contexto.

// Continue the conversation with a question.
chatHistory.AddUserMessage(
    "I would like to know the ratio of the hikes I've done in Canada compared to other countries.");

Console.WriteLine($"{chatHistory.Last().Role} >>> {chatHistory.Last().Content}");

chatHistory.Add(await service.GetChatMessageContentAsync(
    chatHistory,
    new OpenAIPromptExecutionSettings()
    { 
        MaxTokens = 400 
    }));

Console.WriteLine($"{chatHistory.Last().Role} >>> {chatHistory.Last().Content}");

Personalice los mensajes del sistema o del usuario para proporcionar preguntas y contextos diferentes:

  • ¿Cuántas veces he ido de senderismo cuando llueve?
  • ¿Cuántas veces fui de senderismo en 2021?

El modelo genera una respuesta relevante a cada solicitud en función de las entradas.

Limpieza de recursos

Cuando ya no necesite la aplicación o los recursos de ejemplo, quite la implementación correspondiente y todos los recursos.

azd down

Solución de problemas

En Windows, es posible que reciba los siguientes mensajes de error después de ejecutar azd up:

postprovision.ps1 no está firmado digitalmente. El script no se ejecutará en el sistema

El script postprovision.ps1 se ejecuta para establecer los secretos de usuario de .NET usados en la aplicación. Para evitar este error, ejecute el siguiente comando de PowerShell:

Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass

A continuación, vuelva a ejecutar el comando azd up.

Otro posible error:

'pwsh' no se reconoce como un comando interno o externo, programa operable o archivo por lotes. ADVERTENCIA: Error en el enlace "postprovision" con código de salida: '1', Ruta de acceso: '.\infra\post-script\postprovision.ps1'. : código de salida: 1 La ejecución continuará desde que ContinueOnError se ha establecido en true.

El script postprovision.ps1 se ejecuta para establecer los secretos de usuario de .NET usados en la aplicación. Para evitar este error, ejecute manualmente el script mediante el siguiente comando de PowerShell:

.\infra\post-script\postprovision.ps1

Las aplicaciones de IA de .NET ahora tiene configurados los secretos de usuario y se pueden probar.

Pasos siguientes