使用 Microsoft.SemanticKernel 與國產大模型 API 集成實現對話系統
近年來,隨著 國產大模型 的崛起,很多開發者和企業選擇將其集成到自己的應用中,以滿足對人工智能技術的需求。在本文中,我們將展示如何使用 Microsoft.SemanticKernel 庫與國產大模型 API 集成,構建一個支持對話系統的應用程序。
我們將以 Zhipu AI(智譜AI) 作為示例,展示如何將其作為后端服務,替換掉 OpenAI API,從而使用國產大模型。
一、前期準備
在開始開發之前,需要做以下準備:
1. 安裝 Microsoft.SemanticKernel 包
Microsoft.SemanticKernel 是一個開源框架,可以幫助開發者更便捷地與大型語言模型(如 OpenAI、Google、或其他廠商提供的模型)進行交互。
我們需要首先安裝這個 NuGet 包。
使用 NuGet 包管理器安裝
-
打開你的 Visual Studio 項目。
-
右鍵點擊 解決方案資源管理器 中的項目,選擇 Manage NuGet Packages。
-
在 NuGet 包管理器 中,選擇 瀏覽 標簽頁,搜索
Microsoft.SemanticKernel。 -
找到該包后,點擊 安裝。
使用 NuGet 控制臺安裝
你也可以通過 NuGet 控制臺 來安裝:
Install-Package Microsoft.SemanticKernel -Version 1.59.0
使用 .NET CLI 安裝
如果你喜歡命令行操作,可以在項目目錄下使用以下命令:
dotnet add package Microsoft.SemanticKernel --version 1.59.0
2. 獲取國產大模型 API 密鑰
不同的國產大模型提供不同的 API 訪問方式。以 Zhipu AI 為例,開發者需要在其平臺上申請 API 密鑰,才能使用該模型的功能。你需要登錄到 Zhipu OpenAI API 提供商的官網,申請并獲取你的 API 密鑰。
二、項目代碼實現
在本部分,我們將展示如何使用 Microsoft.SemanticKernel 庫與 Zhipu AI 的 API 集成,構建一個簡單的對話系統。
1. 設置 SemanticKernel 內核和 API 配置
首先,我們創建一個 SemanticKernel 內核,并設置與 Zhipu OpenAI API 的通信配置。
using Microsoft.SemanticKernel;
using Microsoft.SemanticKernel.ChatCompletion;
var kernelBuilder = Kernel.CreateBuilder();
var httpClient = new HttpClient(new ZhipuOpenAIHttpClientHandler());
var builder = kernelBuilder.AddOpenAIChatCompletion(modelId: "glm-4-flash-250414", // 這里可以替換成你自己的模型 ID
apiKey: "你的API密鑰", httpClient: httpClient);
var kernel = builder.Build();
var chatCompletionService = kernel.GetRequiredService<IChatCompletionService>();
在這段代碼中,我們創建了一個 kernelBuilder,它用于初始化 SemanticKernel 內核。在 AddOpenAIChatCompletion 方法中,我們配置了模型 ID 和 API 密鑰,并指定了自定義的 HTTP 客戶端處理器,通過 httpClient 與 Zhipu OpenAI API 進行交互。
2. 用戶輸入和模型回復的交互邏輯
接下來,我們實現了與用戶的對話交互。用戶輸入內容后,我們將其傳遞給 AI 模型,獲取模型的回復,并在控制臺中顯示。
var history = new ChatHistory();
string? userInput;
do
{
// 收集用戶輸入
Console.Write("User > ");
userInput = Console.ReadLine();
// 將用戶輸入添加到對話歷史
history.AddUserMessage(userInput);
// 獲取模型的回復
var result = await chatCompletionService.GetChatMessageContentAsync(history, kernel: kernel);
// 輸出結果
Console.WriteLine("Assistant > " + result);
// 將模型的回復添加到對話歷史
history.AddMessage(result.Role, result.Content ?? string.Empty);
} while (userInput is not null);
這段代碼實現了一個簡單的 命令行聊天系統,用戶可以輸入問題或命令,系統會通過 Zhipu AI 獲取回答,并將對話歷史保存在 ChatHistory 對象中。
3. 自定義 HTTP 客戶端處理器
由于 Zhipu OpenAI 提供了與 OpenAI 兼容的 API 接口,但主機和路徑可能不同,我們需要創建一個自定義的 HTTP 請求處理器,以便將請求正確路由到 Zhipu 的 API 地址。
public class ZhipuOpenAIHttpClientHandler : HttpClientHandler
{
protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
// 如果請求路徑是 /v1/chat/completions,重定向請求到 Zhipu OpenAI API
switch (request.RequestUri?.LocalPath)
{
case "/v1/chat/completions":
var uriBuilder = new UriBuilder(request.RequestUri)
{
Scheme = "https",
Host = "open.bigmodel.cn", // Zhipu OpenAI API 的主機地址
Path = "api/paas/v4/chat/completions", // 適配的接口路徑
};
request.RequestUri = uriBuilder.Uri;
break;
}
// 發起請求并返回響應
HttpResponseMessage response = await base.SendAsync(request, cancellationToken);
return response;
}
}
這段代碼通過自定義的 ZhipuOpenAIHttpClientHandler 類,攔截并修改請求 URL,使得原本發往 OpenAI 的請求能夠被轉發到 Zhipu OpenAI API。這個操作是通過 HttpClientHandler 類來實現的。
三、總結
通過以上步驟,我們成功將 Microsoft.SemanticKernel 與 國產大模型(如 Zhipu OpenAI)的 API 集成,實現了一個能夠與用戶進行對話的簡單系統。以下是本教程的關鍵點:
-
安裝 Microsoft.SemanticKernel 庫,提供與大型語言模型的集成功能。
-
使用 Zhipu OpenAI(或其他國產大模型)API 作為后端模型。
-
創建自定義的 HTTP 請求處理器,確保請求被正確路由到 Zhipu 的 API。
-
實現一個簡單的對話系統,支持用戶與 AI 進行互動,并保持對話歷史。
這種集成方式不僅適用于開發者構建自定義對話系統,也可以幫助企業利用國產大模型實現本地化的 AI 應用。通過 Microsoft.SemanticKernel,你可以輕松地替換不同的 AI 后端服務,實現靈活的模型切換和定制。

浙公網安備 33010602011771號