调试文心大模型或chatgpt的function Calling函数应用场景

沉默了一段时间,最近都在研究AI大模型的产品落地应用,我觉得这个function calling出来后,对目前辅助办公有革命性的改变,可以它来做什么呢?我们先来调试看看,chatgpt和文心大模型的ERNIE Bot支持这个,chatgpt申请有一定门槛,先以文心的为例,账号的access_token申请我就不说了,直接去飞桨飞桨AI Studio星河社区-人工智能学习与实训注册申请。安装那些自己直接看官方文档,上代码:

#coding:utf-8
import erniebot,json#记载模型
models = erniebot.Model.list()#参数
erniebot.api_type = "aistudio"
erniebot.access_token = "你的token码"messages = [{'role': 'user','content': "搜索用户李大锤的信息",},
]
functions = [{'name': 'get_current_temperature','description': "获取指定城市的气温",'parameters': {'type': 'object','properties': {'location': {'type': 'string','description': "城市名称",},'time': {'type': 'string','description': "时间",},'unit': {'type': 'string','enum': ['摄氏度','华氏度',],},},'required': ['location','time','unit',],},'responses': {'type': 'object','properties': {'temperature': {'type': 'integer','description': "城市气温",},'time': {'type': 'string','description': "时间",},'unit': {'type': 'string','enum': ['摄氏度','华氏度',],},},},},
{'name': 'get_user_info','description': "获取用户信息",'parameters': {'type': 'object','properties': {'username': {'type': 'string','description': "用户名",},},'required': ['username',],},'responses': {'type': 'object','properties': {'username': {'type': 'string','description': "用户名",},'birthday': {'type': 'string','description': "用户生日",},'hobby': {'type': 'string','description': "用户爱好",},},},},
]
response = erniebot.ChatCompletion.create(model='ernie-bot',messages=messages,functions=functions,
)
print("one:",response.get_result())

funcitons是一个数组,里面可以定义多组方法类的数据,上面我设置了2个方法,一个是查询天气的,一个是查询用户信息的,我们截取一个片段看看:

