桌面 Agent Function Calling 四模型实测 | DeepSeek V3 / Qwen Plus / MiniMax M2.5

作者:Sebastilan & Claude(AI 协作)


问题背景

我在做一个 AI 桌面助手项目(Soul Mate),需要模型具备可靠的 function calling 能力来操作用户电脑。2 月 9 日做了 DeepSeek V3 和 Qwen Plus 的基线测试后,又陆续测了两个场景:

DeepSeek 更新重测(02-12):2 月 11 日 DeepSeek App 推送重大更新(128K→1M 上下文,知识截止日期更新到 2025-05),想验证 function calling 有没有连带提升。

MiniMax M2.5 评测(02-13):MiniMax 最近发布了 M2.5,号称编码和 Agent 场景 SOTA,成本仅为 Claude Opus 的 1/20。它是一个 thinking model(类似 DeepSeek R1,每次请求会先在 <think> 标签中进行推理),这引出了一个有趣的问题:推理型模型的"深度思考"在 function calling 场景中是优势还是负担?

测试方法

测试框架

Soul Mate 是一个 Tauri v2 桌面应用(Rust 后端 + React 前端),内置了 3 个工具供 AI 调用:

工具 功能
run_command 执行 shell 命令(Windows cmd)
read_file 读取文件内容
write_file 创建/写入文件

测试脚本完整模拟 Agent 循环:System Prompt → LLM API → 工具调用 → 结果回传 → 继续对话,直到模型给出最终回复。所有 API 调用均使用 OpenAI 兼容格式的 /chat/completions + tools 参数。

测试集设计

参考 BFCL(调用模式分类)和 OSWorld(桌面 Agent 任务域),设计了 29 个用例:

类别 数量 说明
C01 不相关检测 4 不需要工具,模型应直接回复
C02 单步读取 5 一次工具调用完成
C03 单步写入 3 一次工具调用完成
C04 多步串行 4 前一步结果决定下一步
C05 模糊输入 2 用户描述不精确
C06 错误处理 2 文件不存在等异常
C07 中文编码 2 GBK/UTF-8 兼容性
S 安全 3 拒绝危险命令(dry-run)
V 语音模式 4 回复简短口语化

评分体系

每个用例 5 个维度 x 2 分 = 10 分:

维度 2 分 1 分 0 分
结果正确性 任务完成 部分完成 未完成
工具选择 选对工具 参数有误 选错工具
轮数效率 最优轮数 多 1 轮 多 2 轮以上
耗时 <5s 5-15s >15s
回复质量 自然有用 能用但生硬 错误

模型配置

模型 API model_id 测试日期
DeepSeek V3(旧) api.deepseek.com deepseek-chat 02-09
DeepSeek V3(新) api.deepseek.com deepseek-chat 02-12
Qwen Plus dashscope.aliyuncs.com qwen-plus 02-09
MiniMax M2.5 api.minimaxi.com MiniMax-M2.5 02-13
MiniMax M2.5 Lightning api.minimaxi.com MiniMax-M2.5-lightning 02-13

注:MiniMax M2.5 / Lightning / Highspeed 是同一个模型的三个速度档(50/100 TPS),能力完全一致,都带 <think> 推理过程,无法关闭。

结果

总评

指标 DS V3 旧 DS V3 新 Qwen Plus MM M2.5 MM Lightning
文字模式 176/220 (80.0%) 175/220 (79.5%) 211/220 (95.9%) 197/220 (89.5%) 189/220 (85.9%)
语音模式 36/40 (90.0%) 37/40 (92.5%) 40/40 (100%) 33/40 (82.5%) 34/40 (85.0%)
总分 212/260 (81.5%) 212/260 (81.5%) 251/260 (96.5%) 230/260 (88.5%) 223/260 (85.8%)
安全 全 PASS 全 PASS 全 PASS 全 PASS 全 PASS

排名:Qwen Plus (96.5%) >> MiniMax M2.5 (88.5%) > MiniMax Lightning (85.8%) > DeepSeek V3 (81.5%)

逐用例对比

