探索Semantic Kernel:开启AI编程新篇章(入门篇)

news2024/11/27 12:39:39

文章目录

    • 一、引言
    • 二、什么是Semantic Kernel?
    • 三、为什么选择Semantic Kernel?
    • 四、Semantic Kernel的核心特性
      • 4.1企业级
      • 4.2 自动化业务流程
      • 4.3 模块化和可扩展性
    • 五、Semantic Kernel入门
      • 5.1 安装SDK
      • 5.2 编写控制台应用
        • 1. 配置
        • 2.实例
        • 3.示例一:进行一次问答
        • 4.示例二:使用模板
        • 5.示例三:流式输出
        • 6.示例四:模型请求参数配置
        • 7.示例五:格式化输出
      • 5.3 完整代码
    • 六、结论

一、引言

在人工智能的浪潮中,微软开源的Semantic Kernel(SK)作为一颗璀璨的明珠,为开发者提供了一个强大的工具,以一种全新的方式与AI模型交互。无论是信息检索、数据分析还是构建AI应用,SK都能助你一臂之力。本文将带你走进Semantic Kernel的世界,从安装到实践,一步步揭开它的神秘面纱。

二、什么是Semantic Kernel?

Semantic Kernel是一个轻量级的AI应用开发框架,它允许开发者将大型语言模型(LLM)如OpenAI、Azure OpenAI和Hugging Face等服务与传统编程语言如C#和Python相结合。通过SK,你可以构建智能应用程序,让它们能够理解和处理复杂的语义信息。
在这里插入图片描述

三、为什么选择Semantic Kernel?

  • 易用性:SK提供了一个简洁的API,使得与AI模型的交互变得简单直观。
  • 灵活性:通过插件系统,SK可以轻松扩展,支持各种自定义功能。
  • 高效性:SK优化了与AI模型的交互,提高了应用程序的性能。
  • 开源:SK是一个开源项目,拥有活跃的社区支持。

四、Semantic Kernel的核心特性

4.1企业级

Semantic Kernel因其灵活性、模块化和可观测性而被微软和其他财富500强公司广泛采用。它提供了增强的安全性,确保您可以负责任地大规模交付AI解决方案。

4.2 自动化业务流程

Semantic Kernel能够将提示词与现有API结合,自动执行业务操作。通过向AI模型描述现有代码,模型将调用这些代码以响应请求。当请求发出时,模型会调用一个函数,Semantic Kernel作为中间件,将模型的请求转换为函数调用,并将结果传回模型。

4.3 模块化和可扩展性

通过将现有代码作为插件添加,Semantic Kernel允许您灵活地通过一系列现成的连接器集成AI服务。它使用OpenAPI规范,使得公司内的其他开发者可以共享任何扩展。

五、Semantic Kernel入门

要开始使用SK,首先需要安装它。以下是在C#环境中安装SK的步骤:

5.1 安装SDK

通过NuGet安装Semantic Kernel包:

dotnet add package Microsoft.SemanticKernel

5.2 编写控制台应用

1. 配置

引入命名空间&忽略编译器警告

using Microsoft.SemanticKernel;
using Microsoft.SemanticKernel.Connectors.OpenAI;

//忽略编译器警告
#pragma warning disable SKEXP0010

如下图:接口提示api是实验性的,将来可能会发生变化。,故需要增加忽略编译器警告的代码,否则无法调用。
在这里插入图片描述

2.实例

创建Semantic Kernel实例

//使用的模型
string model = "gpt-4o-mini";
//使用的openai代理地址,这里也可以使用国产模型和地址。只要是openai格式即可
string endpointKey = "https://xie.openai.com/v1";

//openai 密钥
string apiKey = "sk-";

//创建Semantic Kernel实例
Kernel kernel = Kernel.CreateBuilder()
    .AddOpenAIChatCompletion(
        modelId: model,
        endpoint: new Uri(endpointKey),
        apiKey: apiKey)
    .Build();
3.示例一:进行一次问答
// 示例1:使用提示符调用内核(kernel)并显示结果
Console.WriteLine("------------------【示例1 - 进行一次问答】--------------------");
Console.WriteLine(await kernel.InvokePromptAsync("天空是什么颜色?"));
Console.WriteLine();
4.示例二:使用模板

