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

news2024/11/15 7:52:01

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.coloradmin.cn/o/1596425.html

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

相关文章

连续上榜!Coremail连续十一次入选《中国网络安全行业全景图》

4月12日,国内专业权威咨询机构——安全牛,正式发布第十一版《中国网络安全行业全景图》(以下简称“全景图”)。该全景图包含了16项一级安全分类,108项二级安全分类,共收录454家网络安全厂商。 Coremail作为…

【保姆级】2024年OnlyFans订阅指南

OnlyFans是一个独特的社交媒体平台,它为创作者和粉丝提供了一个互动交流的空间。通过这个平台,创作者可以分享他们的独家内容,而粉丝则可以通过订阅来支持和享受这些内容。如果你对OnlyFans感兴趣,并希望成为其中的一员&#xff0…

D365开发-在视图按钮的js里,引用别的js里的公共方法

公共方法写法: "use strict"; var JJMC window.JJMC || {}; JJMC.SamMCommon JJMC.SamMCommon || {}; (function () { this.cloneRecord function (excludeAttrbuteNames){ / } }).call(JJMC.SamMCommon); 然后在需要调方法的command里面,之…

PNPM 8管理Node版本,卸载了旧版本Node找不到PNPM

前言 用 pnpm env 来管理 node 的版本,安装了新版本之后,卸载了之前的旧版本,调用 pnpm 报错 异常截图 解决方式 从终端获取报错文件到路径,进入编辑修改错误的 node bin 路径为正确的 node 启动路径即可也就是修改 "/Use…

vite+vue3+antDesignVue 记录-持续记录

记录学习过程 持续补充 每天的学习点滴 开始时间2024-04-12 1,报错记录 (1)env.d.ts文件 解决方法: 在env.d.ts文件中添加以下代码(可以看一下B站尚硅谷的讲解视频) declare module *.vue {import { Defi…

SpringBoot基于RabbitMQ实现消息延迟队列方案

知识小科普 在此之前,简单说明下基于RabbitMQ实现延时队列的相关知识及说明下延时队列的使用场景。 延时队列使用场景 在很多的业务场景中,延时队列可以实现很多功能,此类业务中,一般上是非实时的,需要延迟处理的&a…

宠物品牌出海 丨战略布局这样做让你爆单不停

宠物用品市场在电商领域增长迅速。面对国内市场竞争激烈,同质化严重,不少宠物用品公司开始寻求新的市场增长点,将目光转向国外市场。本文将探讨宠物品牌海外扩张的商机和策略,以便帮助其他公司应对挑战,抓住国际市场的…

利用国产库libhv动手写一个web_server界面(二)

目录 一、配置参数解析与响应 1.读取参数 2.设置参数 3.恢复默认参数 二、整体的界面实现以及交互效果 三、关于yaml文件乱码问题解决 四、参考文章 一、配置参数解析与响应 使用cJSON解析库,解析接收到的JSON数据字段,区别接收到的配置参数是请…

数据结构--选择排序

1、选择排序 1.1 基本认识 1.1.1 基本概念 选择排序是一种简单直观的排序算法,无论什么数据进去都是 O(n) 的时间复杂度。 1.1.2 算法步骤 (1)首先在未排序序列中找到最小(大)元素,存放到排序序列的起…

【VTKExamples::Meshes】第十期 Decimation

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ:870202403 公众号:VTK忠粉 前言 本文分享VTK样例Decimation,并解析接口vtkDecimatePro,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步! 你的点赞就是我的动力(^U^)ノ~YO…

linux项目部署 解决Nginx浏览器刷新出现404,但是不刷新是能够正常请求成功

文章目录 目录 文章目录 安装流程 小结 概要安装流程技术细节小结 概要 提示:部署成功,访问登录页面登录也成功,强制刷新浏览器报404问题 进入到系统 刷新页面 解决流程 参考如图,再下面添加这条配置信息 location / {try_file…

macos 查看 远程服务器是否开放某个端口

想要使用mac查看远程服务器某个端口是否开发&#xff0c;可通过 nc 命令&#xff0c;如下&#xff1a; nc -zv <服务器IP> <端口号>如果该端口开发&#xff0c;结果为&#xff1a;succeeded! Connection to <服务器IP> port <端口号> [类型] succeed…

Jetson TX2刷机踩坑实录

刷机前准备 进行跳线 从右往左2号与3号跳线进行刷机 在主机&#xff08;非小车&#xff09;上安装ubuntu系统&#xff0c;用于刷机 安装虚拟机时&#xff0c;遇到无法自适应屏幕的问题&#xff1a; 点击屏幕下方安装vmtools的按钮&#xff1a; 生成了一个DVD文件&#xff1…

EasyImage2.0 简单图床开源 多功能 简单易用图床系统源码

内容目录 一、详细介绍二、效果展示1.部分代码2.效果图展示 三、学习资料下载 一、详细介绍 支持API 支持仅登录后上传 支持设置图片质量 支持压缩图片大小 支持文字/图片水印 支持设置图片指定宽/高 支持上传图片转换为指定格式 支持限制最低宽度/高度上传 支持上传其他文件格…

Mac 软件清单

~自留备用~ Macbook用了几年之后, 512G的内置硬盘有些紧张了, 这几天总是提示空间不足, 就重装了下系统, 重装之后竟然不记得有些软件的名字和下载链接, 特此记录 Office 办公套件 直接从微软官网下载Office 安装包https://officecdnmac.microsoft.com/pr/C1297A47-86C4-4C1F…

在Docker里面修改mysql的密码(8.0以上版本)

介绍 我们在阿里或者华为的服务器上安装了mysql而且还公开了端口3306恰好你创建的容器的端口也是3306;那么我建议你修改mysql的密码,而且越复杂越好,因为我就被黑客给攻击过 修改密码 首先我们要启动好mysql容器 进入容器内部 **docker exec -it mysql bash ** 登入初始…

视频号正式推出电商项目,不需要自己直播,也能变现成功!

大家好&#xff0c;我是电商笨笨熊 视频号推出电商项目&#xff0c;这一举动又成了电商圈的热谈&#xff1b; 作为一个不需要自己直播也能卖货的变现方式&#xff0c;对于普通人确实是一个风口&#xff0c;解决了众多玩家想要利用直播变现但又没有相关经验&#xff0c;没有粉…

Testng测试框架(6)--@Factory动态地创建测试类的实例

工厂允许您动态地创建测试。例如&#xff0c;假设您想创建一个测试方法&#xff0c;该方法将多次访问网站上的某个页面&#xff0c;并且您希望使用不同的值来调用它。 public class TestWebServer {Test(parameters { "number-of-times" })public void accessPage(…

vs配置opencv和libtorch

网上很多教程刚开始都让切release模式&#xff0c;博主最初因为没找到哪里切换&#xff0c;所以用的默认的debug模式。他们配置方法一样&#xff0c;其区别在于 Debug&#xff1a;调试版本&#xff0c;包含调试信息&#xff0c;所以容量比Release大很多&#xff0c;并且不进行任…