【semantic Kernel】对接 Ollama
在 chatGPT 的推动下。LLM 简直火出天际,各行各业都在蹭。听说最近 meta 开源的 llama3 模型可以轻松在普通 PC 上运行,这让我也忍不住来蹭一层。以下是使用 ollama 试玩 llama3 的一些记录。
什么是 llama
LLaMA(Large Language Model Meta AI)是Meta开发的大规模预训练语言模型,基于Transformer架构,具有强大的自然语言处理能力。它在文本生成、问答系统、机器翻译等任务中表现出色。LLaMA模型有多个规模,从几亿到上千亿参数,适用于不同的应用场景。用户可以通过开源平台如Hugging Face获取LLaMA模型,并根据需要进行微调。LLaMA的灵活性和可扩展性使其在自然语言处理领域具有广泛的应用前景。
什么是 ollama
Ollama是一款用于本地安装和管理大规模预训练语言模型的工具。它简化了模型的下载、安装和使用流程,支持多种流行的模型如GPT-4和llama。Ollama通过易于使用的命令行界面和API,帮助用户快速部署和运行自然语言处理任务。它还支持多GPU配置和模型微调,适应各种计算资源和应用需求。总之,Ollama为研究人员和开发者提供了一个高效、灵活的本地化大模型解决方案。
下载 ollama
ollama 官网提供了各种平台的安装包,那么这里选择 windows 系统的。以下是下载地址:https://ollama.com/download
下载windows版本的,一路 next 就行了。
以在命令行下执行
ollama -v
下载模型并运行
安装好 ollama 之后我们需要把训练好的模型拉到本地,然后才能运行它。
查找 模型
ollama 提供了一个页面供用户查询可以使用的开源模型。
https://ollama.com/search?q=&p=1
可以看到主流的开源 LLM 几乎都能找到。什么 llama3 啊,phi3 啊,国产的 qwen2 啊。让我们点击 llama3 看看详情。
里面可以选模型的参数大小。这里我们选 8b 试一下。模型大小是 4.7 GB。复制右上角的命令并在命令行运行:
ollama run llama3:8b
对话
下载完成后命令行就会跳转到对话模型,等待你输入问题。随便先来一个吧。
使用 SemanticKernel 对接 Ollama
安装 SK 及 ollama connector
首先在本地创建一个 Console 项目,然后安装以下包:
dotnet add package Microsoft.SemanticKernel --version 1.21.1
dotnet add package Microsoft.SemanticKernel.Connectors.Ollama --version 1.21.1-alpha
注意:ollama connector 还是 alpha 版本,请勿用于生产
代码:
var endpoint = new Uri("http://localhost:11434");
var modelId = "llama3:8b";
var builder = Kernel.CreateBuilder();
#pragma warning disable SKEXP0070
builder.Services.AddScoped<IChatCompletionService>(_ => new OllamaChatCompletionService(modelId, endpoint));
#pragma warning restore SKEXP0070
var kernel = builder.Build();
var chatService = kernel.GetRequiredService<IChatCompletionService>();
var history = new ChatHistory();
history.AddSystemMessage("This is a llama3 assistant ...");
while (true)
{
Console.Write("You:");
var input = Console.ReadLine();
if (string.IsNullOrWhiteSpace(input))
{
break;
}
history.AddUserMessage(input);
var contents = await chatService.GetChatMessageContentsAsync(history);
foreach (var chatMessageContent in contents)
{
var content = chatMessageContent.Content;
Console.WriteLine($"Ollama: {content}");
history.AddMessage(chatMessageContent.Role, content ?? "");
}
}