Создание приложения чата ИИ с помощью .NET
Приступая к работе с OpenAI и семантического ядра , создав простое консольное приложение чата .NET 8. Приложение будет выполняться локально и использовать модель OpenAI gpt-3.5-turbo
. Выполните следующие действия, чтобы получить доступ к OpenAI и узнать, как использовать семантические ядра.
Необходимые компоненты
- Пакет SDK для .NET 8.0. Установите пакет SDK для .NET 8.0.
- Ключ API из OpenAI, чтобы можно было запустить этот пример.
- В Windows требуется PowerShell
v7+
. Чтобы проверить версию, запуститеpwsh
в терминале. Он должен возвращать текущую версию. Если он возвращает ошибку, выполните следующую команду:dotnet tool update --global PowerShell
Приступая к работе с OpenAI и семантического ядра , создав простое консольное приложение чата .NET 8. Приложение будет работать локально и подключаться к модели OpenAI gpt-35-turbo
, развернутой в Azure OpenAI. Выполните следующие действия, чтобы подготовить Azure OpenAI и узнать, как использовать семантические ядра.
Необходимые компоненты
- Пакет SDK для .NET 8. Установите пакет SDK для .NET 8.
- Подписка Azure — создайте бесплатную учетную запись.
- Интерфейс командной строки разработчика Azure. Установка или обновление интерфейса командной строки разработчика Azure.
- Доступ к службе Azure OpenAI.
- В Windows требуется PowerShell
v7+
. Чтобы проверить версию, запуститеpwsh
в терминале. Он должен возвращать текущую версию. Если он возвращает ошибку, выполните следующую команду:dotnet tool update --global PowerShell
Скачивание примера проекта
Клонируйте репозиторий GitHub, содержащий примеры приложений для всех кратких руководств:
git clone https://github.com/dotnet/ai-samples.git
Создание службы Azure OpenAI
Пример репозитория GitHub структурирован как шаблон интерфейса командной строки разработчика Azure (azd
), который azd
можно использовать для подготовки службы и модели Azure OpenAI.
В терминале или командной строке перейдите к каталогу src\quickstarts\azure-openai примера репозитория.
azd up
Выполните команду, чтобы подготовить ресурсы Azure OpenAI. Для создания службы Azure OpenAI и развертывания модели может потребоваться несколько минут.azd up
azd
также настраивает необходимые секреты пользователя для примера приложения, например ключа доступа OpenAI.Примечание.
Если во время
azd up
развертывания возникла ошибка, посетите раздел устранения неполадок .
Попробуйте пример HikerAI
В терминале или командной строке перейдите
openai\02-HikerAI
в каталог.Выполните следующие команды, чтобы настроить ключ API OpenAI в качестве секрета для примера приложения:
dotnet user-secrets init dotnet user-secrets set OpenAIKey <your-openai-key>
dotnet run
Используйте команду для запуска приложения:dotnet run
В терминале или командной строке перейдите
azure-openai\02-HikerAI
в каталог.dotnet run
Используйте команду для запуска приложения:dotnet run
Совет
Если появится сообщение об ошибке, ресурсы Azure OpenAI, возможно, не завершили развертывание. Подождите пару минут и повторите попытку.
Обзор кода
Приложение использует Microsoft.SemanticKernel
пакет для отправки и получения запросов в службу OpenAI.
Код приложения содержится в файле Program.cs . Первые несколько строк конфигурации набора кода и получение ключа OpenAI, который ранее был задан с помощью dotnet user-secrets
команды.
var config = new ConfigurationBuilder().AddUserSecrets<Program>().Build();
string model = "gpt-3.5-turbo";
string key = config["OpenAIKey"];
OpenAIChatCompletionService
Служба упрощает запросы и ответы.
// Create the OpenAI Chat Completion Service
OpenAIChatCompletionService service = new(model, key);
Обзор кода
Приложение использует Microsoft.SemanticKernel
пакет для отправки и получения запросов в службу Azure OpenAI, развернутую в Azure.
Все приложение содержится в файле Program.cs . Первые несколько строк кода извлекают секреты и значения конфигурации, заданные для dotnet user-secrets
вас во время подготовки приложения.
// 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"];
AzureOpenAIChatCompletionService
Служба упрощает запросы и ответы.
// Create the Azure OpenAI Chat Completion Service
AzureOpenAIChatCompletionService service = new(deployment, endpoint, key);
Добавьте системный запрос, чтобы предоставить дополнительный контекст модели, который влияет на поведение модели и созданные завершения во время беседы.
// 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.
""");
Добавьте сообщение пользователя в журнал чата AddUserMessage
с помощью функции. GetChatMessageContentAsync
Используйте функцию, чтобы указать модели создать ответ на основе системного запроса и запроса пользователя.
// 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 });
Добавьте ответ из режима для поддержания журнала чата.
// Add response to chat history
chatHistory.Add(response);
// Print Response to console
Console.WriteLine($"{chatHistory.Last().Role} >>> {chatHistory.Last().Content}");
Настройте системный запрос и сообщение пользователя, чтобы узнать, как модель реагирует, чтобы помочь вам найти нужный поход.
Очистка ресурсов
Удалите соответствующее развертывание и все ресурсы, если вам больше не нужен пример приложения или ресурсов.
azd down
Устранение неполадок
В Windows после выполнения azd up
могут появиться следующие сообщения об ошибках:
postprovision.ps1 не имеет цифровой подписи. Сценарий не будет выполняться в системе
Скрипт postprovision.ps1 выполняется для задания секретов пользователей .NET, используемых в приложении. Чтобы избежать этой ошибки, выполните следующую команду PowerShell:
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
Затем повторно запустите azd up
команду.
Еще одна возможная ошибка:
Pwsh не распознается как внутренняя или внешняя команда, операблирование программы или пакетного файла. ПРЕДУПРЕЖДЕНИЕ: сбой перехватчика postprovision с кодом выхода: "1", путь: ".\infra\post-script\postprovision.ps1". : код выхода: 1 Выполнение будет продолжаться, так как Параметр ContinueOnError имеет значение true.
Скрипт postprovision.ps1 выполняется для задания секретов пользователей .NET, используемых в приложении. Чтобы избежать этой ошибки, вручную запустите скрипт с помощью следующей команды PowerShell:
.\infra\post-script\postprovision.ps1
Теперь приложения .NET AI настраивают секреты пользователей и их можно протестировать.