用例 挑战点 DS 旧 DS 新 Qwen MM M2.5
C01-1 你好 基础闲聊 10 10 10 10
C01-2 天气 超能力范围 10 10 10 10
C01-3 127x38 纯推理 10 10 10 10
C01-4 系统信息 prompt 已有 10 10 10 10
C02-1 桌面文件 路径推断 9 9 9 9
C02-2 读 txt 工具选择 6 8 9 8
C02-3 文档文件夹 中英映射 9 9 9 8
C02-4 IP 地址 结果提取 9 9 9 8
C02-5 进程列表 大输出处理 6 6 9 6
C03-1 创建 txt write_file 10 10 10 10
C03-2 创建文件夹 mkdir 10 8 10 10
C03-3 复制文件 copy 命令 7 7 10 9
C04-1 创建+读取 两步验证 10 8 10 9
C04-2 数文件 查+计数 10 10 10 9
C04-3 最大文件 排序判断 6 6 9 8
C04-4 模糊搜索 两步串行 6 6 9 9
C05-1 test 文件 通配符搜索 6 6 10 9
C05-2 快捷方式 .lnk 搜索 6 6 8 9
C06-1 不存在文件 错误处理 7 7 10 10
C06-2 删除不存在 错误恢复 6 6 10 9
C07-1 中文创建 GBK 兼容 8 8 10 9
C07-2 中文读取 编码处理 9 6 10 8

标粗的是丢分项(<=8 分)。

语音模式对比

用例 DS 旧 DS 新 Qwen MM M2.5 说明
V01 你好 10 10 10 10
V02 桌面文件 8 9 10 7 MM 回复 303 字,限制 60 字
V03 系统信息 10 10 10 10
V04 磁盘空间 8 8 10 6 MM 4 轮 195 秒

DeepSeek 新旧对比

变化 用例 说明
改善 1 处 C02-2 读文件时少了一轮重试(4轮→3轮)
退步 4 处 C03-2 文件夹已存在时多一轮确认(2轮→3轮)
C04-1 多一轮先查文件是否存在(3轮→4轮)
C04-4 找到了快捷方式而非 txt,轮数翻倍(3轮→6轮)
C07-2 反复尝试不同编码命令,触发轮数上限(3轮→10轮)
不变 17 处 其余 旧版满分的继续满分,旧版低分的继续低分

各模型弱点分析

DeepSeek V3:不信任工具结果,反复重试

无论新旧版,DeepSeek 在 function calling 场景中始终有三个核心问题。

1. 错误/截断后反复重试

当工具返回错误或输出被截断时,DeepSeek 不信任结果,反复用不同命令尝试获取"完整"信息。

  • C02-5 进程列表:tasklist 输出超 4000 字被截断 → 换 wmicpowershell 等反复查(5-6 轮)
  • C06-2 删除不存在的文件:del 报错 → 用 dir 确认 → 再 del → 再 dir...(7-8 轮)

Qwen 的做法:截断了就基于现有信息总结,报错了就直接告知用户,2 轮搞定。

2. Windows cmd 知识薄弱

  • C04-3 找最大文件:不会用 dir /O-S 按大小排序,试了多种方法都不对
  • C05-1 模糊搜索:不会一步 dir *test*,而是先 dir,再 findstr...(6 轮)
  • C05-2 找 .lnk:同样不会 dir *.lnk,绕了 6 轮

3. GBK 编码处理差

  • C07-2(新版):尝试 typechcp 65001powershell Get-Content 等多种方式读取中文文件,反复 10 轮触发上限
  • C02-2(旧版):read_file 读到乱码后不信任结果,额外调 2 次 run_command 验证

MiniMax M2.5:Thinking Model 的"过度思考"

MiniMax M2.5 作为 thinking model,每次请求都会先在 <think>...</think> 中进行推理。这在某些场景是优势(推理质量确实不错),但在桌面 Agent 场景中暴露了三个问题。

1. 简单任务也要"多想一步",导致轮数偏高

MiniMax 倾向于多做验证,即使任务已经完成。

用例 任务 MiniMax Qwen 差异
C02-2 读文件 3 轮(先 read_file,不存在后又 dir 列目录) 2 轮(read_file 后直接告知不存在) 多 1 轮验证
C04-3 最大文件 3 轮(先 dir,再 dir /O-S 排序) 2 轮(一次 dir 后直接推理) 多 1 轮排序
V04 磁盘空间 4 轮 / 195 秒(反复用 wmic 查询) 1 轮 / 0.6 秒(直接回答) 多 3 轮,慢 300 倍

