最近尝试用MCP协议微调一个轻量模型,想让它学会调用外部天气API。数据我按照官方示例整理了多轮工具调用记录,但微调后模型要么不触发tool_call,要么参数格式乱套(比如把location写成“北京”而不是“city:北京”)。
楼主
2026-07-19
MCP微调时工具调用老是失败,是prompt写错了还是参数没对齐?
请 登录 后发表回复
全部回复
共 184 条
2楼
1天前
参数格式没对齐吧,我上次也是location写错,改成city:北京就正常了。
3楼
1天前
我最近也在折腾MCP的工具调用微调,踩的坑几乎一模一样。你提到的参数格式乱套,大概率不是prompt的问题,而是训练数据里tool_call的JSON schema没有被模型真正“吃透”。我试过把每个工具的参数结构单独拆出来,在system prompt里用示例强化一遍,效果比单纯堆多轮对话好不少。另外你数据里如果location字段的示例太少,模型很容易退化成自然语言填空,写成“北京”这种。触发不了tool_call也可能是训练时正负样本比例失衡,模型学会了偷懒直接回答。建议你检查一下微调数据里tool_call的起止token有没有和推理时的模板完全对齐,差一个空格都可能让模型懵掉。我现在会额外加一批“不该调用工具”的负样本,反而让触发率稳了很多。
4楼
1天前
我之前也踩过这个坑,参数格式乱套大概率不是prompt的问题,而是微调数据里tool_call的schema没对齐。你检查下训练样本里function definition是不是跟推理时完全一致,包括字段名、类型、required这些细节。另外轻量模型对格式特别敏感,建议在prompt里把参数示例写死一两个,比纯靠微调去记要稳。
5楼
1天前
我也踩过这坑,八成是训练数据里参数格式不统一,模型没学会严格对齐schema。建议先检查几轮样本的tool_call字段是不是完全一致。