Semantic Kernel(语义内核)整合ChatGLM

Semantic Kernel介绍

语义内核是一种轻型开源开发工具包,可用于轻松生成 AI 代理并将最新的 AI 模型集成到 C#、Python 或 Java 代码库中。 它充当一个高效的中间件,可实现企业级解决方案的快速交付。

更多内容:https://learn.microsoft.com/zh-cn/semantic-kernel/overview/

ChatGLM介绍

中文名:智谱清言,是大语言模型,类似的还有豆包、通义千问等等。让它自己介绍下吧。

我是 ChatGLM,一个由智谱 AI 公司精心打造的人工智能助手。我的核心是一个基于深度学习的语言模型,经过大量数据和算法的训练,我能够理解和生成自然语言,从而与用户进行流畅的对话。我的设计初衷是为了提供信息查询、知识解答、文本生成和日常交流等服务。

选择它的原因是,智谱有免费的模型:glm-4-flash。方便大家可以尝试。

开始

注册并获取模型apikeys

网站链接:https://www.bigmodel.cn/

邀请链接:注册即可获得额外GLM-4-Air 2000万Tokens好友专属福利

小伙伴们可以通过网站链接,进行注册,也可以通过邀请链接,互惠互利。不影响后续教程。

注册完成以后,前往APIkeys 设置

在这里插入图片描述

添加完API keys后,可以在下面的列表中进行复制。

示例

使用微软官方提供的快速入门指南示例。使用python的小伙伴,看到这里可以离开自行研究了。以下我使用C#来演示。

打开Visual Studio,新建一个控制台项目。通过Nuget安装包:Microsoft.SemanticKernel

在这里插入图片描述

打开Program.cs,代码修改如下:

// Import packages
using System.ComponentModel;
using System.Text.Json.Serialization;
using Microsoft.SemanticKernel;
using Microsoft.SemanticKernel.ChatCompletion;
using Microsoft.SemanticKernel.Connectors.OpenAI;

internal class Program
{
    private static async Task Main(string[] args)
    {
        var httpclient = new HttpClient(new GlmHttpHandler());
        
        // 使用 OpenAI 聊天完成创建内核
        var builder = Kernel.CreateBuilder().AddOpenAIChatCompletion("glm-4-flash", <使用上面智谱的api keys>, httpClient: httpclient);
        
        // Build the kernel
        Kernel kernel = builder.Build();
        var chatCompletionService = kernel.GetRequiredService<IChatCompletionService>();

        // 添加插件(LightsPlugin 类定义如下)
        kernel.Plugins.AddFromType<LightsPlugin>("Lights");
        
        OpenAIPromptExecutionSettings openAIPromptExecutionSettings = new()
        {
            FunctionChoiceBehavior = FunctionChoiceBehavior.Auto()
        };

        // 创建聊天上下文
        var history = new ChatHistory();

        string? userInput;
        do
        {
            // 用户消息
            Console.Write("User > ");
            userInput = Console.ReadLine();

            // 添加用户消息到聊天上下文
            history.AddUserMessage(userInput);

            // 获取AI响应
            var result = await chatCompletionService.GetChatMessageContentAsync(
                history,
                executionSettings: openAIPromptExecutionSettings,
                kernel: kernel);

            // 打印结果
            Console.WriteLine("Assistant > " + result);

            // 将来自AI的响应消息添加到聊天上下文
            history.AddMessage(result.Role, result.Content ?? string.Empty);
        }
        while (userInput is not null);
    }
}

public class GlmHttpHandler : HttpClientHandler
{
    protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
    {
        request.RequestUri = new Uri("https://open.bigmodel.cn/api/paas/v4/chat/completions");
        return base.SendAsync(request, cancellationToken);
    }
}

public class LightsPlugin
{
    // Mock data for the lights
    private readonly List<LightModel> lights = new()
    {
        new LightModel { Id = 1, Name = "Table Lamp", IsOn = false },
        new LightModel { Id = 2, Name = "Porch light", IsOn = false },
        new LightModel { Id = 3, Name = "Chandelier", IsOn = true }
    };

    [KernelFunction("get_lights")]
    [Description("Gets a list of lights and their current state")]
    [return: Description("An array of lights")]
    public async Task<List<LightModel>> GetLightsAsync()
    {
        return lights;
    }

    [KernelFunction("change_state")]
    [Description("Changes the state of the light")]
    [return: Description("The updated state of the light; will return null if the light does not exist")]
    public async Task<LightModel?> ChangeStateAsync(int id, bool isOn)
    {
        var light = lights.FirstOrDefault(light => light.Id == id);
        if (light == null)
        {
            return null;
        }

        // Update the light with the new state
        light.IsOn = isOn;
        return light;
    }
}

public class LightModel
{
    [JsonPropertyName("id")]
    public int Id { get; set; }
    [JsonPropertyName("name")]
    public string Name { get; set; }
    [JsonPropertyName("is_on")]
    public bool? IsOn { get; set; }
}

测试结果:

