目前国内还是很缺AI人才的,希望更多人能真正加入到AI行业,共同促进行业进步,增强我国的AI竞争力。想要系统学习AI知识的朋友可以看看我精心打磨的教程 http://blog.csdn.net/jiangjunshow,教程通俗易懂,高中生都能看懂,还有各种段子风趣幽默,从深度学习基础原理到各领域实战应用都有讲解,我22年的AI积累全在里面了。注意,教程仅限真正想入门AI的朋友,否则看看零散的博文就够了。

开篇:为什么本地AI突然成了香饽饽?

前阵子我在咖啡厅写代码,隔壁桌俩程序员聊得火热。一个说:"我们公司刚接了个活儿,客户要求所有数据处理必须在本地完成,不上云。"另一个问:"那AI咋搞?调用OpenAI API不就违规了吗?"第一个人神秘一笑:“上Ollama啊,笔记本都能跑。”

这段对话挺有意思。过去咱们玩AI,第一反应是找API Key,现在风向变了——数据不出域、模型本地跑成了刚需。不管是金融行业的合规要求,还是个人隐私的考量,亦或是单纯的"我就不想联网",本地部署大模型已经从极客玩具变成了生产工具。

但问题来了:网上一搜本地部署,满屏的Python脚本、Conda环境、CUDA版本地狱,看得.NET开发者直摇头。咱就想用熟悉的C#写个控制台程序,调个模型聊聊天,咋就这么难?

今天这篇就教你一套纯C#方案:Ollama负责本地跑模型,Semantic Kernel当"交通指挥员",全程无需Python环境,Windows、macOS、Linux通吃。


第一部分:先搞懂这俩"神器"是干嘛的

1.1 Ollama:你的本地模型"应用商店"

想象一下,如果Docker是专门用来装各种模型的,那就是Ollama。它是个开源工具(MIT许可证),干的事儿很简单:把大模型打包成标准化容器,一键下载,一键运行。

你不需要懂什么GGUF格式、量化位数、CUDA配置,就一条命令:

ollama run llama3.2

啪,一个3B参数的小模型就在你电脑上跑起来了,默认开在localhost:11434端口。

2026年主流可选的模型有哪些?(都是Ollama官方库真实存在的):

  • Llama 3.2(1B/3B):Meta出品,手机都能跑,适合快速原型
  • Llama 3.3(70B):性能对标405B大模型,但需要好显卡
  • Qwen3(0.6B到235B):阿里最新一代,中文理解能力强
  • Phi-4(14B):微软的小钢炮,代码能力惊艳
  • DeepSeek-R1(1.5B到671B):推理能力接近o1的开源模型
  • Gemma 3(2B/4B/12B/27B):Google出品,单GPU友好

1.2 Semantic Kernel:微软出的"AI胶水"

如果说Ollama是发动机,Semantic Kernel(简称SK)就是变速箱。这是微软开源的SDK,专门解决一个问题:怎么让AI模型和你的C#代码无缝协作。

它提供了一套统一的API,不管你后面接的是OpenAI、Azure OpenAI,还是本地的Ollama,前面的代码几乎不用改。就像ADO.NET对不同数据库的统一访问一样,SK就是AI界的"数据库抽象层"。

最新版本是1.54.0,已经内置了Ollama的官方连接器(虽然还在alpha阶段,但功能完整)。


第二部分:环境准备,别急着写代码

2.1 安装Ollama(这一步必须做)

去官网下载对应系统的安装包,Windows用户直接双击.exe,macOS用Homebrew:

brew install ollama

装完后,在命令行拉一个轻量级模型试试水。我推荐Qwen3的1.7B版本,中文支持好,4GB内存就能跑:

ollama pull qwen3:1.7b

下载完成后,启动服务:

ollama serve

看到Listening on 127.0.0.1:11434就说明成功了。这时候你可以另开个终端测试:

ollama run qwen3:1.7b

如果能聊天,说明地基打好了。

2.2 硬件配置参考(真实的,不吹牛)

别听网上那些"消费级显卡跑70B模型"的鬼话,我列个实际能跑的配置表:

模型规模 推荐模型 内存需求 显存需求 适用场景
轻量级 Qwen3:1.7b
Llama 3.2:3b
8GB 无(CPU跑)
4GB(GPU加速)
文本生成、简单问答
适合笔记本开发
进阶级 Phi-4:14b
Qwen3:14b
16GB 8GB+ 代码生成、复杂推理
需要GTX 1070以上
旗舰级 Llama 3.3:70b
DeepSeek-R1:32b
64GB 24GB+ 企业级应用
需RTX 3090/4090

重要提示:如果是Windows用户且没有NVIDIA显卡,Ollama会自动调用CPU运行,速度慢点但能用。苹果M系列芯片原生支持Metal加速,速度反而比同配置Intel快。


