LLM agentic模式之工具使用: Gorilla

news2024/9/20 20:47:10

Gorilla

Gorilla出自2023年5月的论文《Gorilla: Large Language Model Connected with Massive APIs》,针对LLM无法准确地生成API调用时的参数,构建API使用数据集后基于Llama微调了一个模型。
在这里插入图片描述

数据集构建

API数据集APIBench的构建过程如下:

  1. 先从HuggingFace、TensorFlow Hub、Torch Hub过滤得到1645个模型API调用,将这些模型的API接口转换成为有如下字段的json对象:{domain, framework, functionality, api_name, api_call, api_arguments, environment_requirements, example_code, performance, and description.}。

  2. 按照Self-Instruct思路用GPT-4来构建合成指令数据。为三个模型hub各创建6个Instruction-API样例,总共人工构建18个样例。先让GPT-4在不使用任何API名称或相关提示的情况下生成API使用指令。接下来从6个Instruction-API样例中采样3个例子、与API文档作为上下文让LLM针对指令生成api(这一步可用开源模型完成)。 对于数据集中的1645个API,每一个都生成10对Instruction-API数据。

Gorilla训练

将构建的数据集转换成user-agent chat-style conversation格式,即每一条数据集都是一轮用户与agent的对话。接着对LLaMA-7B按标准的指令微调得到Gorilla模型。在训练时,会分为带检索和不带检索器两种,带检索器的训练会在prompt中额外加入检索到的API信息:“Use this API documentation for reference: <retrieved_API_doc_JSON>”。作者认为带检索器的训练有三点好处:a) 使LLM适应在推理时API文档的改变;b)提高in-context learning的性能;c)减少幻觉错误。但是作者的试验表明带检索器的训练并不总是有助于提高模型表现,有时候甚至会有损于模型性能,主要原因在于检索器给出的内容并不总是有用的,所以作者建议如果有好的检索器可用,则使用带检索器的微调,否则不带检索器的微调是更好的选择。

API校验

论文中的API数据集是基于模型hub构建的,所以对于一个请求有多个正确答案,比如对于一个图片分类问题,有很多模型都可以回答此问题。Gorilla作者用构建的数据集来评估API的功能相等性,用AST树匹配策略来判断LLM调用数据集的哪个API。如果API不属于数据集中任何API的子树,说明LLM出现了幻觉。
在这里插入图片描述

Gorilla openfunction and openfunction2

在2023年6月OpenAI宣布支持function call功能之后,Gorilla团队陆续开源了其openfunction 和openfunction v2模型,在其两篇博客(1, 2)中介绍了其模型是如何训练的。

gorilla-openfunctions-v0模型是基于7B的LLaMA-v2-chat模型训练的,gorilla-openfunctions-v1是基于7B的 LLaMA-v2预训练模型训练的。 gorilla-openfunctions-v2是基于6.91B的Deepseek-Coder-7B-Instruct-v1.5训练的。

在gorilla-openfunction-v2的huggingface仓库列出的三个模型的不同区别。
在这里插入图片描述

下图示意了function call的各种功能(来自blog)
在这里插入图片描述

gorilla-openfunctions-v0gorilla-openfunctions-v1的数据集和在本地部署时的prompt是一样的。其数据集一共14189个instruction-API对,API文档来源有三个:Python包、RapidAPI、云厂商的命令行工具。

def get_prompt(user_query: str, functions: list = []) -> str:
    """
    Generates a conversation prompt based on the user's query and a list of functions.

    Parameters:
    - user_query (str): The user's query.
    - functions (list): A list of functions to include in the prompt.

    Returns:
    - str: The formatted conversation prompt.
    """
    if len(functions) == 0:
        return f"USER: <<question>> {user_query}\nASSISTANT: "
    functions_string = json.dumps(functions)
    return f"USER: <<question>> {user_query} <<function>> {functions_string}\nASSISTANT: "

gorilla-openfunctions-v2收集了65283条 question-function-answer对,数据来源有:Python包 (19,353), Java 仓库 (16,586), Javascript 仓库 (4,245), public-API (6,009), 云厂商的命令行工具 (19,090) 。并进行了如下图片示意的数据增强。
在这里插入图片描述

gorilla-openfunctions-v2在本地部署时prompt组织方式如下。

