Net8集成SemanticKernel保姆级教程

主要能力:知识库检索,添加内置插件,外部api接口转换为插件,添加mcp服务

1.安装sdk

dotnet add package Microsoft.SemanticKernel

2.初始化

var builder = Kernel.CreateBuilder().AddOpenAIChatCompletion(modelId, new Uri(endpoint), apiKey);

3.获取会话实例

 var kernel = builder.Build();
 var chatCompletionService = kernel.GetRequiredService<IChatCompletionService>();

4.设置最大记忆窗口

var reducer = new ChatHistoryTruncationReducer(targetCount: 最大消息数量);//添加最大历史消息限制
 var reducedMessages = await reducer.ReduceAsync(history); //检查历史消息是否超过限制,如果超过限制则对超出部门进行摘要

 if (reducedMessages is not null)
 {
     history = new ChatHistory(reducedMessages); //将摘要后的历史记录重新赋值给history
 }

5.添加系统提示词

 history.AddSystemMessage("提示词");

6.添加会话记录

    history.AddAssistantMessage("ai消息"); //添加ai回复消息
    history.AddUserMessage("用户与消息"); //添加用户消息

7.添加内置插件

    kernel.Plugins.AddFromType<插件类>("插件名称");

8.将第三方接口转换为插件
(1)将swagger.json文件转换为插件

KernelPlugin plugin = await OpenApiKernelPluginFactory.CreateFromOpenApiAsync(pluginName: "插件名称", filePath: "文件路径");

kernel.Plugins.Add(plugin);

(2)将swagger.json文档地址转换为插件

 KernelPlugin plugin = await OpenApiKernelPluginFactory.CreateFromOpenApiAsync(pluginName: "插件名称", new Uri("地址"));

 kernel.Plugins.Add(plugin);

9.添加mcp插件

                    var McpserverName = sendMessageDto.McpName; //服务名
                    var mcpendpoint = sendMessageDto.McpUrl; //sse地址

                    //MCP基础配置
                    var defaultOptions = new McpClientOptions
                    {
                        ClientInfo = new() { Name = McpserverName + "McpClient", Version = "1.0.0" }
                    };


                    #region 配置Stdio客户端  web应用用不上,需要自己修改
                    //var stdidConfig = new StdioClientTransportOptions
                    //{
                    //    Command = "",
                    //    Name = "",
                    //    Arguments = null,
                    //    EnvironmentVariables = null,
                    //    WorkingDirectory = null,
                    //    ShutdownTimeout = TimeSpan.FromSeconds(5),
                    //};


                    //await using var client = await McpClientFactory.CreateAsync(
                    //new StdioClientTransport(stdidConfig),
                    // defaultOptions);



                    #endregion


                    #region 配置SSE客户端
                    var SseConfig = new SseClientTransportOptions
                    {
                        Endpoint = new Uri(mcpendpoint),
                        Name = McpserverName,
                    };

                    //创建MCP客户端
                    await using var client = await McpClientFactory.CreateAsync(
                     new SseClientTransport(SseConfig),
                     defaultOptions);
                    #endregion


                    //mcp工具列表
                    var tools = await client.ListToolsAsync();


                    //添加mcp工具
#pragma warning disable SKEXP0001
                    kernel.Plugins.AddFromFunctions(McpserverName, tools.Select(aiFunction => aiFunction.AsKernelFunction()));
#pragma warning restore SKEXP0001

gitee地址:https://gitee.com/q923666487/SemanticKernelFornet8.git

posted @ 2025-06-07 14:57  丶…  阅读(86)  评论(0)    收藏  举报