一、什么是 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
下载后:
- 在项目根目录新建
Models文件夹 - 将
.gguf模型放入其中 - 文件属性 → 复制到输出目录:如果较新则复制
三、基础示例:一次性生成文本(可直接复制)
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 |
对话上下文,实现多轮聊天 |
七、运行方法
- 复制代码
- 替换模型路径
- 运行
bash
dotnet run
八、支持模型列表
LlamaSharp 支持所有 GGUF 格式 模型:
- Llama 2 / Llama 3
- Qwen(通义千问)
- Mistral
- Gemma
- Phi 2 / 3
- Baichuan
- ChatGLM