В этом кратком руководстве вы создадите консольное приложение чата ИИ .NET для подключения к модели ИИ с включенным локальным вызовом функций. Приложение использует библиотеку Microsoft.Extensions.AI, чтобы можно было писать код с помощью абстракций ИИ, а не конкретного пакета SDK. Абстракции искусственного интеллекта позволяют изменять базовую модель ИИ с минимальными изменениями кода.
Примечание
Вы также можете использовать семантическое ядро для выполнения задач в этой статье. Семантический ядро — это упрощенный пакет SDK с открытым исходным кодом, который позволяет создавать агенты ИИ и интегрировать последние модели ИИ в приложения .NET.
Клонирование примера репозитория
Вы можете создать собственное приложение, выполнив действия, описанные в разделах, или клонировать репозиторий GitHub, содержащий готовые примеры приложений для всех быстрых стартов. Если вы планируете использовать Azure OpenAI, пример репозитория также структурирован как шаблон интерфейса командной строки разработчика Azure, который может подготовить ресурс Azure OpenAI для вас.
git clone https://github.com/dotnet/ai-samples.git
Выполните следующие действия, чтобы создать консольное приложение .NET для подключения к модели ИИ.
В пустом каталоге на компьютере используйте команду dotnet new
для создания нового консольного приложения:
dotnet new console -o FunctionCallingAI
Измените каталог в папку приложения:
cd FunctionCallingAI
Установите необходимые пакеты:
dotnet add package Azure.Identity
dotnet add package Azure.AI.OpenAI
dotnet add package Microsoft.Extensions.AI --prerelease
dotnet add package Microsoft.Extensions.AI.OpenAI --prerelease
dotnet add package Microsoft.Extensions.Configuration
dotnet add package Microsoft.Extensions.Configuration.UserSecrets
dotnet add package Microsoft.Extensions.AI --prerelease
dotnet add package Microsoft.Extensions.AI.OpenAI --prerelease
dotnet add package Microsoft.Extensions.Configuration
dotnet add package Microsoft.Extensions.Configuration.UserSecrets
Откройте приложение в Коде Visual Studio или в выбранном редакторе
code .
Пример репозитория GitHub структурирован как шаблон Azure Developer CLI (azd
), который azd
можно использовать для развертывания службы и модели Azure OpenAI.
В терминале или командной строке перейдите в каталог src\quickstarts\azure-openai
примера репозитория.
Выполните команду azd up
, чтобы подготовить ресурсы Azure OpenAI. Для создания службы Azure OpenAI и развертывания модели может потребоваться несколько минут.
azd up
azd
также настраивает необходимые секреты пользователей для примера приложения, например имя конечной точки и модели Azure OpenAI.
Чтобы подготовить службу и модель Azure OpenAI с помощью Azure CLI, выполните действия, описанные в статье Создание и развертывание ресурса Azure OpenAI Service.
В терминале или командной строке перейдите в корневой каталог проекта.
Выполните следующие команды, чтобы настроить конечную точку и имя модели Azure OpenAI для примера приложения:
dotnet user-secrets init
dotnet user-secrets set AZURE_OPENAI_ENDPOINT <your-azure-openai-endpoint>
dotnet user-secrets set AZURE_OPENAI_GPT_NAME <your-azure-openai-model-name>
Чтобы подготовить службу и модель Azure OpenAI с помощью портала Azure, выполните действия, описанные в статье Создание и развертывание ресурса Azure OpenAI Service.
В терминале или командной строке перейдите в корневой каталог проекта.
Выполните следующие команды, чтобы настроить конечную точку и имя модели Azure OpenAI для примера приложения:
dotnet user-secrets init
dotnet user-secrets set AZURE_OPENAI_ENDPOINT <your-openai-key>
dotnet user-secrets set AZURE_OPENAI_GPT_NAME <your-azure-openai-model-name>
Перейдите в корневой каталог проекта .NET из терминала или командной строки.
Выполните следующие команды, чтобы настроить ключ API OpenAI в качестве секрета для примера приложения:
dotnet user-secrets init
dotnet user-secrets set OpenAIKey <your-openai-key>
dotnet user-secrets set ModelName <your-openai-model-name>
Добавление кода приложения
Приложение использует пакет Microsoft.Extensions.AI
для отправки и получения запросов в модель ИИ.
В файле Program.cs добавьте следующий код для подключения и аутентификации к модели ИИ. Элемент ChatClient
также настроен для использования вызова функции, что позволяет ИИ-модели вызывать функции .NET в вашем коде.
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.AI;
using Azure.AI.OpenAI;
using Azure.Identity;
var config = new ConfigurationBuilder().AddUserSecrets<Program>().Build();
string endpoint = config["AZURE_OPENAI_ENDPOINT"];
string deployment = config["AZURE_OPENAI_GPT_NAME"];
IChatClient client =
new ChatClientBuilder(
new AzureOpenAIClient(new Uri(endpoint), new DefaultAzureCredential())
.GetChatClient(deployment).AsIChatClient())
.UseFunctionInvocation()
.Build();
Примечание
DefaultAzureCredential выполняет поиск учетных данных аутентификации из вашей локальной системы. Если вы не используете шаблон azd
для подготовки ресурса Azure OpenAI, вам потребуется назначить роль Azure AI Developer
учетной записи, которую вы использовали для входа в Visual Studio или Azure CLI. Дополнительные сведения см. в статье Аутентификация в службах ИИ Azure с помощью.NET.
using Microsoft.Extensions.AI;
using Microsoft.Extensions.Configuration;
using OpenAI;
IConfigurationRoot config = new ConfigurationBuilder().AddUserSecrets<Program>().Build();
string? model = config["ModelName"];
string? key = config["OpenAIKey"];
IChatClient client =
new ChatClientBuilder(new OpenAIClient(key).GetChatClient(model ?? "gpt-4o").AsIChatClient())
.UseFunctionInvocation()
.Build();
// Add a new plugin with a local .NET function
Создайте новый объект ChatOptions
, содержащий встроенную функцию, которую модель искусственного интеллекта может вызывать для получения информации о текущей погоде. Объявление функции включает делегат для выполнения логики, а также параметры имени и описания, описывающие назначение функции модели ИИ.
var chatOptions = new ChatOptions
{
Tools = [AIFunctionFactory.Create((string location, string unit) =>
{
// Here you would call a weather API
// to get the weather for the location.
return "Periods of rain or drizzle, 15 C";
},
"get_current_weather",
"Get the current weather in a given location")]
};
Добавьте системный запрос в chatHistory
, чтобы предоставить модели контекст и инструкции. Отправьте пользователю запрос с вопросом, который требует от модели ИИ вызвать зарегистрированную функцию, чтобы правильно ответить на этот вопрос.
// System prompt to provide context.
List<ChatMessage> chatHistory = [new(ChatRole.System, """
You are a hiking enthusiast who helps people discover fun hikes in their area. You are upbeat and friendly.
""")];
// Weather conversation relevant to the registered function.
chatHistory.Add(new ChatMessage(ChatRole.User,
"I live in Montreal and I'm looking for a moderate intensity hike. What's the current weather like?"));
Console.WriteLine($"{chatHistory.Last().Role} >>> {chatHistory.Last()}");
ChatResponse response = await client.GetResponseAsync(chatHistory, chatOptions);
Console.WriteLine($"Assistant >>> {response.Text}");
Используйте команду dotnet run
для запуска приложения:
dotnet run
Приложение выводит ответ завершения из модели ИИ, которая включает данные, предоставляемые функцией .NET. Модель искусственного интеллекта поняла, что зарегистрированная функция доступна и автоматически вызывает ее для создания правильного ответа.
Если вам больше не нужен пример приложения или ресурсов, удалите соответствующее развертывание и все ресурсы.
azd down