ShortcutsBench包括三个部分:
- 快捷指令(即
golden
的动作序列)。 - 查询(即安排给智能体的任务)。
- APIs(即智能体可以使用的工具)。
我们将ShortcutsBench按照快捷指令的长度(任务的困难成都)分成五个组别,对前四个组别,在API选择、参数填充、和要求必要信息的意识三个方面,进行了全面系统的评测。
以下详细介绍我们的测试流程:
-
计算快捷指令的长度:计算快捷指令的长度以对ShortcutsBench进行分组。
-
从API源文件中提取API信息:从
.actionsdata
、.intentdefinition
、WFActions.json
三种类型的API描述文件中各自提取API的基本信息,例如API名称
、API功能描述
、用户友好的API功能描述
、API参数类型
、API参数名
、API参数默认值
、API参数描述
、API返回值类型
、API返回值默认名称
、API返回值描述
。用户友好的API功能描述
,指如下图c. NLP desc to devs
的每个动作所展现给开发者的自然语言描述,如Ask ChatGPT $Message in a new chat
。该自然语言描述是专门面向用户设计,通俗易懂。一般的
API功能描述
,则如a.4.description
所述,形如This action will send a single message to a chat with ChatGPT and return the response.
。该自然语言描述一般从第三人称视角描述API的功能。 -
构造快捷指令的描述文件:依据快捷指令源文件和APIs的
用户友好API功能描述
,构造快捷指令的描述文件,即如上图b.7
所示的快捷指令的描述文件。该描述文件由一系列用户友好的API功能描述
按照快捷指令中原本动作的顺序构成,如果遇到分支和循环,则对应的额进行缩进。此快捷指令的描述文件,可以帮助我们用一般的模型(如GPT-3.5-turbo
)便可以生成高质量的查询。为了确保质量,我们依旧使用了当前最强的模型之一GPT-4o
生成查询。 -
生成查询:依据快捷指令的名称、快捷指令收集站对快捷指令的功能描述、快捷指令中的comments、快捷指令的描述文件、快捷指令涉及的API的基本信息,我们要求
GPT-4o
生成高质量的查询:- 该查询描述的问题,“必须”可由快捷指令完成。
- 该查询中应该包含快捷指令中所有的必须参数。
- 该查询的语言组织应该自然流畅,包含的参数应该融合在问题中,而不应该单独列出。
-
筛选查询中的参数进一步筛选上一步生成的查询,提取出我们需要验证的参数。我们发现,为了生成问题的流畅性,LLM仍然会在查询中忽略一些参数,由于我们需要测试参数填充的正确性测试,我们进一步进行了参数筛选,即依据生成的查询、API描述、以及快捷指令本身进一步筛选我们需要测试的参数,确保该参数在query中显性或隐性的出现。
-
分类快捷指令为了探究语言模型在不同类型的任务中的表现,我们首先依据从快捷指令商店收集到的快捷指令的类型字段,总结出了八大快捷指令的类型。随后我们依据从快捷指令商店收集到的快捷指令的类型字段、快捷指令的描述文件、快捷指令的功能描述等,让语言模型对所有的快捷指令指令,进行规范化的分类。
-
智能体能力评测将查询和抽样得到的API描述输入给智能体,评测不同智能体的性能。
我们首先计算快捷指令的长度以对ShortcutsBench进行分组。
相关代码如cal_shortcut_len.py
所示,该代码接受1_final_detailed_records_filter_apis.json
文件,按照快捷指令的长度过滤出长度不大于30
的快捷指令,存放在新文件1_final_detailed_records_filter_apis_leq_30.json
中。
运行该代码以生成1_final_detailed_records_filter_apis_leq_30.json
文件,该文件可从Google云盘或百度网盘获取,解压密码为shortcutsbench
。
随后我们从.actionsdata
、.intentdefinition
、WFActions.json
三种类型的API描述文件中各自提取API的基本信息,例如API名称
、API功能描述
、用户友好的API功能描述
、API参数类型
、API参数名
、API参数默认值
、API参数描述
、API返回值类型
、API返回值默认名称
、API返回值描述
。
相关代码:
WFActionsClass.py
:从WFActions.json
中提取API的基本信息。APIsClass.py
:从4_api_json_filter.json
中的.actionsdata
和.intentdefinition
格式的文件中,提取API的基本信息。4_api_json_filter.json
可从README.md中获取相关消息。
我们依据快捷指令源文件和涉及到的API信息(主要是用户友好的API功能描述
),构造快捷指令的描述文件。
相关代码如generate_shortcut_desc.py
所示。该文件生成四个输出,分别为:
all_api2info.json
,即API到API信息的字典。all_api2paraname2paratype.json
,即API到参数名称再到参数类型的字典。all_api2parasummary.json
,即API到用户友好的API功能描述
的字典。all_shortcuts_paras_that_is_necessary_in_query.json
,即我们初筛的在API信息和JSON格式的快捷指令文件中均为原语数据类型和枚举数据类型的参数。我们随后对这些参数进行了进一步的筛选,确保这些参数被显性或隐性的包含在查询中。我们用最终筛选后得到的参数进行参数填充准确率的评测。shortcut2desc.json
,快捷指令的iCloud URL到快捷指令描述文件的映射。
我依据快捷指令的名称、快捷指令收集站对快捷指令的功能描述、快捷指令中的comments、快捷指令的描述文件、快捷指令涉及的API的基本信息,我们要求GPT-4o
生成高质量的查询。
相关代码如generate_queries.py
所示,该代码依据1_final_detailed_records_filter_apis_leq_30.json
和shortcut2desc.json
生成generated_success_queries.json
(也存在部分由于语言模型的上下文长度限制生成失败的,存储在generated_fail_queries.json
)。
generated_success_queries.json
文件可从Google云盘或百度网盘获取。
generated_fail_queries.json
文件可从Google云盘或百度网盘获取。
友情提示:使用GPT-4系列模型时,请注意开支。生成查询可能会花费数百美元。
我们发现,为了生成查询的自然和流畅,语言模型生成的查询并不总是能显性或隐性的将参数融合在查询中。为了确保我们对参数填充的评测是准确的,我们进一步使用语言模型对生成的查询进行筛选,以确保我们对参数的评测是准确的。
相关代码如check_intersection_of_query_and_para_necessary.py
所示,该代码依据generated_success_queries.json
和all_shortcuts_paras_that_is_necessary_in_query.json
进一步筛选出在查询中出现的参数,我们的实验二需要用到这一部分的参数进行评测。
该代码生成f"{model_name}_check_intersection_of_query_and_para_necessary.json"
,即进一步经过语言模型筛选后的参数。
为了探究语言模型在不同类型的任务中的表现,我们首先依据从快捷指令商店收集到的快捷指令的类型字段,总结出了八大快捷指令的类型。随后我们依据从快捷指令商店收集到的快捷指令的类型字段、快捷指令的描述文件、快捷指令的功能描述等,让语言模型对所有的快捷指令指令,进行规范化的分类。
相关代码如generate_categories.py
所示,该代码通过快捷指令的描述文件、快捷指令的类型字段、快捷指令的功能描述等调用语言模型对快捷指令进行进一步的分类。
该代码生成generated_success_categories.json
和generated_fail_categories.json
,分别代表分类成功和失败的快捷指令。分类失败是由于极少数快捷指令过长的上下文导致的,我们忽略这这一部分快捷指令。
随后我们进行如ShortcutsBench论文正文所述的智能体能力评测,相关代码如all_experiments.py
所示。
该代码生成:
experiment_res_deepseek-chat.jsonl
experiment_res_deepseek-coder.jsonl
experiment_res_gemini-1.5-flash.jsonl
experiment_res_gemini-1.5-pro.jsonl
experiment_res_GLM-4-Air.jsonl
experiment_res_gpt-4o-mini.jsonl
(新添加)experiment_res_gpt-3.5-turbo.jsonl
experiment_res_meta-llama_Llama-3-70b-chat-hf.jsonl
experiment_res_qwen2-57b-a14b-instruct.jsonl
experiment_res_qwen2-72b-instruct.jsonl
文件,这些文件即为结果。
这些文件可以从Google云盘或者百度网盘下载,解压密码为shortcutsbench
。
新添加的文件可以从Google云盘或者百度网盘下载,解压密码为shortcutsbench
。
随后我们使用all_experiments_res.py
进行绘图和分析。