(5)SK插件

(5)SK插件

  • 什么是AI插件?

使用人工智能插件的目的是通过利用人工智能能力来增强软件应用程序的功能。人工智能插件可以提供各种功能,如自然语言处理、图像识别、预测分析等。
通过将AI插件集成到应用程序中,您可用为您的应用提供更智能的功能,从而提高用户体验。

下面我们会通过一些案例来了解插件的使用方法。

准备工作

创建一个名称为4_SK_Plugin的控制台项目
复制以下代码到4_SK_Plugin项目文件中

<Project Sdk="Microsoft.NET.Sdk"><PropertyGroup><OutputType>Exe</OutputType><TargetFramework>net8.0</TargetFramework><ImplicitUsings>enable</ImplicitUsings><Nullable>enable</Nullable></PropertyGroup><ItemGroup><PackageReference Include="Microsoft.SemanticKernel" Version="1.12.0" /></ItemGroup>
</Project>

创建OpenAIHttpClientHandler.cs


namespace ConsoleApp1;public class OpenAIHttpClientHandler : HttpClientHandler
{private readonly string _uri;public OpenAIHttpClientHandler(string uri) => _uri = uri.TrimEnd('/');protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request,CancellationToken cancellationToken){UriBuilder uriBuilder;if (request.RequestUri?.LocalPath == "/v1/chat/completions"){uriBuilder = new UriBuilder(_uri + "/v1/chat/completions");request.RequestUri = uriBuilder.Uri;}else if (request.RequestUri?.LocalPath == "/v1/embeddings"){uriBuilder = new UriBuilder(_uri + "/v1/embeddings");request.RequestUri = uriBuilder.Uri;}return await base.SendAsync(request, cancellationToken);}
}

时间插件

由于大模型通常都是训练好的,所以当您询问时间时,大模型可能无法回答您的问题,所以我们需要一个时间插件来帮助我们回答时间问题。

打开Program.cs

using System.ComponentModel;
using ConsoleApp1;
using Microsoft.SemanticKernel;
using Microsoft.SemanticKernel.ChatCompletion;
using Microsoft.SemanticKernel.Connectors.OpenAI;var kernel = Kernel.CreateBuilder().AddOpenAIChatCompletion(modelId: "gpt-3.5-turbo",apiKey: "这里填写在https://api.token-ai.cn/创建的令牌",httpClient: new HttpClient(new OpenAIHttpClientHandler("https://api.token-ai.cn/"))).Build();// 加载时间插件
kernel.Plugins.AddFromType<TimeInformationPlugin>();// 获取聊天完成服务
var chatCompletionService = kernel.GetRequiredService<IChatCompletionService>();// 启用自动函数调用
OpenAIPromptExecutionSettings openAIPromptExecutionSettings = new()
{ToolCallBehavior = ToolCallBehavior.AutoInvokeKernelFunctions
};ChatHistory chatHistory = [];
string? input = null;chatHistory.AddUserMessage("现在几点了?");
var chatResult = await chatCompletionService.GetChatMessageContentAsync(chatHistory, openAIPromptExecutionSettings, kernel);
Console.Write($"\nAssistant > {chatResult}\n");/// <summary>
///一个返回当前时间的插件。
/// </summary>
public class TimeInformationPlugin
{/// <summary>/// 以UTC检索当前时间。/// </summary>/// <returns>UTC格式的当前时间。</returns>[KernelFunction, Description("UTC格式的当前时间。")]public string GetCurrentUtcTime()=> DateTime.UtcNow.ToString("R");
}

在上面的代码中,我们创建了一个时间插件,这个插件可以返回当前的UTC时间。
然后将插件加载到kernel中,然后我们询问了现在几点了?的问题,AI会返回当前的UTC时间。
在这个过程中AI的流程如下图所示:

在这里插入图片描述

天气插件

准备工作
打开https://www.seniverse.com/注册一个账号,然后复制密钥。

打开Program.cs

using System.ComponentModel;
using ConsoleApp1;
using Microsoft.SemanticKernel;
using Microsoft.SemanticKernel.ChatCompletion;
using Microsoft.SemanticKernel.Connectors.OpenAI;var kernel = Kernel.CreateBuilder().AddOpenAIChatCompletion(modelId: "gpt-3.5-turbo",apiKey: "这里填写在https://api.token-ai.cn/创建的令牌",httpClient: new HttpClient(new OpenAIHttpClientHandler("https://api.token-ai.cn/"))).Build();// 加载时间插件
kernel.Plugins.AddFromType<WeatherInformationPlugin>();// 获取聊天完成服务
var chatCompletionService = kernel.GetRequiredService<IChatCompletionService>();// 启用自动函数调用
OpenAIPromptExecutionSettings openAIPromptExecutionSettings = new()
{ToolCallBehavior = ToolCallBehavior.AutoInvokeKernelFunctions
};ChatHistory chatHistory = [];
string? input = null;chatHistory.AddUserMessage("深圳今天天气怎么样?");
var chatResult =await chatCompletionService.GetChatMessageContentAsync(chatHistory, openAIPromptExecutionSettings, kernel);
Console.Write($"\nAssistant > {chatResult}\n");/// <summary>
///一个返回当前时间的插件。
/// </summary>
public class WeatherInformationPlugin : IDisposable
{private readonly HttpClient client;public WeatherInformationPlugin(){this.client = new HttpClient();}/// <summary>/// 以UTC检索当前时间。/// </summary>/// <returns>UTC格式的当前时间。</returns>[KernelFunction, Description("获取指定的城市今天天气。")]public async Task<string> GetCityWeather([Description("指定的城市")]string city){string url = $"https://api.seniverse.com/v3/weather/now.json?key=您的key&location={city}&language=zh-Hans&unit=c";var response = await client.GetAsync(url);var content = await response.Content.ReadAsStringAsync();return content;}public void Dispose(){client.Dispose();}
}

