当前位置: 首页 > news >正文

LLMs之ToolAlpaca:ToolAlpaca(通用工具学习框架/工具使用语料库)的简介、安装和使用方法、案例应用之详细攻略

LLMs之ToolAlpaca:ToolAlpaca(通用工具学习框架/工具使用语料库)的简介、安装和使用方法、案例应用之详细攻略

目录

ToolAlpaca的简介

0、《ToolAlpaca: Generalized Tool Learning for Language Models with 3000 Simulated Cases》翻译与解读

1、数据集列表

2、数据格式

样本示例

ToolAlpaca的安装和使用方法

1、数据集生成

克隆此仓库并安装包

下载public-api数据

下载公共 API 数据

2、工具集构建

工具使用实例生成

3、训练

4、评估

对于模拟的 API:

对于真实的 API:您应该注册网站并获取 API_KEYs。

ToolAlpaca的案例应用

LLMs之ChatGLM3:ChatGLM3源码解读(format_tool_alpaca.py)——实现将ToolAlpaca训练数据文件(解析JSON格式)转换为一个适合于训练对话模型的格式文件(清晰分隔不同角色的消息+包含了工具的使用和观察结果,tools-conversations【user-assistant-tool{tool_name/parameters/observation}-assistant】)


ToolAlpaca的简介

2023年6月8日,中国科学院发布ToolAlpaca,ToolAlpaca是一个面向紧凑语言模型的3000个模拟案例的通用工具学习框架,旨在最小化人工监督的情况下,在紧凑语言模型中学习通用工具使用能力。它通过生成一个工具使用语料库来处理工具学习挑战,该语料库通过一个多智能体模拟环境提供,包含来自400多种工具的3.9千个工具使用实例。

论文地址:https://arxiv.org/abs/2306.05301

GitHub地址:GitHub - tangqiaoyu/ToolAlpaca: ToolAlpaca: Generalized Tool Learning for Language Models with 3000 Simulated Cases

数据集源地址:ToolAlpaca/data/train_data.json at main · tangqiaoyu/ToolAlpaca · GitHub、

查阅地址:404 Not Found

0、《ToolAlpaca: Generalized Tool Learning for Language Models with 3000 Simulated Cases》翻译与解读

地址

论文地址:https://arxiv.org/abs/2306.05301

时间

2023年6月8日

作者

中国科学院

摘要

使大型语言模型有效地利用现实世界工具是实现具体化智能的关键。现有的工具学习方法要么主要依赖于非常大的语言模型,如GPT-4,以零样本的方式获得泛化的工具使用能力,要么利用监督学习在紧凑模型上训练有限范围内的工具。然而,目前尚不确定较小的语言模型是否可以在没有特定工具训练的情况下获得泛化的工具使用能力。为了解决这个问题,本文引入了ToolAlpaca,这是一个新颖的框架,旨在自动生成多样化的工具使用语料库,并在最少的人工干预下,在紧凑语言模型上学习泛化的工具使用能力。具体来说,ToolAlpaca首先通过构建一个多智能体模拟环境,自动创建了一个高度多样化的工具使用语料库。该语料库包含来自超过400个现实世界工具API的3938个工具使用实例,涵盖50个不同类别。随后,构建的语料库被用于微调紧凑语言模型,分别得到了两个模型,即ToolAlpaca-7B和ToolAlpaca-13B。最后,我们评估了这些模型在没有特定训练的情况下利用未见过的工具的能力。实验结果表明,ToolAlpaca实现了与GPT-3.5等非常大语言模型相媲美的有效泛化工具使用能力,证明了紧凑语言模型学习泛化的工具使用能力是可行的

1、数据集列表

train_data.json:400多种API的训练数据 
eval_simulated.json:10个模拟API的评估数据
eval_real.json:11个真实API的评估数据,一些API需要认证。

2、数据格式

{"Name": "公共API中的名称","Description": "公共API中的描述","Category": "公共API中的类别","Introduction": "由LLM生成的介绍","Functions": "由LLM生成的论文版本NLDocumentation","Documentation": "str(json),由LLM生成的OpenAPI规范文档","NLDocumentation": "类似于Functions的自然语言文档,从Documentation转换而来","Function_Description": "NLDocumentation中每个函数的描述","Function_Projection": "函数到HTTP请求方法的映射","Instructions": "由LLM生成的指令","Instances": [{"input": "使用agent的init指令","output": "assistant agent的最终输出","Final Thought": "输出之前的最终想法,来自assistant agent","intermediate_steps": [[["来自assistant agent的动作","来自assistant agent的动作输入,str(json)","想法 + 动作 + 动作输入,assistant agent的输出"],"来自[user agent, 类型检查Python代码, 工具执行agent]的观察"]]}]
}

样本示例

