游乐游手机版
首页/AI教程/文章详情

使用SemanticKernel框架集成非ChatGPT大模型的详细步骤与代码

时间:2026-06-18 16:52
先说一个很多国内开发者可能都会碰到的现实困境:Semantic Kernel本身直接开箱可用的,只有OpenAI和Azure OpenAI两个连接器。对于无法直接访问国外大模型服务的开发者来说,这确实是个绕不开的门槛。但好消息是,SK在设计之初就考虑到了可扩展性,接入国内大模型(像通义千问、智谱清言

先说一个很多国内开发者可能都会碰到的现实困境:Semantic Kernel本身直接开箱可用的,只有OpenAI和Azure OpenAI两个连接器。对于无法直接访问国外大模型服务的开发者来说,这确实是个绕不开的门槛。但好消息是,SK在设计之初就考虑到了可扩展性,接入国内大模型(像通义千问、智谱清言这些)是完全可行的。接下来就以智谱AI的大模型为例,把整个过程拆解清楚。

由于SK官方只提供了两种连接器,想在本地利用智谱的模型能力,主要有四种路径可以走:

  • 指定自定义的Endpoint(服务端点)
  • 指定自定义的OpenAIClient(客户端实例)
  • 使用像OneApi这样的统一接口层进行袋里
  • 自行开发连接器(这里不展开,重点讲前三种)

注册智谱大模型

使用智谱大模型

#r "nuget: Microsoft.SemanticKernel"

指定自定义Endpoint

需要注意的是,这种方式目前属于实验性功能,使用前必须手动禁用相关的编译警告:#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

如果你希望对客户端有更细粒度的控制,比如自定义超时或袋里策略,自定义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的出现,很好地解决了不同模型间API差异带来的痛苦。它的原理很简单:开发者只需要遵循统一的OpenAI格式即可完成调用。本质上就是把OpenAI的网址换成OneApi系统的地址,把API Key换成在OneApi里分配的令牌。OneApi会在后台完成袋里转发,甚至还能帮你完成非标准格式的请求和返回体转换。整体的交互流程如下图所示:

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

接下来直接访问 https://localhost:3000/ 就能打开OneApi的管理界面。默认的管理员账号密码是 root/123456,登录后就可以配置你想要对接的模型了。

#r "nuget: Microsoft.SemanticKernel"

对接OneAPI

有了OneApi之后,代码端的变化就很小了,本质上还是用OpenAI的接口协议去调用,只是地址和Key换了:

#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("https://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();
来源:https://cloud.tencent.com.cn/developer/article/2691322
上一篇Stack Overflow推出面向AI的问答平台 下一篇腾讯会议AI纪要工具选型推荐指南
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
Windows Docker Desktop RabbitMQ生产级部署完整指南
AI教程 · 2026-06-29

Windows Docker Desktop RabbitMQ生产级部署完整指南

前言 在 Windows 本地开发环境中,直接安装 RabbitMQ 确实颇为周折:需要单独配置 Erlang 运行环境、手动管理环境变量、服务启停全凭手工操作。更令人困扰的是,版本兼容冲突、端口占用、环境不一致等问题层出不穷。笔者见过不少开发者为搭建环境就得耗费整整半天时间。 相比之下,借助 Do

AI搜索重构制造业采购逻辑的阿里云企业级GEOCMS优化实践
AI教程 · 2026-06-29

AI搜索重构制造业采购逻辑的阿里云企业级GEOCMS优化实践

先分享一个切实感受。过去两年,我们与福建制造企业合作较为频繁,发现一个非常突出的现象:超过80%的企业官网,产品参数仍然存放在PDF或图片中。AI爬虫?根本无法抓取。这些企业技术实力不弱、资质证照齐全、应用案例也丰富,但在AI搜索这一全新战场上,它们几乎处于隐身状态。 一、一个正在发生的行业变化 A

阿里云Token Plan团队版功能价格与省钱购买指南
AI教程 · 2026-06-29

阿里云Token Plan团队版功能价格与省钱购买指南

阿里云百炼近期推出了名为“Token Plan 团队版”的全新服务,这一服务专为企业与开发者量身打造,定位为AI大模型订阅平台。通过引入Credits作为统一计量单位,将文本生成、图像生成等多模态AI能力纳入单一计费体系,同时无缝兼容主流AI编程工具及智能体(Agent)生态系统。其核心亮点包括:全

阿里云物联网.NET Core客户端位置信息上报
AI教程 · 2026-06-29

阿里云物联网.NET Core客户端位置信息上报

阿里云物联网平台的位置服务并非一个完全独立的功能模块。位置信息可包含二维坐标与三维坐标,而位置数据的来源本质上是借助设备属性进行上传。换言之,若要让设备上报位置,您需先将其视为一个普通属性进行处理。 1)添加二维位置数据 操作过程十分简洁。进入数据分析 → 空间数据可视化 → 二维数据,点击添加,将

年阿里云服务器选型配置与网站部署全攻略
AI教程 · 2026-06-29

年阿里云服务器选型配置与网站部署全攻略

2026年,阿里云服务器生态已高度成熟,形成了清晰的轻量应用服务器与ECS云服务器两大产品阵营。无论你是计划搭建个人博客、企业官网,还是运营电商平台、进行应用开发,基本都能找到理想的解决方案。本指南将从服务器选型、配置选择、部署流程到安全运维,系统梳理2026年最实用的操作要点,帮助你少走弯路,让网