我在本地代理席位中换上了一个“更好”的9B模型。在80次尝试中,它有5次将工具调用静默地写成了普通文本。
摘要
作者比较了两个用于本地代理席位的9B模型,发现其中一个模型会静默失败,将工具调用写成普通文本并犯其他绕过检测的错误,强调了测试不同故障模式的必要性。
在信任本地代理席位的模型更换之前,我进行了一次正式的比较,有趣的部分不在于哪个模型得分更高,而在于较差的那个模型是如何失败的。
设置:20个任务模拟实际代理工作,每个类别(读、写、编辑、补丁)各五个,使用我工具中的真实工具模式,而非简单示例。每个任务以四种方式运行,覆盖种子和思考模式,因此每个模型有80次尝试。
现有模型是qwen3.5:9b。挑战者是MiMo-V2.6-Distill-Qwen-9B,量化为IQ4_XS。
关键数据:现有模型严格通过45/80,挑战者为30/80。Fisher精确检验p = 0.026,因此这是一个真实的差距,而非种子噪声。
但分数是我学到的最不有用的东西。挑战者有五次将工具调用写入回复文本,而不是发出调用。现有模型则没有。
如果你不比较解析后的tool_calls和回复内容,这会被视为成功。模型描述调用工具,对话记录看起来合理,但什么都没执行。这是代理最糟糕的失败形态,因为重试逻辑不会触发,而人类浏览输出时会看到未发生的工作。
二十次补丁尝试中有十六次输入为空。现有模型至少生成了格式错误的补丁体,可以检测和修复。空参数通过形状检查,但不执行任何操作。
有两次它调用了工具列表中从未有过的bash工具。对于沙盒席位,这不是质量问题,而是边界违规。模型发明未授予的能力,正是你的权限模型应该防止的,值得直接测试。
八次完全偏离为普通文本而没有调用,对比一次。
一个方法论说明让我避免了错误的结论。在责怪模型之前,我验证了两个GGUF共享相同的聊天模板,逐字节相同,特殊token ID和预分词器也一致。大多数“这个模型不擅长工具调用”的说法都是模板错误。先检查这个,否则你的结果毫无意义。
注意事项:单轮、80次尝试、一个量化版本,且没有推理评估,而推理正是蒸馏模型构建的目的。延迟和内存消耗差不多。
无论选择哪个模型,我都会从中学到两件事。统计以文本形式出现的工具调用,并将其视为一个独立的失败类别,而不是归入“错误答案”。同时,对工具列表进行断言,因为一个发明工具名称的模型最终可能会发明你已有的工具。
相似文章
究竟是什么让基于 4B 模型的智能体失效?Qwen3.5-4B 的 50 次运行笔记
一位实践者在 Qwen3.5-4B 上使用 10 种智能体运行框架测试了 5 项任务,发现失败源于精确匹配编辑、机械地遵循指令、计数错误和 API 不匹配,而非工具调用格式错误。10 个智能体中有 6 个通过了全部任务,在相同硬件上,最长运行时间是最短的 11 倍。
我们用同一个代理替换了审查代理,清除了记忆。它发现了相同的错误。
作者讲述了一个实验:使用同一个AI模型同时作为代码编写者和审查者,即使使用不同的提示,也无法捕获代价高昂的相关错误,例如假设端点具有幂等性,并发现真正的独立性需要通过生产追踪或断言进行外部验证。
相同模型,相同提示词,两个代理框架:45/50 vs 43/50
文章对相同的deepseek-v4-flash模型上的两个开源编码代理进行了基准测试,发现任务成功率相似,但在性能指标上存在显著差异,并且一个代理的错误处理中存在一个关键漏洞。
超越函数调用:在工具环境不可靠性下对工具使用代理进行基准测试
介绍ToolBench-X,这是一个基准测试,用于评估各种工具环境可靠性隐患下的大语言模型代理,揭示了与干净环境相比性能上的显著差距。
让同一个模型既写测试又写代码。测试以 77% 的比例误拒了一个已知正确的解法
一位实践者的实验发现:当同一个模型既写代码又写测试时,生成的测试套件有 77% 的概率会误拒一个已知正确的参考解法——即便变异分数很高也是如此;而且完整的 Agent 流水线在相近 token 成本下,表现还不如简单的 pass@k 采样。