function calling实现

NLP - LLM - function calling实现

  • 一、function calling介绍
  • 二、chatglm3 function calling实现


一、function calling介绍

大型模型如 GPT-4 被设计为能够与外部系统交互,比如通过 API 调用执行某些任务。例如,一个大型模型可能被编程为在需要时调用外部数据库查询函数、调用图像处理服务或执行其他外部功能。
在这里插入图片描述

二、chatglm3 function calling实现

import json
import requests
from transformers import AutoTokenizer, AutoModel, AutoConfigmodel_path = "/code/ZhipuAI/chatglm3-6b"
tokenizer = AutoTokenizer.from_pretrained(model_path, trust_remote_code=True)
model = AutoModel.from_pretrained(model_path, trust_remote_code=True).half().to("cuda:0")def get_weather(loc):if loc == "北京" or loc == "beijing":return {"北京": "35"}else:return {"other": "25"}weather_api_spec = [{'name': 'get_weather','description': '输入城市名称,查询即时天气函数。','parameters': {'type': 'object','properties': {'loc': {'description': '城市名称,中国城市要用对应城市的英文名称。','type': 'string','required': True}}}}
]# 设定LLM身份
system_info = {"role": "system","content": "尽可能最好地回答以下问题。你可以访问以下工具:","tools": weather_api_spec
}# 第一次调用LLM
prompt = "请问今天北京天气如何"
first_response, his = model.chat(tokenizer, prompt, history=[system_info])
print(first_response)# 调用api
function_name = first_response.get("name")
parameters = first_response.get("parameters")
api_response = eval(f"{function_name}(**{parameters})")
print(api_response)# 第二次调用LLM
prompt = {"role": "observation",  # 角色为observation,表示为外部函数发的消息"name": function_name,"content": api_response}final_response, his = model.chat(tokenizer, str(prompt), history=his)
print(final_response)

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

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

相关文章

零代码编程:下载的PDF文件自动批量重命名

从arxiv或者一些其他网站下载的PDF文件,标题只是创建时间,看不出里面内容是什么,要一个个打开看非常麻烦。 可以在GPT4中输入提示词: 你是一个Python编程专家,要完成一个编写关于重命名PDF文件的Python脚本的任务&…

C语言(1):初识C语言

0 安装vs2022 见 鹏哥视频即可 1 什么是C语言 c语言擅长的是底层开发! 现在一般用的是C89和C90的标准 主要的编辑器: 2 第一个C语言项目 .c 源文件 .h头文件 .cpp c文件 c语言代码中一定要有main函数 标准主函数的写法: int main() { …

springboot 集成 i18n实现国际化信息返回 实现中英文切换 实现网站支持多语言切换

还是直接上代码 目前实现了 中英文 返回 别的语言 都差不多 主要用spring boot 自带的 类实现的 不用引入任何 依赖 使用的就是下面的类 org.springframework.context.MessageSource 是 Spring Framework 中用于支持国际化(Internationalization,简称 i…

Java程序的生命周期

ava程序的生命周期指的是程序从编写到结束的整个过程,可以分为以下几个阶段: 编写阶段:程序员使用Java语言编写程序,包括编写源代码、编译、调试等工作。 编译阶段:编译是将Java源代码转换成Java字节码的过程。Java源…

大模型入门指南

随着 ChatGPT 的到来,大模型[1](Large Language Model,简称 LLM)成了新时代的 buzzword,各种 GPT 产品百花齐放。 大多数人直接用现有产品就可以了,但对于喜欢刨根问底的程序员来说,能够在本地…

华为机考入门python3--(18)牛客18- 识别有效的IP地址和掩码并进行分类统计

分类:字符串 知识点: 字符串是否由数字组成 my_str.isdigit() 字符串填充 不足8位左侧填充0 my_str.zfill(8) 题目来自【牛客】 import sys def classify_ip(ip_mask): ip_class, is_private_ip, mask_class ignore_ip, 0, valid_mask# 解…

SQL注入漏洞代码分析

1.代码分析 HTML代码 <form action"#" method"GET"><input type"text" name"id"><input type"submit" name"Submit" value"Submit"> </form>action“#”&#xff0c;将数据提…

Hbase java API与过滤器

一、Hbase java API&#xff1a; 1、创建一张表 2、删除一张表 3、向一张表中添加一条数据 4、向一张表中同时添加一批数据 5、获取一条数据 6、获取一批数据 7、创建预分region表 代码实现&#xff1a; import org.apache.hadoop.conf.Configuration; import org.apa…

Spring boot + MyBatis-Plus3

学习 增删改查 在 service 层直接调用。 insert(user) 增selectById(1) 根据id查updateById(user) 更新selectByMap(map) 根据条件查selectBatchIds(list) 根据多个id查selectPage(page, null) 分页查deleteById(1) 删除id为1的用户deleteByMap(map) 删除符合条件的用户d…

【C++】日期计算机

个人主页&#xff1a;救赎小恶魔 欢迎大家来到小恶魔频道 好久不见&#xff0c;甚是想念 今天我们要讲述的是一个日期类计算机的代码实现 引言&#xff1a; 我们日常生活中可能会有一个烦恼。 今天几月几号&#xff1f;过n天后又是几月几号&#xff1f;某年某月某天和x年…

MySQL你想知道序列当前生成的值,你可以使用SHOW TABLE STATUS命令或者查询information_schema数据库

在MySQL中&#xff0c;如果你想知道序列当前生成的值&#xff08;例如&#xff0c;自增主键的当前值&#xff09;&#xff0c;你可以使用SHOW TABLE STATUS命令或者查询information_schema数据库。 使用SHOW TABLE STATUS命令&#xff1a; 这个命令可以显示关于表的各种信息&…

比特币中的符文是什么?

比特币中的符文是什么&#xff1f; 比特币符文是存在于比特币区块链上的独特的、可替代的代币。它们旨在代表具有独特特征和元数据的可替代资产。 Ordinals 协议的创建者 Casey Rodamor 最近放弃了一项替代 BRC-20 可替代代币协议的提案&#xff0c;该替代方案被称为 Runes。 破…

【k8s】Kubernetes 1.29.4离线安装部署(总)

&#xff08;一&#xff09;kubernetes1.29.4离线部署之-安装文件准备 &#xff08;二&#xff09;kubernetes1.29.4离线部署之-镜像文件准备 &#xff08;三&#xff09;kubernetes1.29.4离线部署之-环境初始化 &#xff08;四&#xff09;kubernetes1.29.4离线部署之-组件安装…

掌握Linux Shell脚本函数:提高脚本效率与可维护性

目录标题 1、什么是Shell函数&#xff1f;2、如何定义Shell函数&#xff1f;3、Shell函数参数4、返回值5、实例&#xff1a;使用函数进行文件备份6、为什么使用函数&#xff1f;7、最佳实践 在编写Linux shell脚本时&#xff0c;函数是组织和重用代码的重要手段。本文将介绍如何…

Python实现定时任务的八种方式

在实际的软件开发过程中,经常需要执行定时任务,比如定时备份数据、定时发送邮件、定时清理缓存等。Python作为一种功能强大的编程语言,提供了多种方式来实现定时任务。本文将介绍Python实现定时任务的八种常用方法,并提供相应的代码示例。 1. 使用​​time.sleep()​​函数…

rt1052 模拟hard fault

uint32_t u32Addr ((uint32_t)0x5FFFFFFF); //定义一个单片机不存在的地址 uint32_t u32StackTop *((__IO uint32_t *)u32Addr); //读取这个不存在的地址 //会进入 void HardFault_Handler(void) 中断

现货白银价格走势分析别走弯路!

参与现货白银投资离不开对其价格走势的分析&#xff0c;虽然相关的分析方法有很多种&#xff0c;但说到直观高效的方法&#xff0c;技术分析就是很多专业投资者所钟爱的选择。投资者可以通过平台交易软件所自带的技术指标和画线工具&#xff0c;来辅助自己的分析&#xff0c;实…

移动端js事件、zeptojs、swiper、bootstrap、正则表达式、前端性能优化

移动端场景下的js事件&#xff0c;制作移动端特效常用的js库&#xff0c;介绍移动端常用开发框架Bootstrap 一、移动端js事件 移动端的操作方式和PC端是不同的&#xff0c;移动端主要用手指操作&#xff0c;所以有特殊的touch事件&#xff0c;touch事件包括如下几个事件&…

前缀和 求数列的子序列的K倍区间

(直接截图比复制文字要好多了) 不会做的时候我去看了之前做的关于这道题目的笔记&#xff0c; &#xff08;Ak 1&#xff09;% k 1 &#xff08;Ak 1 Ak&#xff09;% k 1 只要发现了同余数的情况就说明有一个区间满足了题目的要求。 这个方法的精妙之处就在于前缀和包括了…

嵌入式Linux driver开发实操(二十一):linux device driver basic设备驱动程序基础

linux的架构框图: 内核空间是内核(即操作系统的核心)执行(即运行)并提供其服务的地方。 用户空间是执行用户应用程序的地方。 内核模块是可以根据需要加载和卸载到内核中的代码片段。它们扩展了内核的功能,而无需重新启动系统。自定义代码可以通过两种方法添加到Linux内…