文章目录
-
-
- [🚀 开篇唠两句](#🚀 开篇唠两句)
- [一、先搞懂:Semantic Kernel 到底是啥?(大白话版)](#一、先搞懂:Semantic Kernel 到底是啥?(大白话版))
-
- [1. 核心定位:AI应用的"操作系统"](#1. 核心定位:AI应用的“操作系统”)
- [2. 核心组件(记住这4个就够)](#2. 核心组件(记住这4个就够))
- [3. 为什么用C# + Semantic Kernel?](# + Semantic Kernel?)
- 二、环境准备(5分钟搞定,2026最新版)
-
- [1. 安装NuGet包(必装+推荐)](#1. 安装NuGet包(必装+推荐))
- [2. 获取API Key(2026推荐方案)](#2. 获取API Key(2026推荐方案))
- [3. 项目结构(极简清晰)](#3. 项目结构(极简清晰))
- 三、核心实战:10分钟搭智能对话助手(带记忆+插件)
-
- [1. 第一步:初始化Kernel(核心引擎)](#1. 第一步:初始化Kernel(核心引擎))
- 2. 第二步:自定义插件(让AI调用你的C#代码)
- [3. 第三步:记忆管理(让AI记住历史对话)](#3. 第三步:记忆管理(让AI记住历史对话))
- [4. 第四步:多轮对话主逻辑(带记忆+插件调用)](#4. 第四步:多轮对话主逻辑(带记忆+插件调用))
- [5. 第五步:配置文件(AppSettings.json)](#5. 第五步:配置文件(AppSettings.json))
- 四、运行效果(实测截图级描述)
- [五、2026年Semantic Kernel 避坑指南(少走弯路)](#五、2026年Semantic Kernel 避坑指南(少走弯路))
- [六、2026进阶玩法(Semantic Kernel 新特性)](#六、2026进阶玩法(Semantic Kernel 新特性))
-
- [1. 多模型编排(GPT-4o + Claude 3.5 + Gemini 3.0)](#1. 多模型编排(GPT-4o + Claude 3.5 + Gemini 3.0))
- [2. 规划器(Planners):自动完成多步复杂任务](#2. 规划器(Planners):自动完成多步复杂任务)
- [3. 本地模型集成(Ollama + Llama 3)](#3. 本地模型集成(Ollama + Llama 3))
- [4. 集成到ASP.NET Core(Web API + 前端)](#4. 集成到ASP.NET Core(Web API + 前端))
- 七、总结(一句话记住)
- [💬 互动一下](#💬 互动一下)
-
目前国内还是很缺AI人才的,希望更多人能真正加入到AI行业,共同促进行业进步。想要系统学习AI知识的朋友可以看看我的教程http://blog.csdn.net/jiangjunshow,教程通俗易懂,风趣幽默,从深度学习基础原理到各领域实战应用都有讲解。
🚀 开篇唠两句
今天讲微软官方AI编排神器------Semantic Kernel 2026最新版 ,用C#轻松把GPT-4o、Claude 3.5、通义千问等大模型"串起来",10分钟搭出带记忆、能调用工具、可多轮对话的智能助手,代码比你想象的简单10倍!
一、先搞懂:Semantic Kernel 到底是啥?(大白话版)
1. 核心定位:AI应用的"操作系统"
- 大白话 :Semantic Kernel(简称SK)是微软开源的AI编排框架,专门帮你把大模型、插件、记忆、规划器"拧成一股绳",不用重复造轮子。
- 2026核心优势 :
- 支持C#/Python/Java三端统一,.NET生态无缝接入
- 内置GPT-4o、Claude 3.5、Gemini 3.0等最新模型连接器
- 自带**记忆(Memory)、插件(Plugins)、规划器(Planners)**三大核心能力
- 支持函数调用(Function Calling)、多轮对话、流式输出,开箱即用
- 可无缝集成Azure AI、本地模型(Llama 3、Qwen),灵活部署
2. 核心组件(记住这4个就够)
- Kernel:核心引擎,负责调度模型、插件、记忆
- Plugins:AI的"手脚",让模型能调用你的C#方法、数据库、API
- Memory:AI的"大脑",记住历史对话、知识库,实现上下文感知
- Planners:AI的"大脑+手脚",自动规划多步任务(比如"帮我写周报+发邮件")
3. 为什么用C# + Semantic Kernel?
- .NET生态无缝:直接用C#写插件,调用现有类库、数据库、服务
- 类型安全:强类型校验,避免Prompt注入、参数错误
- 性能强悍:编译型语言,比Python更快,适合生产环境
- 微软全家桶:无缝对接Azure OpenAI、Azure AI Search、Azure Functions
二、环境准备(5分钟搞定,2026最新版)
1. 安装NuGet包(必装+推荐)
bash
# 核心包(2026最新稳定版:1.0.0-rc1)
Install-Package Microsoft.SemanticKernel
# 模型连接器(按需安装)
Install-Package Microsoft.SemanticKernel.Connectors.OpenAI # OpenAI/Azure OpenAI
Install-Package Microsoft.SemanticKernel.Connectors.Anthropic # Claude 3.5
Install-Package Microsoft.SemanticKernel.Connectors.Google # Gemini 2.0
# 记忆存储(推荐用向量数据库,2026主流)
Install-Package Microsoft.SemanticKernel.Connectors.Memory.Qdrant # Qdrant(轻量)
Install-Package Microsoft.SemanticKernel.Connectors.Memory.AzureAISearch # Azure AI Search(企业级)
# 流式输出+对话管理
Install-Package Microsoft.SemanticKernel.ChatCompletion
Install-Package Microsoft.SemanticKernel.Streaming
2. 获取API Key(2026推荐方案)
- 方案1:Azure OpenAI(国内稳定,推荐)
- 注册Azure → 创建OpenAI服务 → 部署GPT-4o → 获取Endpoint + API Key + 部署名
- 方案2:OpenAI官方(国际版)
- 注册OpenAI → 获取API Key → 支持GPT-4o、GPT-4 Turbo
- 方案3:本地模型(Llama 3、Qwen,离线可用)
- 用Ollama部署本地模型 → SK通过HTTP连接器调用
3. 项目结构(极简清晰)
AIChatAssistant/
├── Program.cs # 主程序
├── Plugins/ # 自定义插件(AI的"手脚")
│ └── UserPlugins.cs # 示例:用户信息查询插件
├── Memories/ # 记忆管理(AI的"大脑")
│ └── MemoryService.cs # 向量记忆服务
└── Settings/ # 配置文件
└── AppSettings.json # API Key、模型配置
三、核心实战:10分钟搭智能对话助手(带记忆+插件)
1. 第一步:初始化Kernel(核心引擎)
Program.cs
csharp
using Microsoft.SemanticKernel;
using Microsoft.SemanticKernel.ChatCompletion;
using Microsoft.SemanticKernel.Connectors.OpenAI;
using Microsoft.SemanticKernel.Memory;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
var host = Host.CreateDefaultBuilder(args)
.ConfigureServices((context, services) =>
{
// 1. 配置Kernel
services.AddKernel();
// 2. 配置OpenAI连接器(GPT-4o)
services.AddOpenAIChatCompletion(
modelId: "gpt-4o", // 模型ID
apiKey: context.Configuration["OpenAI:ApiKey"]! // API Key
);
// 3. 配置记忆服务(Qdrant向量数据库,2026轻量首选)
services.AddQdrantMemoryStore(
host: "http://localhost:6334", // Qdrant地址
port: 6334,
vectorSize: 1536 // text-embedding-ada-002向量维度
);
// 4. 注册自定义插件(AI的"手脚")
services.AddSingleton<UserPlugins>();
})
.Build();
// 获取Kernel实例
var kernel = host.Services.GetRequiredService<Kernel>();
var chatCompletionService = kernel.Services.GetRequiredService<IChatCompletionService>();
var memoryStore = kernel.Services.GetRequiredService<IMemoryStore>();
Console.WriteLine("🚀 智能对话助手已启动(2026版)");
Console.WriteLine("=====================================");
Console.WriteLine("输入 'exit' 退出,输入 'clear' 清空记忆");
Console.WriteLine("=====================================\n");
2. 第二步:自定义插件(让AI调用你的C#代码)
Plugins/UserPlugins.cs
csharp
using Microsoft.SemanticKernel;
using System.ComponentModel;
/// <summary>
/// 用户信息查询插件(AI的"手脚")
/// </summary>
public class UserPlugins
{
/// <summary>
/// 根据用户ID查询用户信息
/// </summary>
/// <param name="userId">用户ID</param>
/// <returns>用户信息</returns>
[KernelFunction, Description("根据用户ID查询用户信息")]
public string GetUserInfo([Description("用户ID,数字类型")] int userId)
{
// 模拟数据库查询
return userId switch
{
1 => "用户ID:1,姓名:张三,职位:开发工程师,部门:技术部",
2 => "用户ID:2,姓名:李四,职位:产品经理,部门:产品部",
_ => $"未找到用户ID:{userId} 的信息"
};
}
/// <summary>
/// 根据用户ID查询用户订单
/// </summary>
/// <param name="userId">用户ID</param>
/// <returns>订单列表</returns>
[KernelFunction, Description("根据用户ID查询用户订单")]
public string GetUserOrders([Description("用户ID,数字类型")] int userId)
{
// 模拟订单查询
return userId switch
{
1 => "订单1:2026-01-20,商品:笔记本电脑,金额:5999元;订单2:2026-01-25,商品:机械键盘,金额:399元",
2 => "订单1:2026-01-10,商品:显示器,金额:1299元",
_ => $"未找到用户ID:{userId} 的订单"
};
}
}
3. 第三步:记忆管理(让AI记住历史对话)
Memories/MemoryService.cs
csharp
using Microsoft.SemanticKernel.Memory;
using Microsoft.SemanticKernel.Text;
/// <summary>
/// 记忆服务(AI的"大脑")
/// </summary>
public class MemoryService
{
private readonly IMemoryStore _memoryStore;
private const string CollectionName = "chat-history"; // 记忆集合名
public MemoryService(IMemoryStore memoryStore)
{
_memoryStore = memoryStore;
// 创建记忆集合(如果不存在)
if (!_memoryStore.DoesCollectionExistAsync(CollectionName).Result)
{
_memoryStore.CreateCollectionAsync(CollectionName).Wait();
}
}
/// <summary>
/// 保存对话记忆
/// </summary>
public async Task SaveMemoryAsync(string userId, string userInput, string aiResponse)
{
var memoryId = Guid.NewGuid().ToString();
var memoryText = $"用户{userId}:{userInput}\nAI:{aiResponse}";
// 保存到向量数据库(自动生成嵌入向量)
await _memoryStore.SaveInformationAsync(
collection: CollectionName,
text: memoryText,
id: memoryId,
description: $"用户{userId}的对话记忆",
additionalMetadata: $"userId:{userId},time:{DateTime.Now:yyyy-MM-dd HH:mm:ss}"
);
}
/// <summary>
/// 检索相关记忆(上下文感知)
/// </summary>
public async Task<List<string>> SearchMemoryAsync(string userId, string query, int limit = 3)
{
var results = await _memoryStore.SearchAsync(
collection: CollectionName,
query: query,
limit: limit,
filter: new MemoryFilter().WithTag("userId", userId)
);
return results.Select(r => r.Metadata.Text).ToList();
}
}
4. 第四步:多轮对话主逻辑(带记忆+插件调用)
Program.cs(续)
csharp
// 初始化记忆服务
var memoryService = new MemoryService(memoryStore);
// 对话历史(短期记忆)
var chatHistory = new ChatHistory();
chatHistory.AddSystemMessage("你是一个智能对话助手,擅长回答用户问题、调用插件查询信息、记住历史对话。回答要简洁、专业、友好。");
// 用户ID(模拟)
const string UserId = "1001";
while (true)
{
Console.Write("用户:");
var userInput = Console.ReadLine()?.Trim();
if (string.Equals(userInput, "exit", StringComparison.OrdinalIgnoreCase))
{
Console.WriteLine("👋 再见!");
break;
}
if (string.Equals(userInput, "clear", StringComparison.OrdinalIgnoreCase))
{
chatHistory.Clear();
chatHistory.AddSystemMessage("你是一个智能对话助手,擅长回答用户问题、调用插件查询信息、记住历史对话。回答要简洁、专业、友好。");
Console.WriteLine("🧹 记忆已清空!");
continue;
}
if (string.IsNullOrEmpty(userInput))
{
Console.WriteLine("❌ 请输入有效内容!");
continue;
}
try
{
// 1. 检索相关记忆(长期记忆)
var memories = await memoryService.SearchMemoryAsync(UserId, userInput);
if (memories.Any())
{
Console.WriteLine("\n📚 检索到历史记忆:");
foreach (var memory in memories)
{
Console.WriteLine($"- {memory}");
}
// 将记忆加入对话历史
chatHistory.AddUserMessage($"历史对话参考:{string.Join("\n", memories)}");
}
// 2. 添加用户输入到对话历史
chatHistory.AddUserMessage(userInput);
// 3. 配置插件调用(自动调用,2026最新特性)
var executionSettings = new OpenAIPromptExecutionSettings
{
ToolCallBehavior = ToolCallBehavior.AutoInvokeKernelFunctions, // 自动调用插件
Temperature = 0.1f, // 降低随机性,提高准确性
MaxTokens = 4096 // 最大token数
};
Console.WriteLine("\n🤖 AI:");
// 4. 流式输出AI响应(提升用户体验)
var fullResponse = new StringBuilder();
await foreach (var chunk in chatCompletionService.GetStreamingChatMessageContentsAsync(
chatHistory, executionSettings, kernel))
{
if (!string.IsNullOrEmpty(chunk.Content))
{
Console.Write(chunk.Content);
fullResponse.Append(chunk.Content);
}
}
Console.WriteLine();
// 5. 保存对话记忆(长期记忆)
await memoryService.SaveMemoryAsync(UserId, userInput, fullResponse.ToString());
// 6. 添加AI响应到对话历史(短期记忆)
chatHistory.AddAssistantMessage(fullResponse.ToString());
}
catch (Exception ex)
{
Console.WriteLine($"\n❌ 出错了:{ex.Message}");
}
Console.WriteLine("\n-------------------------------------\n");
}
await host.RunAsync();
5. 第五步:配置文件(AppSettings.json)
json
{
"OpenAI": {
"ApiKey": "你的OpenAI API Key",
"ModelId": "gpt-4o"
},
"Qdrant": {
"Host": "http://localhost",
"Port": 6334
}
}
四、运行效果(实测截图级描述)
启动界面
🚀 智能对话助手已启动(2026版)
=====================================
输入 'exit' 退出,输入 'clear' 清空记忆
=====================================
用户:
对话示例1:调用插件查询用户信息
用户:帮我查一下用户ID为1的信息
🤖 AI:
用户ID:1,姓名:张三,职位:开发工程师,部门:技术部
-------------------------------------
用户:他有哪些订单?
📚 检索到历史记忆:
- 用户1001:帮我查一下用户ID为1的信息
AI:用户ID:1,姓名:张三,职位:开发工程师,部门:技术部
🤖 AI:
订单1:2026-01-20,商品:笔记本电脑,金额:5999元;订单2:2026-01-25,商品:机械键盘,金额:399元
-------------------------------------
对话示例2:多轮对话+记忆
用户:我是张三,今天要写周报,帮我列个大纲
🤖 AI:
张三周报大纲:
1. 本周工作内容(开发笔记本电脑相关功能、调试机械键盘接口)
2. 遇到的问题及解决方案
3. 下周工作计划
4. 总结与建议
-------------------------------------
用户:帮我把大纲扩展成完整周报
📚 检索到历史记忆:
- 用户1001:我是张三,今天要写周报,帮我列个大纲
AI:张三周报大纲:1. 本周工作内容(开发笔记本电脑相关功能、调试机械键盘接口)...
🤖 AI:
# 张三 2026年1月第4周周报
## 一、本周工作内容
1. 完成笔记本电脑商品模块的开发与测试,实现了商品详情展示、库存管理、下单流程等功能,确保系统稳定运行。
2. 调试机械键盘接口,解决了兼容性问题,优化了数据传输速度,提升了用户体验。
3. 参与技术部周会,汇报项目进度,与团队成员协作解决技术难题。
## 二、遇到的问题及解决方案
1. 问题:笔记本电脑库存数据同步延迟。
解决方案:优化数据库查询语句,增加缓存机制,提升数据同步效率。
2. 问题:机械键盘接口与部分设备不兼容。
解决方案:查阅官方文档,调整接口参数,添加兼容性适配代码。
## 三、下周工作计划
1. 完成笔记本电脑商品模块的上线部署,进行线上监控与维护。
2. 开发机械键盘商品的评价与推荐功能,提升用户互动性。
3. 学习最新的.NET 9技术,应用到后续项目开发中。
## 四、总结与建议
本周顺利完成了既定工作任务,解决了多个技术难题,提升了自身技术能力。建议团队加强技术分享,定期组织技术培训,共同提升团队整体水平。
-------------------------------------
五、2026年Semantic Kernel 避坑指南(少走弯路)
- 别用旧版SDK :2026年推荐用1.0.0-rc1+,新版重构了API,更简洁、更稳定
- 别忽略插件描述 :
[Description]是AI调用插件的关键,必须写清楚功能和参数 - 别忘记记忆管理:短期记忆(ChatHistory)+ 长期记忆(向量数据库)结合,才能实现真正的上下文感知
- 别滥用自动调用 :复杂任务用规划器(Planners),简单任务用自动调用,避免无限循环
- 别忽视token计费 :GPT-4o按token收费,长对话建议分段记忆、定期清理
- 别只用云模型:2026年本地模型(Llama 3、Qwen)已成熟,可混合部署(云模型+本地模型)
- 别替代人工审核:AI是辅助,关键业务逻辑、敏感数据必须人工复核
六、2026进阶玩法(Semantic Kernel 新特性)
1. 多模型编排(GPT-4o + Claude 3.5 + Gemini 3.0)
- 用SK的模型路由 功能,根据任务类型自动选择最优模型
- 代码生成:GPT-4o
- 长文本理解:Claude 3.5
- 多模态处理:Gemini 3.0
- 示例代码:
csharp
services.AddOpenAIChatCompletion("gpt-4o", apiKey);
services.AddAnthropicChatCompletion("claude-3-5-sonnet-20240620", apiKey);
services.AddGoogleAIChatCompletion("gemini-2.0-flash", apiKey);
// 动态选择模型
var modelId = userInput.Contains("代码") ? "gpt-4o" : "claude-3-5-sonnet-20240620";
var chatCompletionService = kernel.Services.GetRequiredKeyedService<IChatCompletionService>(modelId);
2. 规划器(Planners):自动完成多步复杂任务
- 2026最新FunctionCallingPlanner ,自动规划并执行多步任务
- 示例:"帮我查用户1的信息,生成周报,然后发邮件给领导"
- 示例代码:
csharp
var planner = new FunctionCallingPlanner(kernel);
var plan = await planner.CreatePlanAsync("帮我查用户1的信息,生成周报,然后发邮件给领导");
var result = await kernel.RunAsync(plan.Steps);
Console.WriteLine(result);
3. 本地模型集成(Ollama + Llama 3)
- 离线部署,数据安全,适合内网环境
- 示例代码:
csharp
services.AddOpenAIChatCompletion(
modelId: "llama3:8b",
apiKey: "ollama", // 任意值
endpoint: new Uri("http://localhost:11434/v1") // Ollama地址
);
4. 集成到ASP.NET Core(Web API + 前端)
- 用SK搭建AI对话API,对接Vue/React前端,实现Web端智能助手
- 示例:ASP.NET Core Web API控制器
csharp
[ApiController]
[Route("api/chat")]
public class ChatController : ControllerBase
{
private readonly Kernel _kernel;
private readonly IChatCompletionService _chatCompletionService;
private readonly MemoryService _memoryService;
public ChatController(Kernel kernel, IChatCompletionService chatCompletionService, MemoryService memoryService)
{
_kernel = kernel;
_chatCompletionService = chatCompletionService;
_memoryService = memoryService;
}
[HttpPost]
public async Task<IActionResult> Chat([FromBody] ChatRequest request)
{
var chatHistory = new ChatHistory();
chatHistory.AddSystemMessage("你是一个智能对话助手...");
chatHistory.AddUserMessage(request.Message);
var executionSettings = new OpenAIPromptExecutionSettings
{
ToolCallBehavior = ToolCallBehavior.AutoInvokeKernelFunctions
};
var response = await _chatCompletionService.GetChatMessageContentAsync(chatHistory, executionSettings, _kernel);
await _memoryService.SaveMemoryAsync(request.UserId, request.Message, response.Content);
return Ok(new ChatResponse { Message = response.Content });
}
}
public class ChatRequest
{
public string UserId { get; set; } = string.Empty;
public string Message { get; set; } = string.Empty;
}
public class ChatResponse
{
public string Message { get; set; } = string.Empty;
}
七、总结(一句话记住)
2026年C# AI应用开发,核心就是"Semantic Kernel + 大模型 + 插件 + 记忆":
- Semantic Kernel 负责编排调度,让AI能力像.NET类库一样易于调用
- 大模型 负责智能理解,GPT-4o/Claude 3.5/Gemini 3.0按需选择
- 插件 负责落地执行,让AI能调用你的C#代码、数据库、API
- 记忆 负责上下文感知,短期记忆+长期记忆结合,实现真正的智能对话
10分钟搭好,带记忆、能调用工具、可多轮对话的智能对话助手,直接上线生产!
💬 互动一下
你想把这个智能助手集成到Web/APP/微信小程序 还是企业内部系统 ?
最想用GPT-4o/Claude 3.5/Gemini 3.0 还是本地模型(Llama 3/Qwen) ?
评论区留言,下期优先更你想看的进阶玩法!
目前国内还是很缺AI人才的,希望更多人能真正加入到AI行业,共同促进行业进步。想要系统学习AI知识的朋友可以看看我的教程http://blog.csdn.net/jiangjunshow,教程通俗易懂,风趣幽默,从深度学习基础原理到各领域实战应用都有讲解。