[{"Name": "Httpbin","Description": "一个简单的HTTP请求和响应服务","Link": "https://httpbin.org/","Category": "Development","Introduction": "Httpbin API(应用程序编程接口)是一个简单的HTTP请求和响应服务,使开发人员能够测试其应用程序与HTTP协议的交互。Httpbin提供以下功能:1)基本的GET、POST、PUT、DELETE、HEAD和PATCH http请求测试。2)检索客户端请求数据,包括头部、表单数据、上传的文件和cookies。3)代理头测试端点。4)模拟状态码和其他响应的能力。Httpbin是一个易于使用、高效且可靠的工具,用于测试和调试Web和移动应用程序中的HTTP相关问题。","Functions": "1. 名称:sendHttpRequest\n描述:向Httpbin API发送带有指定方法、头部和数据的HTTP请求,用于测试目的。\n输入:{\"method\": \"必需。字符串。要使用的HTTP方法(GET、POST、PUT、DELETE、HEAD或PATCH)\", \"url\": \"必需。字符串。要发送请求的端点URL\", \"headers\": \"可选。对象。要包含在请求中的头部的键值对\", \"data\": \"可选。对象。要包含在请求体中的数据的键值对\"}\n输出:{\"response\": \"对象。从Httpbin API收到的HTTP响应,包括状态码、头部和正文\"}\n\n2. 名称:getClientRequestData\n描述:检索客户端的请求数据,包括头部、表单数据、上传的文件和cookies。\n输入:{\"url\": \"必需。字符串。要发送请求的端点URL\"}\n输出:{\"requestData\": \"对象。客户端的请求数据,包括头部、表单数据、上传的文件和cookies\"}\n\n3. 名称:testProxyHeaders\n描述:向Httpbin API的代理头测试端点发送请求。\n输入:{\"url\": \"必需。字符串。要发送请求的端点URL\", \"headers\": \"可选。对象。要包含在请求中的头部的键值对\"}\n输出:{\"response\": \"对象。从Httpbin API收到的HTTP响应,包括状态码、头部和正文\"}\n\n4. 名称:simulateStatusCode\n描述:向Httpbin API的状态码模拟端点发送请求,以测试应用程序如何处理特定的状态码。\n输入:{\"url\": \"必需。字符串。要发送请求的端点URL\", \"statusCode\": \"必需。整数。要模拟的HTTP状态码\"}\n输出:{\"response\": \"对象。从Httpbin API收到的HTTP响应,包括模拟的状态码、头部和正文\"}","Documentation": "{\"openapi\": \"3.0.0\", \"info\": {\"title\": \"Httpbin\", \"version\": \"1.0.0\", \"description\": \"一个简单的HTTP请求和响应服务\"}, \"paths\": {\"/sendHttpRequest\": {\"post\": {\"operationId\": \"sendHttpRequest\", \"description\": \"向Httpbin API发送带有指定方法、头部和数据的HTTP请求,用于测试目的。\", \"parameters\": [{\"name\": \"method\", \"in\": \"query\", \"description\": \"要使用的HTTP方法(GET、POST、PUT、DELETE、HEAD或PATCH)\", \"required\": true, \"schema\": {\"type\": \"string\", \"enum\": [\"GET\", \"POST\", \"PUT\", \"DELETE\", \"HEAD\", \"PATCH\"]}}, {\"name\": \"url\", \"in\": \"query\", \"description\": \"要发送请求的端点URL\", \"required\": true, \"schema\": {\"type\": \"string\"}}, {\"name\": \"headers\", \"in\": \"query\", \"description\": \"要包含在请求中的头部的键值对\", \"required\": false, \"schema\": {\"type\": \"object\"}}, {\"name\": \"data\", \"in\": \"query\", \"description\": \"要包含在请求体中的数据的键值对\", \"required\": false, \"schema\": {\"type\": \"object\"}}], \"requestBody\": {\"description\": \"HTTP请求正文\", \"required\": false, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\"}}}}, \"responses\": {\"200\": {\"description\": \"成功的响应\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"response\": {\"type\": \"object\", \"properties\": {\"status_code\": {\"type\": \"integer\"}, \"headers\": {\"type\": \"object\"}, \"body\": {\"type\": \"string\"}}}}}}}}}}}, \"/getClientRequestData\": {\"get\": {\"operationId\": \"getClientRequestData\", \"description\": \"检索客户端的请求数据,包括头部、表单数据、上传的文件和cookies。\", \"parameters\": [{\"name\": \"url\", \"in\": \"query\", \"description\": \"要发送请求的端点URL\", \"required\": true, \"schema\": {\"type\": \"string\"}}], \"responses\": {\"200\": {\"description\": \"成功的响应\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"requestData\": {\"type\": \"object\", \"properties\": {\"headers\": {\"type\": \"object\"}, \"form\": {\"type\": \"object\"}, \"files\": {\"type\": \"object\"}, \"cookies\": {\"type\": \"object\"}}}}}}}}}}}, \"/testProxyHeaders\": {\"post\": {\"operationId\": \"testProxyHeaders\", \"description\": \"向Httpbin API的代理头测试端点发送请求。\", \"parameters\": [{\"name\": \"url\", \"in\": \"query\", \"description\": \"要发送请求的端点URL\", \"required\": true, \"schema\": {\"type\": \"string\"}}, {\"name\": \"headers\", \"in\": \"query\", \"description\": \"要包含在请求中的头部的键值对\", \"required\": false, \"schema\": {\"type\": \"object\"}}], \"requestBody\": {\"description\": \"HTTP请求正文\", \"required\": false, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\"}}}}, \"responses\": {\"200\": {\"description\": \"成功的响应\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"response\": {\"type\": \"object\", \"properties\": {\"status_code\": {\"type\": \"integer\"}, \"headers\": {\"type\": \"object\"}, \"body\": {\"type\": \"string\"}}}}}}}}}}}, \"/simulateStatusCode\": {\"post\": {\"operationId\": \"simulateStatusCode\", \"description\": \"向Httpbin API的状态码模拟端点发送请求,以测试应用程序如何处理特定的状态码。\", \"parameters\": [{\"name\": \"url\", \"in\": \"query\", \"description\": \"要发送请求的端点URL\", \"required\": true, \"schema\": {\"type\": \"string\"}}, {\"name\": \"statusCode\", \"in\": \"query\", \"description\": \"要模拟的HTTP状态码\", \"required\": true, \"schema\": {\"type\": \"integer\"}}], \"requestBody\": {\"description\": \"HTTP请求正文\", \"required\": false, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\"}}}}, \"responses\": {\"200\": {\"description\": \"成功的响应\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"response\": {\"type\": \"object\", \"properties\": {\"status_code\": {\"type\": \"integer\"}, \"headers\": {\"type\": \"object\"}, \"body\": {\"type\": \"string\"}}}}}}}}}}}}, \"servers\": [{\"url\": \"https://httpbin.org/\"}]}","NLDocumentation": "sendHttpRequest: 向Httpbin API发送带有指定方法、头部和数据的HTTP请求,用于测试目的。\n参数:{\"method\": \"必需。字符串。其中之一:[GET、POST、PUT、DELETE、HEAD、PATCH]。要使用的HTTP方法(GET、POST、PUT、DELETE、HEAD或PATCH)。\", \"url\": \"必需。字符串。要发送请求的端点URL。\", \"headers\": \"对象。要包含在请求中的头部的键值对。\", \"data\": \"对象。要包含在请求体中的数据的键值对。\"}\n输出:成功的响应。\n - 格式:application/json\n - 结构:对象{response: 对象{status_code, headers: 对象, body}}\ngetClientRequestData: 检索客户端的请求数据,包括头部、表单数据、上传的文件和cookies。\n参数:{\"url\": \"必需。字符串。要发送请求的端点URL。\"}\n输出:成功的响应。\n - 格式:application/json\n - 结构:对象{requestData: 对象{headers: 对象, form: 对象, files: 对象, cookies: 对象}}\ntestProxyHeaders: 向Httpbin API的代理头测试端点发送请求。\n参数:{\"url\": \"必需。字符串。要发送请求的端点URL。\", \"headers\": \"对象。要包含在请求中的头部的键值对。\"}\n输出:成功的响应。\n - 格式:application/json\n - 结构:对象{response: 对象{status_code, headers: 对象, body}}\nsimulateStatusCode: 向Httpbin API的状态码模拟端点发送请求,以测试应用程序如何处理特定的状态码。\n参数:{\"url\": \"必需。字符串。要发送请求的端点URL。\", \"statusCode\": \"必需。整数。要模拟的HTTP状态码。\"}\n输出:成功的响应。\n - 格式:application/json\n - 结构:对象{response: 对象{status_code, headers: 对象, body}}\n","Function_Description": {"sendHttpRequest": "向Httpbin API发送带有指定方法、头部和数据的HTTP请求,用于测试目的。\n参数:{\"method\": \"必需。字符串。其中之一:[GET、POST、PUT、DELETE、HEAD、PATCH]。要使用的HTTP方法(GET、POST、PUT、DELETE、HEAD或PATCH)。\", \"url\": \"必需。字符串。要发送请求的端点URL。\", \"headers\": \"对象。要包含在请求中的头部的键值对。\", \"data\": \"对象。要包含在请求体中的数据的键值对。\"}\n输出:成功的响应。\n - 格式:application/json\n - 结构:对象{response: 对象{status_code, headers: 对象, body}}","getClientRequestData": "检索客户端的请求数据,包括头部、表单数据、上传的文件和cookies。\n参数:{\"url\": \"必需。字符串。要发送请求的端点URL。\"}\n输出:成功的响应。\n - 格式:application/json\n - 结构:对象{requestData: 对象{headers: 对象, form: 对象, files: 对象, cookies: 对象}}","testProxyHeaders": "向Httpbin API的代理头测试端点发送请求。\n参数:{\"url\": \"必需。字符串。要发送请求的端点URL。\", \"headers\": \"对象。要包含在请求中的头部的键值对。\"}\n输出:成功的响应。\n - 格式:application/json\n - 结构:对象{response: 对象{status_code, headers: 对象, body}}","simulateStatusCode": "向Httpbin API的状态码模拟端点发送请求,以测试应用程序如何处理特定的状态码。\n参数:{\"url\": \"必需。字符串。要发送请求的端点URL。\", \"statusCode\": \"必需。整数。要模拟的HTTP状态码。\"}\n输出:成功的响应。\n - 格式:application/json\n - 结构:对象{response: 对象{status_code, headers: 对象, body}}","components": ""},"Function_Projection": {"sendHttpRequest": ["/sendHttpRequest","post"],"getClientRequestData": ["/getClientRequestData","get"],"testProxyHeaders": ["/testProxyHeaders","post"],"simulateStatusCode": ["/simulateStatusCode","post"]},"Instructions": ["我正在排查一些请求,你能帮我发送一个POST请求到https://httpbin.org/post,带有头部\"Content-Type: application/json\"和数据'{\"name\": \"John Doe\", \"email\": \"john.doe@example.com\"}'吗?告诉我响应的详细信息。","你能发送一个GET请求到以下URL以检索我的请求信息吗:https://httpbin.org/get?我想看到我的头部、cookies和其他请求数据的详细信息。","我感觉到一些代理头未正确传递。你能发送一个请求到https://httpbin.org/headers,带有头部\"X-Forwarded-For: 192.168.1.1\"和\"X-Real-IP: 10.0.0.1\"吗?我想验证代理是否正确转发了头部。","我想看看我的应用程序如何响应404状态码。请发送一个请求到https://httpbin.org/status/404,并告诉我收到的状态码和响应头的详细信息。","我需要测试我的应用程序对接收到的\"PATCH\"请求的行为。你能发送一个PATCH请求到https://httpbin.org/patch,数据为'{\"field\": \"value\"}',然后告诉我响应吗?","让我们找出我的请求头是否被正确发送。发送一个请求到https://httpbin.org/get,并返回我发送的头部值的信息。","我想看看我的应用程序如何处理503 Service Unavailable错误。发送一个请求到https://httpbin.org/status/503,这样我就可以观察到我的应用程序的行为。","你能否发送一个DELETE请求到https://httpbin.org/delete,并告诉我响应状态码和头部吗?我正在检查我的应用程序是否正确处理了这种方法。","我需要测试我的应用程序在接收到cookies时的行为。你能发送一个GET请求到https://httpbin.org/cookies/set?sessionid=1234567890abcde,然后通过发送另一个GET请求到https://httpbin.org/cookies来检索cookie数据吗?","我想看看我的应用程序是否能正确处理\"HEAD\"请求。你能发送一个HEAD请求到https://httpbin.org/head,并给我响应头的详细信息吗?"],"Instances": [{"input": "我正在排查一些请求,你能帮我发送一个POST请求到https://httpbin.org/post,带有头部\"Content-Type: application/json\"和数据'{\"name\": \"John Doe\", \"email\": \"john.doe@example.com\"}'吗?告诉我响应的详细信息。","output": "POST请求成功,并且响应包含了请求中发送的数据。响应状态码为200。","Final Thought": "请求成功,响应包含了发送的数据。","intermediate_steps": [[["sendHttpRequest","{\"method\": \"POST\", \"url\": \"https://httpbin.org/post\", \"headers\": {\"Content-Type\": \"application/json\"}, \"data\": {\"name\": \"John Doe\", \"email\": \"john.doe@example.com\"}}"," 我需要使用sendHttpRequest工具发送POST请求。\n操作:sendHttpRequest\n操作输入:{\"method\": \"POST\", \"url\": \"https://httpbin.org/post\", \"headers\": {\"Content-Type\": \"application/json\"}, \"data\": {\"name\": \"John Doe\", \"email\": \"john.doe@example.com\"}}"],"状态码:200。响应:{\"response\":{\"status_code\":200,\"headers\":{\"Content-Type\":\"application/json\"},\"body\":\"{\\\"args\\\":{\\\"method\\\":\\\"POST\\\",\\\"url\\\":\\\"https://httpbin.org/post\\\",\\\"headers\\\":{\\\"'Content-Type'\\\":\\\"'application/json'\\\"},\\\"data\\\":{\\\"'name'\\\":\\\"'John Doe'\\\",\\\"'email'\\\":\\\"'john.doe@example.com'\\\"}},\\\"data\\\":\\\"\\\",\\\"files\\\":{},\\\"form\\\":{},\\\"headers\\\":{\\\"Accept\\\":\\\"*/*\\\",\\\"Content-Length\\\":\\\"48\\\",\\\"Content-Type\\\":\\\"application/x-www-form-urlencoded\\\",\\\"Host\\\":\\\"httpbin.org\\\",\\\"User-Agent\\\":\\\"curl/7.68.0\\\"},\\\"json\\\":{\\\"'name'\\\":\\\"'John Doe'\\\",\\\"'email'\\\":\\\"'john.doe@example.com'\\\"},\\\"method\\\":\\\"POST\\\",\\\"origin\\\":\\\"127.0.0.1\\\",\\\"url\\\":\\\"https://httpbin.org/post\\\"}\"}}"]]},{"input": "你能发送一个GET请求到以下URL以检索我的请求信息吗:https://httpbin.org/get?我想看到我的头部、cookies和其他请求数据的详细信息。","output": "是的,我可以发送一个GET请求到您提供的URL以检索您的请求信息。响应包含以下数据:头部、表单数据、上传的文件和cookies。","Final Thought": "响应包含用户的请求数据,包括头部、表单数据、上传的文件和cookies。","intermediate_steps": [[["getClientRequestData","{\"url\": \"https://httpbin.org/get\"}"," 我需要使用getClientRequestData工具检索用户的请求数据。\n操作:getClientRequestData\n操作输入:{\"url\": \"https://httpbin.org/get\"}"],"状态码:200。响应:{\"requestData\":{\"headers\":{\"Accept\":\"*/*\",\"User-Agent\":\"curl/7.58.0\",\"Host\":\"httpbin.org\"},\"form\":{},\"files\":{},\"cookies\":{}}}"]]},{"input": "我感觉到一些代理头未正确传递。你能发送一个请求到https://httpbin.org/headers,带有头部\"X-Forwarded-For: 192.168.1.1\"和\"X-Real-IP: 10.0.0.1\"吗?我想验证代理是否正确转发了头部。","output": "请求成功,并且响应正文包含了发送请求时的头部,包括X-Forwarded-For和X-Real-IP头部。这表明代理正确地转发了这些头部。","Final Thought": "代理正确地转发了请求头。","intermediate_steps": [[["testProxyHeaders","{\"url\": \"https://httpbin.org/headers\", \"headers\": {\"X-Forwarded-For\": \"192.168.1.1\", \"X-Real-IP\": \"10.0.0.1\"}}"," 我需要使用testProxyHeaders工具发送请求,以验证代理是否正确地传递了头部。\n操作:testProxyHeaders\n操作输入:{\"url\": \"https://httpbin.org/headers\", \"headers\": {\"X-Forwarded-For\": \"192.168.1.1\", \"X-Real-IP\": \"10.0.0.1\"}}"],"状态码:200。响应:{\"response\":{\"status_code\":200,\"headers\":{\"Content-Type\":\"application/json\"},\"body\":\"{\\\"headers\\\":{\\\"Accept\\\":\\\"*/*\\\",\\\"Content-Length\\\":\\\"84\\\",\\\"Content-Type\\\":\\\"application/json\\\",\\\"Host\\\":\\\"httpbin.org\\\",\\\"User-Agent\\\":\\\"curl/7.68.0\\\",\\\"X-Forwarded-For\\\":\\\"192.168.1.1\\\",\\\"X-Real-Ip\\\":\\\"10.0.0.1\\\"}}\"}}"]]},………………………………………………{"input": "我想看看我的应用程序是否能正确处理\"HEAD\"请求。你能发送一个HEAD请求到https://httpbin.org/head,并给我响应头的详细信息吗?","output": "请求成功,并且响应头包含了一些基本信息。","Final Thought": "应用程序返回了基本的响应头。","intermediate_steps": [[["sendHttpRequest","{\"method\": \"HEAD\", \"url\": \"https://httpbin.org/head\"}"," 我需要使用sendHttpRequest工具发送HEAD请求,以查看应用程序的响应头。\n操作:sendHttpRequest\n操作输入:{\"method\": \"HEAD\", \"url\": \"https://httpbin.org/head\"}"],"状态码:200。响应:{\"response\":{\"status_code\":200,\"headers\":{\"Date\":\"Mon, 02 Aug 2021 14:19:01 GMT\",\"Content-Type\":\"text/html; charset=utf-8\",\"Content-Length\":\"0\",\"Connection\":\"keep-alive\",\"Server\":\"gunicorn/19.9.0\",\"Access-Control-Allow-Origin\":\"*\",\"Access-Control-Allow-Credentials\":\"true\"},\"body\":\"\"}}"]]}]}
]{"Name": "天气数据接口","Description": "提供丰富的天气相关数据。","Link": "https://www.tianqiapi.com/","Category": "天气","Introduction": "天气数据接口是一个开放、简单且高效的 API,可提供全球范围的天气相关数据。通过此 API,用户可以轻松地访问实时、准确的天气信息,包括温度、湿度、风速、风向和天气情况。其主要功能包括:1)实时天气:提供全球范围内各个城市的实时天气信息。2)天气预报:提供七天的天气预报,帮助用户做出合理安排。3)生活指数:提供空气质量、穿衣指数等生活相关的天气数据,让用户生活更加便捷。4)天气警报:提供严重天气的预警信息,让用户提前做好防范。总体而言,天气数据接口是一个全面、实时、可靠的天气数据解决方案。","Functions":………………………………………………

ToolAlpaca的安装和使用方法

1、数据集生成

克隆此仓库并安装包

git clone git@github.com:tangqiaoyu/ToolAlpaca.git
cd ToolAlpaca
pip install -r requirements.txt

下载public-api数据

python tool_maker/preprocess_public_apis.py -api data/public_apis.json

下载公共 API 数据

python tool_maker/preprocess_public_apis.py -api data/public_apis.json

2、工具集构建

export PYTHONPATH=$PYTHONPAT:$(pwd)
export OPENAI_API_KEY=""
python tool_maker/get_elements.py -api data/public_apis.json -out ./data
python tool_maker/natural_language_documentation.py -api ./data/api_data.json

工具使用实例生成

python instance_generation/instruction.py -api ./data/api_data.json -out ./data
python instance_generation/simulator.py -api ./data/api_data.json
python instance_generation/generation.py -api ./data/api_data.json -out ./data --use_cache

3、训练

要训练 Toolapaca,我们需要创建一个提示以组织数据集,使其以标准 SFT 训练代码可读的格式呈现,类似于 build_dataset.py 中所做的操作。之后,我们可以使用标准的 SFT 方法进行训练,仅优化思想、行动和行动输入的损失。

deepspeed --num_gpus=2 --master_port=12345 train.py \--deepspeed ${deepspeed config path} \--model_name_or_path ${path to base model like vicuna-7b}  \--data_path ${data path} \--bf16 True \--output_dir outputs/vicuna-7b-toolalpaca/ \--num_train_epochs 3 \--per_device_train_batch_size 32 \--per_device_eval_batch_size 1 \--gradient_accumulation_steps 2 \--evaluation_strategy "no" \--save_strategy "epoch" \--save_total_limit 10 \--learning_rate 2e-5 \--weight_decay 0. \--warmup_ratio 0.03 \--lr_scheduler_type "cosine" \--logging_steps 1 \--tf32 True \--model_max_length 2048 \--gradient_checkpointing True \--lazy_preprocess True

您可以在 huggingface hub 上找到我们的模型:ToolAlpaca-7B,ToolAlpaca-13B。

4、评估

对于模拟的 API:

# 启动 API 模拟器
python instance_generation/simulator.py -api ./data/eval_simulated.json
# 获取 LLM 输出
python instance_generation/generation.py \-api ./data/eval_simulated.json \-out ./eval \-llm TangQiaoYu/ToolAlpaca-13B \--agent_prompt test_v1 \--use_cache
# 使用类似 GPT-4 的 LLM 进行评估
python evaluation.py -api ${api_data_path} -out ./eval

对于真实的 API:您应该注册网站并获取 API_KEYs。


python instance_generation/generation.py \-api ./data/eval_real.json \-out ./data \-llm TangQiaoYu/ToolAlpaca-13B \--agent_prompt test_v1 \--real
python evaluation.py -api ${api_data_path} -out ./eval

ToolAlpaca的案例应用

LLMs之ChatGLM3:ChatGLM3源码解读(format_tool_alpaca.py)——实现将ToolAlpaca训练数据文件(解析JSON格式)转换为一个适合于训练对话模型的格式文件(清晰分隔不同角色的消息+包含了工具的使用和观察结果,tools-conversations【user-assistant-tool{tool_name/parameters/observation}-assistant】)

https://yunyaniu.blog.csdn.net/article/details/137637780

相关文章:

LLMs之ToolAlpaca:ToolAlpaca(通用工具学习框架/工具使用语料库)的简介、安装和使用方法、案例应用之详细攻略

LLMs之ToolAlpaca:ToolAlpaca(通用工具学习框架/工具使用语料库)的简介、安装和使用方法、案例应用之详细攻略 目录 ToolAlpaca的简介 0、《ToolAlpaca: Generalized Tool Learning for Language Models with 3000 Simulated Cases》翻译与解读 1、数据集列表 2…...

TCP/IP协议介绍

TCP/IP协议 先看:程序员必备基础知识-TCP/IP协议详解.(超详细) 太厉害了,终于有人能把TCP/IP协议讲的明明白白了! 面试官:如何理解TCP/IP协议? 一个很全的介绍博客:史上最全的TCP/IP协议原理 对TCP三次握…...

选择排序解读

在计算机科学中,排序算法是一种将数据元素按照某种顺序排列的算法。今天,我们要探讨的是选择排序(Selection Sort),这是一种简单直观的排序方法,通过不断选择剩余元素中的最小(或最大&#xff0…...

Vue项目自动注入less、sass、scss、stylus全局变量

一、Vue2项目 // vue.config.js const path require(path) module.exports {css: {loaderOptions: {// 给 sass-loader 传递选项sass: {// / 是 src/ 的别名// 所以这里假设有 src/assets/style/var.sass 这个文件// 注意:在 sass-loader v8 中,这个选…...

DXP学习002-PCB编辑器的环境参数及电路板参数相关设置

目录 一,dxp的pcb编辑器环境 1,创建新的PCB设计文档 2,PCB编辑器界面 1)布线工具栏 2)公用工具栏 3)层标签栏 ​编辑 3,PCB设计面板 1)打开pcb设计面板 4,PCB观…...

