目录
在当今快速发展的机器学习和人工智能领域,本地大语言模型(LLM)的集成和应用已成为一项关键技术。这种技术的灵活性在于其无需依赖云服务即可运行,为开发者提供了更多自主性。
Ollama作为一个开源的大语言模型平台,使得开发者能够在本地环境中与LLM进行直接交互,极大地扩展了开发的可能性。
本文将介绍如何利用Ollama在本地模式下运行Meta Llama 3——迄今为止最强大的开源大语言模型,并展示如何通过Semantic Kernel与LLM进行有效交互。
运行 LLM 服务
首先,我们需要从Ollama官网(https://ollama.com/download)下载适用于Windows的Ollama软件包。安装后,简单的命令行操作就能启动Ollama服务器,进而运行LLM服务。
ollama run llama3
接下来,我们将探讨如何将Semantic Kernel与Ollama服务进行集成。虽然Semantic Kernel本身并不直接支持Ollama服务,但我们可以借助OllamaSharp库实现两者之间的集成。
与 LLM 交互
OllamaSharp是一个.NET库,它提供了一种简便的方式,使得.NET开发者能够通过编程语言与Ollama API进行交互。这意味着开发者可以轻松地将聊天和文本生成功能整合到他们的应用程序中。
利用OllamaSharp,开发者可以充分发挥Semantic Kernel的强大功能,打造出能够理解自然语言并生成相关回复的AI系统。
这一过程涉及实现Semantic Kernel的IChatCompletionService接口,该接口负责根据聊天历史生成恰当的回复。
public class OllamaChatCompletionService : IChatCompletionService
{
public IReadOnlyDictionary<string, object?> Attributes => throw new NotImplementedException();
public async Task<IReadOnlyList<ChatMessageContent>> GetChatMessageContentsAsync(ChatHistory chatHistory, PromptExecutionSettings? executionSettings = null, Kernel? kernel = null, CancellationToken cancellationToken = default)
{
var ollama = new OllamaApiClient("http://localhost:11434", "llama3");
var chat = new Chat(ollama, _ => { });
var lastMessage = chatHistory.LastOrDefault();
string question = lastMessage.Content;
var chatResponse = "";
var history = (await chat.Send(question, CancellationToken.None)).ToArray();
var last = history.Last();
chatResponse = last.Content;
return new List<ChatMessageContent> { new ChatMessageContent(AuthorRole.Assistant, chatResponse) };
}
public IAsyncEnumerable<StreamingChatMessageContent> GetStreamingChatMessageContentsAsync(ChatHistory chatHistory, PromptExecutionSettings? executionSettings = null, Kernel? kernel = null, CancellationToken cancellationToken = default)
{
throw new NotImplementedException();
}
}
在系统初始化时,我们需要注册IChatCompletionService。
var builder = Kernel.CreateBuilder();
builder.Services.AddKeyedSingleton<IChatCompletionService>("ollamaChat", new OllamaChatCompletionService());
var kernel = builder.Build();
完成这一步骤后,开发者就可以开始与LLM进行交互,利用其强大的自然语言处理能力。
string prompt = "你是谁?";
var response = await kernel.InvokePromptAsync(prompt);
Console.WriteLine(response.GetValue<string>());
结论
OllamaSharp和Semantic Kernel的结合为.NET开发者开辟了新天地。使得开发者能够在不依赖云服务的情况下,构建与本地LLM交互的AI应用程序。
这一创新组合预示着本地化AI应用的光明未来,为开发者提供了无限的可能性。