结果输出:

Assistant > 今天深圳的天气是阴,气温为25摄氏度,体感温度为27摄氏度,湿度为75%,能见度为30.0公里,东风风速为10.0级。

在上面的代码中我们创建了WeatherInformationPlugin插件,这个插件可以返回指定城市的天气信息,在这个WeatherInformationPlugin类型中我们提供了一个GetCityWeather方法,这个方法我们通过Description对这个function进行描述如果你需要更好的效果,对于这个描述需要更详细的描述作用,比如现在的描述获取指定的城市今天天气。。然后方法的参数city作为入参也需要进行描述,这个描述是指定的城市。然后我们通过HttpClient来请求https://www.seniverse.com/的API来获取天气信息。

在这个过程中AI的流程如下图所示:

免费开放的SK AI教程站点:https://docs.token-ai.cn/

OpenAI官方API价格的六折站点:https://api.token-ai.cn/

AI学习qq交流群:961090189

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

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

相关文章

通过 Spring 操作 Redis

要想通过 Java 操作 redis&#xff0c;首先要连接上 redis 服务器&#xff0c;推荐看通过 Java 操作 redis -- 连接 redis 创建项⽬ 勾选 NoSQL 中的 Spring Data Redis 当然, 把 Web 中的 Spring Web 也勾选⼀下.⽅便写接进⾏后续测试. 配置 redis 服务地址 在 application.…

基于springboot + vue实现工厂车间管理系统项目演示【附项目源码+论文说明】

基于springboot vue实现工厂车间管理系统演示 摘要 社会发展日新月异&#xff0c;用计算机应用实现数据管理功能已经算是很完善的了&#xff0c;但是随着移动互联网的到来&#xff0c;处理信息不再受制于地理位置的限制&#xff0c;处理信息及时高效&#xff0c;备受人们的喜…

springboot+jsp校园理发店美容美发店信息管理系统0h29g

前台管理:会员管理、会员预定、开单点单、收银结帐、技师提成 后台管理:数据维护、物料管理、数据查询、报表分析、系统设置等 灵活的付款方式&#xff0c;支持现金、挂帐、会员卡&#xff0c;同时支持多种折扣方式并可按用户要求设置多种结帐类型善的充值卡管理模块:支持优惠卡…

大创项目推荐 深度学习手势识别 - yolo python opencv cnn 机器视觉

文章目录 0 前言1 课题背景2 卷积神经网络2.1卷积层2.2 池化层2.3 激活函数2.4 全连接层2.5 使用tensorflow中keras模块实现卷积神经网络 3 YOLOV53.1 网络架构图3.2 输入端3.3 基准网络3.4 Neck网络3.5 Head输出层 4 数据集准备4.1 数据标注简介4.2 数据保存 5 模型训练5.1 修…

某东-绑卡

声明 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01;wx a15018601872 本文章未…

Qt5 互动地图,实现无人机地面站效果

一、概述 本文主要通过Qt5opmapcontrol实现一个简单的无人机地面站效果。opmapcontrol是一个比较古老的QT开源地面站库&#xff0c;可选择谷歌地图&#xff0c;必应地图&#xff0c; 雅虎地图&#xff0c;GIS等。可直接使用源码&#xff0c;也可以编译生成库进行调用。实现效果…

Mujoco仿真【xml文件的学习 2】

承接上一篇的博客&#xff1a;Mujoco仿真【xml文件的学习 1】-CSDN博客 我们继续来学习Mujoco仿真中的xml文件&#xff0c;哦豁&#xff0c;gogogo&#xff01; 给出这次的xml文件案例【bimanual_viperx_transfer_cube.xml】&#xff1a; <mujoco><include file&qu…

LitCTF

[LitCTF 2023]enbase64 base 64 里面有一个换表的函数 写代码 #include<stdio.h> #include<string.h> #include<stdlib.h> int main() {char *result; char Destination[65]; int v3[65];int j;int i; char Source[]"ABCDEFGHIJKLMNOPQRSTUVWXYZabcde…