Flutter 使用flutter_swiper_null_safety 实现轮播图

目录 引入flutter_swiper_null_safety 在pubspec.yaml文件中dependencies下添加以下依赖 然后执行命令进行下载 实现轮播图 引入flutter_swiper_null_safety 在pubspec.yaml文件中dependencies下添加以下依赖 flutter_swiper_null_safety: ^1.0.2 然后执行命令进行下载 flu…...

Maven的scope详解

依赖范围介绍 maven 项目不同的阶段引入到classpath中的依赖是不同的,例如,编译时,maven 会将与编译相关的依赖引入classpath中,测试时,maven会将测试相关的的依赖引入到classpath中,运行时,mav…...

如何修复在Deepin系统中因`apt-get autoremove systemd`导致的启动问题

博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典!《IDEA开发秘籍》 — 提升你的IDEA技能!《100天精通鸿蒙》 …...

LeetCode 每日一题 ---- 【2923. 找到冠军 I】

LeetCode 每日一题 ---- 【2923. 找到冠军 I】 2923.找到冠军I方法一:暴力求解 2923.找到冠军I 方法一:暴力求解 从头遍历一遍二维数组,如果发现 gird[x][y] 1,说明 x 队赢过 y 队,下面我们就只需要子再判断一下是否…...

CMakeLists常用命令