{'name': 'get_user_info',       #我们自己定义的函数名称'description': "获取用户信息",    #描述'parameters': {'type': 'object','properties': {'username': {'type': 'string','description': "用户名",},},'required': ['username',],},'responses': {'type': 'object','properties': {'username': {'type': 'string','description': "用户名",},'birthday': {'type': 'string','description': "用户生日",},'hobby': {'type': 'string','description': "用户爱好",},},},},

这格式是固定的,parameters就是设置的参数,可定义参数的名称,类型,描述,responses就是返回的结果参数,这里主要就是定义好方法类及参数,这是执行的调用写法:

response = erniebot.ChatCompletion.create(model='ernie-bot',        messages=messages,       #消息functions=functions,     #匹配函数
)

执行上面的代码会返回:

大模型会根据你的问题智能匹配是否符合函数的关键词(我估计可能也会存在一定的误差,整体测试还行),匹配上后会返回以上信息,get_user_info是你方法类的名称,arguments里面就是你定义的参数,它智能匹配到了用户名叫李大锤的。

接下来就可以根据返回的信息去调用本地对应的方法函数:

#获取天气
def get_current_temperature(location,time,unit):#这里可以自定义执行方法,下面是演示返回结果return {"location":location,"temperature": 36, "time": time, "unit": "℃"}#获取用户信息
def get_user_info(username):#这里可以自定义执行方法,下面是演示返回结果return {"username": username, "birthday": "1998-08-08", "hobby": "踢球,打游戏,吃火锅"}#如果匹配成功则执行下面代码
if response.is_function_response:function_call = response.get_result()name2function = {'get_current_temperature': get_current_temperature,'get_user_info': get_user_info}func = name2function[function_call['name']]func_name=function_call['name']args = json.loads(function_call['arguments'])res=""#根据name判断调用本地那个方法类if func_name=='get_current_temperature':res = func(location=args['location'],time=args['time'],unit=args['unit'])elif func_name=='get_user_info':res = func(username=args['username'])print("res:", res)

上面执行一下,看看结果

到这里基本上都走通了,开始的问题:搜索用户李大锤的信息,匹配后就执行了你的get_user_info的方法返回了结果。

通过以上思考,这样的话是不是可以在自己的公司产品或者项目开发一个辅助工具,更有效便捷的帮助用户摆脱一些繁琐复杂的操作流程,这个想象空间我感觉很大。

得到json后我们可以再次通过模型美化一下:

#再次通过Ai执行messages.append({"role": "assistant","content": None,"function_call": function_call,})messages.append({"role": "function","name": function_call["name"],"content": json.dumps(res, ensure_ascii=False),})secendresponse = erniebot.ChatCompletion.create(model='ernie-bot',messages=messages,functions=functions,)print(secendresponse.result)

来执行看看:

这功能还是挺强大的,它的原理简单的可以理解为关键词匹配,有点类似小爱,小度智能控制的赶脚,然后在加上模型本身的文案编写,图片生成等功能,真的可以让自己的产品得到一个飞一般的提升,然后在想象一下,把它结合到软件工具中,是不是可以智能化的执行系统的命令,智能回复及应答,搜索等等,我目前第一步就是先集成到公司的产品中去,好了,记录就先到这里。

如果有需要的源代码的同学,请关注“小白一起学编程”公众号回复:functioncalling 下载源码

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

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

相关文章

Python自动化测试PO模型封装过程详解

在自动化中, Selenium 自动化测试中有一个名字经常被提及 PageObject( 思想与面向对象的特征相 同 ) ,通常 PO 模型可以大大提高测试用例的维护效率 优点:可重用,业务和对象分离,代码结构清晰,方便代码维护 核心要素 …

数字化智慧工地管理云平台源码(人工智能、物联网)

​智慧工地优势:"智慧工地”将施工企业现场视频管理、建筑起重机械安全监控、现场从业人员管理、物料管理、进度管理、扬尘噪声监测等现场设备有机、高效、科学、规范的结合起来真正实现工程项目业务流与现场各类监控源数据流的有效结合与深度配合,…

【一周安全资讯1202】信安标委发布《网络安全标准实践指南—网络安全产品互联互通 告警信息格式》;网络安全纳入注册会计师考试科目

要闻速览 1、信安标委发布《网络安全标准实践指南—网络安全产品互联互通 告警信息格式》 2、南昌某高校学生个人信息在境外公开出售,警方抓获学校"内鬼" 3、网络安全纳入注册会计师考试科目 4、乌克兰情报机构网攻俄罗斯民航局,称俄民航业正…

swiper/vue 获取 swiper实例方法

在Vue3中使用swiper/vue&#xff0c;如何获取swiper的组件实例&#xff1f; 在项目中使用到 swiper/vue&#xff0c;想调用slideTo方法&#xff0c;发现通过refs的方法&#xff0c;拿不到swiper实例。 <template><swiperref"swiperRef"class"promoti…

合并一个文件夹下的多个txt文件,并对文本内容分列处理。

python 合并一个文件夹下的多个txt文件&#xff0c;并对文本内容分列。 原始文件&#xff1a; 最终结果&#xff1a; import pandas as pd import xlwt import pandas as pd from sqlalchemy import create_engine import pandas as pd import os import glob dirPath g…

k8s(二):Pod

Pod pod 是K8s中最小的可部署单元&#xff0c;用于容纳一个或多个容器。Pod为容器提供了一个共享的环境&#xff0c;包括网络命名空间、存储卷和IP地址。 pod的阶段(phase) Pending: Pod 已被 Kubernetes 系统接受&#xff0c;但有一个或者多个容器尚未创建亦未运行。此阶段包…

【已解决】Win10端口被占用

​ 我总是在启动项目的时候失败&#xff0c;被告知端口号被占用&#xff0c;明明没有被占用(可能是系统卡了或者其它问题)&#xff0c;但是又不想改端口号&#xff0c;或者重启电脑&#xff0c;那怎么办呢&#xff1f; 第一步&#xff1a;打开命令行窗口&#xff0c;以管理员…

【 六袆 - Framework】ActiveMQ in windows安装;

介绍 This document describes how to install and configure ActiveMQ for both Unix and Windows’ platforms. 预安装 ActiveMQ5.16版本对应JDK ActiveMQ版本JDK版本5.16JDK8(推荐)5.17JDK96.0JDK17 Windows Binary Installation This procedure explains how to down…

mvc模式test

项目结构 Book.java package beans; public class Book {private Integer id;private String name;private double price;public Integer getId() {return id;}public void setId(Integer id) {this.id id;}public String getName() {return name;}public void setName(Strin…

不会代码(零基础)学语音开发(语音播报板载双按键状态)

这个例程实现语音播报VDB-150S语音开发板板载的按键开关SW1、SW2的按下情况。 语音开发板将板载的按键开关SW1、SW2的一端都接到了GND端&#xff0c;另一端分别连接到语音模块的GPIO_B0、GPIO_B1引脚&#xff0c;当按下SW1时GPIO_B0引脚会输入低电平&#xff0c;当按下SW2时GP…

老师可以做副业吗

当老师&#xff0c;除了教学工作之外&#xff0c;还可以怎样来丰富自己的职业体验和增加收入呢&#xff1f; 自媒体作者 许多教师选择成为自媒体作者&#xff0c;分享自己的教育心得、教学经验以及与学生相处的生活状态等。通过撰写文章、发布在社交媒体上&#xff0c;不仅可以…

213. 打家劫舍 II --力扣 --JAVA

题目 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋&#xff0c;每间房内都藏有一定的现金。这个地方所有的房屋都 围成一圈 &#xff0c;这意味着第一个房屋和最后一个房屋是紧挨着的。同时&#xff0c;相邻的房屋装有相互连通的防盗系统&#xff0c;如果两间相邻的房屋在…

Objaverse:大规模3D模型开放数据集

研究人员推出了 Objaverse&#xff0c;这是一个“包含文本描述的3D 对象的海量开放数据集”。 它包含大约 800 000 个 3D 模型以及文本描述。 Objaverse数据集可以从huggingface下载&#xff0c;并且是通过 Sketchfab&#xff08;Epic Games 旗下的在线平台&#xff09;上共享…

LightDB - 支持 last_day 函数[mysql兼容]

从 23.4 开始 LightDB 支持 mysql 的 last_day 函数。 目前LightDB 实现last_day的与mysql 并不完成相同&#xff0c;会在示例中列举出不同点, 主要是以下几点&#xff1a; 对于错误日期mysql返回null&#xff0c;lightdb 是直接报错对于一些特殊日期&#xff0c;lightdb 不支…

Backend - Python 序列化

目录 一、作用1&#xff1a;代码块存入数据库 二、作用2&#xff1a;前后端传递数据 &#xff08;一&#xff09;前端 1. JSON.stringify() 2. JSON.parse() &#xff08;二&#xff09;后端 1. json.dumps() &#xff08;1&#xff09;作用 &#xff08;2&#xff09…

algo-多数排序

多数排序在leetcode只是一个简单题&#xff0c;但是衍生出来的多种解法却非常有意思 首先是最容易想到的hash和排序算法&#xff0c;接着是 随机化 从概率来讲一个随机挑选一个元素并验证都很大概率是众数 func majorityElementRandom(nums []int) int {n : len(nums)mc : …

RAM、ROM、flash、eMMC

RAM&#xff1a;Random-Access Memory的缩写&#xff0c;意思为“随机存取存储器” ROM&#xff1a;Read-Only Memory的缩写&#xff0c;意思为“只读存储器” 总体来看&#xff1a;都是存储器 最大区别&#xff1a;ROM可以在停止供电的时候仍然保存着数据&#xff1b;RAM在…

又有狗咬娃!江西8岁男童买早餐被狗扑咬,满脸血缝了90多针!

位于江西省吉安市吉安县实验小学门口&#xff0c;一名年仅8岁的男童在去买早餐的路上遭遇了一场恐怖的袭击。据报道&#xff0c;孩子是在清晨的买早餐路上被一只恶狗扑倒咬伤的&#xff0c;伤口深可见骨。 孩子的母亲悲痛欲绝地描述了当时的情景&#xff0c;孩子被咬伤后躺在地…

ky10 x86 一键安装wvp gb28181 pro平台

下载代码 git clone https://gitcode.net/zengliguang/ky10_x86_wvp_record_offline_install.gitfinalshell mobaxterm 修改服务器ip 查看服务器ip ip a 在脚本文件中修改服务器ip 执行安装脚本 切换到root用户 sudo su cd ky10_x86_wvp_record_offline_install/ sourc…