次の方法で共有


AI モデルを使用して .NET 関数を呼び出す

このクイック スタートでは、ローカル関数呼び出しが有効になっている AI モデルに接続する .NET コンソール AI チャット アプリを作成します。 アプリは Microsoft.Extensions.AI ライブラリを使用するため、特定の SDK ではなく AI 抽象化を使用してコードを記述できます。 AI 抽象化を使用すると、最小限のコード変更で基になる AI モデルを変更できます。

前提 条件

  • .NET 8.0 SDK 以降 - .NET 8.0 SDKをインストールします。
  • このサンプルを実行できるように、OpenAI API キー。

前提 条件

アプリを作成する

AI モデルに接続する .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 または任意のエディターでアプリを開く

    code .
    

AI サービスを作成する

  1. Azure OpenAI サービスとモデルをプロビジョニングするには、 Azure OpenAI サービス リソースの作成とデプロイ に関する記事の手順を完了します。

  2. ターミナルまたはコマンド プロンプトから、プロジェクト ディレクトリのルートに移動します。

  3. 次のコマンドを実行して、サンプル アプリの 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>
    dotnet user-secrets set AZURE_OPENAI_API_KEY <your-Azure-OpenAI-key>
    

アプリを構成する

  1. ターミナルまたはコマンド プロンプトから .NET プロジェクトのルートに移動します。

  2. 次のコマンドを実行して、OpenAI API キーをサンプル アプリのシークレットとして構成します。

    dotnet user-secrets init
    dotnet user-secrets set OpenAIKey <your-OpenAI-key>
    dotnet user-secrets set ModelName <your-OpenAI-model-name>
    

アプリ コードを追加する

アプリは、Microsoft.Extensions.AI パッケージを使用して、AI モデルへの要求を送受信します。

  1. Program.cs ファイルに、AI モデルに接続して認証するための次のコードを追加します。 また、 ChatClient は関数呼び出しを使用するように構成されています。これにより、AI モデルはコード内で .NET 関数を呼び出すことができます。

    IConfigurationRoot config = new ConfigurationBuilder().AddUserSecrets<Program>().Build();
    string endpoint = config["AZURE_OPENAI_ENDPOINT"];
    string deployment = config["AZURE_OPENAI_GPT_NAME"];
    string apiKey = config["AZURE_OPENAI_API_KEY"];
    
    IChatClient client =
        new ChatClientBuilder(
            new AzureOpenAIClient(new Uri(endpoint), new AzureKeyCredential(apiKey))
            .GetChatClient(deployment).AsIChatClient())
        .UseFunctionInvocation()
        .Build();
    
    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();
    
  2. AI モデルが現在の天気を取得するために呼び出すことができるインライン関数を含む新しい ChatOptions オブジェクトを作成します。 関数宣言には、ロジックを実行するためのデリゲートと、AI モデルに対する関数の目的を説明するための名前と説明のパラメーターが含まれています。

    // 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",
        "Gets the current weather in a given location")]
    };
    
  3. モデルにコンテキストと指示を提供するシステム プロンプトを chatHistory に追加します。 AI モデルが登録された関数を呼び出して質問に適切に回答する必要がある質問を含むユーザー プロンプトを送信します。

    // 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}");
    
  4. dotnet run コマンドを使用してアプリを実行します。

    dotnet run
    

    アプリは、.NET 関数によって提供されるデータを含む AI モデルからの完了応答を出力します。 AI モデルは、登録された関数が使用可能であることを認識し、それを自動的に呼び出して適切な応答を生成しました。

リソースのクリーンアップ

不要になった場合は、Azure OpenAI リソースと GPT-4 モデルのデプロイを削除します。

  1. Azure portal で、Azure OpenAI リソースに移動します。
  2. Azure OpenAI リソースを選択し、[削除] を選択します。

次の手順