共用方式為


使用 AI 模型叫用 .NET 函式

在本快速入門中,您會建立 .NET 控制台 AI 聊天應用程式,以連線到已啟用本機函式呼叫的 AI 模型。 應用程式會使用連結庫, Microsoft.Extensions.AI 因此您可以使用 AI 抽象概念來撰寫程式代碼,而不是特定的 SDK。 AI 抽象概念可讓您使用最少的程式代碼變更來變更基礎 AI 模型。

注意

連結 Microsoft.Extensions.AI 庫目前處於預覽狀態。

必要條件

  • .NET 8.0 SDK - 安裝 .NET 8.0 SDK
  • OpenAI 中的 API 金鑰,因此您可以執行此範例。
  • 在 Windows 上,需要 PowerShell v7+。 若要驗證您的版本,請在終端機中執行 pwsh。 其應該會傳回目前的版本。 如果傳回錯誤,請執行下列命令:dotnet tool update --global PowerShell

必要條件

注意

您也可以使用 語意核心 來完成本文中的工作。 語意核心是輕量型開放原始碼 SDK,可讓您建置 AI 代理程式,並將最新的 AI 模型整合到 .NET 應用程式中。

複製範例存放庫

您可以使用先前各節中的步驟建立自己的應用程式,也可以複製包含所有快速入門已完成範例應用程式的 GitHub 存放庫。 如果您打算使用 Azure OpenAI,範例存放庫也會結構化為可為您布建 Azure OpenAI 資源的 Azure 開發人員 CLI 範本。

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

建立應用程式

完成下列步驟以建立 .NET 控制台應用程式以連線到 AI 模型。

  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 .
    

建立 AI 服務

範例 GitHub 存放庫的結構是 Azure 開發人員 CLI (azd) 範本, azd 可用來為您布建 Azure OpenAI 服務和模型。

  1. 從終端機或命令提示字元中,流覽至 src\quickstarts\azure-openai 範例存放庫的目錄。

  2. azd up執行 命令來布建 Azure OpenAI 資源。 建立 Azure OpenAI 服務並部署模型可能需要幾分鐘的時間。

    azd up
    

    azd 也會為範例應用程式設定必要的用戶密碼,例如 Azure OpenAI 端點和模型名稱。

設定應用程式

  1. 從終端機或命令提示字元流覽至 .NET Projet 的根目錄。

  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 函式。

    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 的帳戶。 如需詳細資訊,請參閱 使用 .NET 向 Azure AI 服務進行驗證。

    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 新的物件,其中包含 AI 模型可以呼叫的內嵌函式,以取得目前的天氣。 函式宣告包含執行邏輯和名稱和描述參數的委派,以將函式的目的描述為 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",
        "Get 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()}");
    
    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
    

    應用程式會列印來自 AI 模型的完成回應,其中包含 .NET 函式所提供的數據。 AI 模型瞭解已註冊的函式可供使用,並自動呼叫它以產生適當的回應。

清除資源

當您不再需要範例應用程式或資源時,請移除對應的部署和所有資源。

azd down

下一步