Поделиться через


Вызов функций .NET с помощью модели ИИ

В этом кратком руководстве вы создадите консольное приложение чата ИИ .NET для подключения к модели ИИ с включенным локальным вызовом функций. Приложение использует библиотеку Microsoft.Extensions.AI , чтобы можно было писать код с помощью абстракций ИИ, а не конкретного пакета SDK. Абстракции искусственного интеллекта позволяют изменять базовую модель ИИ с минимальными изменениями кода.

Примечание.

Библиотека Microsoft.Extensions.AI в настоящее время находится в предварительной версии.

Необходимые компоненты

Необходимые компоненты

Примечание.

Вы также можете использовать семантические ядра для выполнения задач, описанных в этой статье. Семантический ядро — это упрощенный пакет SDK с открытым исходным кодом, который позволяет создавать агенты ИИ и интегрировать последние модели ИИ в приложения .NET.

Клонирование примера репозитория

Вы можете создать собственное приложение, выполнив действия, описанные в разделах, или клонировать репозиторий GitHub, содержащий готовые примеры приложений для всех кратких руководств. Если вы планируете использовать Azure OpenAI, пример репозитория также структурирован как шаблон интерфейса командной строки разработчика Azure, который может подготовить ресурс Azure OpenAI для вас.

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

Создание приложения

Выполните следующие действия, чтобы создать консольное приложение .NET для подключения к модели ИИ.

  1. В пустом каталоге на компьютере используйте dotnet new команду для создания нового консольного приложения:

    dotnet new console -o FunctionCallingAI
    
  2. Измените каталог в папку приложения:

    cd FunctionCallingAI
    
  3. Установите необходимые пакеты.

    dotnet add package Azure.Identity
    dotnet add package Azure.AI.OpenAI
    dotnet add package Microsoft.Extensions.AI
    dotnet add package Microsoft.Extensions.AI.OpenAI
    dotnet add package Microsoft.Extensions.Configuration
    dotnet add package Microsoft.Extensions.Configuration.UserSecrets
    
    dotnet add package Microsoft.Extensions.AI
    dotnet add package Microsoft.Extensions.AI.OpenAI
    dotnet add package Microsoft.Extensions.Configuration
    dotnet add package Microsoft.Extensions.Configuration.UserSecrets
    
  4. Откройте приложение в Коде Visual Studio или в выбранном редакторе

    code .
    

Создание службы ИИ

Пример репозитория GitHub структурирован как шаблон интерфейса командной строки разработчика Azure (azd), который azd можно использовать для подготовки службы и модели Azure OpenAI.

  1. В терминале или командной строке перейдите в src\quickstarts\azure-openai каталог примера репозитория.

  2. azd up Выполните команду, чтобы подготовить ресурсы Azure OpenAI. Для создания службы Azure OpenAI и развертывания модели может потребоваться несколько минут.

    azd up
    

    azd также настраивает необходимые секреты пользователей для примера приложения, например конечную точку Azure OpenAI и имя модели.

Настройка приложения

  1. Перейдите в корневой каталог projet .NET из терминала или командной строки.

  2. Выполните следующие команды, чтобы настроить ключ 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 пакет для отправки и получения запросов в модель ИИ.

  1. В файле 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()
            .UseFunctionInvocation()
            .Use(
                new AzureOpenAIClient(new Uri(endpoint),
                new DefaultAzureCredential())
                    .AsChatClient(deployment));
    

    Примечание.

    DefaultAzureCredential выполняет поиск учетных данных проверки подлинности из локального инструмента. Если вы не используете azd шаблон для подготовки ресурса Azure OpenAI, необходимо назначить Azure AI Developer роль учетной записи, которую вы использовали для входа в Visual Studio или Azure CLI. Дополнительные сведения см. в статье "Аутентификация в службах ИИ Azure" с помощью .NET.

    using Microsoft.Extensions.AI;
    using Microsoft.Extensions.Configuration;
    using OpenAI;
    
    var config = new ConfigurationBuilder().AddUserSecrets<Program>().Build();
    string model = config["ModelName"];
    string key = config["OpenAIKey"];
    
    IChatClient client =
        new ChatClientBuilder()
            .UseFunctionInvocation()
            .Use(
                new OpenAIClient(key)
                    .AsChatClient(model));
    
  2. Создайте новый ChatOptions объект, содержащий встроенную функцию модели ИИ, чтобы получить текущую погоду. Объявление функции включает делегат для выполнения логики и имени и параметров описания для описания цели функции модели ИИ.

    // Add a new plugin with a local .NET function that should be available to the AI model
    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")]
    };
    
  3. Добавьте системный запрос для 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()}");
    
    var response = await client.CompleteAsync(chatHistory, chatOptions);
    chatHistory.Add(new ChatMessage(ChatRole.Assistant, response.Message.Contents));
    Console.WriteLine($"{chatHistory.Last().Role} >>> {chatHistory.Last()}");
    
  4. dotnet run Используйте команду для запуска приложения:

    dotnet run
    

    Приложение выводит ответ завершения из модели ИИ, включающую данные, предоставляемые функцией .NET. Модель искусственного интеллекта поняла, что зарегистрированная функция доступна и вызывает ее автоматически, чтобы создать правильный ответ.

Очистка ресурсов

Если вам больше не нужен пример приложения или ресурсов, удалите соответствующее развертывание и все ресурсы.

azd down

Следующие шаги