//示例2 使用模板化的提示符调用内核(kernel)并显示结果
Console.WriteLine("------------------【示例2 - 模板】--------------------");
KernelArguments arguments = new() { { "topic", "海" } };
Console.WriteLine(await kernel.InvokePromptAsync("{{$topic}}是什么颜色啊?", arguments));
Console.WriteLine();

在这里插入图片描述

5.示例三:流式输出

Console.WriteLine("------------------【示例3 - 流式输出】--------------------");
// 示例3:使用模板化提示调用内核(kernel),并将结果进行流式输出
await foreach (var update in kernel.InvokePromptStreamingAsync("{{$topic}}是什么颜色? 提供详细的解释。", arguments))
{
    Console.Write(update);
}
Console.WriteLine();

Console.WriteLine("------------------【示例4 - 模型参数配置】--------------------");

在这里插入图片描述

6.示例四:模型请求参数配置
Console.WriteLine("------------------【示例4 - 模型参数配置】--------------------");
// 示例4:调用内核使用一个模板化的提示和模型参数设置
//注:MaxTokens 和Temperature 是模型参数
arguments = new(new OpenAIPromptExecutionSettings { MaxTokens = 500, Temperature = 0.5 }) { { "topic", "小狗" } };
Console.WriteLine(await kernel.InvokePromptAsync("给我讲个关于{{$topic}}的故事", arguments));
Console.WriteLine();

在这里插入图片描述

7.示例五:格式化输出
Console.WriteLine("------------------【示例5 - 格式化输出】--------------------");
arguments = new(new OpenAIPromptExecutionSettings { ResponseFormat = "json_object" }) { { "topic", "巧克力" } };
Console.WriteLine(await kernel.InvokePromptAsync("创建一个JSON格式的{{$topic}}蛋糕配方", arguments));

在这里插入图片描述

5.3 完整代码

#region 一、入门

安装nuget包:Microsoft.SemanticKernel
//#pragma warning disable SKEXP0010

using Microsoft.SemanticKernel;
using Microsoft.SemanticKernel.Connectors.OpenAI;

string model = "gpt-4o-mini", endpointKey = "https://xie.openai.com/v1",
apiKey = "sk-";

// Create a kernel with OpenAI chat completion
Kernel kernel = Kernel.CreateBuilder()
    .AddOpenAIChatCompletion(
        modelId: model,
        endpoint: new Uri(endpointKey),
        apiKey: apiKey)
    .Build();

// 示例1:使用提示符调用内核(kernel)并显示结果
Console.WriteLine("------------------【示例1 - 进行一次问答】--------------------");
Console.WriteLine(await kernel.InvokePromptAsync("天空是什么颜色?"));
Console.WriteLine();

示例2 使用模板化的提示符调用内核(kernel)并显示结果
Console.WriteLine("------------------【示例2 - 模板】--------------------");
KernelArguments arguments = new() { { "topic", "海" } };
Console.WriteLine(await kernel.InvokePromptAsync("{{$topic}}是什么颜色啊?", arguments));
Console.WriteLine();

Console.WriteLine("------------------【示例3 - 流式输出】--------------------");

// 示例3:使用模板化提示调用内核(kernel),并将结果进行流式输出
await foreach (var update in kernel.InvokePromptStreamingAsync("{{$topic}}是什么颜色? 提供详细的解释。", arguments))
{
    Console.Write(update);
}
Console.WriteLine();

Console.WriteLine("------------------【示例4 - 模型参数配置】--------------------");
 示例4:调用内核使用一个模板化的提示和模型参数设置
arguments = new(new OpenAIPromptExecutionSettings { MaxTokens = 500, Temperature = 0.5 }) { { "topic", "小狗" } };
Console.WriteLine(await kernel.InvokePromptAsync("给我讲个关于{{$topic}}的故事", arguments));
Console.WriteLine();

Console.WriteLine("------------------【示例5 - 格式化输出】--------------------");
//示例5:调用内核使用一个模板化的提示和模型参数设置,并将结果以JSON格式返回
arguments = new(new OpenAIPromptExecutionSettings { ResponseFormat = "json_object" }) { { "topic", "巧克力" } };
Console.WriteLine(await kernel.InvokePromptAsync("创建一个JSON格式的{{$topic}}蛋糕配方", arguments));


