以下是基于 Microsoft.Extensions.AI 框架接入 Ollama 本地大语言模型的保姆级教程,结合官方文档及实践案例整理而成:

一、环境准备

安装 Ollama

  • 前往 Ollama 官网 下载对应系统的安装包(Windows/macOS/Linux)29
  • 安装完成后,验证服务是否运行:
ollama --version 
  • 修改模型存储路径(避免占用C盘):
# Windows系统设置环境变量 
setx OLLAMA_MODELS "D:\ollama_models"

加载模型

  • 下载常用模型(如 Llama3、DeepSeek):
ollama pull llama3:8b    # 加载 8B 参数模型 
ollama pull deepseek-r1 # 国内模型需确认名称 
  • 查看已安装模型:
ollama list 

二、项目配置

创建 .NET 项目

dotnet new console -n OllamaDemo 
cd OllamaDemo 

安装 NuGet 包

dotnet add package Microsoft.Extensions.AI 
dotnet add package Microsoft.Extensions.AI.Ollama  # 官方扩展包 

配置文件

在 appsettings.json 中配置 Ollama 参数:

{
  "OllamaSettings": {
    "Endpoint": "http://localhost:11434", // Ollama默认端口 
    "ModelId": "llama3:8b" // 与本地已加载模型名称一致 
  }
}


三、服务注入与调用

服务注册

修改 Program.cs :

using Microsoft.Extensions.AI;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;

var config = new ConfigurationBuilder()
    .AddJsonFile("appsettings.json") 
    .Build();

var services = new ServiceCollection();
services.AddLogging(logging => logging.AddConsole());

// 关键:注册Ollama服务 
services.AddOllamaClient(config.GetSection("OllamaSettings"));

var provider = services.BuildServiceProvider();
var chatClient = provider.GetRequiredService<IChatClient>();

基础对话实现

var response = await chatClient.CompleteAsync("用C#实现快速排序");
Console.WriteLine(response.Message);


四、高级功能

多模型混合调用

同时使用 Ollama 本地模型和云端服务:

services.AddOllamaClient("LocalModel", config.GetSection("OllamaSettings"))
        .AddOpenAIClient("CloudModel", config.GetSection("OpenAISettings"));

// 按需调用 
var localResponse = await provider.GetRequiredService<IChatClient>("LocalModel").CompleteAsync(...);
var cloudResponse = await provider.GetRequiredService<IChatClient>("CloudModel").CompleteAsync(...);

性能调优

通过 ChatOptions 控制响应质量:

var options = new ChatOptions {
    Temperature = 0.3,  // 降低随机性 
    MaxTokens = 1000,   // 最大输出长度 
    Seed = 42           // 固定随机种子 
};
var response = await chatClient.CompleteAsync("问题内容", options);

五、调试与监控

日志查看

启动时添加 AddConsole() 日志组件,可观察请求详情:

info: Microsoft.Extensions.AI.Ollama[0]
      Request: POST http://localhost:11434/api/generate 
      Payload: {"model":"llama3:8b","prompt":"..."}

常见问题排查

  • 端口冲突:确认 Ollama 服务占用 11434 端口未被占用
  • 模型加载失败:通过 ollama list 确认模型名称拼写正确
  • 响应速度慢:尝试较小参数模型(如 7B 版本)


扩展场景

1、使用 Ollama WebUI 构建可视化界面,通过 1Panel 快速部署 8

# 使用1Panel模板安装 
1pctl app install ollama-webui 

2、本地知识库集成

参考开源项目 PaperAssistant ,实现 PDF 解析与问答 35


学习资源


注意事项

  • Ollama 对硬件有要求,建议至少 16GB 内存 + 支持 AVX2 指令集的 CPU 9
  • 国内模型需确认是否支持 Ollama 格式(如 DeepSeek 需特殊配置)11
  • Microsoft.Extensions.AI 仍处预览阶段,需关注 API 变更