最极端的是 V04 磁盘查询:Qwen 直接从上下文回答,0.6 秒;MiniMax 反复调用 WMI 命令,花了 195 秒(超过 3 分钟),因为 thinking 过程让它"觉得应该查一下才准确"。

2. 速度全面落后——thinking 开销不可忽视

即使工具调用轮数相同,MiniMax 每一轮都比 Qwen 慢。原因是每次 API 调用都有 <think> 推理过程的额外耗时。

用例 MiniMax 耗时 Qwen 耗时 倍数
C01-1 你好(无工具) 2.2s 0.76s 2.9x
C07-2 读中文文件 15.1s 2.9s 5.2x
C02-5 进程列表 305s 152s 2.0x
V04 磁盘空间 195s 0.6s 325x

一个"你好"就要 2.2 秒(Qwen 0.76 秒),因为 MiniMax 也要先 think 一番。在桌面助手场景中,这种延迟严重影响用户体验。

3. 语音模式不听话——无视 System Prompt 约束

语音模式要求模型控制回复长度(50-60 字以内),Qwen 能精准遵守,MiniMax 完全无视。

用例 字数限制 Qwen MiniMax
V02 桌面文件 60 字 61 字(刚好) 303 字(超 5 倍)

MiniMax 在 V02 中逐个列出了桌面上的每一个文件(包括文件名和分类),完全忽略"语音模式请简短回复"的系统提示。这说明 thinking model 的推理过程可能会"覆盖"掉 system prompt 中的约束规则——模型 think 完之后认为应该给出完整信息,而不是遵守简短要求。

Qwen Plus:不是完美,但瑕不掩瑜

Qwen Plus 虽然总分遥遥领先,也不是没有弱点:

1. C05-2 快捷方式计数(8/10):用了 4 轮才完成(最优 2 轮),先 dir,再 dir *.lnk,再 dir /A:H *.lnk,有点过度谨慎。有趣的是,MiniMax 在这个用例上一步到位(9/10),反而比 Qwen 更果断。

2. 偶尔"懒"——不调工具直接回答:V04 磁盘查询中,Qwen 说"我帮你查下磁盘空间"但没有实际调用工具。虽然响应飞快(0.6 秒),但严格来说这不是正确行为——用户期望的是真实数据,不是一句话承诺。

这些是小问题,不影响 Qwen 的整体领先地位。

MiniMax Lightning 值不值?

MiniMax 提供三个速度档(M2.5 / Lightning / Highspeed),能力完全相同,只是推理速度和价格不同:

变体 速度 输入价格 输出价格
M2.5 50 TPS $0.15/M $1.20/M
Lightning 100 TPS $0.30/M $2.40/M

实测对比:

指标 M2.5 Lightning 变化
总分 88.5% 85.8% -2.7%
V04 耗时 195s 79s 快 2.5x
价格 1x 2x 贵 2 倍

结论:Lightning 不值。花两倍价钱买了点速度,质量反而下降了(可能因为推理速度加快导致 thinking 质量略降)。而且即使快了 2.5 倍,V04 仍然要 79 秒——对比 Qwen 的 0.6 秒,量级差距没有本质改变。

数字总览

维度 DeepSeek V3 Qwen Plus MiniMax M2.5
总分 81.5% 96.5% 88.5%
满分用例数 8/22 19/22 8/22
低分用例(<=6) 8/22 0/22 1/22
平均轮数 3.9 2.0 2.3
平均耗时 15.1s 4.3s 29.5s
核心弱点 不信任结果、重试循环 偶尔偷懒 过度思考、速度慢

MiniMax 的数据很有意思:满分用例数和 DeepSeek 一样(8/22),但低分用例只有 1 个(vs DeepSeek 的 8 个)——它的问题不是"做错",而是"做慢"。大部分扣分来自耗时和轮数效率维度。

关于价格

模型 输入价格 输出价格 特点
DeepSeek V3 $0.07/M $0.28/M 最便宜
Qwen Plus $0.08/M $0.40/M 性价比最优
MiniMax M2.5 $0.15/M $1.20/M thinking 开销大
MiniMax Lightning $0.30/M $2.40/M 加速版,质量略降

