第三期 Plugins Function Calling

news/2024/11/16 4:28:19/文章来源:https://www.cnblogs.com/ssyfj/p/18306361
大模型的缺陷:
  • 没有最新消息:训练周期长且昂贵,GPT3.5/4的知识截至2021-9
  • 没有真逻辑:表现出的逻辑和推理,是训练文本的统计规律,不是真正的逻辑

Plugins

订机票、数学计算、日程提醒...

插件选择&使用

插件的原理

通过prompt判断是否应该调用插件

失败

  • 使用门槛高:用户需要知道每个插件是做什么的,学习成本大;插件数量多,用户不知道哪个插件最合适,此外只能手动选3个plugin
  • Sam Altman:比起应用程序位于gpt中,gpt更应该在应用程序中(不应该是干什么事都打开gpt,而是gpt无所不在)
  • 我认为插件不够灵活和精准,你无法保证大模型生成的参数就是规范的,人工介入一些会更好

Function Calling

目的

当gpt能力不足时,通过自定义的function补足(调哪个function、function的输入输出格式可以由gpt完成)

原理

示例

实例1

实例2

prompt = "6 * 3 / (4+2) = ?"
# prompt = "桌上有 2 个苹果,四个桃子和 3 本书,水果比书多多少?"
# prompt = """
# 让我们一步步计算:小明在一家水果店买水果。他买了X斤苹果,每斤10元;4斤香蕉,每斤5元;
# 和3斤橙子,每斤8元。他手头有100元。请问小明买完这些水果后,他还剩下多少钱?
#"""

messages = [{"role": "system", "content": "你是一个小学数学老师,你要教学生四则混合运算"},{"role": "user", "content": prompt}
]response = get_completion(messages)
messages.append(response)  # 把大模型的回复加入到对话中。非常重要!
print(response)
while (response.get("function_call")):# 是否要调用 sumargs = json.loads(response["function_call"]["arguments"])function_name = response["function_call"]["name"]if (function_name == "sum"):result = sum(args["numbers"])elif (function_name == "subtract"):result = args["a"] - args["b"]elif (function_name == "multiply"):result = 1for number in args["numbers"]:result *= numberelif (function_name == "divide"):result = args["a"] / args["b"]else:result = "Unknown function"print(result)messages.append({"role": "function", "name": function_name, "content": str(result)})response = get_completion(messages)messages.append(response)  # 把大模型的回复加入到对话中print(response)print(response.content)
View Code
def get_completion(messages, model="gpt-4"):response = openai.ChatCompletion.create(model=model,messages=messages,temperature=0,  # 模型输出的随机性,0 表示随机性最小functions=[  # 用 JSON 描述函数。可以定义多个,但是只有一个会被调用,也可能都不会被调用
            {"name": "sum","description": "计算数组中所有数字的和","parameters": {"type": "object","properties": {"numbers": {"type": "array","items": {"type": "number","description": "必须是数值类型"}}}},},{"name": "subtract","description": "计算 a - b 的值","parameters": {"type": "object","properties": {"a": {"type": "number","description": "被减数,必须是数值类型"},"b": {"type": "number","description": "减数,必须是数值类型"}}},},{"name": "multiply","description": "计算数组中所有数字的积","parameters": {"type": "object","properties": {"numbers": {"type": "array","items": {"type": "number","description": "必须是数值类型"}}}},},{"name": "divide","description": "计算 a/b 的值","parameters": {"type": "object","properties": {"a": {"type": "number","description": "被除数,必须是数值类型"},"b": {"type": "number","description": "除数,必须是数值类型"}}},}],)return response.choices[0].message
View Code
{"role": "assistant","content": null,"function_call": {"name": "multiply","arguments": "{\n  \"numbers\": [6, 3]\n}"}
}
18
{"role": "assistant","content": null,"function_call": {"name": "sum","arguments": "{\n  \"numbers\": [4, 2]\n}"}
}
6
{"role": "assistant","content": null,"function_call": {"name": "divide","arguments": "{\n  \"a\": 18,\n  \"b\": 6\n}"}
..."role": "assistant","content": "6 * 3 / (4+2) = 3"
}
6 * 3 / (4+2) = 3

  

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

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

