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