事情本身不复杂,线索都在日志里。给 Agent 配了 12 个工具,每个描述 300 字,问查下昨天订单状态时模型选了 create_refund,日志里工具名写得很清楚,语义上明显该用 get_order。
第一反应是「工具名用动词短语,模型按语义近似去猜」,验证下来不成立。
把日志和配置对完,能解释这个现象的基本就这几处。工具数量超过十个后,长描述互相稀释,区分度反而下降。也可能是多个工具描述里出现相同关键词,边界不清晰。
少数情况下是没有任何示例说明什么场景不该用某个工具。
第一件事是把工具名与描述压到一句
python -c "print({'name':'get_order','description':'按订单号查状态'})"
再往下打印每次请求实际发送的工具清单
python -c "import json;print([t['function']['name'] for t in json.load(open('tools.json'))['tools']])"
然后按业务域拆成两个 Agent 各绑一组工具
python -c "print(len(['get_order','get_refund']),len(['create_ticket']))"
等前面都确认过,再用标注问题回归工具选择准确率
python -c "print(round(sum(a==b for a,b in zip(['get_order'],['get_order']))/1,2))"
改完先别撤,确认这几项。同一批 50 条问题的工具选择准确率从 0.6 升到 0.92,日志里不再跨域选错,参数也能一次填对。
工具数量是准确率的主要变量,超过十个就该按场景拆,靠改描述只能抬一点上限,抬不动结构问题。监控比日志更早给出信号,事后回看经常能提前半小时发现异常。
