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, ejecutepwsh
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
- SDK de .NET 8: Instalación del SDK de .NET 8.
- Una suscripción a Azure (cree una cuenta gratuita).
- Azure Developer CLI: Instalación o actualización de Azure Developer CLI.
- Acceda al servicio Azure OpenAI.
- En Windows, se requiere PowerShell
v7+
. Para validar la versión, ejecutepwsh
en un terminal. Debe devolver la versión actual. Si devuelve un error, ejecute el siguiente comando:dotnet tool update --global PowerShell
.
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.
Desde un terminal o símbolo del sistema, vaya al directorio src\quickstarts\azure-openai del repositorio de ejemplo.
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
Desde un terminal o símbolo del sistema, vaya al directorio
openai\03-ChattingAboutMyHikes
.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>
Use el comando
dotnet run
para ejecutar la aplicación:dotnet run
Desde un terminal o símbolo del sistema, vaya al directorio
azure-openai\02-HikerAI
.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.