1. 微调之后,为什么还要折腾统一 Key 接入
Qwen3 用 LLaMA-Factory 跑完 LoRA,很多人会卡在“下一步怎么用”上。训练日志里 loss 曲线很漂亮,checkpoint 也存下来了,但真正要把微调后的模型接到日常开发流里,问题就来了:本地llamafactory-cli api起的服务只能局域网访问,换个机器就得重新配环境;Cline、CC Switch 这类编码工具想同时调用微调模型和通用大模型,得维护好几套 base_url 和 key;做效果对比时,一会儿要连本地 8000 端口,一会儿要连云端接口,配置改来改去容易出错。
这篇就聚焦这个环节:用 LLaMA-Factory + Easy Dataset 完成 Qwen3 的 LoRA 微调后,怎么通过 TaoToken 的统一 Key 和 API 通道,把推理与评估串成一个闭环。适合已经跑通训练、想解决“微调模型怎么稳定调用”的开发者。核心思路是把微调模型和通用模型都挂到同一个 OpenAI 兼容入口下,用一套 Key 管理,工具侧只改模型名不改通道。
TaoToken 在这里的角色是统一接入层:它提供 OpenAI 兼容的 API 通道,你可以把本地 LLaMA-Factory 起的推理服务、云端通用模型都通过它来统一调用。官网入口是 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,API 地址是 https://taotoken.net/api ,注意 API 地址不带 UTM 参数。
需要先明确一点:TaoToken 不是替代 LLaMA-Factory 的训练或推理引擎,它解决的是“调用通道统一”的问题。微调模型本身还是跑在你自己的 GPU 上,TaoToken 负责让 Cline、CC Switch 这些工具用同一套配置去访问它。
2. TaoToken 前置:Key 申请与通道确认
在动手改配置之前,先把 TaoToken 这边的准备工作做完。这一步不复杂,但顺序别搞反。
2.1 获取 API Key
登录 TaoToken 控制台,进入 API Keys 页面创建一个新 Key。建议按用途命名,比如qwen3-lora-eval,方便后面区分是给微调评估用的还是给日常编码用的。创建后立刻复制保存,页面刷新后就不再完整显示。
控制台地址:https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_content=console&utm_campaign=rewrite
API Keys 管理页:https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api-keys&utm_campaign=rewrite
2.2 确认 API 通道与模型对话入口
TaoToken 的 API 基地址是https://taotoken.net/api,兼容 OpenAI 的/v1/chat/completions协议。也就是说,任何支持自定义 base_url 的 OpenAI SDK 或工具,把 base_url 指向它、把 key 换成刚创建的 Key,就能调用。
想先在网页上验证 Key 是否可用,可以用模型对话入口直接试:https://taotoken.net/model-chat?utm_source=taotoken_aicg_blog_end&utm_content=model-chat&utm_campaign=rewrite
接入文档在这里,配置字段有疑问时对照查:https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite
2.3 规划模型命名
统一通道的关键是模型名映射。你需要决定微调模型在调用时用什么名字。常见做法是:
| 用途 | 模型名示例 | 实际指向 |
|---|---|---|
| 微调后 Qwen3 | qwen3-4b-lora-ft | 本地 LLaMA-Factory API 服务 |
| 原始 Qwen3 | qwen3-4b-base | 本地原始模型服务 |
| 通用对话 | gpt-4o-mini等 | 云端通用模型 |
这样在 Cline 或 CC Switch 里切换模型时,只改模型名,base_url 和 key 都不动。
3. 可复制配置:config.toml 与 settings.json 骨架
这一节给可直接复制的配置。分三块:LLaMA-Factory 的推理配置、TaoToken 侧的 settings.json、以及 CC Switch / Cline 的接入片段。
3.1 LLaMA-Factory 推理配置 config.toml
微调完成后,先用 LLaMA-Factory 起一个 OpenAI 兼容的 API 服务。下面这份inference_config.toml可以直接改路径使用:
# inference_config.toml model_name_or_path = "/mnt/LLM/models/qwen3-4b" adapter_name_or_path = "/mnt/LLM/LLaMA-Factory/saves/Qwen3-4B-Instruct/lora/train_2025-05-27-19-35-42/checkpoint-140" template = "qwen3" finetuning_type = "lora" infer_backend = "huggingface" trust_remote_code = true启动命令:
CUDA_VISIBLE_DEVICES=0 API_PORT=8000 llamafactory-cli api inference_config.toml服务起来后,本地http://localhost:8000/v1/chat/completions就是 OpenAI 兼容接口。注意template必须和训练时一致,Qwen3 用qwen3,写错会导致输出格式异常。
如果显存够、想用 vLLM 加速,需要先把 LoRA 合并成完整模型,再改infer_backend = "vllm":
CUDA_VISIBLE_DEVICES=0 llamafactory-cli export \ --model_name_or_path /mnt/LLM/models/qwen3-4b \ --adapter_name_or_path ./saves/Qwen3-4B-Instruct/lora/train_2025-05-27-19-35-42/checkpoint-140 \ --template qwen3 \ --finetuning_type lora \ --export_dir ./merged-qwen3-4b \ --export_size 2 \ --export_device cpu \ --export_legacy_format False合并后用--model_name_or_path ./merged-qwen3-4b --infer_backend vllm启动。
3.2 TaoToken settings.json 骨架
如果你用的是支持settings.json的工具(比如某些 CLI 客户端),可以按下面这份骨架配置。核心是把 base_url 指向 TaoToken,key 填 TaoToken 的 Key:
{ "api": { "base_url": "https://taotoken.net/api", "api_key": "sk-你的TaoToken密钥", "timeout": 120 }, "models": { "default": "qwen3-4b-lora-ft", "fallback": "gpt-4o-mini" }, "endpoints": { "qwen3-4b-lora-ft": { "model": "qwen3-4b-lora-ft", "description": "微调后Qwen3-4B LoRA" }, "qwen3-4b-base": { "model": "qwen3-4b-base", "description": "原始Qwen3-4B对照" } } }这里base_url统一指向 TaoToken,模型名由 TaoToken 侧做路由映射。如果你的本地服务需要单独暴露,可以在 TaoToken 控制台配置上游地址,把qwen3-4b-lora-ft映射到http://你的内网IP:8000/v1。
3.3 CC Switch 配置片段
CC Switch 用来在多个模型配置间快速切换。下面是一个配置片段,把 TaoToken 作为统一通道:
{ "providers": [ { "name": "taotoken-unified", "base_url": "https://taotoken.net/api", "api_key": "sk-你的TaoToken密钥", "models": [ "qwen3-4b-lora-ft", "qwen3-4b-base", "gpt-4o-mini" ] } ], "active_provider": "taotoken-unified", "active_model": "qwen3-4b-lora-ft" }切换模型时只改active_model,不用动 base_url 和 key。
3.4 Cline 配置片段
Cline 在 VS Code 里配置自定义 API 时,选 OpenAI Compatible,然后填:
{ "apiProvider": "openai", "openAiBaseUrl": "https://taotoken.net/api", "openAiApiKey": "sk-你的TaoToken密钥", "openAiModelId": "qwen3-4b-lora-ft" }如果你想让 Cline 在编码时用微调模型、在通用问答时用云端模型,可以在 Cline 的模型切换里配置多个 model id,base_url 保持 TaoToken 不变。
长期做编码和 Agent 任务的话,可以考虑 Coding Plan,它更适合高频调用场景:https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding-plan&utm_campaign=rewrite
4. 验证请求与成功结果
配置写完,必须验证通道真的通了。分三步:先验本地 LLaMA-Factory 服务,再验 TaoToken 通道,最后验微调效果。
4.1 验证本地推理服务
先用 curl 直接打本地 8000 端口,确认 LLaMA-Factory 服务正常:
curl http://localhost:8000/v1/chat/completions \ -H "Content-Type: application/json" \ -d '{ "model": "qwen3-4b-lora-ft", "messages": [ {"role": "user", "content": "用一句话说明什么是LoRA微调"} ], "temperature": 0.7 }'正常返回应该包含choices[0].message.content,内容是模型回答。如果返回 404,检查template和model_name_or_path路径;如果返回 CUDA OOM,降低 batch 或换更小的 checkpoint。
4.2 验证 TaoToken 通道
再用 Python OpenAI SDK 打 TaoToken 通道:
from openai import OpenAI client = OpenAI( api_key="sk-你的TaoToken密钥", base_url="https://taotoken.net/api" ) resp = client.chat.completions.create( model="qwen3-4b-lora-ft", messages=[ {"role": "user", "content": "用一句话说明什么是LoRA微调"} ], temperature=0.7 ) print(resp.choices[0].message.content)如果这一步能拿到和 4.1 一致的输出,说明 TaoToken 通道已经打通。如果报 401,检查 Key 是否复制完整;如果报 model not found,检查 TaoToken 控制台的模型映射是否配好。
4.3 验证微调效果
微调是否有效,要做对照。用同一个问题分别打微调模型和原始模型:
def ask(model_name, question): resp = client.chat.completions.create( model=model_name, messages=[{"role": "user", "content": question}], temperature=0.1 ) return resp.choices[0].message.content question = "根据我们提供的财报数据,腾讯2024年二季度数实收入是多少?" print("微调模型:", ask("qwen3-4b-lora-ft", question)) print("原始模型:", ask("qwen3-4b-base", question))实测下来,微调模型能准确答出财报里的具体数字,原始模型要么答错要么说不知道,这就说明 LoRA 学到了领域知识。注意 Qwen3 默认会输出思考过程,不想要的话在 prompt 里加/nothink。
4.4 批量评估
单条验证过了,可以用 LLaMA-Factory 的 eval 做批量评估,看通用能力有没有下降:
CUDA_VISIBLE_DEVICES=0 llamafactory-cli eval \ --model_name_or_path /mnt/LLM/models/qwen3-4b \ --adapter_name_or_path ./saves/Qwen3-4B-Instruct/lora/train_2025-05-27-19-35-42/checkpoint-140 \ --template qwen3 \ --task mmlu_test \ --lang en \ --n_shot 5 \ --batch_size 1输出会给出 Average、STEM、Social Sciences 等分项分数。和原始模型对比,如果垂直任务提升明显、通用分数下降在可接受范围,这次微调就算成功。
5. 本篇常见错排查
配置和验证过程中,下面这些坑出现频率最高。
5.1 template 不匹配导致输出乱码
Qwen3 必须用qwen3模板。如果误写成qwen或llama3,模型输出会出现重复、截断或格式错乱。检查inference_config.toml里的template字段,和训练时保持一致。
5.2 adapter 路径写错导致加载失败
adapter_name_or_path要指向具体的 checkpoint 目录,不是saves/根目录。比如saves/Qwen3-4B-Instruct/lora/train_2025-05-27-19-35-42/checkpoint-140,少一层就会报找不到 adapter。
5.3 TaoToken 通道 401 或 404
401 通常是 Key 没填对或没带Bearer前缀。404 多半是 base_url 写成了https://taotoken.net/api/v1,正确写法是https://taotoken.net/api,/v1由 SDK 自动拼。如果模型名在 TaoToken 侧没映射,会报 model not found,去控制台补映射。
5.4 本地服务外网访问不了
TaoToken 要路由到你的本地服务,需要本地服务能被访问到。如果 TaoToken 和本地服务不在同一内网,需要做端口映射或用内网穿透。注意不要用违规的代理工具,合规做法是走企业内网或云服务器部署。
5.5 合并 LoRA 时用了量化模型
合并 LoRA 时,model_name_or_path必须是未量化的原始模型。如果指向了 GPTQ/AWQ 量化模型,合并会失败或输出异常。用下载的原始 Qwen3-4B 目录。
5.6 显存不足
Qwen3-4B LoRA 推理一般 12GB 显存够用,但如果同时跑多个服务或 batch 太大,会 OOM。降低batch_size,或把不用的服务停掉。用 vLLM 后端时显存占用更高,注意gpu_memory_utilization参数。
6. 把闭环跑顺:从数据到评估的日常动作
整套流程跑通后,日常动作其实很固定:Easy Dataset 里更新领域文档、重新生成数据集、导出到 LLaMA-Factory 配置路径、启动 LoRA 训练、训练完起 API 服务、通过 TaoToken 通道验证效果。关键是把 TaoToken 的 Key 和 base_url 固定下来,工具侧只切模型名。
微调模型调用和效果验证,用模型对话入口快速试:https://taotoken.net/model-chat?utm_source=taotoken_aicg_blog_end&utm_content=model-chat&utm_campaign=rewrite
接入配置有疑问,对照接入文档:https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite
需要管理多个 Key 时,去 API Keys 页面:https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api-keys&utm_campaign=rewrite
长期做编码和 Agent 任务,Coding Plan 更合适:https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding-plan&utm_campaign=rewrite
Claude Code 相关接入参考:https://taotoken.net/claude-code-anthropic?utm_source=taotoken_aicg_blog_end&utm_content=claude-code-anthropic&utm_campaign=rewrite
最后提醒一句:微调评估不要只看单条问答,至少跑一轮 mmlu 或 cmmlu 看通用能力有没有崩。如果通用分数掉太多,说明学习率或训练轮数过了,回去调小重训。