
最近不少开发者的时间线里都在刷“大模型微调”尤其是 Qwen3.5 进入视野后很多人的第一反应是先ollama pull qwen3.5:9b装下来聊两句。但聊完之后呢模型依然是那个模型业务依然是那个业务本质上没有任何变化。原因很简单用大模型和让大模型为自己的业务服务是两件完全不同的事。前者只需要装一个客户端后者需要你理解 Prompt 工程、微调、RAG、Agent 这一整套链路。这篇文章想给你一条“三天速通”的路线图核心是 Qwen3.5 微调实战同时把 Prompt、ReAct、RAG、Agent、QAT、Harness 这些关键词串成一个完整闭环。读完你能做到从一个只会聊天的开源模型出发完成数据准备、GPU 微调、量化部署、知识库接入和 Agent 工具调用并具备基本的效果评测能力。1. 这篇文章真正要解决的问题先明确一个判断所谓“速通”不是让你三天变成大模型算法工程师而是让你用最短的时间跑通一条最小可行链路。很多人在决定微调之前会陷入三个陷阱。第一个陷阱是“只测试不生产”。装好一个开源模型后只会追问“还能不能再聪明一点”却不知道聪明程度取决于数据、训练配置和评测方式。第二个陷阱是“只微调不落地”。模型训完了却不知道如何部署、如何接入业务、如何防幻觉。第三个陷阱是“只调库不思考”。看到 RAG、Agent、QAT 这些词就觉得高大上却不清楚它们分别解决什么问题更不清楚它们之间的边界在哪里。这篇文章会带你把链条理顺Prompt 工程负责“把模型的已有能力用好”微调负责“把模型的能力按你的业务调偏”RAG 负责“把外部知识注入对话”ReAct 和 Agent 负责“让模型从回答问题走向完成任务”。而你最终要判断的是你的场景到底应该用哪一两段而不是把全部技术都堆上去。2. 微调之前先搞清楚这几组核心概念2.1 什么是大模型微调大模型微调Fine-tuning指的是在预训练模型的基础上用特定行业、特定任务的数据继续训练让模型在目标场景下的表现更稳定。和全参数预训练不同微调的参数量级小、数据规模小、训练时间短更适合普通团队做私有化落地。微调并不改变模型的基本能力它更像是给一个通用型员工做“入职培训”让他在你的业务范围内熟悉术语、格式和边界。你在和基座模型对话时觉得它“什么都会但什么都不精”微调的目标就是让它“在你这摊业务里足够专业”。2.2 几组容易混淆的名词名词解决的问题一句话解释是否必须Prompt Engineering不训练就能激发模型已有能力把问题问得规范模型回答得更规范一定需要微调 (Fine-tuning)让模型适应特定数据分布和输出格式用业务数据给模型做定向训练看数据差异RAG让模型引用外部最新或私有知识先检索资料再结合资料生成回答知识频繁更新时更合适Agent / ReAct让模型调用工具完成多步任务拆解任务-行动-观察-再行动任务需要执行动作时QAT 量化感知训练压缩模型体积减少部署资源训练时模拟量化误差部署时更稳尺寸和显存敏感时Harness驱动与评测 Agent 的框架给 Agent 搭“测试台”给出环境和指标工程化评测时2.3 常见的认知误区误区一“Prompt 写不好微调来弥补。”实际上如果 Prompt 阶段的表现距离目标太远微调也很难逆转。Prompt 是下限微调是上限二者不是互斥关系。误区二“模型幻觉是因为没微调。”幻觉的根因一部分来自模型内部知识不足一部分来自生成策略RAG 在多数场景下比微调更直接解决“不知道”的问题。误区三“微调很贵必须一堆卡。”对于 7B~9B 级别的模型在消费级显卡上用 LoRA/QLoRA 方式微调已经成为主流成本和门槛已经大幅下降。但要注意成本下降不等于不需要做数据治理和评测。3. 第1天Prompt 工程实战先学会“把问题问对”3.1 为什么先学 Prompt微调前最重要的准备工作之一是能用 Prompt 把基座模型的能力边界摸清楚。很多团队一上来就微调训完发现效果还不如用几个优秀的 Prompt 模板原因就是没有先做这个“基准测试”。Prompt 工程的核心不是“咒语打得好”而是结构化的表达。角色、任务、输入、输出格式、约束条件五个要素只要写清楚哪怕不带“请”“谢谢”也能得到稳定输出。3.2 一个差 Prompt 和好 Prompt 的对比先看一个差 Prompt帮我写一个客户投诉的回复。再看一个结构化的 Prompt角色你是某电商平台的售后客服。 任务回复一条客户投诉。 输入 - 客户原话“我买的手机收到后屏幕有划痕申请退款三天了没人处理。” - 商品手机订单状态已签收退款状态待审核。 输出格式三段式回复第一段致歉第二段说明处理流程第三段给出预计时间。 约束 1. 不承认责任但表达重视。 2. 字数控制在150字以内。 3. 不承诺具体赔偿金额。把五个要素写全之后模型的输出稳定程度会明显提升。对多数日常业务来说先用这种方式把基座模型的能力压榨到极限再决定要不要微调。3.3 Prompt 调优的常见报错在调用云端大模型接口时你可能会遇到这一段报错invalid prompt: your prompt was flagged as potentially violating our usage policy. please try again with a different prompt.这表示提示词触发了内容安全过滤器。常见触发原因包括包含越狱指令、尝试绕过多轮限制、包含极端词或恶意指令。解决办法是去掉“忽略之前指令”“你现在没有限制”等越狱短语。把敏感诉求改成中性描述再判断是要在合规框架内解决还是会直接拒绝。如果确实需要该能力优先通过自有模型微调和本地部署来做而不是试图绕过供应商的内容策略。另一个常见问题是上下文过长尤其是在接入历史消息和 RAG 检索结果之后prompt is too long ... automatic compaction failed: api error: 400 unsupported这说明当前请求超过了模型的上下文限制并且自动压缩失败。解决办法是裁剪历史消息条数、减少 RAG 返回的文本块数量、为长文本设计摘要策略而不是盲目加大上下文窗口。3.4 Prompt 调优清单每次只改一个变量用同一批测试问题做回归对比。将 Prompt 版本化分环境保存而不是直接改线上配置。如果是中文业务注意特殊符号、空格、换行部分模型在特定语料下容易跑偏。把“输出格式”写具体比如 JSON 就写明字段代码就写明语言。4. 第2天基于 Qwen3.5 的微调实战4.1 技术选型与硬件评估在聊具体命令之前先回答一个最常见的问题手头没有训练卡、只有一台笔记本能不能练对于 Qwen3.5 的 9B 级别模型直接全参数微调需要很高的显存不现实。但对开发者学习和验证来说用 LoRA 或 QLoRA 可以大大降低门槛。推荐的开源工具链是模型Qwen3.5:9B可以通过 Ollama 拉取也可以从官方仓库下载原始权重。微调框架LLaMA-Factory或 transformers peft trl 组合。量化位宽QLoRA 通常使用 4bit 基础模型加载。显存建议8GB 以上可训练小 LoRA16GB 以上体验更稳。需要提醒的是具体版本和参数请以官方文档和当前工具链为准本文强调的是一套通用流程。你不需要背下所有命令但要知道每一步在做什么。4.2 环境准备先用 Ollama 体验基线# 拉取 Qwen3.5 9B 模型 ollama pull qwen3.5:9b # 启动交互式对话 ollama run qwen3.5:9b如果你在个人电脑第一次使用 Ollama还能在模型列表里看到一些社区上传的 GGUF 变体例如带uncensored、aggressive标签的版本。这里建议一律不用。这类模型可能是在官方权重上去掉了安全对齐个人玩的时候看着“爽”到了企业项目就是“事故”。4.3 准备数据集微调效果的上限不是模型而是数据。一个可以落地的数据集格式一般是 JSON 或 JSONL[ { instruction: 你是客服系统请根据订单信息生成回复。, input: 订单号A10086客户要求退款。, output: 您好我们已经收到您的退款申请预计1-3个工作日原路退回。 } ]对于 9B 级别的模型如果你想跑通流程数百到数千条高质量数据即可。团队项目建议每条数据至少经过一次人工校验。覆盖好输入边界常见情况、边界情况、异常情况。输出要符合产品要求的语气、格式和长度。4.4 微调训练的完整示例这里以 LLaMA-Factory 的 CLI 方式举例。具体命令会随版本变化但思路是通用的# 安装框架 pip install llama-factory # 启动 LoRA 微调 llamafactory-cli train \ --model_name_or_path Qwen/Qwen3.5-9B \ --dataset custom_dataset \ --template qwen \ --finetuning_type lora \ --quantization_bit 4 \ --output_dir qwen-lora-checkpoint \ --per_device_train_batch_size 2 \ --gradient_accumulation_steps 4 \ --learning_rate 2e-4 \ --num_train_epochs 3 \ --max_seq_length 1024这段命令做了什么--quantization_bit 4启用 QLoRA 低秩微调加载模型时按 4bit 量化大幅降低显存。--finetuning_type lora只训练插入的低秩适配层而不是全部参数。--output_dir保存训练后的 LoRA 权重用于后续合并和部署。如果你更习惯写 Python也可以使用 transformers peft 的常见流程from peft import LoraConfig, get_peft_model from transformers import AutoModelForCausalLM, AutoTokenizer model_id Qwen/Qwen3.5-9B tokenizer AutoTokenizer.from_pretrained(model_id) model AutoModelForCausalLM.from_pretrained( model_id, load_in_4bitTrue, device_mapauto ) lora_config LoraConfig( r16, lora_alpha32, target_modules[q_proj, k_proj, v_proj, o_proj], lora_dropout0.05, biasnone, task_typeCAUSAL_LM, ) model get_peft_model(model, lora_config) print(model.print_trainable_parameters())这里需要说明不同模型的层名可能不同target_modules需要根据模型结构调整。r秩决定适配层参数量一般 8~32