打造高效安全新标杆:智慧楼宇视频智能管理系统的建设探索

大数据、人工智能、5G等技术在城市中的不同应用也让人们看到了数字化和智能化技术赋予城市管理的巨大潜力&#xff0c;为更多城市数字化应用场景的发展带来机遇。在新基建的大背景下&#xff0c;人工智能、物联网等先进技术与基础设施的深度融合&#xff0c;将大力推进电网、楼…

ArcGIS批量更改所有符号的格式

这期谈一下&#xff0c;如何修改所有符号的样式。 比如&#xff0c;我们需要更改下图的面符号位无轮廓的 该如何批量修改的呢&#xff1f; 视频教学吧&#xff1a; ArcGIS批量更改所有符号的格式 ArcGIS全系列实战视频教程——9个单一课程组合系列直播回放-CSDN博客文章浏览阅…

el-input 自动获取焦点

前言&#xff1a; 需求描述&#xff1a;在 Dialog 对话框中 使用 input 组件&#xff1b;当点击按钮&#xff0c;Dialog 对话框显示&#xff0c;且里面的 input 组件要自动获取焦点。因为页面上还存在其他的 input 组件&#xff0c;所以使用 自动获取焦点属性没用&#xff01;&…

基于Java的推箱子游戏设计与实现(论文 + 源码)

【免费】关于基于JAVA的推箱子游戏.zip资源-CSDN文库https://download.csdn.net/download/JW_559/89325018 基于Java的推箱子游戏设计与实现 摘 要 社会在进步&#xff0c;人们生活质量也在日益提高。高强度的压力也接踵而来。社会中急需出现新的有效方式来缓解人们的压力。…

Centos7离线安装RabbitMQ教程

目录 安装包准备开始安装1. 创建目录2. 上传文件3. 安装erlang语言4. 安装socat5. 安装rabbitmq6. 启动、停止rabbitmq7. 设置开机启动8. 开启web界面管理工具9. 开启防火墙(root)10. 访问页面11. 附录 安装包准备 &#xff08;1&#xff09;准备RabbitMQ的安装包&#xff08;…

IT革命浪潮:技术革新如何改变我们的生活与工作

一、技术革新与行业应用 当前的IT行业正处于前所未有的技术革新阶段。其中&#xff0c;量子计算和虚拟现实是两项引人注目的技术。 量子计算&#xff1a;量子计算以其超越传统计算的潜力&#xff0c;正在逐步从理论走向实践。在材料科学、药物研发和气候模型等复杂计算领域&a…

docker -JDK8安装

文章目录 前言docker -JDK8安装1. 新建一个 Docker 容器2. 在容器中安装和配置 JDK 8 前言 如果您觉得有用的话&#xff0c;记得给博主点个赞&#xff0c;评论&#xff0c;收藏一键三连啊&#xff0c;写作不易啊^ _ ^。   而且听说点赞的人每天的运气都不会太差&#xff0c;实…

spring cloud gateway一些相关概念

在云架构中运行着众多客户端和服务端&#xff0c;API网关的存在提供了保护和路由消息&#xff0c;隐藏服务&#xff0c;限制负载等等功能。下图是spring cloud gateway所处的位置。 它有三大概念&#xff1a; 路由&#xff1a;路由是构建网关的基本模块&#xff0c;它由ID&…

worklist配置调试日志记录

工作记录用,不拘小节&#xff01; 设备请求日志 2024-05-23 09:03:14,503 [WorkListServer: 10.87.232.253 [18]] INFO - LISTMWL Request from [gehc]: (0008,0005) CS [ISO_IR 100] # 10 Specific Character Set 1-N (0008,0020) DA [] …

如何搭建一个vue项目(完整步骤)

搭建一个新的vue项目 一、安装node环境二、搭建vue项目环境1、全局安装vue-cli2、进入你的项目目录&#xff0c;创建一个基于 webpack 模板的新项目3、进入项目&#xff1a;cd vue-demo&#xff0c;安装依赖4、npm run dev&#xff0c;启动项目 三、vue项目目录讲解四、开始我们…

go 爬虫之 colly 简单示例

1. 背景 colly 是 Go 实现的比较有名的一款爬虫框架&#xff0c;而且 Go 在高并发和分布式场景的优势也正是爬虫技术所需要的。它的主要特点是轻量、快速&#xff0c;设计非常优雅&#xff0c;并且分布式的支持也非常简单&#xff0c;易于扩展。 2. 官方文档 https://go-col…

RPC原理技术

RPC原理技术 背景介绍起源组件实现工作原理 背景 本文内容大多基于网上其他参考文章及资料整理后所得&#xff0c;并非原创&#xff0c;目的是为了需要时方便查看。 介绍 RPC&#xff0c;Remote Procedure Call&#xff0c;远程过程调用&#xff0c;允许像调用本地方法一样调…