.NET Core C#系列之 Semantic Kernel Plugin插件教程

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

什么是AI插件?

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

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

创建一个名称为4_SK_Plugin的控制台项目 复制以下代码到4_SK_Plugin项目文件中 Exe net8.0 enable enable 创建OpenAIHttpClientHandler.cs public OpenAIHttpClientHandler(string uri) => _uri = uri.TrimEnd('/'); protected override async Task 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"); } return await base.SendAsync(request, cancellationToken); }}

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

打开Program.csusing 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;// 获取聊天完成服务var chatCompletionService = kernel.GetRequiredService;// 启用自动函数调用OpenAIPromptExecutionSettings openAIPromptExecutionSettings = new{ ToolCallBehavior = ToolCallBehavior.AutoInvokeKernelfunctions};ChatHistory chatHistory = ;string? input = ;chatHistory.AddUserMessage("现在几点了?");var chatResult = await chatCompletionService.GetChatMessageContentAsync(chatHistory, openAIPromptExecutionSettings, kernel);Console.Write($"\nAssistant > {chatResult}\n");/// ///一个返回当前时间的插件。/// public class TimeInformationPlugin{ /// /// 以UTC检索当前时间。 /// /// UTC格式的当前时间。 [KernelFunction, Description("UTC格式的当前时间。")] public string GetCurrentUtcTime => DateTime.UtcNow.ToString("R");}在上面的代码中,我们创建了一个时间插件,这个插件可以返回当前的UTC时间。然后将插件加载到kernel中,然后我们询问了现在几点了?的问题,AI会返回当前的UTC时间。在这个过程中AI的流程如下图所示:打开Program.csusing 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;// 启用自动函数调用OpenAIPromptExecutionSettings openAIPromptExecutionSettings = new{ ToolCallBehavior = ToolCallBehavior.AutoInvokeKernelFunctions};chatHistory.AddUserMessage("深圳今天天气怎么样?");var chatResult = await chatCompletionService.GetChatMessageContentAsync(chatHistory, openAIPromptExecutionSettings, kernel);Console.Write($"\nAssistant > {chatResult}\n");/// ///一个返回当前时间的插件。/// public class WeatherInformationPlugin : IDisposable{ private readonly HttpClient client; public WeatherInformationPlugin { this.client = new HttpClient; } /// /// 以UTC检索当前时间。 /// /// UTC格式的当前时间。 [KernelFunction, Description("获取指定的城市今天天气。")] public async Task 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插件,这个插件可以返回指定城市的天气信息,在这个类型中我们提供了一个GetCityWeather方法,这个方法我们通过Description对这个function进行描述如果你需要更好的效果,对于这个描述需要更详细的描述作用,比如现在的描述获取指定的城市今天天气。。然后方法的参数city作为入参也需要进行描述,这个描述是指定的城市。然后我们通过HttpClient来请求https://www.seniverse.com/的API来获取天气信息。

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

下一篇,我将讲解使用插件和SQL数据库进行交互。

来源:opendotnet

相关推荐