def get_prompt(user_query: str, functions: list = []) -> str:
    """
    Generates a conversation prompt based on the user's query and a list of functions.

    Parameters:
    - user_query (str): The user's query.
    - functions (list): A list of functions to include in the prompt.

    Returns:
    - str: The formatted conversation prompt.
    """
    system = "You are an AI programming assistant, utilizing the Gorilla LLM model, developed by Gorilla LLM, and you only answer questions related to computer science. For politically sensitive questions, security and privacy issues, and other non-computer science questions, you will refuse to answer."
    if len(functions) == 0:
        return f"{system}\n### Instruction: <<question>> {user_query}\n### Response: "
    functions_string = json.dumps(functions)
    return f"{system}\n### Instruction: <<function>>{functions_string}\n<<question>>{user_query}\n### Response: "
Berkeley Function-Calling Leaderboard

gorilla团队提供了一个榜单来评估LLM的call function能力,更多介绍可参见其blog。

参考资料

  1. Gorilla: arxiv, github, website
  2. Gorilla openfunction模型: gorilla-openfunction-v0 huggingface, gorilla-openfunction-v1 huggingface, gorilla-openfunction-v2 huggingface
  3. Berkeley Function-Calling Leaderboard, Berkeley Function-Calling Leaderboard 介绍blog

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

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

相关文章

《Programming from the Ground Up》阅读笔记:p75-p87

《Programming from the Ground Up》学习第4天&#xff0c;p75-p87总结&#xff0c;总计13页。 一、技术总结 1.persistent data p75, Data which is stored in files is called persistent data, because it persists in files that remain on disk even when the program …

C语言程序设计15

程序设计15 问题15_1代码15_1结果15_1 问题15_2代码15_2结果15_2 问题15_3代码15_3结果15_3 问题15_1 在 m a i n main main 函数中将多次调用 f u n fun fun 函数&#xff0c;每调用一次&#xff0c;输出链表尾部结点中的数据&#xff0c;并释放该结点&#xff0c;使链表缩短…

【SQL 新手教程 3/20】关系模型 -- 外键

&#x1f497; 关系数据库建立在关系模型上⭐ 关系模型本质上就是若干个存储数据的二维表 记录 (Record)&#xff1a; 表的每一行称为记录&#xff08;Record&#xff09;&#xff0c;记录是一个逻辑意义上的数据 字段 (Column)&#xff1a;表的每一列称为字段&#xff08;Colu…

Buildroot 构建 Linux 系统

Buildroot 是一个工具&#xff0c;以简化和自动化为嵌入式系统构建完整 Linux 系统的过程。使用交叉编译技术&#xff0c;Buildroot 能够生成交叉编译工具链、根文件系统、Linux 内核映像和针对目标设备的引导加载程序。可以独立地使用这些选项的任何组合&#xff0c;例如&…

Vitis AI 使用 VAI_Q_PYTORCH 工具

目录 1. 简介 2. 资料汇总 3. 示例解释 3.1 快速上手示例 4. 总结 1. 简介 vai_q_pytorch 是 Vitis AI Quantizer for Pytorch 的缩写&#xff0c;主要作用是优化神经网络模型。它是 Vitis AI 平台的一部分&#xff0c;专注于神经网络的深度压缩。 vai_q_pytorch 的作用…

大数据管理中心设计规划方案(可编辑的43页PPT)

引言&#xff1a;随着企业业务的快速发展&#xff0c;数据量急剧增长&#xff0c;传统数据管理方式已无法满足高效处理和分析大数据的需求。建立一个集数据存储、处理、分析、可视化于一体的大数据管理中心&#xff0c;提升数据处理能力&#xff0c;加速业务决策过程&#xff0…

Spring Boot:图书管理系统(一)

1.编写用户登录接口 代码&#xff1a; package com.example.demo;import jakarta.servlet.http.HttpSession; import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotatio…

HarmonyOS和OpenHarmony区别联系

前言 相信我们在刚开始接触鸿蒙开发的时候经常看到HarmonyOS和OpenHarmony频繁的出现在文章和文档之中&#xff0c;那么这两个名词分别是什么意思&#xff0c;他们之间又有什么联系呢&#xff1f;本文将通过现有的文章和网站内容并与Google的AOSP和Android做对比&#xff0c;带…

Vue.js 2 项目实战(五):水果购物车

前言 Vue.js 是一个用于构建用户界面的渐进式 JavaScript 框架。它的设计目标是通过采用易于上手的结构和强大的功能&#xff0c;使前端开发变得更加简便和高效。以下是 Vue.js 的一些关键特性和优点&#xff1a; 核心特性 声明式渲染 Vue.js 使用声明式语法来描述用户界面&a…

