如何在C#/VB.NET中用Microsoft Semantic Kernel加载Huggingface模型
在C#/.NET中通过Semantic Kernel加载本地Hugging Face LLM的实现步骤
方案一:借助Ollama托管本地模型(推荐)
这种方式无需复杂的模型加载代码,通过Ollama将本地模型转为HTTP服务,再用Semantic Kernel对接,操作门槛更低。
步骤1:部署本地模型服务
- 安装Ollama工具,拉取适合本地运行的量化模型(如
mistral或llama2:7b-chat-q4_0),终端执行:ollama pull mistral - 启动本地模型服务:
服务默认运行在ollama servehttp://localhost:11434,无需额外配置即可兼容OpenAI API格式。
步骤2:安装Semantic Kernel依赖包
在.NET项目中安装以下NuGet包:
Install-Package Microsoft.SemanticKernel Install-Package Microsoft.SemanticKernel.Connectors.OpenAI
步骤3:编写C#调用代码
using Microsoft.SemanticKernel; using Microsoft.SemanticKernel.ChatCompletion; // 构建Kernel并配置本地模型端点 var kernelBuilder = Kernel.CreateBuilder(); kernelBuilder.AddOpenAIChatCompletion( modelId: "mistral", // 对应Ollama拉取的模型名称 apiKey: "ollama", // Ollama无需真实密钥,填任意字符串即可 endpoint: new Uri("http://localhost:11434/v1") ); var kernel = kernelBuilder.Build(); // 获取聊天完成服务并发起对话 var chatCompletionService = kernel.GetRequiredService<IChatCompletionService>(); var chatHistory = new ChatHistory(); chatHistory.AddUserMessage("解释一下面向对象编程的三大特性"); var response = await chatCompletionService.GetChatMessageContentAsync(chatHistory); Console.WriteLine(response.Content);
方案二:直接通过Hugging Face .NET库加载本地模型
这种方式无需额外服务,直接在代码中加载本地模型文件,但需要处理模型兼容性和硬件资源限制。
步骤1:安装必要依赖包
Install-Package Microsoft.SemanticKernel Install-Package HuggingFace.Transformers Install-Package Microsoft.ML.OnnxRuntime
步骤2:准备本地模型文件
从Hugging Face Hub下载完整的模型文件(包含config.json、model.onnx等核心文件),保存到本地目录(如./local-models/mistral-7b-q4)。
步骤3:编写C#加载与调用代码
using Microsoft.SemanticKernel; using HuggingFace.Transformers; using Microsoft.SemanticKernel.PromptTemplates.Handlebars; // 初始化Semantic Kernel var kernel = Kernel.CreateBuilder().Build(); // 加载本地模型(指定CPU/GPU推理,GPU需配置CUDA环境) var textGenModel = new TextGenerationModel( modelPath: "./local-models/mistral-7b-q4", onnxRuntimeProvider: "CPU" ); // 将模型注册为Semantic Kernel的聊天服务 kernel.Services.AddSingleton<IChatCompletionService>(new HuggingFaceChatCompletionService(textGenModel)); // 创建Prompt模板并执行推理 var promptFunction = kernel.CreateFunctionFromPrompt( "{{$userQuery}}", new HandlebarsPromptTemplateFactory() ); var result = await kernel.InvokeAsync(promptFunction, new() { { "userQuery", "推荐一本适合新手的Python入门书籍" } }); Console.WriteLine(result.ToString());
注意事项
- 本地模型对硬件要求较高,7B参数的量化模型至少需要8GB以上内存,优先选择Q4/Q5量化版本减少资源占用。
- 方案二中的
HuggingFace.Transformers库对部分新模型的支持可能有限,遇到兼容性问题建议切换方案一。 - 确保项目使用.NET 6.0及以上版本,Semantic Kernel对低版本.NET支持不足。
内容的提问来源于stack exchange,提问作者Xennon
相关产品推荐
相关产品推荐

