近年来,随着 国产大模型 的崛起,很多开发者和企业选择将其集成到自己的应用中,以满足对人工智能技术的需求。在本文中,我们将展示如何使用 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 后端服务,实现灵活的模型切换和定制。