在C#生态中开发AI应用,Semantic Kernel是微软官方推出的轻量级AI编排框架,能帮助开发者快速对接各类AI大模型,整合提示词工程、插件调用、记忆管理等能力,不需要从零处理复杂的模型接口适配逻辑。下面我们一步步学习如何在C#项目中使用Semantic Kernel对接AI大模型。

环境准备
首先我们需要准备好开发环境,确保本地安装了.NET 6及以上版本的SDK,然后创建一个新的C#控制台项目,或者直接在现有项目中引入Semantic Kernel的NuGet包。可以通过NuGet包管理器搜索Microsoft.SemanticKernel,选择最新稳定版本安装,也可以通过命令行执行以下命令安装:
// 使用dotnet命令行安装Semantic Kernel核心包 dotnet add package Microsoft.SemanticKernel // 如果需要对接OpenAI兼容的模型,还需要安装对应的连接器包 dotnet add package Microsoft.SemanticKernel.Connectors.OpenAI
基础对接流程
1. 配置模型参数
对接AI大模型需要先准备模型的访问地址、API密钥等参数,如果是使用OpenAI的模型,需要提前申请API密钥;如果是私有部署的兼容OpenAI接口的模型,需要准备对应的服务地址和自定义密钥。我们首先创建内核构建器,配置模型信息:
using Microsoft.SemanticKernel;
// 创建内核构建器
var builder = Kernel.CreateBuilder();
// 配置OpenAI兼容模型,这里以OpenAI为例,私有模型替换对应地址和密钥即可
string modelId = "gpt-3.5-turbo"; // 模型ID
string apiKey = "你的API密钥"; // 替换为实际的API密钥
string endpoint = "https://api.openai.com/v1"; // 模型服务地址,私有部署替换为对应地址
// 添加聊天完成服务
builder.AddOpenAIChatCompletion(
modelId: modelId,
apiKey: apiKey,
endpoint: new Uri(endpoint)
);
// 构建内核实例
Kernel kernel = builder.Build();
2. 调用基础对话能力
配置完成内核之后,我们可以直接调用模型的对话能力,发送用户输入并获取模型的返回结果。以下是一个简单的对话调用示例:
using Microsoft.SemanticKernel.ChatCompletion;
// 获取聊天完成服务
var chatService = kernel.GetRequiredService<IChatCompletionService>();
// 创建聊天历史记录
var chatHistory = new ChatHistory();
chatHistory.AddUserMessage("请介绍一下C#语言的核心特性");
// 发送请求并获取回复
var result = await chatService.GetChatMessageContentAsync(chatHistory, kernel: kernel);
// 输出回复内容
Console.WriteLine(result.Content);
自定义提示词与插件
自定义提示词模板
Semantic Kernel支持自定义提示词模板,我们可以把常用的提示词逻辑封装成函数,方便重复调用。以下是创建自定义提示词函数的示例:
using Microsoft.SemanticKernel.PromptTemplates.Handlebars;
// 定义提示词模板,支持变量替换
string promptTemplate = """
你是一个C#技术专家,请解答用户的问题:
{{$input}}
要求回答简洁准确,包含代码示例。
""";
// 创建提示词函数
var promptFunction = kernel.CreateFunctionFromPrompt(promptTemplate, new HandlebarsPromptTemplateFactory());
// 调用提示词函数
var promptResult = await kernel.InvokeAsync(promptFunction, new() { ["input"] = "C#中如何实现异步编程" });
Console.WriteLine(promptResult.GetValue<string>());
开发自定义插件
除了调用模型的基础能力,我们还可以开发自定义插件,让模型能够调用本地的方法完成特定任务,比如查询本地数据、调用第三方接口等。以下是一个简单的自定义插件示例:
using Microsoft.SemanticKernel;
// 定义插件类
public class TimePlugin
{
[KernelFunction]
[Description("获取当前的本地时间")]
public string GetCurrentTime()
{
return DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
}
}
// 将插件注册到内核中
kernel.Plugins.AddFromType<TimePlugin>();
// 让模型调用插件
var pluginResult = await kernel.InvokePromptAsync("请告诉我现在的本地时间是多少");
Console.WriteLine(pluginResult.GetValue<string>());
常见问题与注意事项
- API密钥需要妥善保管,不要硬编码到代码中,建议使用环境变量或者配置文件存储。
- 不同模型的接口参数可能存在差异,对接私有模型时需要参考对应模型的接口文档调整配置。
- 调用模型接口时建议添加异常处理逻辑,避免网络异常或者服务异常导致程序崩溃。
- Semantic Kernel的版本更新较快,开发时建议参考对应版本的官方文档,避免接口不兼容的问题。
通过以上步骤,我们就可以在C#项目中完成Semantic Kernel对接AI大模型的完整流程,后续可以根据业务需求扩展更多能力,比如添加记忆管理、多模态模型调用、批量任务处理等功能,快速落地各类AI应用。
C#Semantic_KernelAI大模型对接C#开发AI应用修改时间:2026-06-09 03:33:22