
导读 9 月 21–27 日新挂出的三篇论文:留在上下文里的工具返回如何变成持续账单、同一批能力拆成几个工具最合适,以及本地评测量到的为什么可能只是服务栈。
| 论文 | 方法类型 | 一句话结论 | 提交日期 |
|---|---|---|---|
| Persistent Billable State: Denial-of-Wallet Attacks and Defenses in Tool-Calling LLM Agents | 智能体安全与成本测量 | 一次被保留的工具返回会在之后每一次模型调用里再计费一次,最大会话的累计输入达到首次调用输入的 14,293 倍。1 | 9 月 23 日 |
| MCP-GRANITE Benchmark: GRANularity Interface TEsting for MCP-Based LLM Agents | 工具接口粒度基准 | 同一批能力拆成 4 个任务级工具时完成率最高,比拆成 8–10 个细粒度原语高 16.4%,比合成一个万能工具高 33.6%。2 | 9 月 21 日 |
| Measuring the Serving Stack Instead of the Model: Hidden Confounds in Local Tool-Use Evaluation | 评测有效性测量 | 本地服务栈按模型模板拒掉工具调用请求,测试框架把被拒的那一轮记成模型回合,一个根本没跑过的模型于是被报成 0% 保真度。3 | 9 月 22 日 |

| 粒度 | 任务完成率 | 工具选择 F1 | 参数准确率 | 一次工具都没调用的比例 |
|---|---|---|---|---|
| L4(8–10 个细粒度工具) | 0.42 | 0.59 | 0.20 | 10.2% 5 |
| L3(4 个任务级工具) | 0.49 | 0.66 | 0.40 | 10.7% 5 |
| L2(2 个工具) | 0.42 | 0.71 | 0.38 | 14.6% 5 |
| L1(1 个万能工具) | 0.36 | 0.63 | 0.26 | 28.2% 5 |

tools= 请求会按模型被一道静态的模板开关拦下来:有的模型被接受,但调用以文本形式返回;有的返回原生的 tool_calls 结构;Phi-3 和 Gemma-3 在推理开始之前就被拒掉(HTTP 400)。测试框架把「请求被拒」和「重试耗尽」写成了一条普通的助手回合,不保留结构化的失败元数据。于是一个从未真正运行过的模型,在下游按回合统计时被读成「它选择不调用工具」,报出 0% 的保真度。6tools= 字段,也是默认路径)、原生加文本提示(仍走原生通道,同时在提示里附一份工具清单和调用格式)、统一文本工具表(工具只写在提示里)。主实验在 Ollama 上用 8 个种子跑,用 llama.cpp 做跨栈对照,再探 vLLM 与 SGLang 的默认行为。任务有二:一个聚合任务和一个跨模块多跳依赖链任务,另在 HumanEval 上做单轮复现;受约束解码作为一个基线。6tool_calls 支持,纯文本协议把这个通道丢掉了。最好用的配置跟模型有关,没有一种服务配置能让所有模型的读数都最高。6--enable-auto-tool-choice 与 --tool-call-parser;SGLang 默认接受请求,但把调用当文本返回,除非加上 --tool-call-parser。请求会不会被拒、被接受之后调用会不会被识别,由服务栈和它的启动配置决定。6
This story was produced automatically by a channel. One sentence is all it takes for Neodrop to keep producing for you.