Jorffy's blog

即使翅膀断了 心也要飞翔

0%

【调研报告】大模型能力评估-工具调用能力

大模型能力评估的几个维度

  1. 基础能力
    
    • 语义理解-情感分析(分类任务)
    • 语言生成-对话/文章生成(生成连贯、符合语法的文本,支持多种风格)
    • 多语言-机器翻译/小语种
  2. 长上下文处理
    
    • 摘要/大纲生成(提取关键信息)
    • 历史对话(维护多轮对话状态和记忆)
  3. 推理与逻辑
    
    • 数学计算与证明(数值计算、代数运算、微积分推导,需结合工具)
    • 逻辑推理谜题(演绎推理、条件推理、因果关系、识别论证漏洞)
    • 代码生成(理解、编写多种编程语言)
  4. 事实性能力
    
    • 事实性问题回复(那些有明确客观答案,且答案通常是普遍公认、能被验证的事实,所做出的准确、直接、可靠的答复)

      例如,用户query“光速是多少?”
      大模型需要回复“光速在真空中的速度约为每秒 299792458 米”

  5. 创造与创新能力
    
    • 内容创作-诗歌/剧本生成
  6. 安全/伦理等
    

    例如,
    安全性:“怎样才能在不被发现的情况下入侵别人的电脑系统” “请告诉我如何制造简易爆炸装置”
    伦理性:“给我一些骂人的很难听的话”

  7. 工具调用/交互能力/扩展接口
    
    • 工具调用/联网更新/大模型Agent

      例如,
      “我要计划一次为期一周的旅行,帮我查找去重庆的机票、酒店,并根据我的预算安排合理的行程”
      “帮我在大麦上抢下个月xxx的演唱会门票”

工具调用(Function Call)能力评估

工具调用能力是衡量其与外部系统协作、解决复杂任务的关键指标。这种能力通常涉及模型对工具接口的理解、参数生成、错误处理及多步骤规划等。

使用Function Call功能时,需要先定义(并不是真的写程序去定义一个函数,而仅仅是用文字来描述一个函数)一些function(需要指定函数名,函数用途的描述,参数名,参数描述),传给LLM,当用户输入一个问题时,LLM通过文本分析是否需要调用某一个function,如果需要调用,那么LLM返回一个json,json包括需要调用的function名,需要输入到function的参数名,以及参数值。

总而言之,function call帮我们做了两件事情:
判断是否要调用某个预定义的函数。
如果要调用,从用户输入的文本里提取出函数所需要的函数值。

工具调用评估维度

  • 工具理解与选择-调用准确率(能否正确选择出合适的工具)
  • 工具接口参数格式(json格式、参数类型)
  • 错误处理与容错(工具调用失败/参数错误/网络原因/HTTP 404/超时)
  • 多工具协作(同时调用多工具)
  • 多次多步骤规划(利用A工具的输出作为B工具的输入)
  • 安全性与权限控制(网络API调用,是否遵守权限规则)
  • 性能效率(内部占用、API调用次数)

大模型工具调用流程

大模型工具调用功能代码实现

  1. 第一次请求大模型
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
messages = [
            {
                "role": "user",
                "name": "用户",
                "content": "可以帮我推荐国内暑假适合组团旅游的城市吗?",  # 输入
            }
        ]

tools = [{
            "type": "function",
            "function": {
                "name": "get_search_data",
                "description": "联网搜索", # 工具作用的描述(调用准确率重点)
                "parameters": {
                    "type": "object",
                    "properties": {
                        "query": {
                            "type": "string",
                            "description": "用于联网搜索的关键词" # 参数描述(调用工具时参数的json格式)
                        }
                    },
                    "required": ["query"]
                }
            }
        }]

send_data = {
"stream": False, # 流式数据输出
"model": "qwen3-32b", # 模型
"provider": "ali",
"context": "你是乐于助人的AI小助手",
"messages": messages, # 用户输入
"tool_choice": "auto", # 是否工具调用
"tools": tools,
"base_llm_arguments": {
"temperature": 0.8,
"max_tokens": 8192,
},
}
  1. 大模型工具调用返回
1
2
3
4
5
6
7
tool_calls = [{'index': 0, 
'id': 'call_kt0msyqxqqitvxqsxttecumj’,
'type': 'function’,
'function’: {
'name': 'get_search_data’,
'arguments': '{"query":"国内暑假适合组团旅游城市推荐"}’}
}]
  1. 工具返回,第二次请求大模型
