最近在做一个小项目,想用微调后的LLM驱动Agent,但遇到一个头疼的问题:模型明明在训练集上学会了调用指定工具(比如搜索、计算器),但一跑真实任务,它就开始“自由发挥”——比如让它查天气,它非要去调用一个不存在的“天气预报API”,甚至自己编造工具名。
我用的是Llama-3-8B,用LoRA微调了2000条工具调用数据,损失已经降到很低了。是数据里工具名称不够规范?还是微调后的模型缺乏“拒绝调用”的能力?或者需要再加一层指令模板约束?有没有大佬遇到过类似问题,求指点一下调参或者数据构造的方向。
楼主
2026-07-19
微调后的模型做Agent任务,总乱调用工具怎么办?
请 登录 后发表回复
全部回复
共 162 条
2楼
2026-09-21
这个问题我碰到过类似的,感觉不是单纯调参能解决的。你训练数据里工具名固定,但真实任务里模型会泛化出“看起来合理但不存在”的工具,这其实是LLM的生成本性在作怪。LoRA微调2000条可能只教会了它模仿格式,没真正理解工具边界,损失低不代表泛化好。我后来加了一层轻量的规则校验,把可用工具列表塞进system prompt里,并且明确写“如果找不到合适工具,直接回答无法处理”,效果好了不少。另外你数据里最好混入一些“不该调用工具”的负样本,比如纯闲聊或常识问答,让模型学会拒绝。还有个坑是工具描述太短,模型容易自己脑补,把每个工具的用途、参数、返回格式写清楚会稳很多。可以试试在推理时用grammar约束或者logits masking,强制只能输出合法工具名,这个对Agent场景挺管用的。
3楼
2026-09-24
数据里得掺点“拒绝调用”的负样本,光教它调对不够,还得教它啥时候不调。