【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,教程通俗易懂,风趣幽默,从深度学习基础原理到各领域实战应用都有讲解。

相关推荐
NAGNIP7 小时前
一文搞懂深度学习中的通用逼近定理!
人工智能·算法·面试
冬奇Lab9 小时前
一天一个开源项目(第36篇):EverMemOS - 跨 LLM 与平台的长时记忆 OS,让 Agent 会记忆更会推理
人工智能·开源·资讯
冬奇Lab9 小时前
OpenClaw 源码深度解析(一):Gateway——为什么需要一个"中枢"
人工智能·开源·源码阅读
AngelPP12 小时前
OpenClaw 架构深度解析:如何把 AI 助手搬到你的个人设备上
人工智能
宅小年12 小时前
Claude Code 换成了Kimi K2.5后,我再也回不去了
人工智能·ai编程·claude
九狼13 小时前
Flutter URL Scheme 跨平台跳转
人工智能·flutter·github
ZFSS13 小时前
Kimi Chat Completion API 申请及使用
前端·人工智能
天翼云开发者社区14 小时前
春节复工福利就位!天翼云息壤2500万Tokens免费送,全品类大模型一键畅玩!
人工智能·算力服务·息壤
知识浅谈14 小时前
教你如何用 Gemini 将课本图片一键转为精美 PPT
人工智能
Ray Liang14 小时前
被低估的量化版模型,小身材也能干大事
人工智能·ai·ai助手·mindx