3SemanticKernel使用非ChatGPT大模型

发布于:2025-09-05 ⋅ 阅读:(24) ⋅ 点赞:(0)

SK 目前提供了多个AI 提供商的Connector,但仅OpenAI 和Azure OpenAI 两种Connector(连接器)属于正式可用状态,国内开发者而言并不能访问国外大模型,因此如何使用国内大模型(通义、智谱等)玩转 Semantic Kernel呢?好在,SK 在设计时也考虑了这个问题,接下来就来以智谱AI大模型为例来解密答案。

由于SK 默认仅提供了OpenAI 和Azure OpenAI 两种Connector(连接器),因此如果需要使用智谱大模型,有四种做法:

  1. 指定自定义Endpoint 实现。
  2. 指定自定义OpenAIClient
  3. 使用代理,诸如OneApi
  4. 自行实现 Connectors

注册智谱大模型

北京智谱华章科技有限公司(简称“智谱AI”)致力于打造新一代认知智能大模型,专注于做大模型的中国创新。打造了AIGC模型及产品矩阵,包括通用大模型、超拟人大模型、图像大模型、向量大模型等,并且支持使用您的私有数据对模型进行微调。包括AI提效助手智谱清言(chatglm.cn)、高效率代码模型CodeGeeX、多模态理解模型CogVLM和文生图模型CogView等,涵盖了文生文、图片和视频的生成及理解、代码生成、向量嵌入。

使用智谱大模型

#r "nuget: Microsoft.SemanticKernel"

指定自定义 Endpoint

该方式为实验功能,需要手动禁用warning:#pragma warning disable SKEXP0010

#pragma warning disable SKEXP0010

using Microsoft.SemanticKernel;
using Microsoft.SemanticKernel.ChatCompletion;
using Microsoft.SemanticKernel.Connectors.OpenAI;
using Microsoft.Extensions.DependencyInjection;

// 引入交互式的内核命名空间,以便用户输入
using PolyglotKernel= Microsoft.DotNet.Interactive.Kernel;

var zhipuApiKey = await PolyglotKernel.GetInputAsync("请输入您的智谱API Key:"); 

// Create kernel builder
var builder = Kernel.CreateBuilder();

var zhipuEndpoint = new Uri("https://open.bigmodel.cn/api/paas/v4/");
builder.AddOpenAIChatCompletion(
    modelId: "glm-4-flash", // 可选模型编码:glm-4-plus、glm-4-0520、glm-4 、glm-4-air、glm-4-airx、glm-4-long、 glm-4-flash(免费)
    apiKey: zhipuApiKey,
    endpoint: zhipuEndpoint);
// Build kernel
var kernel = builder.Build();

var response = await kernel.InvokePromptAsync("介绍下智谱AI的产品和服务");
response.Display();

指定自定义OpenAIClient

using Microsoft.SemanticKernel;
using Microsoft.SemanticKernel.ChatCompletion;
using Microsoft.SemanticKernel.Connectors.OpenAI;
using Microsoft.Extensions.DependencyInjection;
using OpenAI;
using System.ClientModel;

// 引入交互式的内核命名空间,以便用户输入

using PolyglotKernel= Microsoft.DotNet.Interactive.Kernel;

var zhipuApiKey = await PolyglotKernel.GetInputAsync("请输入您的智谱API Key:"); 

// Create kernel builder
var builder = Kernel.CreateBuilder();

var zhipuEndpoint = new Uri("https://open.bigmodel.cn/api/paas/v4/");
OpenAIClientOptions clientOptions = new OpenAIClientOptions();
clientOptions.Endpoint = zhipuEndpoint;

// 创建自定义的OpenAI客户端
OpenAIClient client = new(new ApiKeyCredential(zhipuApiKey), clientOptions);

// Add OpenAI Chat completion
builder.AddOpenAIChatCompletion(
    modelId: "glm-4-flash", // 可选模型编码:glm-4-plus、glm-4-0520、glm-4 、glm-4-air、glm-4-airx、glm-4-long、 glm-4-flash(免费)
    openAIClient: client);

// Build kernel
var kernel = builder.Build();

var response = await kernel.InvokePromptAsync("智谱AI有哪些模型,请直接返回模型列表。");
response.Display();

使用OneApi 对接流行大模型

OneApi 是一个GitHub 开源项目,帮助开发者通过标准的 OpenAI API 格式访问所有的大模型。(https://github.com/songquanpeng/one-api)

借助OneApi,开发者可以忽略模型间的API 差异,通过统一的OpenAI的格式,实现对各大模型的透明调用。
对于开发者而言,仅需要将 OpenAI 的网址改成你部署的 One API 系统的网址、将 OpenAI 的 API Key 改成你的令牌即可。One API 将代理用户向实际的大模型发出请求并接收响应,如下图所示:

graph LR
    A(用户)
    A --->|使用 One API 分发的 key 进行请求| B(One API)
    B -->|中继请求| C(OpenAI)
    B -->|中继请求| D(Azure)
    B -->|中继请求| E(其他 OpenAI API 格式下游渠道)
    B -->|中继并修改请求体和返回体| F(非 OpenAI API 格式下游渠道)

image-20250318165305625

使用Docker安装 OneApi

使用SQLite部署:

docker run --name one-api -d --restart always \
-p 3000:3000 -e TZ=Asia/Shanghai \
-v /home/data/one-api:/data justsong/one-api

部署成功后, 使用docker ps | grep one-api 进行确认:

$ docker ps | grep one-api
12f025568eab   justsong/one-api   "/one-api"   3 minutes ago   Up 3 minutes   0.0.0.0:3000->3000/tcp   one-api

然后直接访问 http://localhost:3000/ 即可打开 One Api 管理界面,默认用户名密码是:root/123456。登录后设置相应的模型。

#r "nuget: Microsoft.SemanticKernel"

对接OneAPI

#pragma warning disable SKEXP0010

using Microsoft.SemanticKernel;
using Microsoft.SemanticKernel.ChatCompletion;
using Microsoft.SemanticKernel.Connectors.OpenAI;
using Microsoft.Extensions.DependencyInjection;

// 引入交互式的内核命名空间,以便用户输入
using PolyglotKernel= Microsoft.DotNet.Interactive.Kernel;

// var oneApiKey = await PolyglotKernel.GetInputAsync("请输入您的OneAPI Key:"); 
//这里就是oneapi的key
var oneApiKey = "sk-9y9939P3ufwHaltcB95d91F3D9D64303Ad799e991f4700F1";

// Create kernel builder
var builder = Kernel.CreateBuilder();

var oneApiEndpoint = new Uri("http://localhost:3000/v1");
// modelId,是oneapi的设置
builder.AddOpenAIChatCompletion(
    modelId: "lite", 
    apiKey: oneApiKey,
    endpoint: oneApiEndpoint);
// Build kernel
var kernel = builder.Build();

var response = await kernel.InvokePromptAsync("介绍下OneApi的使用场景和优势");
response.Display();

t: oneApiEndpoint);
// Build kernel
var kernel = builder.Build();

var response = await kernel.InvokePromptAsync(“介绍下OneApi的使用场景和优势”);
response.Display();







网站公告

今日签到

点亮在社区的每一天
去签到