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

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

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

相关文章

基于arcgis /envi PCA(主成分分析)实现过程

基于arcgis /envi PCA(主成分分析)实现过程 1 提取研究范围 2对研究范围进行重采样 (根据数据情况进行选做,如数据较大建议进行该步骤操作) 3 对研究范围内数据进行归一化处理 4 将空值替换为0 5 对同期不同要素数据进行波段合成 对波段…

Yii2 路由美化访问需要加s

不得不说yii真是反人类,怪不得现在都不维护了,今天解析下路由美化下的路由访问问题。 设置main.php配置文件 urlManager > [enablePrettyUrl > true, // 启用 URL美化showScriptName > false, // 隐藏入口文件index.phpenableStrictParsing…

MySql数据库从0-1学习-第三天多表设计学习

项目开发中,在进行数据库表结构设计时,会根据业务需求及业务模块之间的关系,分析并设计表结构,由于业务之间相互关联,所以各个表结构之间也存在着各种联系,基本上分为三种: 一对多(多对一)多对多一对一 一对多 需求:根据需求,完成部门和员工表的设计 一对多,很多人会使用外键,…

如何分析 Java 开源项目源码?

准备深入分析一个 Java 开源项目的源码时,可以通过下面这些步骤和技巧,更系统地理解和分析项目源代码: 1. 确定分析目标和范围: 在开始分析之前,明确你的目标,确定你要深入了解的功能或模块。这有助于你有…

零基础转行网络安全,高薪梦想可以实现吗?

零基础转行网络安全,学会网络安全相关知识,可以从事以下岗位: 1、安全运维: 负责服务器及终端设备的维护 负责业务的安全风险评估和漏洞挖掘 负责安全事件的检查和实施 2、渗透测试 负责渗透测试、风险评估工作的实施 提供…

《web应用技术》第三次课后练习

实验目的: 1、springboot入门程序撰写并启动 2、使用postman练习参数的获取。 参考:Day04-10. Web入门-SpringBootWeb-快速入门_哔哩哔哩_bilibili

【星期计算】蓝桥杯

–> 因为这里是结果填空题,我们直接暴力用java自带的BigInteger类。 /*** 试题 A: 星期计算** 本题总分:5 分* 【问题描述】* 已知今天是星期六,请问20的22次方天后是星期几?* 注意用数字 1 到 7 表示星期一到星期日。* * 【答…

2024年在阿里云申请SSL证书多少钱?免费版不要钱,付费版352元/年

SSL证书是实现网站https访问必须购买的云安全类产品,以阿里云为代表的各大云服务商也都提供申请SSL证书服务,2024年阿里云既提供免费版的SSL证书,也有付费版的,最低只要352元/年。 一、阿里云申请免费版SSL证书申请流程&#xff…

中国平安金融壹账通交付管理中心总经理崔羽先生受邀为第十三届中国PMO大会演讲嘉宾

全国PMO专业人士年度盛会 中国平安金融壹账通交付管理中心总经理崔羽先生受邀为PMO评论主办的2024第十三届中国PMO大会演讲嘉宾,演讲议题为“项目管理成与败,人才是第一要素”。大会将于5月25-26日在北京举办,敬请关注! 议题简要…

任推邦七款热门拉新项目,普通人逆袭路径,月入6个W!

任推邦 不扣量的项目拉新平台 1UC网盘 —网推 价格上涨行业置顶 ,大厂项目 市场空白,预算充足,不限量 适合自媒体/抖快等渠道 上传下载不限速 2迅雷网盘—网推 官方核心服务商,大厂项目 群组内测(新增转播收…

【生产实习-毕设】pyspark学生成绩分析与预测(上)

注意:数据由实习单位老师提供(需要自行搜索下载),页面美化为下载模板。 项目介绍:前端页面输入影响成绩的属性,预测出成绩,并作可视化展示——属性对成绩的影响。使用python pyspark 进行数据预…

【Linux 学习】进程优先级和命令行参数!

1. 什么是优先级? 指定进程获取某种资源(CPU)的先后顺序; Linux 中优先级数字越小,优先级越高; 1.1 优先级和权限的区别? 权限 : 能不能做 优先级: 已经能了,但是获…

选择自动化工具是一个关键的决策过程

好的自动化软件测试工具,不仅可以有效的缩短全生命周期的交付周期,还可以提高测试的有效性,还可以保证更好的高质量的交付。工具的选型是一项重要的决策过程,工具的采用涉及到企业的效率、成本和长期发展。 1、需求分析 确组织希…

AI大模型探索之路-应用篇10:Langchain框架-架构核心洞察

目录 前言 一、LangChain设计目标 二、LangChain设计之道 三、LangChain典型应用 1、简单的问答Q&A over SQL CSV: 2、聊天机器人Chatbots: 3、总结摘要Summarization: 4、网页爬虫Web scraping: 5、本地知识库(Q&A with RAG): 三、LangChain架构…

(React Hooks)前端八股文修炼Day9

一 对 React Hook 的理解,它的实现原理是什么 React Hooks是React 16.8版本中引入的一个特性,它允许你在不编写类组件的情况下,使用state以及其他的React特性。Hooks的出现主要是为了解决类组件的一些问题,如复杂组件难以理解、难…

用于深度调试的 GPT:AI 如何改变代码质量

GPT-4革命:未来编程必备的AI调试专家 介绍 人工智能在编程中的概述:人工智能 (AI) 在编程中的集成彻底改变了开发人员编码和解决问题的方式。 GPT 等人工智能工具在软件开发的各个阶段(包括调试)提供前所未有的帮助。 GPT在调试中…

玄子Share-使用 Pycharm 执行 Shell 脚本

玄子Share-使用 Pycharm 执行 Shell 脚本 Why? 为什么我要使用 Pycharm 执行 Shell 脚本呢,我直接使用 Linux 不行吗? 使用 Pycharm 执行 Shell 脚本的好处 我们的宿主机都是 WIndows 平台,若想编译 Shell 脚本,我…

【LeetCode】动态规划类题目详解

所有题目均来自于LeetCode,刷题代码使用的Python3版本 动态规划 问题分类 如果某一个问题有重叠的子问题,则使用动态规划进行求解是最有效的。 动态规划中每一个状态一定是由上一个状态推导出来的,这一点区别于贪心算法 动态规划五部曲 确…

CentOS 各个版本下载地址

https://mirror.nsc.liu.se/centos-store/7.6.1810/isos/x86_64/ CentOS-7-x86_64-DVD-1810.iso 2018-Nov-26 00:55:20 4.2G application/octet-stream 正常版 CentOS-7-x86_64-DVD-1810.torrent 2018-Dec-03 16:03:27 85.9K application/x-bittorrent CentOS-7-x86_64-Every…

打工人第一次带团队,吐血整理的4个管理思路

作为一个一线的基层管理者,我带领着一个5-8人的小团队。保障产品的稳定性和需求迭代的效率,成为了我的工作日常。 同时,对下要管理好团队的发展和团队成员能力的提升,对上要确保团队目标的达成及效果的呈现。虽然只是一个小小的团…