使用 Microsoft.SemanticKernel 与国产大模型 API 集成实现对话系统

 

近年来,随着 国产大模型 的崛起,很多开发者和企业选择将其集成到自己的应用中,以满足对人工智能技术的需求。在本文中,我们将展示如何使用 Microsoft.SemanticKernel 库与国产大模型 API 集成,构建一个支持对话系统的应用程序。

我们将以 Zhipu AI(智谱AI) 作为示例,展示如何将其作为后端服务,替换掉 OpenAI API,从而使用国产大模型。

一、前期准备

在开始开发之前,需要做以下准备:

1. 安装 Microsoft.SemanticKernel 包

Microsoft.SemanticKernel 是一个开源框架,可以帮助开发者更便捷地与大型语言模型(如 OpenAI、Google、或其他厂商提供的模型)进行交互。

我们需要首先安装这个 NuGet 包。

使用 NuGet 包管理器安装
  1. 打开你的 Visual Studio 项目。

  2. 右键点击 解决方案资源管理器 中的项目,选择 Manage NuGet Packages。

  3. 在 NuGet 包管理器 中,选择 浏览 标签页,搜索 Microsoft.SemanticKernel。

  4. 找到该包后,点击 安装。

使用 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 集成,实现了一个能够与用户进行对话的简单系统。以下是本教程的关键点:

  1. 安装 Microsoft.SemanticKernel 库,提供与大型语言模型的集成功能。

  2. 使用 Zhipu OpenAI(或其他国产大模型)API 作为后端模型。

  3. 创建自定义的 HTTP 请求处理器,确保请求被正确路由到 Zhipu 的 API。

  4. 实现一个简单的对话系统,支持用户与 AI 进行互动,并保持对话历史。

这种集成方式不仅适用于开发者构建自定义对话系统,也可以帮助企业利用国产大模型实现本地化的 AI 应用。通过 Microsoft.SemanticKernel,你可以轻松地替换不同的 AI 后端服务,实现灵活的模型切换和定制。

posted @ 2025-07-02 14:04  努力,努力再努力  阅读(216)  评论(0)    收藏  举报