Creación de una aplicación de chat de IA con .NET

Empiece a trabajar con OpenAI y el kernel semántico mediante la creación de una sencilla aplicación de chat de consola de .NET 8. La aplicación se ejecutará localmente y usará el modelo gpt-3.5-turbo de OpenAI. Siga estos pasos para acceder a OpenAI y obtener información sobre cómo usar el kernel semántico.

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.

Empiece a trabajar con OpenAI y el kernel semántico mediante la creación de una sencilla aplicación de chat de consola de .NET 8. La aplicación se ejecutará localmente y se conectará al modelo de openAI gpt-35-turbo implementado en Azure OpenAI. Siga estos pasos para aprovisionar Azure OpenAI y aprenda a usar el kernel semántico.

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 del ejemplo de HikerAI

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

  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 al servicio OpenAI.

El código de la aplicación está incluido en el archivo Program.cs. En las primeras líneas del código se establecen valores de configuración y se 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);

Exploración del código

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 está contenida en el archivo Program.cs. Las primeras líneas de código recuperan los secretos y los 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);

Agregue una solicitud del sistema para proporcionar más contexto al modelo, lo que influye en el comportamiento del modelo y las finalizaciones generadas durante la conversación.

// Start the conversation with context for the AI model
ChatHistory chatHistory = new("""
    You are a hiking enthusiast who helps people discover fun hikes in their area. 
    You are upbeat and friendly. You introduce yourself when first saying hello.
    When helping people out, you always ask them for this information
    to inform the hiking recommendation you provide:

    1. Where they are located
    2. What hiking intensity they are looking for

    You will then provide three suggestions for nearby hikes that vary in length
    after you get that information. You will also share an interesting fact about
    the local nature on the hikes when making a recommendation.
    """);

Agregue un mensaje de usuario al historial de chat mediante la función AddUserMessage. Use la función GetChatMessageContentAsync para indicar al modelo que genere una respuesta basada en la solicitud del sistema y la solicitud del usuario.


// Add user message to chat history
chatHistory.AddUserMessage("Hi! Apparently you can help me find a hike that I will like?");

// Print User Message to console
Console.WriteLine($"{chatHistory.Last().Role} >>> {chatHistory.Last().Content}");

// Get response
var response = await service.GetChatMessageContentAsync(
    chatHistory, new OpenAIPromptExecutionSettings() { MaxTokens = 400 });

Agregue la respuesta del modo para mantener el historial de chats.

// Add response to chat history
chatHistory.Add(response);

// Print Response to console
Console.WriteLine($"{chatHistory.Last().Role} >>> {chatHistory.Last().Content}");

Personalice la solicitud del sistema y el mensaje del usuario para ver cómo responde el modelo para ayudarle a encontrar una caminata que le guste.

Limpieza de recursos

Quite la implementación correspondiente y todos los recursos cuando ya no necesite la aplicación o los recursos de ejemplo.

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