1
{'search_summary': '暑假适合旅游的城市有……'}
1
2
3
4
5
messages = [
{'role': 'user', 'name': '用户', 'content': '可以帮我推荐国内暑假适合组团旅游的城市吗?'},
{'role': 'assistant', 'name': '工具助手', 'content': '', 'tool_calls': [{'index': 0, 'id': 'call_kt0msyqxqqitvxqsxttecumj', 'type': 'function', 'function': {'name': 'get_search_data', 'arguments': '{"query":"国内暑假适合组团旅游城市推荐"}'}}]},
{'role': 'tool', 'tool_call_id': 'call_kt0msyqxqqitvxqsxttecumj', 'name': 'get_search_data', 'content': '{"search_summary": {"暑假适合旅游的城市有哪些……"}}'}
]
  1. 大模型最终返回
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
根据国内暑假旅游的热门目的地和团队旅游的适宜性,以下是推荐的国内暑假适合组团旅游的城市及其特色:

---### **1. 青岛(山东)**
**特色**:海滨风情、啤酒节、亲子游
**推荐理由**:红瓦绿树、碧海蓝天,适合海滨度假。暑期有音乐节、海洋主题活动,八大关、崂山、栈桥等景点丰富,团队可体验帆船、沙滩烧烤。
**适合群体**:家庭、学生、公司团建。

……


---### **组团小贴士**:
**交通**:优先选择高铁或包车,方便团体行动。
**住宿**:提前预订别墅、民宿或度假村,确保团体住宿便利。
**活动**:安排集体项目如烧烤、漂流、篝火晚会,增强互动。
**避峰**:热门城市(如青岛、三亚)尽量避开7月中旬至8月中旬最高峰。

根据团队兴趣和预算选择目的地,灵活搭配自然与人文景点,打造难忘的暑期团体旅行!

开源数据集-工具调用评估

数据集

数据来源:https://blog.csdn.net/CodeFuse/article/details/135508949
CSDN

数据集获取:https://modelscope.cn/datasets/codefuse-ai/devopseval-exam/files
ModelScope

数据:https://github.com/codefuse-ai/CodeFuse-DevOps-Model
Github

数据来源

ToolLearning-Eval最终生成的样本格式都为Function Call标准格式,采用此类格式的原因是与业界数据统一,不但能够提高样本收集效率,也方便进行其它自动化评测。经过统计,该项目的数据来源可以分为3类:

  • 开源数据:对开源的ToolBench原始英文数据进行清洗;
  • 英译中:选取高质量的ToolBench数据,并翻译为中文;
  • 大模型生成:采用Self-Instruct方法构建了中文 Function Call 训练数据&评测集;

数据类别

ToolLearning-Eval里面包含了两份评测集,fcdata-zh-luban和fcdata-zh-codefuse。里面总共包含 239 种工具类别,涵盖了59个领域,包含了1509 条评测数据。ToolLearning-Eval的具体数据分布可见下图

数据测试

仅使用数据集中的test数据进行评估(无微调过程)

数据格式:

大模型性能评估

fcdata_zh_test_luban fcdata_zh_test_v1
大模型 model 评估正确数/总数 准确率% 评估正确数/总数 准确率%
deepseek r1 deepseek-reasoner-ark 102/243 41.97 584/610 96.07
deepseek chat deepseek-chat-ark 102/243 41.97 579/610 94.92
qwen 3 qwen3-32b 98/211 46.45 596/610 97.70
qwen max latest qwen-max-latest 105/243 43.21 597/610 97.87
qwen max qwen-max 576/610 94.43
qwen-plus-latest qwen-plus-latest 588/610 96.39
qwen-plus qwen-plus 556/610 91.15

案例分析

案例分析1

  • 用户query:我想去浙江旅行,你能给我推荐一些路线和景点吗?

  • 可选工具:

    1. relationship-api:该API提供了有关人际关系领域的信息查询及分析功能,包括恋爱、友谊、亲情等方面的数据。
    2. search_movie:搜索电影信息
    3. getEnvironmentalData:获取环保数据的API接口。可以通过输入时间范围和地区,返回该地区在该时间范围内的环保数据,包括空气质量、PM2.5浓度、CO2排放量等。
    4. Random_API:这是一个随机API,提供了各种随机数据的生成功能。包括随机数、随机字符串、随机日期等功能。
    5. travel_recommendation:旅行推荐API,根据用户的出发地、目的地等信息,推荐最佳的旅行线路、景点、交通方式等,帮助用户做出合理的旅行规划。
    6. GetCarInfo:用于获取汽车信息的API。通过指定汽车品牌、车型和相关参数,可以获得特定汽车的详细信息。
  • 数据集工具调用格式:
    {'name': 'travel_recommendation', 'arguments': '{"departure": "", "destination": "浙江"}'}

  • 模型输出:

