【C#程序员入门AI】AI应用的操作系统:Semantic Kernel 2026实战

文章目录

      • [🚀 开篇唠两句](#🚀 开篇唠两句)
      • [一、先搞懂: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 避坑指南(少走弯路)

  1. 别用旧版SDK :2026年推荐用1.0.0-rc1+,新版重构了API,更简洁、更稳定
  2. 别忽略插件描述[Description] 是AI调用插件的关键,必须写清楚功能和参数
  3. 别忘记记忆管理:短期记忆(ChatHistory)+ 长期记忆(向量数据库)结合,才能实现真正的上下文感知
  4. 别滥用自动调用 :复杂任务用规划器(Planners),简单任务用自动调用,避免无限循环
  5. 别忽视token计费 :GPT-4o按token收费,长对话建议分段记忆、定期清理
  6. 别只用云模型:2026年本地模型(Llama 3、Qwen)已成熟,可混合部署(云模型+本地模型)
  7. 别替代人工审核: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,教程通俗易懂,风趣幽默,从深度学习基础原理到各领域实战应用都有讲解。

相关推荐
小龙报2 小时前
【SOLIDWORKS 练习题】草图专题:1.带座轴承
人工智能·嵌入式硬件·物联网·硬件架构·3d建模·硬件工程·精益工程
海天一色y2 小时前
基于Inception-V3实现CIFAR-100数据集的分类任务
人工智能·分类·数据挖掘
啊豪的思想2 小时前
算力为擎,算法为枢,数据为薪:人工智能三大核心要素的协同演进逻辑
网络·人工智能
@我不是大鹏2 小时前
44、AI大模型技术之智图寻宝项目实战(2公共模块及去噪模块)
人工智能
春日见2 小时前
三分钟安装window Docker,并与Ubuntu(WSL)建立连接
linux·人工智能·windows·驱动开发·机器学习·docker·容器
Loo国昌2 小时前
【LangChain1.0】第十四阶段:Agent最佳设计模式与生产实践
人工智能·后端·算法·语言模型·架构
阳艳讲ai2 小时前
九尾狐AI智能矩阵:重构企业获客新引擎
大数据·人工智能
Liue612312312 小时前
窗帘检测与识别_YOLOv26模型详解与应用_1
人工智能·yolo·目标跟踪