Semantic Kernel/C#:一种通用的Function Calling方法,文末附经测试可用的大模型

news2024/9/25 3:28:52

Funcion Calling介绍

函数调用允许您将模型如gpt-4o与外部工具和系统连接起来。这对于许多事情都很有用,比如为AI助手赋能,或者在你的应用程序与模型之间建立深度集成。

如果您了解或者使用过Semantic Kernel可能会发现除了OpenAI支持Function Calling的模型之外,自动函数调用好像并不好用,国产大模型几乎都不能使用,由于想解决这个问题,在GitHub上找到了一个大佬的方法。

GitHub地址:https://github.com/Jenscaasen/UniversalLLMFunctionCaller

大佬是通过提示工程与Semantic Kernel中调用本地函数的原理来做的,我看了大佬的代码,将提示词改为了中文,可能会更适用于国产大模型。

之前写了一篇文章:如何让其他模型也能在SemanticKernel中调用本地函数介绍了这个方法。

但是当时自己并没有开源项目,感兴趣的朋友,没有办法快速地上手体验,只能自己重新来一遍,现在已将这部分内容集成到我的开源项目SimpleRAG中,感兴趣的朋友只需填入自己的API Key即可快速体验,也可以方便地查看代码了。

GitHub地址:https://github.com/Ming-jiayou/SimpleRAG

一种通用的Function Calling方法

在开始介绍之前,先看一下效果:

对比一下不使用FunctionCalling的效果:

image-20240828162455519

再来一个示例:

对比不使用Function Calling的效果:

image-20240828162754671

具体代码可在GitHub中查看,这里重点介绍一下实现的过程。

这里以Qwen2-7B-Instruct为例。

首先创建一个Kernel:

image-20240828163952619

在Kernel中导入插件:

image-20240828164048682

以上只是用于测试的模拟函数。

只需这样写即可:

image-20240828165221419

现在探究一下里面的过程。

首先将插件转化为文本:

image-20240828165354209

image-20240828165413278

在对话历史中加入示例:

image-20240828165513048

image-20240828165557673

在对话历史中加入一个指令:

image-20240828165704135

image-20240828165801213

将所有可用的函数嵌入到这个Prompt中了,如下所示:

image-20240828165901365

将指令加入到对话历史中了,如下所示:

image-20240828170031287

让LLM根据任务选择应该先调用哪个函数或者不用调用函数:

image-20240828170139513

LLM返回完成这个任务需要调用的函数:

image-20240828170317084

验证这个函数:

image-20240828170348135

调用插件中的函数:

image-20240828170514946

image-20240828170607398

image-20240828170626711

第一个函数返回的结果:

image-20240828170658135

再向LLM发送请求,现在该调用哪个函数,LLM的返回如下所示:

image-20240828170756097

同样执行插件中的第二个函数:

image-20240828170846964

第二个函数的返回:

image-20240828170917273

然后再向LLM发送请求:

image-20240828171024714

调用的函数名为Finished,表示流程已完成,可以跳出来了,如下所示:

image-20240828171128972

获得了最后的信息:

image-20240828171224711

结果如下所示:

image-20240828171253353

以上就是这个方法的大概流程,具体实现可以看GitHub开源的代码。

经过测试这种方法可用的LLM

平台可用模型
硅基流动Llama-3.1-405/70/8B、Llama-3-70/8B-Instruct、DeepSeek-V2-Chat、deepseek-llm-67b-chat、Qwen2-72/57/7/1.5B-Instruct、Qwen2-57B-A14B-Instruct、Qwen1.5-110/32/14B-Chat、Qwen2-Math-72B-Instruct、Yi-1.5-34/9/6B-Chat-16K、internlm2_5-20/7b-chat
讯飞星火Spark Lite、Spark Pro-128K、Spark Max、Spark4.0 Ultra
零一万物yi-large、yi-medium、yi-spark、yi-large-rag、yi-large-fc、yi-large-turbo
月之暗面moonshot-v1-8k、moonshot-v1-32k、moonshot-v1-128k
智谱AIglm-4-0520、glm-4、glm-4-air、glm-4-airx、glm-4-flash、glm-4v、glm-3-turbo
DeepSeekdeepseek-chat、deepseek-coder
阶跃星辰step-1-8k、step-1-32k、step-1-128k、step-2-16k-nightly、step-1-flash
Minimaxabab6.5s-chat、abab5.5-chat
阿里云百炼qwen-max、qwen2-math-72b-instruct、qwen-max-0428、qwen2-72b-instruct、qwen2-57b-a14b-instruct、qwen2-7b-instruct

以上不一定完备,还有一些模型没测,欢迎大家继续补充。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2084111.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

cenos 7 安装 golang

1、下载地址 All releases - The Go Programming Languagehttps://golang.google.cn/dl/ 2、解压 tar -C /usr/local -zxf go1.14.3.linux-amd64.tar.gz 3、配置PATH 文件 /etc/profile(全局) 或 $HOME/.profile(用户) 或 ~/…

<数据集>安全背心识别数据集<目标检测>

数据集格式:VOCYOLO格式 图片数量:4185张 标注数量(xml文件个数):4185 标注数量(txt文件个数):4185 标注类别数:2 标注类别名称:[vest, no-vest] 序号类别名称图片数框数1vest222439942no-vest221552…

光性能 -- 入纤光功率

什么是入纤光功率? 入纤光功率:指业务光进入长纤时的单波光功率。如图所示,即为C点的光功率。 ​ 为什么要有入纤光功率 影响波分系统传输性能主要有四大因素: 光功率:表示能力的强弱,光模块能否接收。色…

[数据集][目标检测]玻璃瓶塑料瓶检测数据集VOC+YOLO格式8943张2类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):8943 标注数量(xml文件个数):8943 标注数量(txt文件个数):8943 标注…

