报错是这么冒出来的。接了两个 MCP server,加上自带工具一共 43 个,工具定义每次请求都全量下发,光定义就占八千多 token,模型选工具的准确率还下降了。
中间走过弯路,把「多个 server 提供同类工具,重复且互相干扰」当成主因,改完现象没变。
把日志和配置对完,能解释这个现象的基本就这几处。工具列表全量注入,没有按场景裁剪。少数情况下是工具描述里带了完整 JSON Schema 与示例。
另外,列表顺序固定,靠前的工具被优先选中。
动手时先统计工具定义的 token 占比
python -c "import json,tiktoken;e=tiktoken.get_encoding('cl100k_base');ts=json.load(open('tools.json'));print(len(e.encode(json.dumps(ts))))"
再往下按当前意图只挂载相关工具子集
python gateway.py --intent refund --tools tools.json
然后对同类工具去重只保留一个权威实现
python dedupe_tools.py --src tools.json --rule name_similarity
等前面都确认过,再对比裁剪前后同一批问题的选择准确率
python eval_tools.py --cases cases.jsonl --tools tools_sub.json
怎么算真的好了,看的是同一批现象。工具定义降到 2k token 以内,同一批问题的选择准确率上升,模型不再选出两个 server 里的同名工具。
这里还有个坑。工具不是越多越好,按场景动态挂载既省钱又提准确率,跨 server 的同名工具必须合并或重命名。这类问题最好一次改到位,反复小改反而容易把原因搅混。
