人类具有创造和利用工具的能力,使得我们可以突破身体的限制,探索更广阔的世界。
人工智能基础模型也类似,如果仅靠训练阶段得到的权重,使用场景就会非常受限,而最近提出的工具学习(tool learning),将特定领域的专用工具与大规模基础模型相结合,可以实现更高的效率、性能。
不过目前工具学习的相关研究还不够深入,也缺乏相关的开源数据和代码。
最近,清华大学自然语言处理实验室等支持的开源社区OpenBMB (Open Lab for Big Model Base)发布了ToolBench项目,可以帮助开发者构建开源、大规模、高质量的指令调优数据,促进构建具有通用工具使用能力的大型语言模型。
仓库链接:https://github.com/OpenBMB/ToolBench
ToolBench仓库中提供了相关数据集、训练和评估脚本,以及在ToolBench上微调的功能模型ToolLLaMA,具体特点为:
1. 支持单工具和多工具方案
其中单工具设置遵循LangChain提示风格,多工具设置遵循AutoGPT的提示风格。
2. 模型回复不仅包括最终答案,还包含模型的思维链过程、工具执行和工具执行结果
3. 支持真实世界级别的复杂性,支持多步工具调用
4. 丰富的API,可用于现实世界中的场景,如天气信息、搜索、股票更新和PowerPoint自动化
5. 所有的数据都是由OpenAI API自动生成并由开发团队进行过滤,数据的创建过程很容易扩展
不过需要注意的是,目前发布的数据还不是最终版本,研究人员仍然在对数据进行后处理来提高数据质量,并增加真实世界工具的覆盖范围。
ToolBench
ToolBench的总体思路是基于BMTools,在有监督数据中训练大型语言模型。
仓库中包含31.2万次真实API调用得到的9800条数据,涵盖单工具场景和多工具场景,下面是单工具的统计信息。
其中每行数据都是一个json dict,包含数据创建的提示模板、工具使用的人工指令(查询)、中间思维/工具执行循环和最终答案。
Tool Descrition:
BMTools Tool_name: translation
Tool action: get_translation
action_input: {"text": target texts, "tgt_lang": target language}
Generated Data:
{
"prompt": "Answer the following questions as best you can. Specifically, you have access to the following APIs:\n\nget_translation: . Your input should be a json (args json schema): {{\"text\" : string, \"tgt_lang\" : string, }} The Action to trigger this API should be get_translation and the input parameters should be a json dict string. Pay attention to the type of parameters.\n\nUse the following format:\n\nQuestion: the input question you must answer\nThought: you should always think about what to do\nAction: the action to take, should be one of [get_translation]\nAction Input: the input to the action\nObservation: the result of the action\n... (this Thought/Action/Action Input/Observation can repeat N times, max 7 times)\nThought: I now know the final answer\nFinal Answer: the final answer to the original input question\n\nBegin! Remember: (1) Follow the format, i.e,\nThought:\nAction:\nAction Input:\nObservation:\nFinal Answer:\n (2) Provide as much as useful information in your Final Answer. (3) Do not make up anything, and if your Observation has no link, DO NOT hallucihate one. (4) If you have enough information and want to stop the process, please use \nThought: I have got enough information\nFinal Answer: **your response. \n The Action: MUST be one of the following:get_translation\nQuestion: {input}\n Agent scratchpad (history actions):\n {agent_scratchpad}",
"query": "My intention is to convert the data provided in ما هي الأقسام الثلاثة للقوات المسلحة؟ into Arabic(ara).\n",
"chains": [
{
"thought": "I need to use the get_translation API to convert the text into Arabic.",
"action": "get_translation",
"action_input": "{\"text\": \"What are the three branches of the military?\", \"tgt_lang\": \"ara\"}",
"observation": "\"ما هي الفروع الثلاثة للجيش ؟\""
}
],
"answer": "The translation of \"What are the three branches of the military?\" into Arabic is \"ما هي الفروع الثلاثة للجيش ؟\"."
}
模型实验
机器评估:研究人员对每个工具随机抽取100个链步(chain steps)来构建机器评估测试平台,平均27个最终步骤和73个中间工具调用步骤,其中最终步骤的评估使用Rouge-L指标,中间步骤的评估使用ExactMatch指标进行评估。
人工评估:在天气、地图、股票、翻译、化学和WolframAlpha工具中随机抽取10个query,然后评估工具调用过程的通过率、最终答案以及和ChatGPT最终答案的比较。
ChatGPT评估:通过ChatGPT对LLaMA和ChatGPT的答案和工具使用链进行自动评估。
评估结果如下(分数越高越好),可以看到ToolLLaMA在不同场景下与ChatGPT的性能相同或更好。
工具学习
在清华大学、人民大学、北京邮电大学等个国内外知名高校和大学联合发布的一篇论文中,对工具学习进行了系统的研究,介绍了工具学习的背景,包括认知起源、基础模型的范式转变,以及工具和模型的互补作用。
论文链接:https://arxiv.org/pdf/2304.08354.pdf
文中还回顾了现有的工具学习研究,包括工具增强型和工具导向型学习,并制定了一个通用的工具学习框架:从理解用户指令开始,模型应该学会把一个复杂的任务分解成几个子任务,通过推理动态地调整计划,并通过选择合适的工具有效地征服每个子任务。
文中还讨论了如何训练模型以提高工具使用能力并促进工具学习的普及。
考虑到之前的工作中缺乏系统的工具学习评估,研究人员用17种有代表性的工具进行了实验,并展示了当前基础模型在熟练利用工具方面的潜力。
论文最后讨论了几个需要进一步研究的工具学习的开放性问题,例如确保安全和可信赖的工具使用、用基础模型实现工具创建,以及解决个性化的难题。
参考资料:
https://github.com/OpenBMB/ToolBench