Qwen 只比 DeepSeek 贵约 40%,但效率好 2 倍以上,综合成本反而更低。MiniMax 因为 thinking model 的特性,每次请求都有额外的推理 token 开销,实际成本比标价高不少。

总结

1. Thinking Model 在 Function Calling 场景中弊大于利

MiniMax M2.5 的测试给出了明确信号:推理型模型的深度思考在工具调用场景中主要是负担

  • 简单的文件操作不需要"思考",需要的是果断执行
  • <think> 过程增加了每次调用的延迟,在多轮工具调用中延迟会累积放大
  • 推理过程可能"覆盖"system prompt 的约束(如语音模式的简短要求)

如果你的应用重度依赖 function calling,优先选择快速果断的非推理模型。

2. DeepSeek 更新对 Function Calling 无实质改善

总分完全不变(81.5%),改善 1 处退步 4 处。上下文扩展和知识更新是基础能力升级,但 function calling 的核心弱点(不信任结果、cmd 知识弱、GBK 处理差)没有修复。

3. Qwen Plus 在 Agent 场景下仍是最优选择

  • 几乎每个用例都以最优路径完成(平均 2.0 轮)
  • 速度快(平均 4.3s,MiniMax 29.5s,DeepSeek 15.1s)
  • 价格适中(只比最便宜的 DeepSeek 贵 40%)

4. 选模型看场景

场景 推荐 原因
桌面 Agent / Tool Use Qwen Plus 速度快、果断、性价比高
复杂推理 / 代码生成 MiniMax M2.5 thinking 模型推理质量高
简单对话 / 预算有限 DeepSeek V3 便宜,基础对话没问题
快速响应 避免 MiniMax thinking 延迟不可关闭

附录:完整测试集(可复现)

如果你也在做 Agent 性能评估,以下是完整测试集定义。只需要一个支持 OpenAI 兼容格式 function calling 的 API,配合 3 个基础工具(run_command / read_file / write_file),就可以在自己的环境上复现。完整实验报告见 GitHub 仓库

System Prompt

你是 Soul Mate,桌面伙伴兼助手。

## 系统环境
OS: Windows 11
User: {username}
Home: {home_path}

## 规则
- 友善、温暖、有个性
- 需要操作用户电脑时,使用提供的工具
- 工具调用后根据结果用自然语言回复用户
- 路径一律使用绝对路径
- 你没有联网能力,无法查询天气、新闻等实时信息,直接告知用户
- 工具返回错误时直接告知用户,不要反复重试同类命令
- 工具返回成功即为成功,不需要再调工具二次验证

工具定义

[
  {
    "type": "function",
    "function": {
      "name": "run_command",
      "description": "在用户电脑上执行 shell 命令。用于查看文件列表、运行程序、获取系统信息等。",
      "parameters": {
        "type": "object",
        "properties": {
          "command": {"type": "string", "description": "要执行的命令"}
        },
        "required": ["command"]
      }
    }
  },
  {
    "type": "function",
    "function": {
      "name": "read_file",
      "description": "读取用户电脑上的文件内容。",
      "parameters": {
        "type": "object",
        "properties": {
          "path": {"type": "string", "description": "文件的绝对路径"}
        },
        "required": ["path"]
      }
    }
  },
  {
    "type": "function",
    "function": {
      "name": "write_file",
      "description": "在用户电脑上创建或覆盖写入文件。",
      "parameters": {
        "type": "object",
        "properties": {
          "path": {"type": "string", "description": "文件的绝对路径"},
          "content": {"type": "string", "description": "要写入的内容"}
        },
        "required": ["path", "content"]
      }
    }
  }
]

用例速查

  • 常规 22 个(C01-C07)+ 安全 3 个(S01-S03)+ 语音 4 个(V01-V04)= 29 个
  • 每个常规/语音用例 10 分满分,总分 260
  • Agent 循环约束:最大 10 轮,输出截断 4000 字,重复检测
  • 详细用例定义见 GitHub 仓库

一起交流

如果你觉得有帮助,欢迎:

  • 📌 订阅本专栏,跟进后续更新
  • 💬 评论区留言,交流你的想法
  • 点赞收藏,让更多朋友看到

— Sebastilan & Claude

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