在SemanticKernel的入门例子中:

// Import packages
using Microsoft.SemanticKernel;
using Microsoft.SemanticKernel.ChatCompletion;
using Microsoft.SemanticKernel.Connectors.OpenAI; // Create a kernel with Azure OpenAI chat completion
var builder = Kernel.CreateBuilder().AddAzureOpenAIChatCompletion(modelId, endpoint, apiKey); // Add enterprise components
builder.Services.AddLogging(services => services.AddConsole().SetMinimumLevel(LogLevel.Trace)); // Build the kernel
Kernel kernel = builder.Build();
var chatCompletionService = kernel.GetRequiredService<IChatCompletionService>(); // Add a plugin (the LightsPlugin class is defined below)
kernel.Plugins.AddFromType<LightsPlugin>("Lights"); // Enable planning
OpenAIPromptExecutionSettings openAIPromptExecutionSettings = new()
{
ToolCallBehavior = ToolCallBehavior.AutoInvokeKernelFunctions
}; // Create a history store the conversation
var history = new ChatHistory(); // Initiate a back-and-forth chat
string? userInput;
do {
// Collect user input
Console.Write("User > ");
userInput = Console.ReadLine(); // Add user input
history.AddUserMessage(userInput); // Get the response from the AI
var result = await chatCompletionService.GetChatMessageContentAsync(
history,
executionSettings: openAIPromptExecutionSettings,
kernel: kernel); // Print the results
Console.WriteLine("Assistant > " + result); // Add the message from the agent to the chat history
history.AddMessage(result.Role, result.Content ?? string.Empty);
} while (userInput is not null)

只要使用:

// Enable planning
OpenAIPromptExecutionSettings openAIPromptExecutionSettings = new()
{
ToolCallBehavior = ToolCallBehavior.AutoInvokeKernelFunctions
};

就可以实现本地函数的调用了,这很酷,也是最吸引我的地方。

但我在实践的过程中,发现直接这样子,只有OpenAI的模型与Moonshot AI可以用,而其他模型的本地函数调用都无效。

如何能使用一个开源的模型实现本地函数调用,那就非常酷。

在SemanticKernel的讨论区,我也发现世界各地的人也都有这种需求,不想只用OpenAI,也要使用其他的模型,在SemanticKernel中实现本地函数调用。

在这个讨论区,官方最初将这个转化为一个问题:

点进这个问题:

这是对应的翻译:

我们的连接器(OpenAI、Mistral、Gemini)支持函数调用功能,但并非特定 AI 提供商的每个模型都支持它。您需要查看 AI 提供商的官方文档,了解您要使用的具体模型及其功能。看起来 Phi-3 不支持开箱即用的函数调用。虽然,我认为可以对其进行微调以支持这一点。对于电灯开关插件示例,我们建议使用支持开箱即用函数调用的 AI 模型,以便快速上手。下面是 Azure OpenAI 中的可用模型、其功能和可用区域的列表:

https://learn.microsoft.com/en-us/azure/ai-services/openai/concepts/models

我将关闭此问题,因为它与电灯开关插件无关。如果您看到任何其他问题,请随时打开一个新的。谢谢!

有一位老哥推荐了一个项目能够实现这个目的:

对应的翻译:

看看这个项目 https://github.com/Jenscaasen/UniversalLLMFunctionCaller。通过提示模板,它尝试模仿本机函数调用。我尝试了 ollama 和 phi3 mini、llama3,效果很好。

我也去尝试使用这个项目:

简介的翻译如下:

一个集成到语义内核中的计划器,可以在所有基于LLMs聊天(Mistral、Bard、Claude、LLama 等)上实现函数调用。

根据这个项目提供的方法我去尝试了一下:

把这个项目中的类,添加到自己的项目中:

添加这两个插件到自己的项目中,用于测试:

构建kernel:

 var handler = new OpenAIHttpClientHandler();
var builder = Kernel.CreateBuilder()
.AddOpenAIChatCompletion(
modelId: "",
apiKey: "",
httpClient: new HttpClient(handler));
_kernel = builder.Build();
_kernel.ImportPluginFromType<TimePlugin>("Time");
_kernel.ImportPluginFromType<MathPlugin>("Math");

测试代码:

   UniversalLLMFunctionCaller planner = new(_kernel);
string ask = "What is the current hour number, plus 6?";
Debug.WriteLine(ask);
string result = await planner.RunAsync("What is the current hour number, plus 6?");
Debug.WriteLine(result);

Qwen/Qwen2-7B-Instruct的输出:

测试的时候是18:09分,18+6 =24,成功执行了本地函数用于获取当前时间与进行加法。

但并不是每个模型使用这个都能成功进行本地函数调用。

根据硅基流动提供的模型,我根据这个demo进行测试,可行的结果如下:

Qwen/Qwen2-72B-Instruct

Qwen/Qwen2-7B-Instruct

Qwen/Qwen1.5-110B-Chat

Qwen/Qwen1.5-32B-Chat

Qwen/Qwen1.5-7B-Chat

deepseek-ai/DeepSeek-V2-Chat

01-ai/Yi-1.5-34B-Chat-16K

可供遇到这个问题的人参考。

