082、本地模型微调概述
昨天半夜在调一个给Agent用的工具调用微调,7B的基座模型,LoRA跑了一轮,loss降得挺漂亮,一测生成却发现模型根本不会输出tool_call的JSON,反而一本正经地用自然语言告诉我“您需要我先调用天气API吗?”——那一刻真想砸了显卡。后来查了一晚上,发现问题出在训练数据的对话模板上:我把system提示和user输入拼成一个字符串丢进去了,模型根本没学会区分“该说什么”和“该做什么”。所以这篇笔记,我就从这次踩坑开始聊本地模型微调的那些事。
先说清楚一个概念:本地模型微调,就是把你手里的开源基座模型(比如Qwen2.5-7B、Llama-3-8B、Mistral-7B这些)在自己的服务器/工作站上继续训练,让它往你想要的风格、任务、或者能力方向拐一拐。Agent场景里,我们通常希望模型不只是聊天,而是能够理解工具调用协议、输出结构化参数、遵循规划格式。这些能力靠通用基座模型和提示词工程硬挤,往往不稳——提示词写得再花哨,模型一长就飘,输出格式说破天它有时候也固执己见。微调的本质是“把行为范式直接刻进权重”,而不是每次都靠临场发挥。
你可能会问:为什么不直接调API?比如用GPT-4加function calling不就完事了吗?这里有个现实问题——你调的是别人的模型,你的Agent每次请求都要把工具描述、示例、上下文全发出去,token消耗大,而且延迟你控制不了。更关键的是,有些场景数据敏感,压根不允许出内网。本地微调的好处就是模型跑在你自己的卡上,推理可控、数据可控、行为也可控。坏处嘛,就是坑多,这一篇先做个概览,后续章节再逐个展开。
回到那个炸裂的调试现场。我的Agent需要调用一个搜索工具,训练样