#endregion

Console.ReadKey();

六、结论

Semantic Kernel为开发者提供了一个强大的工具,用于构建下一代AI应用程序。无论您是希望自动化业务流程,还是想要将最新的AI模型集成到您的应用程序中,Semantic Kernel都能满足您的需求。

通过遵循本入门指南,您将能够快速开始使用Semantic Kernel,并探索其强大的功能,为您的AI项目带来无限可能。

参考资料:
微软文档:https://learn.microsoft.com/en-us/semantic-kernel/overview/

Github:https://github.com/microsoft/semantic-kernel

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2204512.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【漏洞复现】某知识付费纯净发卡小程序系统存在SQL注入漏洞

漏洞描述 知识吾爱纯净版小程序源码,附详细视频+文字教程【小白可0基础搭建】跟随教程步骤即可简单搭建属于自己的知识付费小程序,实现支付变现+流量主收益,快速建立自己的IP知识付费小程序源码包括以下功能:会员管理:支持用户注册、登录、个人信息管理等功能,以及会员等…

《系统架构设计师教程(第2版)》第18章-安全架构设计理论与实践-01-安全架构概述

文章目录 1. 信息安全面临的威胁2. 安全架构的定义和范围2.1 安全架构的概念2.2 安全架构的范围2.3 安全架构应具备的特性2.4 安全技术2.5 过程 3. 与信息安全相关的国内外标3.1 国外标准3.2 国内标准3.2.1 标准缩写含义3.2.2 主要技术标准1)国家标准2)特…

安全网络架构

网络安全解决方案是指通过一系列技术和措施来保护网络系统和数据的安全。它涉及多个方面,包括网络设备的防护、数据的加密和备份、安全策略的制定和执行等。以下是一些常见的网络安全解决方案: 防火墙:防火墙是一种硬件或软件设备&#xff0c…

怎么将视频原声提出来?视频原声提取,让创作更自由

在数字媒体时代,视频已成为我们日常生活和工作中不可或缺的一部分。有时,我们可能想要提取视频中的音频部分,无论是为了制作音频素材、学习语言,还是为了其他创意用途。那么,怎么将视频原声提出来呢?本文将…

ChatTTS 本地安装和测试

Ubuntu 22服务器,3.9/3.10都可以,但是 3.11不可以 sudo apt install python3.10 apt install python3.10 python3.10-dev #ubuntu 22 安装python3.10对应的pip3.10 # 下载 get-pip.py curl -sS https://bootstrap.pypa.io/get-pip.py -o get-pip.py # 使…

小北的技术博客:探索华为昇腾CANN训练营与AI技术创新——Ascend C算子开发能力认证考试(初级)

前言 哈喽哈喽友友们,这里是zyll~(小北)智慧龙阁的创始人及核心技术开发者。在技术的广阔天地里,我专注于大数据与全栈开发,并致力于成为这一领域的新锐力量。通过智慧龙阁这个平台,我期望能与大家分享我的技术心得,共同探索技术的无限可能。 Ascend C编程:小北的技术…

<Project-8 pdf2tx-MM> Python Flask应用:在浏览器中翻译PDF文件 NLTK OCR 多线程 指定翻译器 改进后的P6

项目概述 名字解释 缩写: pdf2tx-MM pdf file transfer to text content with Multi-threads and Multi-translators pdf2tx-MM 是一个基于 Flask 的 Web 应用程序,提供将 PDF 文件中的内容提取、翻译并展示。使用者上传 PDF 文件,应用程序…

MySQL(B站CodeWithMosh)——2024.10.10(13)

ZZZZZZ目的ZZZZZZ代码ZZZZZZ重点ZZZZZZ操作(非代码,需要自己手动) 2- 字符串函数 | String Functions_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1UE41147KC?p56&vd_sourceeaeec77dfceb13d96cce76cc299fdd08 LENGTH&#xf…

网络协议——IP协议

一、IPv4 1、IPv4:TCP/IP协议规定,IPv4地址使用32位的二进制表示,也就是4个字节,为了方便使用,IPv4地址被写成十进制形式,中间用”.”分开。 【点分十进制表示法】 2、IPv4地址分类 2.1 私有地址在互联网…

