【项目实战】桌面 Agent Function Calling 四模型实测 —— Thinking Model 是优势还是负担?
桌面 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 字被截断 → 换
wmic、powershell等反复查(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(新版):尝试
type、chcp 65001、powershell 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
更多推荐


所有评论(0)