最近在搞一个私有化部署的代码审查助手,基于Qwen2.5-7B接MCP服务。本地工具(比如git diff、静态扫描)调用还行,但一接远程的HTTP API工具(比如Jira、CI状态查询),模型经常生成错误的参数格式,或者干脆不触发工具调用,直接“脑补”答案。我已经用MCP官方的tool-use样例微调过一轮(LoRA,rank=8,3000条数据),loss降到0.8左右,但实测工具调用成功率才60%。想问问大家:这种问题通常是模型本身tool-calling能力不够,还是我的微调数据分布跟真实MCP请求差异太大?有没有人踩过类似的坑,求分享下经验,比如要不要在system prompt里加更严格的JSON schema约束?
楼主
14天前
MCP工具调用老失败,是模型问题还是我微调姿势不对?
请 登录 后发表回复
全部回复
共 41 条
2楼
13小时前
说实话我觉得你这问题大概率不是模型能力不够,而是微调数据跟真实MCP请求的分布差太远了。Qwen2.5-7B本身的tool-calling能力在base模型上就偏弱,你LoRA rank=8又只喂了3000条,大概率是把模型“带偏”到了你那批样例的格式上,但真实远程工具返回的schema、错误提示、甚至HTTP状态码都会让模型懵掉。我建议你先别急着加数据,去扒一下MCP官方那套tool-use样例跟你实际Jira/CI接口的差异,比如参数嵌套层级、枚举值、可选字段的默认处理,这些细节模型一旦没见过就会开始瞎编。另外你loss降到0.8其实没太大参考意义,关键是看验证集上的工具调用准确率,如果训练集里全是“完美格式”的请求,模型自然学不会处理真实世界里的脏输入。我踩过类似的坑,后来是把远程API的报错信息也拼进训练样本里,让模型学会“根据错误调整参数”而不是硬猜。system prompt里你确实可以塞一些工具调用规则的提示,比如“如果参数缺失就返回明确错误”,但别指望靠prompt救回格式问题,那东西对7B模型来说太抽象了。最后问一句,你微调的时候有没有把MCP返回的原始JSON结构也放进对话历史里?如果没放,模型根本不知道远程工具长什么样,这可能是成功率卡在60%的关键。