.NET 实战 LlamaSharp:本地运行开源大模型

一、什么是 LlamaSharp

LlamaSharp 是 llama.cpp 的 .NET 官方绑定库 ,让你在 纯本地、无外网、无 API 费用 的情况下运行 Llama 3、Qwen、Mistral、Gemma、Phi 等大模型。

特点:

  • 纯 CPU / GPU 均可运行
  • 支持 GGUF 量化模型(4-bit/8-bit)
  • 支持流式输出
  • 支持多轮对话上下文
  • 跨平台:Windows / Linux / macOS
  • .NET 6/7/8 全支持

二、环境搭建(一步到位)

1. 创建项目

bash 复制代码
dotnet new console -n LlamaSharpDemo
cd LlamaSharpDemo

2. 安装 NuGet 包(直接复制)

bash 复制代码
dotnet add package LlamaSharp

如需 NVIDIA CUDA 加速

bash 复制代码
dotnet add package LlamaSharp.Runtime.Cuda

3. 下载模型(GGUF 格式)

推荐下载站点:

https://huggingface.co/models?search=gguf

新手推荐模型:

  • Llama 3 8B Instruct q4_k_m.gguf
  • Qwen 7B Instruct q4_k_m.gguf

下载后:

  1. 在项目根目录新建 Models 文件夹
  2. .gguf 模型放入其中
  3. 文件属性 → 复制到输出目录:如果较新则复制

三、基础示例:一次性生成文本(可直接复制)

csharp 复制代码
using LlamaSharp;

// 模型路径(自行修改为你的模型名称)
var modelPath = @"Models\llama-3-8b-instruct-q4_k_m.gguf";

// 模型配置
var parameters = new ModelParams(modelPath)
{
    ContextSize = 2048,
    GpuLayerCount = 0 // 使用CPU设0,NVIDIA可设20/50
};

// 加载模型
using var model = LlamaModel.LoadFromParams(parameters);
using var engine = new InferenceEngine(model);

// 提示词
var prompt = "请用C#写一个单例模式,线程安全";

// 生成
var result = engine.Generate(prompt, new GenerateParams
{
    MaxTokens = 1024,
    Temperature = 0.3f
});

// 输出
Console.WriteLine("=== AI 回答 ===");
Console.WriteLine(result);

四、高级示例:流式输出(逐字打印)

csharp 复制代码
using LlamaSharp;

var modelPath = @"Models\llama-3-8b-instruct-q4_k_m.gguf";

var parameters = new ModelParams(modelPath)
{
    ContextSize = 2048,
    GpuLayerCount = 0
};

using var model = LlamaModel.LoadFromParams(parameters);
using var engine = new InferenceEngine(model);

Console.WriteLine("请输入问题:");
var userInput = Console.ReadLine();

Console.WriteLine("\n=== AI 正在回复 ===");

await foreach (var token in engine.GenerateStreamingAsync(userInput, new GenerateParams
{
    MaxTokens = 2048,
    Temperature = 0.5f
}))
{
    Console.Write(token);
}

Console.WriteLine("\n=== 完成 ===");

五、企业级示例:多轮对话机器人(带上下文记忆)

这是生产可用版本,支持:

  • 系统提示词
  • 上下文记忆
  • 流式输出
  • 无限聊天(自动管理上下文)
csharp 复制代码
using LlamaSharp;

// 模型路径
var modelPath = @"Models\llama-3-8b-instruct-q4_k_m.gguf";

var parameters = new ModelParams(modelPath)
{
    ContextSize = 4096,
    GpuLayerCount = 0
};

using var model = LlamaModel.LoadFromParams(parameters);
using var engine = new InferenceEngine(model);

// 初始化对话历史
var chat = new ChatHistory();

// 系统提示词(定义AI性格)
chat.AddMessage(ChatRole.System, """
你是一个专业的.NET编程助手,回答简洁、专业、带代码示例,不啰嗦。
""");

Console.WriteLine("=== .NET 本地AI聊天机器人(输入 exit 退出)===");

while (true)
{
    Console.Write("\n你:");
    var input = Console.ReadLine();

    if (input?.ToLower() == "exit") break;
    if (string.IsNullOrWhiteSpace(input)) continue;

    // 添加用户消息
    chat.AddMessage(ChatRole.User, input);

    // AI 回复
    Console.Write("AI:");
    var reply = "";

    await foreach (var token in engine.GenerateChatStreamingAsync(chat, new GenerateParams
    {
        MaxTokens = 2048,
        Temperature = 0.4f
    }))
    {
        reply += token;
        Console.Write(token);
    }

    // 保存AI回复到上下文
    chat.AddMessage(ChatRole.Assistant, reply);
    Console.WriteLine();
}

六、关键参数说明(必看)

参数 说明
ContextSize 上下文窗口,越大记忆越强
GpuLayerCount GPU 加速层数,CPU 设 0
MaxTokens 最大生成长度
Temperature 0=最确定,1=最随机
ChatHistory 对话上下文,实现多轮聊天

七、运行方法

  1. 复制代码
  2. 替换模型路径
  3. 运行
bash 复制代码
dotnet run

八、支持模型列表

LlamaSharp 支持所有 GGUF 格式 模型:

  • Llama 2 / Llama 3
  • Qwen(通义千问)
  • Mistral
  • Gemma
  • Phi 2 / 3
  • Baichuan
  • ChatGLM

相关推荐
码农刚子15 小时前
用 .NET 8 + uni-app 做一套多租户畜牧 SaaS:我们在秦巴牧云踩过的 6 个坑
uni-app·.net·saas
宝桥南山2 天前
Blazor Web Assembly - 体验一下Authentication State从Server共享给Client
microsoft·微软·c#·asp.net·.net·.netcore
rockey6273 天前
C#脚本引擎之AScript与DynamicExpresso对比
c#·.net·script·动态脚本
qq_548612453 天前
.NET 平台报表工具汇总(.NET Framework /.NET6-8,中国式复杂报表、Web 嵌入、填报、导出打印)
前端·.net
公子小六3 天前
基于.NET的Windows窗体编程之WinForms音频控件
windows·microsoft·c#·.net·音视频·winforms
界面开发小八哥3 天前
界面控件DevExpress Blazor v26.1新版亮点 - Navigation(导航)
javascript·.net·界面控件·blazor·devexpress·ui开发
用户298698530144 天前
C# 实现 PowerPoint 多格式转换:图片、PDF 与 SVG 实战
c#·.net·svg
李高钢4 天前
【WPF】从 Avalon 到 .NET 10:WPF 平台演进史与特性全览
.net·wpf
刚子编程5 天前
用 Inno Setup 把 .NET 程序打包成安装包:从零到发布的完整指南
.net·inno setup·码农刚子·.net 程序打包·安装脚本编写
界面开发小八哥5 天前
界面控件DevExpress Blazor v26.1新版亮点 - TreeList & 数据编辑器
javascript·编辑器·.net·界面控件·blazor·devexpress·用户界面