using Microsoft.SemanticKernel; using Microsoft.SemanticKernel.ChatCompletion; using Microsoft.SemanticKernel.Connectors.OpenAI; using Volo.Abp.DependencyInjection; namespace Yi.Framework.Stock.Domain.Managers.SemanticKernel; public class SemanticKernelClient:ITransientDependency { public Kernel Kernel { get;} public SemanticKernelClient(Kernel kernel) { this.Kernel = kernel; } /// /// 执行插件 /// /// /// /// /// public async Task InovkerFunctionAsync(string input, string pluginName, string functionName) { KernelFunction jsonFun = this.Kernel.Plugins.GetFunction(pluginName, functionName); var result = await this.Kernel.InvokeAsync(function: jsonFun, new KernelArguments() { ["input"] = input }); return result.GetValue(); } /// /// 聊天对话,调用方法 /// /// public async Task> ChatCompletionAsync(string question,params (string,string)[] functions) { if (functions is null) { throw new Exception("请选择插件"); } var openSettings = new OpenAIPromptExecutionSettings() { FunctionChoiceBehavior = FunctionChoiceBehavior.Auto(functions.Select(x=>this.Kernel.Plugins.GetFunction(x.Item1, x.Item2)).ToList(),true), // ToolCallBehavior = ToolCallBehavior.AutoInvokeKernelFunctions, MaxTokens =1000 }; var chatCompletionService = this.Kernel.GetRequiredService(); var results =await chatCompletionService.GetChatMessageContentsAsync( question, executionSettings: openSettings, kernel: Kernel); return results; } }