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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

PDF文件内容可以转成word版本吗?答案是肯定的 PDF转word的方法

一,PDF转Word的必要性 随着信息技术的飞速发展,文档的格式和转换成为了我们日常生活和工作中不可避免的一部分。其中,PDF转Word的需求尤为突出。PDF作为一种跨平台的文档格式,具有阅读效果好、不易被篡改等优点,但在编…

科技论文和会议录制高质量Presentation Video视频方法

一、背景 机器人领域,许多高质量的期刊和会议(如IEEE旗下的TRO,RAL,IROS,ICRA等)在你的论文收录后,需要上传一个Presentation Video材料,且对设备兼容性和视频质量有较高要求&#…

个人劳保用品穿戴检测系统 安全帽、工服、面罩、防护手套、防护鞋、安全背带穿戴检测等

背景 在工业生产、医疗护理、消防救援等高风险领域,正确穿戴个人防护装备或劳保用品(PPE:Personal Protective Equipment)是保障人员安全的重要措施,如安全帽、反光衣、安全背带等。然而,现实中往往会出现…

最新ChatGPT网站系统源码Midjourney-AI绘画,GPTs,AI换脸支持

一、前言 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统,支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美,那么如何搭建部署AI创作ChatGPT?小编这里写一个详细图文教程吧。已支持GPT…

微服务学习(黑马)

学习黑马的微服务课程的笔记 导学 微服务架构 认识微服务 SpringCloud spring.io/projects/spring-cloud/ 服务拆分和远程调用 根据订单id查询订单功能 存在的问题 硬编码 eureka注册中心 搭建eureka 服务注册 在order-service中完成服务拉取 Ribbon负载均衡 Nacos注册中心…

mars3d.MaterialType.Image2修改配置面状:图片2的speed数值实现动画效果说明

摘要: mars3d.MaterialType.Image2修改配置面状:图片2的speed数值实现动画效果说明 前提: 1.在示例中,尝试给mars3d.MaterialType.Image2材质的图片加上speed参数,实现动画效果,但是没有看到流动效果说明…

AI工具导航网站比较分析

介绍 本篇博客将从FutureTools和GPT-3 Demo两个AI工具导航网站出发,进行全面比较分析,为读者提供深入了解和选择适合需求的信息。同时针对需求提供标题和内容。 标题 "AI工具导航网站:FutureTools与GPT-3 Demo的全面比较分析" 内容…

背 单 词 (考研词汇闪过)

单词: 买考研词汇闪过 研究艾宾浩斯遗忘曲线 https://www.bilibili.com/video/BV18Y4y1h7YR/?spm_id_from333.337.search-card.all.click&vd_source5cbefe6dd70d6d84830a5891ceab2bf9 单词方法 闪记背两排(5min)重复一遍(2mi…

MySQL数据库的详解(1)

DDL(数据库操作) 查询 查询所有数据库:show databases;当前数据库:select database(); 创建 创建数据库:create database [ if not exists] 数据库名 ; 使用 使用数据库:use 数据库名 ; 删除 删除数…

Nginx 基础应用实战 06 构建一个PHP的站点

Nginx 基础应用实战 06 构建一个PHP的站点 使用套件 lmnp https://oneinstack.com 安装完成后 搭建bbs https://www.discuz.net/ 搭建博客 https://wordpress.com https://cn.wordpress.org/ CMS系统 http://www.dedecms.com/ 构建Lua站点 Openresty Nginx Lua …

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

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

2024最新AI系统【SparkAI】,ChatGPT商业运营版系统源码/ai问答/ai绘画/GPTs,SunoAI音乐生成大模型/带分销AIGC搭建部署教程

一、文章前言 SparkAi创作系统是基于ChatGPT进行开发的ai智能问答系统和Midjourney-AI绘画系统,支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美,那么如何搭建部署AI创作ChatGPT?小编这里写一个详细图文教程吧。已…

利用Python实现可视化交互界面:Dash

Dash是一个低代码数据框架,用Python实现可视化交互界面,不用写Javascript,开源,支持回调、HTML组件等功能。 安装 pip install dash使用 # Import packages from dash import Dash, html, dash_table, dcc, callback, Output, …

MySQL压力测试最佳实践(16/16)

MySQL压力测试 基本概述 sysbench是一个模块化的、跨平台、多线程基准测试工具,主要用于评估测试各种不同系统参数下的数据库负载情况。项目地址:http://github.com/akopytov/sysbench 工具安装 1.1 在线安装(CentOS)&#xf…

Leetcode110_平衡二叉树

1.leetcode原题链接:. - 力扣(LeetCode) 2.题目描述 给定一个二叉树,判断它是否是 平衡二叉树 示例 1: 输入:root [3,9,20,null,null,15,7] 输出:true示例 2: 输入:…

OJ刷题日记:1、双指针(1)

目录 1、283.移动零 2、1089.复写零 3、202.快乐数 1、283.移动零 题目: 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 ,必须在不复制数组的情况下原地对数组进行操作。 …

牛客小白月赛90(A,B,C,D,E,F)

比赛链接 官方题解(视频) 这场偏思维,感觉好像没啥算法。E需要动态维护前 k k k 小,F是个离散化加dp,状态和递推方程比较 非常规,建议还是看一下涨涨姿势。 A 小A的文化节 思路: 签到 cod…

我国量子信息科技创新发展面临的挑战及建议——基于中美对比视角的分析

2024年2月,中国科学技术发展战略院慕慧娟博士、丁明磊研究员及光子盒顾成建一起在《科技管理研究》上发表文章——《我国量子信息科技创新发展面临的挑战及建议:基于中美对比视角的分析》。 在此,我们整理并发布这篇文章,欢迎感兴…

springCloudAlibaba集成sentinel实战(超详细)

一、Sentinel介绍 1. 什么是Sentinel Sentinel是阿里开源的项目,提供了流量控制、熔断降级、系统负载保护等多个维度来保障服务之间的稳定性。 分布式系统的流量防卫兵: 随着微服务的普及,服务调用的稳定性变得越来越重要。Sentinel以“流…

实现创建线程的五种写法

创建线程的五种写法 1、通过继承Thread类并实现run方法创建一个线程package 创建线程;2、通过实现Runnable接口,并实现run方法的方法创建一个线程3、通过Thread匿名内部类创建一个线程4、通过Runnable匿名内部类创建一个线程5、通过Lambda表达式的方式创建一个线程 …