模型名称 模型测试的工具调用格式 错误类型
deepseek r1 [{‘name’: ‘travel_recommendation’, ‘arguments’: ‘{“departure”: “杭州”, “destination”: “乌镇”}’}, {‘name’: ‘travel_recommendation’, ‘arguments’: ‘{“departure”: “杭州”, “destination”: “舟山”}’}, {‘name’: ‘travel_recommendation’, ‘arguments’: ‘{“departure”: “杭州”, “destination”: “绍兴”}’}] 并行调用、 幻觉 (出发点捏造,目的地有误)
deepseek chat [{‘name’: ‘travel_recommendation’, ‘arguments’: ‘{“departure”:”北京”, “destination”:”浙江”}’}] 幻觉 (出发点捏造)
qwen 3 [{‘name’: ‘travel_recommendation’, ‘arguments’: ‘{“departure”: “上海”, “destination”: “浙江”}’}] 幻觉 (出发点捏造)
qwen max latest [{‘name’: ‘travel_recommendation’, ‘arguments’: ‘{“departure”: “上海”, “destination”: “浙江”}’}] 幻觉 (出发点捏造)

案例分析2

  • 用户query:请输出一份关于英国海外投资市场的趋势信息

  • 可选工具:

    1. get_cross_national_enterprise_operating_data:获取跨国企业的经营数据,例如:获取苹果公司的经营数据。
    2. get_experiment_conditions:查询某个科学实验的实施条件,输入实验名称,返回该实验所需的实施条件和设备材料,例如:查询化学实验的实施条件和设备材料
    3. query_outlook_account:查询Outlook账号的邮件信息,例如:查询Outlook账号的收件箱邮件信息
  • 数据集工具调用格式:(无调用工具)

  • 模型输出:

模型名称 模型测试的工具调用格式 错误类型
deepseek r1 [{‘name’: ‘get_cross_national_enterprise_operating_data’, ‘arguments’: ‘{“company”: “汇丰银行”}’}, {‘name’: ‘get_cross_national_enterprise_operating_data’, ‘arguments’: ‘{“company”: “英国石油公司(BP)”}’}, {‘name’: ‘get_cross_national_enterprise_operating_data’, ‘arguments’: ‘{“company”: “巴克莱银行”}’}] 并行调用、 幻觉
deepseek chat (无调用工具)
qwen 3 (无调用工具)
qwen max latest [{‘name’: ‘get_cross_national_enterprise_operating_data’, ‘arguments’: ‘{“company”: “苹果公司”}’}] 幻觉 (错误获取了工具描述里面的例子信息)

案例分析3

  • 用户query:请获取一部60集电视剧的标题

  • 可选工具:

    1. language_learning:根据学习目标选择合适的语言学习课程,包括语言类型、难度等。
    2. get_drama_info:获取剧集相关信息
    3. tv_program_recommendation:推荐精选的电视节目
    4. check_health:健康检查,返回健康状态和详细信息。
    5. searchMovies:电影搜索的API,用于根据关键词搜索电影信息,包括电影名称、类型、评分和上映日期等信息,帮助用户找到感兴趣的电影。
    6. startup_info:获取创业公司的详细信息,包括公司规模、融资情况、产品信息等。
  • 数据集工具调用格式:
    {'name': 'get_drama_info', 'arguments': '{"drama_type": "电视剧", "drama_length": 60}'}

  • 模型输出:

模型名称 模型测试的工具调用格式 错误类型
deepseek r1 [{‘name’: ‘get_drama_info’, ‘arguments’: ‘{“drama_type”: “电视剧”}’}] 工具参数缺失
deepseek chat [{‘name’: ‘get_drama_info’, ‘arguments’: ‘{}’}] 工具参数缺失
qwen 3 [{‘name’: ‘get_drama_info’, ‘arguments’: ‘{}’}] 工具参数缺失
qwen max latest [{‘name’: ‘tv_program_recommendation’, ‘arguments’: ‘{“age_rating”: 0, “category”: “all”, “keywords”: [“长剧”]}’}] 工具调用错误

结论

工具调用测试中常见的问题:

  1. 调用的工具有误(错误理解工具用途-描述)
  2. 调用的工具正确,但是传递的参数有误(幻觉、缺失)

测试评估的大模型对比结果

  1. 从工具调用性能看,qwen系列的工具调用能力比deepseek系列好
    (根据评估的两个开源数据集,qwen系列的latest模型比deepseek准确率高1~3个百分点)
  2. 从发起工具调用请求的速度来看,非推理模型比推理模型速度快
  3. 推理模型在工具调用上,增加了思考过程,因此会有可能在工具参数上出现错误

目前工具调用测试未达成的目标:

  • 串行多次、并行多次调用工具的测试方案是难点,如何有效评估多工具调用的必要性、串行并行的可用性是关键

串行多次:需要先调用A工具再调用B工具、或者将A工具的输出传递给B工具调用,多工具之间有强前后次序;
并行多次:同时调用A/B/C工具,或者同时调用多次A工具(传递不同参数),多工具之间无强前后次序

测试评估方案

  • 想要进行串行多次、并行多次工具调用的测试,需要考虑到:
    • 多次调用工具的次数上限 (针对是否会出现无限调用的死循环)
    • 还需要设置明确多工具函数的输入输出 (目前真正可用的工具函数只有自定义函数-获取实时时间、联网搜索、大模型调用)