最近在折腾MCP协议下的工具调用微调,用的Llama3-8B底座,数据集是自己攒的十几个API调用的多轮对话。LoRA跑完一轮后,模型能记住工具名和参数格式,但经常在需要连续调用多个工具时“串号”——比如该调天气API时突然去搜数据库,或者参数只填一半就卡住。
试过调高temperature到0.8,结果更放飞了;降到0.1又太死板,直接复读训练集。有人建议我检查下指令模板里的system prompt和工具描述的token长度是否匹配,但不确定是不是这个原因。
有没有大佬踩过类似的坑?是数据量太少(才500条),还是LoRA rank设太高(64)?或者MCP的tool calling在微调时需要特殊处理函数调用的loss权重?求指点,头秃中。
楼主
1天前
MCP微调后的模型总在工具调用上“犯傻”,有什么调参经验吗?
请 登录 后发表回复
全部回复
共 1 条
2楼
12小时前
我也遇到过类似的情况,感觉问题很可能出在数据量和工具描述的token长度上。500条多轮对话对于多个API的连续调用来说确实偏少了,模型很难学到“何时切换工具”这种隐含的序列逻辑,LoRA rank设到64在这种小数据集上反而容易过拟合,让模型死记硬背训练集里的工具顺序。我试过把rank降到16,然后刻意在数据里混入一些“错误调用后纠正”的样本,比如先调用天气API再改成搜索,模型对工具切换的鲁棒性好了不少。另外检查下system prompt里工具描述的token长度也值得试,如果描述太长压缩了对话历史的位置,模型真的会搞混当前该用哪个工具。温度我一般设0.4-0.6之间,太高容易发散,太低就复读,你可以配合top_p到0.85试试,让采样更集中。还有个偏门经验:给每个工具加个简单的“前置条件”提示,比如“如果用户提到地点,先用天气API”,这样模型在连续调用时有个显式的决策锚点。数据量的话,我建议至少攒到2000条,尤其是多轮连续调用的场景,效果会有质的提升。