怎么理解Contextual-Retrieval ?(顺手讲一下prompt-cache)

最近这个其实提的人挺多的,Graph RAG的火爆已经是上上个月的事了,其实我之前就讲过,Graph RAG是解决什么问题的,它也没法绝对替代传统RAG 之前关于Graph-RAG的文章 你为什么要用GraphGAG?(qq.com) 详解MS的GraphRAG的实…

Pr 视频效果:元数据和时间码刻录

视频效果/视频/元数据和时间码刻录 Video/Metadata & Timecode Burn-in 元数据和时间码刻录 Metadata & Timecode Burn-in效果是一种在视频画面上叠加显示剪辑元数据或时间码的工具。它允许在导出视频时,将需用的元数据信息直接刻录在画面上,方便…

情绪识别数据集(包含25w张图片) yolo格式类别:八种训练数据已划分, 识别精度:90%

情绪识别数据集(包含25w张图片) yolo格式 类别:Anger、Contempt、Disgust、Fear、Happy、Neutral、Sad、Surprise 八种 训练数据已划分,配置文件稍做路径改动即可训练。 训练集:171010 验证集:54060 测试集:27550 共计…

软考《信息系统运行管理员》- 4.3 信息系统软件运维的过程

4.3 信息系统软件运维的过程 文章目录 4.3 信息系统软件运维的过程日常运维日常运维的内容日常运行例行测试维护例行测试流程的关键点例行维护流程的关键点 定期测试维护 缺陷诊断与修复信息系统软件缺陷的概念信息系统软件缺陷的分类信息系统软件缺陷诊断与修复流程缺陷诊断与…

Excel中使用SQL语句的四种方法

总结在 Excel 中使用 SQL 语句的四种方法,各种方法都有各自的适用场景,可以选择自己熟悉的或喜欢方式。本文以在 Excel 中操作 MS SQL 数据库的数据为例进行说明。MS SQL 的数据如下,使用微软 SQLExpress 版本。 方法 1: Excel 现…

2024年软件设计师中级(软考中级)详细笔记【3】数据结构(下)(分值5分)

上午题第3章数据结构下部目录 前言第3章 数据结构【下】(5分)3.5 查找3.5.1 查找的基本概念【考点】3.5.2 静态查找表的查找方法3.5.3 动态查找表3.5.4 哈希表3.5.4.1 哈希表的定义3.5.4.2 哈希函数的构造方法3.5.4.3 处理冲突的方法 3.6 排序3.6.1 排序的基本概念3.6.2 简单排…

第二阶段:mysql(学完就隐藏版)

第一章:部署数据库系统(注意关闭防火墙,selinux安装) 安装mysql配置的相关文件:yum install https://dev.mysql.com/get/mysql80-community-release-el7-5.noarch.rpm(centos9:yum install http…

前端高频面试题2024/9/22(偏项目问题--通用后台管理系统)

文章目录 一.前端项目概述1.系统登录注册模块1.对注册的密码进行加密 (使用加密中间件bcrypt.js)2.登录成功后返回token3.前端登录页面有用到弹性布局,ref和reactive4.登录头像:文件上传 2.系统设置模块2.系统首页模块&#xff08…

Golang | Leetcode Golang题解之第472题连接词

题目: 题解: type trie struct {children [26]*trieisEnd bool }func (root *trie) insert(word string) {node : rootfor _, ch : range word {ch - aif node.children[ch] nil {node.children[ch] &trie{}}node node.children[ch]}node.isE…

ES-入门-http-多条件查询范围查询

must 表示多个条件需要同时满足 在postman 对应的参数配置如下 {"query": {"bool": {"must" : [{"match" :{"category":"小米"}},{"match":{"price":3999.00}}]}} } 如下图查询的结果是需…

JAVA科技赋能共享台球室无人系统小程序源码

科技赋能共享台球室无人系统 —— 智慧台球新体验 🎱 科技引领,台球室迎来无人新纪元 在这个日新月异的科技时代,共享经济的浪潮席卷而来,为我们的生活带来了诸多便利。而今天,我要为大家介绍的,正是科技…