User > 我有灯吗
Assistant > 根据查询结果,您有3盏灯,分别是台灯、门廊灯和吊灯。其中,台灯和门廊灯目前处于关闭状态,而吊灯处于开启状态。
User > 打开台灯
Assistant > 已成功打开台灯。
User > 查看灯的状态
Assistant > 当前灯的状态如下:台灯开启,门廊灯关闭,吊灯开启。
User > 关闭路灯
Assistant > 已成功关闭门廊灯。
User > 关闭车灯
Assistant > 您没有提到具体的车灯类型,请问您想要关闭哪种车灯?例如,前大灯、尾灯还是雾灯?
User > 前大灯
Assistant > 请问您现在是否已经关闭了前大灯?
User > 你帮我看看
Assistant > 根据查询结果,目前没有找到与车灯相关的设备信息。请问您是否确认要关闭车灯?
User > 确认
Assistant > 很抱歉,我们无法控制车灯的开关。如果您需要关闭车灯,请手动操作。

当你询问与灯相关的问题时,大模型会去调用灯的相关函数来补充回答,小伙伴们可以发挥想象,玩一玩。

<think>好的,用户之前已经问过关于使用C#Semantic Kernel(SK)实现多AI Agent协作的问题,现在他接着问“sk是Semantic Kernel”,显然是想进一步了解SK的基础知识。我需要先确认用户的需求,可能他刚接触这个框架,需要从基本概念、功能、组成等方面进行介绍。 首先,用户可能想知道SK的定义和它的核心作用。我需要解释SK是什么,它的开发背景,比如微软推出的开源项目,用于集成AI模型到应用程序中。接着,要说明它的主要功能,比如协调多模型协作、管理插件和技能等。 然后,用户可能对架构组成感兴趣。需要分点介绍内核、插件、技能、规划器等组件,每个部分用简单的中文说明,并举例。比如插件可以是原生代码或语义函数,规划器如何制定执行计划。 接下来,用户可能想知道技术特点,比如多模态支持、跨模型抽象、可扩展性等。这里要强调SK的优势,比如支持不同厂商的模型,方便切换。 应用场景也是用户关心的部分,需要举几个实际例子,比如能助手、数据分析、客服系统,说明SK在这些场景下的作用。特别是用户之前提到的多Agent协作,可以再次关联到客服系统的例子,保持回答的一致性。 最后,提供学习资源,帮助用户进一步了解,比如GitHub仓库、官方文档和社区资源。这部分要简洁,方便用户查找资料。 需要注意的是,用户之前已经看过技术方案,现在需要的是基础介绍,所以避免过于深入技术细节,保持信息晰易懂。同时,保持回答结构化,使用标题和分点,方便阅读。还要检查术语的一致性,比如SK的全称和简称交替使用时要明确。</think>以下是对Semantic Kernel(SK)的技术解析: 一、基本定义 Semantic Kernel是微软推出的开源框架(Apache 2.0协议),专为构建可组合的AI驱动应用程序设计。其核心能力可概括为: $$ \text{SK} = \text{LLM协调层} + \text{插件系统} + \text{执行编排引擎} $$ 二、核心架构 1. 内核(Kernel) - 中央执行引擎,负责协调AI模型与代码的交互 - 支持多模型并行加载: ```csharp kernel.AddAzureOpenAIChatCompletion("gpt-4", endpoint, key) .AddHuggingFaceTextGeneration("phi-2", modelPath) ``` 2. 插件系统 - 原生插件:C#/Python代码封装的可复用功能 ```csharp [SKFunction("数据格式化")] public string FormatData([SKName("input")] string rawData) { return JsonConvert.SerializeObject(rawData); } ``` - 语义插件:Prompt模板驱动的AI技能 ```txt {{/* File: Skills/CreativeWriter/write_poem.txt */}} 你是一位唐朝诗人,请用七绝句格式创作关于{{$topic}}的诗: ``` 3. 规划器(Planner) - 自动任务分解:将复杂目标拆解为可执行步骤 - 支持多种算法: $$ \text{规划类型} = \begin{cases} \text{Sequential} & 线性流程 \\ \text{Action} & 动态决策 \\ \text{Stepwise} & 递归分解 \end{cases} $$ 三、关键技术特性 1. 多模态协调 ```mermaid graph LR A[用户输入] --> B{SK内核} B --> C[文本生成模型] B --> D[图像识别模型] B --> E[数据库连接] ``` 2. 跨模型抽象层 ```csharp // 统一调用接口 var result = await kernel.InvokeAsync( functionName: "GenerateSummary", parameters: new() {{"document", text}} ); ``` 3. 上下文管理 - 支持多级变量存储: $$ \text{Context} = \begin{cases} \text{Volatile} & 临时会话数据 \\ \text{Persistent} & Redis/SQLite存储 \\ \text{Embedded} & 向量数据库 \end{cases} $$ 四、典型应用场景 1. 能助手系统 - 组合天气API、日历数据、邮件发送等功能插件 - 自动编排"安排会议->通知参会者->生成纪要"的完整流程 2. 数据分析流水线 ```python sk_pipeline = ( load_csv_data | clean_data_using_llm | generate_sql_query | execute_on_database ) ``` 3. 多Agent协作系统(如之前介绍的客服案例) - 实现意图识别->专业处理->人工升级的自动化路由 五、学习资源 1. 官方GitHub仓库:https://github.com/microsoft/semantic-kernel 2. 开发文档:包含C#/Python双语示例 3. 微软Learn模块:"Build AI agents with Semantic Kernel" 该框架最新版本(1.0+)已支持OpenAI、Azure OpenAI、Hugging Face、Cohere等多个AI服务提供商,并提供了Kernel Memory等扩展组件用于构建复杂AI应用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值