# 设置cmake最低版本 cmake_minimum_required(VERSION 3.2)# project命令用于指定cmake工程的名称,实际上,它还可以指定cmake工程的版本号(VERSION关键字)、 #简短的描述(DESCRIPTION关键字)、主页URL&…...

英语 倒装结构中的主语和助动词,用于强调 inversion

I am used to travelling by air and only on one occasion have I ever felt frightened. 1、翻译为中文:我习惯了乘坐飞机旅行,只有在一次经历中我感到过害怕。 2、分析时态和句子语法是否正确:该句子使用了现在完成时(I am u…...

SQL注入---HTTP报头注入

文章目录 目录 文章目录 一.uagent注入 二.refeer注入 三.Cookie注入 前文中提到万能密钥的工作原理,然而万能密钥仅在源代码中没有代码审计,此时才被称之为万能密钥,而代码中有代码审计时需要分以下几种情况讨论 一.uagent注入 先看代码&a…...

docker安装sentinel

文章目录 前言安装docker指令安装制作docker-compose.yaml文件 查看网站 前言 Sentinel 是阿里巴巴开源的一款轻量级流量控制和熔断降级工具,可用于保护分布式系统中的服务。它可以帮助开发人员解决在分布式架构中面临的流量管理、服务保护、性能优化等问题。 安装…...

达梦的归档日志参数ARCH_RESERVE_TIME测试

达梦的参数ARCH_RESERVE_TIME测试 前面有提到和oracle相比,达梦的归档日志相关参数有个比较特别,可以通过设置它去规定归档日志的保留时间。 ARCH_RESERVE_TIME:归档日志保留时间,单位分钟,取值范围 0~2147483647。只…...

Linux网络 基础概念

目录 背景知识 互联网的发展 局域网和广域网 网络拓扑 网络协议栈 协议的概念 网络协议的分层 网络与操作系统的联系 网络传输的基本流程 IP地址和MAC地址 以太网通信 数据包的封装和分用 跨网段传输 背景知识 互联网的发展 计算机网络是计算机技术和通信技术相…...

装机指导。

everything winrar snipaste cmake git tortoisegit tortoisesvn inno setup vs2022 安装的时候注意sdk路径一定要默认!! 否则你会发现在你的sdk安装路径的根盘符下会多出一个Windows Kits,强迫症接受不了 默认的会跟已有的装在一起…...

解决windows docker context deadline exceeded问题

首先确保开启了wsl。cmd 直接输wsl,进入虚拟命令行代表开启 配置镜像 内容如下: {"builder": {"gc": {"defaultKeepStorage": "20GB","enabled": true}},"experimental": false,"f…...

django基于python的法院执法案件管理系统

本课题使用Python语言进行开发。代码层面的操作主要在PyCharm中进行,将系统所使用到的表以及数据存储到MySQL数据库中,方便对数据进行操作本课题基于WEB的开发平台,设计的基本思路是: 框架:django/flask 后端&#xff…...

tcp early retransmit 和 rack 中神奇的 1/4 minrtt

雨中跑步十公里,沿河看柳,发了一则朋友圈: 为什么采用 1/4 minrtt 作为重传和探测的延时,上图解释的已经很清楚了,主要还是怕乱序,关于乱序的度量,上图解释得非常清楚,乱序预期可在…...

【强化学习实践】Gym+倒立单摆+创建自己的环境

一、Gym Gym是OpenAI开发的一个强化学习算法测试环境集合包。Gym提供了多种标准的环境,包括经典的游戏(如Atari游戏)、机器人模拟任务以及其他各种类型的问题,供开发者测试和训练强化学习智能体。在Gym环境中,开发者可…...

实习记录小程序|基于SSM的实习记录小程序设计与实现(源码+数据库+文档)

知识管理 目录 基于SSM的习记录小程序设计与实现 一、前言 二、系统设计 三、系统功能设计 1、小程序端: 2、后台 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博主介绍:✌️大厂码农|毕…...

Netty NioEventLoop详解

文章目录 前言类图主要功能NioEventLoop如何实现事件循环NioEventLoop如何处理多路复用Netty如何管理Channel和Selector管理Channel管理Selector注意事项 前言 Netty通过事件循环机制(EventLoop)处理IO事件和异步任务,简单来说,就是通过一个死循环&…...

互联网大厂常见面试题目

1. CPU 的内存结构分为哪几层,分别是用于放什么数据的,如果一个函数里面有全局变量,局部变量和静态变量数据是如何存放的 2.C多态的实现原理是什么,父类是如何找到子类的虚函数实现的 3.操作系统中的虚拟内存实现机制是什么&…...

TechTool Pro for Mac v19.0.3中文激活版 硬件监测和系统维护工具

TechTool Pro for Mac是一款专为Mac用户设计的强大系统维护和故障排除工具。它凭借全面的功能、高效的性能以及友好的操作界面,赢得了广大用户的信赖和好评。 软件下载:TechTool Pro for Mac v19.0.3中文激活版 作为一款专业的磁盘和系统维护工具&#x…...

Linux-docker安装数据库redis

1.拉取redis镜像 docker pull redis # 下载最新的redis版本 docker pull redis:版本号 # 下载指定的redis版本ps:我这是已经下载最新版本的redis 2.查看redis镜像 docker images3.创建挂在路径并授权 mkdir -p /usr/local/redis/data mkdir -p /usr/local…...

LisJson解析配置表

每日一句:南来北往,不辜负生活,不迷失方向 [{ "ID": 0, "Name": "SmallPeople", "InitHealth": 100, "CostGold": 0, "MoveSpeed": 1…...

剑指offer10.斐波那契数列(动态规划)

写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项(即 F(N))。斐波那契数列的定义如下: F(0) 0, F(1) 1 F(N) F(N - 1) F(N - 2), 其中 N > 1. 斐波那契数列由 0 和 1 开始&#x…...

HarmonyOS实战开发-WebSocket的使用。

介绍 本示例展示了WebSocket的使用,包括客户端与服务端的连接和断开以及客户端数据的接收和发送。 WebSocket连接:使用WebSocket建立服务器与客户端的双向连接,需要先通过createWebSocket方法创建WebSocket对象,然后通过connect…...

【前缀合】Leetcode 连续数组

题目解析 525. 连续数组 寻找一个子数组,这个子数组中包含相同数目的0和1,但是这个子数组需要最长的 算法讲解 只需在[0,i]寻找一段区间使得这一段区间的和也等于sum即可 细节问题:1. 这里的哈希表的value存的是下标,因为需要找…...

一些优雅的算法(c++)

求最大公约数&#xff1a;辗转相除法 int gcd(int a,int b){return b0?a:gcd(b,a%b); }求最小公倍数&#xff1a;两整数之积除以最大公约数 int lcm(int a, int b){return a*b / gcd(a, b); }十进制转n进制&#xff1a; char get(int x){if(x<9){return x0;}else{return…...