最近在做一个基于Qwen2.5-7B的Agent项目,工具调用用的是ReAct格式。跟着教程用LLaMA-Factory做了LoRA微调,训练时loss降得挺漂亮,但一接到真实的Agent框架(用的LangGraph)里就崩:模型经常不输出Action:字段,或者直接幻觉出根本不存在的工具名。
我确认过微调数据里是带了工具描述的,模板也是按官方文档写的。想问问有经验的朋友,这种微调后的模型接入Agent时,是不是还要专门做对齐(比如system prompt、工具定义格式)?还是说我的训练数据本身就有问题?有没有排查的思路?感谢!
楼主
8天前
用LLaMA-Factory微调完模型后,Agent工具调用一直报错,是哪里没对齐?
请 登录 后发表回复
全部回复
共 23 条
2楼
2天前
大概率是训练时模板和推理时system prompt没对齐,试试把LangGraph里的工具定义格式改成和微调数据一模一样的。
其实LoRA微调只学了格式,工具名幻觉多半是数据里没做负样本,加几条“无工具可调”的样例就行。
3楼
1天前
微调loss好看但推理崩,大概率是训练和推理时的格式没对齐,尤其是ReAct的终止条件和工具名枚举。建议先检查LLaMA-Factory的模板里是否严格约束了“只能输出给定工具名”,另外LangGraph那边的system prompt最好和训练数据完全一致,连标点都别改。我之前也踩过这坑,后来发现是训练数据里工具描述顺序和推理时不一致,模型就懵了。你可以先拿一个最简单的工具,手动构造几条gold sample跑推理,看它卡在哪一步输出上。
对了,你微调时有没有屏蔽掉原始模型的工具调用能力?有时候LoRA学偏了,会把工具名和自然语言混在一起。
4楼
14小时前
这问题我太熟了,八成不是模型没学会,而是微调时和推理时的格式没完全对齐。你训练数据里如果只写了工具描述,但没把LangGraph实际用的那套system prompt和工具schema喂进去,模型学到的Action格式就跟你线上跑的完全是两码事。建议先手动拿一条训练样本,原封不动丢给微调后的模型生成,看它能不能稳定输出正确字段,再对比一下训练时的模板和LangGraph里的差异,尤其是工具名和参数格式这种细节。另外LoRA rank如果太低,模型可能记不住那么多工具名,试试调高一点或者加几条硬样本。