第三部分:写代码!三种集成方式任你选

3.1 方式一:纯Semantic Kernel原生(推荐)

这是微软官方支持的路子,NuGet包已经准备好:

dotnet new console -n LocalAI_Demo
cd LocalAI_Demo
dotnet add package Microsoft.SemanticKernel --version 1.54.0
dotnet add package Microsoft.SemanticKernel.Connectors.Ollama --version 1.54.0-alpha

Program.cs(完整可运行):

using Microsoft.SemanticKernel;
using Microsoft.SemanticKernel.ChatCompletion;
using Microsoft.SemanticKernel.Connectors.Ollama;

// 创建Kernel并配置Ollama
var builder = Kernel.CreateBuilder();
builder.AddOllamaChatCompletion(
    modelId: "qwen3:1.7b",  // 你下载的模型名
    endpoint: new Uri("http://localhost:11434")
);
var kernel = builder.Build();

// 获取聊天服务
var chatService = kernel.GetRequiredService<IChatCompletionService>();

// 维护对话历史(这个对象会自动管理上下文)
var history = new ChatHistory();
history.AddSystemMessage("你是一个专业的.NET技术顾问,回答简洁且幽默。");

Console.WriteLine("本地AI已就绪,开始聊天(输入exit退出):\n");

while (true)
{
    Console.Write("你:");
    var input = Console.ReadLine();
    if (string.IsNullOrWhiteSpace(input) || input.ToLower() == "exit")
        break;

    history.AddUserMessage(input);

    // 流式输出,打字机效果
    Console.Write("AI:");
    var response = "";
    await foreach (var chunk in chatService.GetStreamingChatMessageContentsAsync(history))
    {
        Console.Write(chunk.Content);
        response += chunk.Content;
    }

    history.AddAssistantMessage(response);
    Console.WriteLine("\n");
}

代码关键点解释:

  1. AddOllamaChatCompletion是SK 1.54版本新增的扩展方法,专门对接Ollama原生API
  2. ChatHistory对象会自动维护多轮对话的上下文,不用你自己拼字符串
  3. GetStreamingChatMessageContentsAsync实现流式输出,大段文字不会卡顿

3.2 方式二:OpenAI兼容模式(灵活度高)

Ollama有个隐藏技能:它同时提供了OpenAI格式的API端点(/v1/chat/completions)。这意味着你可以用SK的OpenAI连接器来访问本地模型:

dotnet add package Microsoft.SemanticKernel.Connectors.OpenAI --version 1.54.0

代码差异点:

// 注意端点后面要加/v1
builder.AddOpenAIChatCompletion(
    modelId: "llama3.2",
    apiKey: "ollama",  // 本地运行随便填,但不能为空
    endpoint: new Uri("http://localhost:11434/v1")
);

这种方式的好处是:如果你的项目之前对接过OpenAI,改个URL就能切到本地模型,零成本迁移。


3.3 方式三:原生OllamaSharp(控制力最强)

如果你想用Ollama的一些高级功能(比如查看本地已下载的模型列表、拉取新模型、查看模型详情),可以用社区维护的OllamaSharp库,这是Ollama官方推荐的.NET SDK。

dotnet add package OllamaSharp --version 5.0.0

列出本地模型示例:

using OllamaSharp;

var client = new OllamaApiClient("http://localhost:11434");

// 获取本地已下载的模型
var models = await client.ListLocalModelsAsync();
Console.WriteLine("你电脑里住着这些模型:");
foreach (var model in models)
{
    Console.WriteLine($"- {model.Name} ({model.Size / 1024 / 1024}MB)");
}

// 实时拉取新模型(带进度条)
await foreach (var status in client.PullModelAsync("phi4:latest"))
{
    Console.Write($"\r下载进度:{status.Percent}%");
}

第四部分:进阶玩法,让本地AI更"聪明"

4.1 加上"外挂":文本嵌入与RAG

本地模型不仅能聊天,还能做检索增强生成(RAG)。比如你有一堆技术文档,想让AI基于这些文档回答问题,而不是瞎编。

第一步:下载嵌入模型

ollama pull nomic-embed-text

这是专门把文字变成向量的模型,占用很小(几百MB)。

第二步:C#代码实现简易RAG

using Microsoft.SemanticKernel.Embeddings;
using Microsoft.SemanticKernel.Connectors.Ollama;

// 配置嵌入服务
builder.AddOllamaTextEmbeddingGeneration(
    modelId: "nomic-embed-text",
    endpoint: new Uri("http://localhost:11434")
);
var kernel = builder.Build();
var embeddingService = kernel.GetRequiredService<ITextEmbeddingGenerationService>();