如何让其他模型也能在SemanticKernel中调用本地函数的更多相关文章

  1. Entity Framework 6 Recipes 2nd Edition(10-5)译 -> 在存储模型中使用自定义函数

    10-5. 在存储模型中使用自定义函数 问题 想在模型中使用自定义函数,而不是存储过程. 解决方案 假设我们数据库里有成员(members)和他们已经发送的信息(messages) 关系数据表,如Fi ...

  2. laravel模型中非静态方法也能静态调用的原理

    刚开始用laravel模型时,为了方便一直写静态方法,进行数据库操作. <?php namespace App\Models; use Illuminate\Database\Eloquent\ ...

  3. 模型汇总24 - 深度学习中Attention Mechanism详细介绍:原理、分类及应用

    模型汇总24 - 深度学习中Attention Mechanism详细介绍:原理.分类及应用 lqfarmer 深度学习研究员.欢迎扫描头像二维码,获取更多精彩内容. 946 人赞同了该文章 Atte ...

  4. Tensorflow 保存模型 & 在java中调用

    本节涉及: 保存TensorFlow 的模型供其他语言使用 java中调用模型并进行预测计算 一.保存TensorFlow 的模型供其他语言使用 如果用户选择“y” ,则执行下面的步骤: 判断程序执行 ...

  5. Keras学习笔记二:保存本地模型和调用本地模型

    使用深度学习模型时当然希望可以保存下训练好的模型,需要的时候直接调用,不再重新训练 一.保存模型到本地 以mnist数据集下的AutoEncoder 去噪为例.添加: file_path=" ...

  6. 理解 React Hooks 心智模型:必须按顺序、不能在条件语句中调用的规则

    前言 自从 React 推出 hooks 的 API 后,相信大家对新 API 都很喜欢,但是它对你如何使用它会有一些奇怪的限制.比如,React 官网介绍了 Hooks 的这样一个限制: 不要在循环 ...

  7. IOS网络第二天 - 03-JSON显示数据,调用本地视频播放,数据转模型

    ********HMVideosViewController.m #import "HMVideosViewController.h" #import "MBProgre ...

  8. Java基础之在窗口中绘图——使用模型/视图体系结构在视图中绘图(Sketcher 1 drawing a 3D rectangle)

    控制台程序. 在模型中表示数据视图的类用来显示草图并处理用户的交互操作,所以这种类把显示方法和草图控制器合并在一起.不专用于某个视图的通用GUI创建和操作在SketcherFrame类中处理. 模型对 ...

  9. phpcms 在后台增加了一个模型的话,在数据库中就会相应的增加数据库表

    在phpcms后台管理系统中,我们如果增加一个新的模型的话,例如名为:测试模型,英文名:test 在添加完成后,我们在数据库中发现增加了两个数据表:v9_test,v9_test_data;

  10. (01)odoo模型中调用窗体动作

    *模型代码  addons/stock/stock.py  ----------------   #移库单执行移库动作(弹出详细框)    @api.cr_uid_ids_context    def ...

随机推荐

  1. 记录一次安装PIDtoolBox报缺少jvm.dll问题。

    背景: 1.在安装PIDtoolBox时,报 安装程序错误 安装程序无法启动JVM. could not find file C:\Users\AdministratorAppData\Local\M ...

  2. [POJ2891]Strange Way to Express Integers公式推导

    没啥事干,想着推个式子玩玩. 题目链接 题意不过多赘述,直接上过程: 由题意得 \[\begin{cases} x\equiv a_1\,(mod\,\, n_1) \\ x\equiv a_2\,( ...

  3. IDEA的Ctrl+Enter补全代码失效

    前景提示 IDEA有个ctrl+enter可以补全代码的功能,但是,今天突然失效了,原来是这个问题. 修改配置 进入setting修改 进入Edit-->找到Intertions,搜素Intro ...

  4. mogodb的使用语句(命令)大全

    官网学习网址:https://docs.mongodb.com/ mongo库表操作语句实际操作过程 1: mongo入门命令 1.1: show dbs 查看当前的数据库 1.2 use datab ...

  5. 史上最全shell脚本编程语法上册

    1. shell 脚本语言的基本用法 1.1 shell 脚本的用途 将简单的命令组合完成复杂的工作,自动化执行命令,提高工作效率: 减少手工命令的输入,一定程度上避免人为错误: 将软件或应用的安装及 ...

  6. Java 对象的揭秘

    前言 作为一个 Java 程序员,我们在开发者最多的操作要属创建对象了.那么你了解对象多少?它是如何创建?如何存储布局以及如何使用的?本文将对 Java 对象进行揭秘,以及讲解如何使用 JOL 查看对 ...

  7. VSCode配置JetBrains Mono字体

    1. 下载JetBrains Mono字体 官网下载地址:https://www.jetbrains.com/lp/mono/ 2. 在VSCode配置字体 { "editor.fontFa ...

  8. django多表关联实战

    定义模型类: from django.db import models from django.contrib.auth.models import User ''' ---------- Djang ...

  9. AI绘图之Midjourney初体验

    Midjourney (MJ) 使用笔记 最近尝试了 Midjourney 绘图,简单记录下使用流程. 注册及登陆 首先是账号注册和登陆,基本上就是一路下一步,唯一需要注意的是加入MJ频道,具体流程为 ...

  10. 用 AI 速读海量文档!5款 AI 阅读工具推荐

    在当今信息爆炸的时代,我们在手动搜集和处理信息时面临着几个挑战: 浩如烟海的信息量远远超出了我们的阅读能力. 信息的复杂性要求我们重复筛选和过滤. 专业或难以理解的内容需要被翻译成易懂的语言. 需要从 ...