首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >semantic kernel调用ollama接口

semantic kernel调用ollama接口

作者头像
拓荒者IT
发布2025-04-09 08:00:51
发布2025-04-09 08:00:51
17200
代码可运行
举报
运行总次数:0
代码可运行

不积跬步无以至千里,不积小流无以成江海!--《荀子 劝学》

我是对本地大模型有执念的!因为它安全性好,数据完全被自己掌控。在前面的内容里面分享了如何使用OllamaSharp访问ollama接口,今天分享如何使用Semantic Kernel来访问ollama接口。

关于Semantic Kernel

Semantic Kernel(SK) 是一款模型无关的SDK,能够帮助开发者快速构建、编排和部署AI代理及多代理系统。无论是开发简单的聊天机器人,还是构建复杂的多代理工作流,该工具都能以企业级的可靠性和灵活性提供所需支持。

地址:https://github.com/microsoft/semantic-kernel

为什么使用SK?

我们可以直接使用类似OllamaSharp这样的SDK来调用某个大模型的接口,但是如果我们即要访问Ollama里面的模型,又要访问OpenAI的接口,还要兼容DeepSeek的接口,这个时候就需要一个集成开发框架了。在.net平台,最好用且功能最全的,目前只有SK(如果还有其它框架请不吝赐教)。

使用SK

首先要添加框架引用:

代码语言:javascript
代码运行次数:0
运行
复制
dotnet add package Microsoft.SemanticKernel

由于我们要访问Ollama,因此还需要添加SK的Ollama连接器:

代码语言:javascript
代码运行次数:0
运行
复制
dotnet add package Microsoft.SemanticKernel.Connectors.Ollama

注意:为了避免编码时收到SKEXP0070、SKEXP0010这种错误,我们先在项目里面把他们屏蔽掉。

代码语言:javascript
代码运行次数:0
运行
复制
<PropertyGroup>
    ......
	<NoWarn>$(NoWarn);SKEXP0001,SKEXP0010,SKEXP0070</NoWarn>
</PropertyGroup>

初始化SK

代码语言:javascript
代码运行次数:0
运行
复制
var endpoint = new Uri("http://localhost:11434");
var ollama = new OllamaApiClient(endpoint);

// Create a kernel builder
var builder = Kernel.CreateBuilder().AddOllamaChatCompletion(ollama);

// Build the kernel
Kernel kernel = builder.Build();

添加和使用插件

我们可以把sk里面的插件理解成function calling里面的function,本质上都是大预言模型里面的tools节点

代码语言:javascript
代码运行次数:0
运行
复制
kernel.Plugins.AddFromType<DateTimePlugin>("DateTimePlugin");

var executionSettings = new OllamaPromptExecutionSettings()
{
    FunctionChoiceBehavior = FunctionChoiceBehavior.Auto(),
};

代码说明:

  1. 添加插件,插件定义见下文
  2. 设置插件的执行方式,我们采用自动选择和执行插件

Plugin的定义

代码语言:javascript
代码运行次数:0
运行
复制
internal class DateTimePlugin
{
    [KernelFunction("get_current_datetime")]
    [Description("Get current datetime and day of week")]
    public Task<string> GetCurrentDateTime()
    {
        return Task.FromResult(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss ddd"));
    }
}

创建对话

代码语言:javascript
代码运行次数:0
运行
复制
var chatService = kernel.GetRequiredService<IChatCompletionService>();

Console.WriteLine();
Console.WriteLine($"Chat with {ollama.SelectedModel}");

var systemPrompt = "You are a helpful assistant that knows about AI.";
var chatHistory = new ChatHistory(systemPrompt);
Console.WriteLine($">>System: {systemPrompt}");

while (true)
{
    Console.Write(">>User: ");
    var message = Console.ReadLine();

    chatHistory.AddUserMessage(message);
    Console.Write(">>Assistant: ");

    var reply = await chatService.GetChatMessageContentAsync(chatHistory,
        executionSettings: executionSettings,
        kernel: kernel);
    Console.WriteLine(reply);

    // Add the message from the agent to the chat history
    chatHistory.AddMessage(reply.Role, reply.Content ?? string.Empty);
}

代码说明:

  1. 首先在这段代码中创建一个chatService,用来和大模型进行对话
  2. systemPrompt是我们预设的大模型系统级别指令,通过systemPrompt可以更好的控制大模型的输出
  3. chatHistory用来存储会话历史
  4. while循环中进行对话,同时将user和assistant的对话内容临时存储在chatHistory

总结

以上就是今天分享的全部内容,主要介绍如何使用semantic kernel,并通过sk来访问ollama提供的大模型服务。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-04-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 关于Semantic Kernel
    • 为什么使用SK?
  • 使用SK
  • 初始化SK
  • 添加和使用插件
    • Plugin的定义
  • 创建对话
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档