AI周报(7.21-7.27)

AI应用-一款能提供情绪价值的智能鸟类喂食器&#xff08;Bird Buddy&#xff09; 图像识别技术&#xff1a;Bird Buddy装备了图像识别技术&#xff0c;能够识别超过1000种鸟类&#xff0c;涵盖了常见的鸟类品种。这种技术能够在鸟类经过时&#xff0c;通过内置麦克风捕捉的声音…

PID 控制实验 - 整定实验

Arduino PID Arduino-PID-LibraryArduino-PID-AutoTune-Library PID控制实验 – 制作测试台 PID Control Experiment – Making the Testing Rig PID (Proportional, Integral, Derivative) control is a classic control algorithm that I have used for a few projects,…

Debug-018-elementUI-el-tree中通过CSS隐藏任意一项的选择框checkbox

前情提要&#xff1a; 我们项目中使用的是elementUI&#xff0c;业务中经常需要使用到el-tree组件去实现一些有层级关系的功能。现在有一个需求描述一下&#xff1a;首先是这个el-tree是个有checkbox的树&#xff0c;每一子节点都可以被选择&#xff0c;用于去实现一些系统的权…

Shell编程之正则表达式与文本三剑客

目录 一、正则表达式 1.引言--什么是正则表达式 1.1正则表达式的功能 2.基础正则表达式&#xff08;BRE&#xff09; 2.1特殊字符 2.2定位符 2.3非打印字符 3.扩展正则表达式(ERE) 4.元字符操作的案列 二、命令小工具 1.cut&#xff1a;列截取工具 2.sort排序 …

vue3获取、设置元素高度

前言 在web端常见的需求场景中&#xff0c;会经常遇到table表格需要根据页面可视区域使高度自适应的情况。 傻喵(作者本人)昨天在尝试使用vue3实现这个需求时&#xff0c;看了几篇网上写的回答&#xff0c;都不太全面&#xff0c;所以干脆自己写个总结吧.(第一次写&#xff0c…

深入探讨 I/O 多路复用:提升系统 I/O 效率的关键技术

摘要 I/O&#xff08;输入/输出&#xff09;操作是计算机系统中不可或缺的一部分&#xff0c;而 I/O 多路复用技术则是提高系统 I/O 效率的重要手段。本文将浅谈 I/O 的基本概念&#xff0c;重点探讨 I/O 多路复用技术的原理、优势以及在现代系统中的应用。 引言 在现代计算…

php收银系统源码-收银员操作权限

收银系统是很多门店&#xff0c;尤其是连锁门店营业的必备工具&#xff0c;收银员每天需要通过收银系统记录商品的售卖数量&#xff0c;以及收款&#xff0c;会员开卡&#xff0c;核销订单等工作。但很多门店都不希望给收银员太高的权限&#xff0c;自然就离不开收银员的权限管…

flask开启调试模式,热部署

这里写自定义目录标题 功能快捷键 什么是热部署&#xff1f;简单说就是你程序改了&#xff0c;现在要重新启动服务器&#xff0c;嫌麻烦&#xff1f;不用重启&#xff0c;服务器会自己悄悄的把更新后的程序给重新加载一遍&#xff0c;这就是热部署&#xff08;抄的&#xff09;…

NameSilo域名注册和解析2024版教程(附优惠码)

上次给大家介绍了国外知名的域名注册商Dynadot&#xff0c;今天再给大家分享另一家国外知名的域名注册商NameSilo&#xff0c;同样性价比很高。使用本站提供的优惠码&#xff1a;ieearn.com&#xff0c;你还可以在首次注册购买域名时享受1美元的优惠&#xff1a; NameSilo简介…

10 VUE Element

文章目录 VUE1、概述2、快速入门3、Vue 指令4、生命周期5、案例 Elemant1、快速入门2、Element 布局3、常用组件-案例 VUE 1、概述 Vue 是一套前端框架&#xff0c;免除原生JavaScript中的DOM操作&#xff0c;简化书写基于MVVM(Model-View-ViewModel)思想&#xff0c;实现数据…

AI机器人本地免费部署(部署Llama 3.1详细教程)

昨日&#xff0c;Meta公司发布了人工智能模型——Llama 3.1。 那么Llama 3.1 405B的效果怎么样&#xff1f;我们来对比一张图&#xff0c;横向对比一下GPT-4。 可以看出&#xff0c;Llama 3.1 405B在各类任务中的表现可以与GPT-4等顶级的模型相差无几。 那么&#xff0c;我们…