// 假设这是你的技术文档片段
var documents = new[]
{
    "Semantic Kernel支持函数调用,可以让AI执行C#方法",
    "Ollama的Windows版本支持GPU加速,需要CUDA 11.8+",
    "Qwen3模型支持128K上下文长度,适合长文档分析"
};

// 把文档转成向量(这一步本地完成,数据不出电脑)
var embeddings = await embeddingService.GenerateEmbeddingsAsync(documents);
Console.WriteLine($"已生成{embeddings.Count}个文档向量,每个维度{embeddings[0].Length}");
// 输出:已生成3个文档向量,每个维度768

有了向量,你就可以做相似度搜索,把最相关的文档片段塞给大模型作为上下文,实现"基于私有数据的问答"。


4.2 函数调用:让AI能操作你的代码

Semantic Kernel最酷的功能是Function Calling——AI可以决定调用你写的C#方法。比如让AI查天气,实际上触发的是你本地写的API。

定义一个可被AI调用的函数:

using System.ComponentModel;
using Microsoft.SemanticKernel;

public class WeatherPlugin
{
    [KernelFunction("get_weather")]
    [Description("获取指定城市的当前天气")]
    public string GetWeather([Description("城市名称,如北京、上海")] string city)
    {
        // 这里可以接真实天气API,示例返回模拟数据
        return $"{city}当前天气:晴天,25℃";
    }
}

注册插件并调用:

// 注册插件
builder.Plugins.AddFromType<WeatherPlugin>();
var kernel = builder.Build();

// 开启自动函数调用
var settings = new OllamaPromptExecutionSettings { ToolCallBehavior = ToolCallBehavior.AutoInvokeKernelFunctions };
var result = await chatService.GetChatMessageContentAsync(
    "今天北京天气怎么样?",
    settings,
    kernel
);
Console.WriteLine(result.Content);  // 会显示插件返回的天气信息

注意:不是所有本地模型都支持函数调用。目前实测Qwen3、Llama 3.2/3.3、Phi-4支持得比较好,小模型可能会胡言乱语。


第五部分:踩坑实录与性能调优

5.1 模型下载慢?换镜像源

Ollama默认从官网下载模型,国内速度感人。可以在系统环境变量里设置镜像:

Windows PowerShell

$env:OLLAMA_HOST="0.0.0.0"
$env:OLLAMA_MODELS="D:\OllamaModels"  # 模型存D盘,省C盘空间

或者使用社区维护的国内镜像(具体地址请自行搜索可靠的社区镜像站)。

5.2 显存爆了?上量化版

如果你跑14B模型时爆显存,Ollama其实会自动帮你把部分权重放到内存(CPU offload),但速度会变慢。更好的方案是下载量化版:

4bit量化版,体积减半,速度更快

ollama pull qwen3:14b-q4_K_M

Ollama的模型标签(Tags)里通常包含量化信息,如q4_0(4位量化)、q8_0(8位量化),在官网模型页面能看到详细说明。

5.3 并发性能差?这是正常的

本地模型不像云API那样有集群支持。Ollama默认是单线程处理请求,如果有并发需求,需要:

  1. 启动多个Ollama实例(改端口)
  2. 或者使用vLLM(更适合高并发,但配置复杂)

对于个人开发或者企业内部工具,单线程通常够用。


结尾:本地AI的未来已来

写完这篇,我特意看了一眼Task Manager——我的笔记本上,Ollama进程正安安静静占用着6GB内存,跑着Qwen3 14B模型。不需要VPN,没有API调用限制,也不需要担心数据泄露。

对于.NET开发者来说,这套技术栈的意义在于:我们终于可以把AI能力真正集成到自己的桌面应用、Windows服务或者ASP.NET Core后端里,而不是永远依赖外部API。

微软的Semantic Kernel团队还在快速迭代,据说下一个稳定版会进一步优化本地模型的Agent能力。而Ollama社区更是热闹,连OpenAI开源的GPT-OSS(20B和120B版本)都已经支持一键下载。

技术的门槛在降低,创意的门槛在升高。现在,打开你的Visual Studio,试试在本地跑起第一个AI应用吧。毕竟,能在断网情况下还稳定运行的AI,才是真正意义上的"个人智能助手"。


目前国内还是很缺AI人才的,希望更多人能真正加入到AI行业,共同促进行业进步,增强我国的AI竞争力。想要系统学习AI知识的朋友可以看看我精心打磨的教程 http://blog.csdn.net/jiangjunshow,教程通俗易懂,高中生都能看懂,还有各种段子风趣幽默,从深度学习基础原理到各领域实战应用都有讲解,我22年的AI积累全在里面了。注意,教程仅限真正想入门AI的朋友,否则看看零散的博文就够了。

在这里插入图片描述

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