相关文章

第四期 AI 编程

目标如何用 AI 辅助编程,提升工作效率 如何用 AI 快速应用和学习新技术,扩展职业边界 通过 AI 编程,洞察 AI 对各个行业的影响趋势产品与技术的联通+业务视角 =AI 全栈工程师 AI 编程 使用 AI 编程(编程目前是大模型能力最强的垂直领域),除了解决编程问题以外,更重要是建…

Linux调度器:进程优先级

一、前言 本文主要描述的是进程优先级这个概念。从用户空间来看,进程优先级就是nice value和scheduling priority,对应到内核,有静态优先级、realtime优先级、归一化优先级和动态优先级等概念,我们希望能在第二章将这些相关的概念描述清楚。为了加深理解,在第三章我们给出…

中山大学人工智能夏令营实践课

Day 0 配置wsl的 vscode环境 (速通速通!) Day 1 上午讲了中山大学的校史以及鸿蒙系统的大体介绍 感慨: 作为互联网原生的一代,是最具创造性的一代,通过我们的夏令营不仅可以锻练我们的技术能力,开发能力,沟通能力,从而让自己链接的能力超出自已的物理空间。还可以提升…

微调(Fine-Tuning)和检索增强生成(RAG)

微调(Fine-Tuning)和检索增强生成(RAG) https://www.toutiao.com/article/7386094597421810186/?log_from=21b91ee0752_17211185181952024-06-30 09:05架构笔记 微调(Fine-Tuning)过程的核心,是在新的任务和数据集上对预训练模型的参数进行微小的调整,使其能精准契合…

为视觉语言多模态模型进行偏好优化

为视觉语言多模态模型进行偏好优化 训练模型使得它能够理解并预测人类偏好是一项比较复杂的任务。诸如 SFT (Supervised finetuning) 的传统的方法一般都需要耗费较大成本,因为这些算法需要对数据打上特定的标签。而偏好优化 (Preference Optimization) 作为一种替代选项,通常…

别小瞧它,提高效率可了解可拖拽的工作流引擎

提升效率,可以随时来了解低代码技术平台、可拖拽的工作流引擎更多特点。当前,社会发展程度越来越高,很多企业都希望寻求更优的平台产品实现提质增效的目的。低代码技术平台、可拖拽的工作流引擎具有可视化操作界面、更灵活、好操作等多个优势特点,在提升办公效率方面具有事…

fastqc和Trimmomatic的使用

1.FastQC分析检测报告 在先前的记录中,我们已经得到了我们的QC报告,现在要针对我们的报告对原始数据进行过滤 其中 和 都表明该数据需要去接头,并对序列进行处理 2.Trimmomatic的下载 首先,使用conda安装Trimmomatic conda install Trimmomatic 就可以安装完毕了,安装完使…

数据仓库建模工具之一——Hive学习第二天

Hive的概述 1、Hive基本概念 1.1 Hive简介Hive本质是将SQL转换为MapReduce的任务进行运算,底层由HDFS来提供数据存储,说白了hive可以理解为一个将SQL转换为MapReduce的任务的工具,甚至更近一步说hive就是一个MapReduce客户端。 为什么使用Hive?使用hadoop,成本太高,项目要…

三分钟了解自定义表单自定义工作流的多个优势

如果想了解自定义表单自定义工作流的优势特点,可以通过本文获取更多详情信息。降本、提高效率、解决信息孤岛是很多企业亟需要解决的问题。什么样的软件平台可以实现这一目标?可以随时来了解低代码技术平台。它当中的自定义表单自定义工作流拥有多个优势特点,可以为企业降低…

jenkins+allure常见问题汇总

1.生成allure报告时,报Can not find any allure commandline installation. 原因:jenkins下载安装allure插件后,没有配置allure路径 解决办法:Manage Jenkins>Tools>Allure Commandine安装2.执行pytest --alluredir=./allure-result --clean-alluredir时,报error: u…

SSM学习路线

Maven Spring Mybatis SpringMVC SSM整合 Spring Boot Mybatis Plus 项目学习