stlink链接失败原因:虚拟机的虚拟接口的转接功能会导致主机的u盘等外设要选择是在主机还是虚拟机,串口,stlink等驱动也会

这就是为什么你连上电脑 stlink会与缓慢的闪烁不同,会很快的闪烁,很快的红灯闪烁是没链接上驱动的意思,缓慢的驱动是链接成功但与软件链接失败需要重插

软考:软件设计师 — 17.程序设计语言与语言处理程序基础

十七. 程序设计语言与语言处理程序基础 1. 程序设计语言概述 (1)编译程序与解释程序 编译型语言解释型语言共同点高级程序语言有词法分析、语法分析、语义分析过程不同点翻译程序编译器解释器是否生成目标代码生成不生成目标程序能否直接执行直接执行边…

掌控安全CTF-2024年8月擂台赛-ez_misc

题解: 题目给了一个流量包和一个加密的zip文件,我们首先打开流量包,很多流量,查看一下http协议,发现是个sql靶场,找到关键字样flag,得到一串字符: LJWXQ2C2GN2DAYKHNR5FQMTMPJMDER…

LabVIEW性能优化方法

在LabVIEW开发中,性能优化至关重要。合理的内存管理、并行处理、多线程优化、以及界面和代码的精简能够大幅提高程序效率,降低系统资源占用。下面将探讨LabVIEW性能优化的各个方面,提供实用技巧和建议,帮助开发者提升项目的执行速…

Python中排序算法之插入排序

1 插入排序算法原理 插入排序算法与《Python中排序算法之选择排序》中提到的选择排序算法类似,也是将要排序的数列分为两个子数列(红色框数列和绿色框数列),不同之处在于插入排序算法从绿色框子数列中逐个选择数字,之…

读软件开发安全之道:概念、设计与实施12不受信任的输入

1. 不受信任的输入 1.1. 不受信任的输入可能是编写安全代码的开发人员最关心的问题 1.1.1. 最好将其理解为输入系统中的所有不受信任的输入 1.1.2. 来自受信任的代码的输入可以提供格式正确的数据 1.2. 不受信任的输入是指那些不受你控制,并且可能被篡改的数据&…

美发店会员系统设计解读之规格选择-SAAS本地化及未来之窗行业应用跨平台架构

一、请求产品信息 $.ajax({type:"get", //请求方式async:true, //是否异步url:"服务器",dataType:"json", //跨域json请求一定是jsonpjsonp: "cwpd_showData_dy_spec", //跨域请求的参数名,默认是callback//js…

创新互动体验RAG:利用角色化AI技术增强影视评论的沉浸感

创新互动体验RAG:利用角色化AI技术增强影视评论的沉浸感 目前已经搭建了一整套完整的角色对话链路,可以快速应用于各个角色扮演场景中。剧集中的评论场景是一个很好的角色扮演场景,期望能在优酷剧集的评论中,模拟角色性格,回复用户相关的评论并引导用户进一步互动,为优酷…

智能儿童对讲机语音交互,乐鑫ESP-RTC音视频通信,ESP32无线语音方案

儿童对讲机一种专为孩子们设计的通讯设备,可以让父母与孩子之间进行双向通讯,增强亲子关系,增强孩子的可玩性。 儿童对讲机近几年发展的比较快,通过无线WiFi及蓝牙通信技术,可以实现远程控制和语音交互功能&#xff0…

基于vue框架的便利店收银管理系统im2gw(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 开题报告内容 基于Vue框架的便利店收银管理系统开题报告 一、引言 随着零售业的快速发展,便利店作为日常生活中不可或缺的一部分,其运营效率和服务质量直接影响到顾客的购物体验和商家的盈利能力。便利店收银管理系统作为门店运营的…

hdfs的慢盘检测

这是我的第105篇原创文章 慢盘检测引入的背景 hdfs作为一个存储系统,势必会使用大量的磁盘。然而,在长期的使用过程中,磁盘也难免会磨损,出现损坏的磁道或扇区,导致磁盘读写变慢,IO操作耗时变长&#xff0c…

社群扫码进群完整可运营源码

源码介绍 社群扫码进群完整可运营源码,对接免签约支付接口,推广正常绑定下级。 1.安装上宝塔在配置这些环境就可以了 2.搭建环境Nginx MySQL 5.6 php7.2 3.php7.2安装扩展fileinfo redis Swoole sg11 4.服务器需要安装linux的系统 下载地址&#x…

学生宿舍管理小程序的设计

管理员账户功能包括:系统首页,个人中心,宿舍公告管理,学生管理,宿舍管理,后勤人员管理,楼栋信息管理,宿舍分配管理管理,退宿信息管理 微信端账号功能包括:系…

有哪些内部知识库类似钉钉,满足企业多样化需求?

在当今企业数字化转型的浪潮中,选择一款合适的内部知识库工具对于提升工作效率、优化内部管理具有重要意义。钉钉与HelpLook AI知识库作为两款颇受欢迎的企业级应用,各自在功能特性、用户体验及价格定位上展现出不同的优势。本文将从几个维度出发&#x…

OSI七层模型中的数据链路层

图片:数据帧的格式 这里面的一个关键点是,数据的源IP和目标IP在哪里? 就在图中的“数据”里面,这个“数据”也就是网络层的数据包,如果是TCP类型的数据包,数据包里面就包含TCP类型的首部信息,…

【Python入门】第6节 函数进阶

📖第6节 函数进阶 ✅函数多返回值✅函数多种传参方式🧊位置参数🧊关键字参数🧊缺省参数🧊不定长参数 ✅匿名函数🧊函数作为参数传递🧊lambda匿名函数 ✅函数多返回值 如果一个函数要有多个返回…