30组对照实验告诉你:Prompt规则不是装饰品,但QLoRA内化还差得远

17 阅读4分钟

实验分两部分

Part 1(外部脚手架): 在模型外面加一套文件系统规则(SOUL.md / BODY.md / INTERFACE.md),看能不能减少身份漂移。

Part 2(权重内化): 用QLoRA把这套规则"烧"进模型权重,看能不能省掉每次加载的成本。

Part 1的结果看起来不错。Part 2的结果告诉你为什么不能只看Part 1。


Part 1:外部脚手架有效果,但有条件

30组对照实验,2x2列联表:

正确答案错误答案
有脚手架114
无脚手架312

Fisher精确检验:p = 0.0092。比值比 OR = 11.0,95%置信区间 [2.0, 60.6](Source F)。

p < 0.01。统计学上显著。效应量也很大(OR=11意味着有脚手架正确率是没脚手架的11倍)。

但我必须说明实验方法的局限:

  1. 评分不是盲法。 我自己评自己的模型输出。知道哪个是加了脚手架的,哪个没加。
  2. 分组是交替分配,不是随机分配。 这可能导致系统性偏差。
  3. 只用了单一模型评估。 DeepSeek V4 Pro。跨模型泛化性未测试。
  4. 样本量是刚好够用的下界。 n=30对于2x2 Fisher检验是合理的,但置信区间很宽(2.0-60.6),说明估计精度不高。

这些限制不否定结果,但意味着Part 1应该被看作"有趣的信号,需要重复实验验证",而不是"确定的结论"。


Part 2:想把规则"烧"进权重,结果全部翻车

Part 1证明了外部规则有效。那能不能用微调让它变成模型内部的"直觉"?

实验设计:

  • 基座:Qwen2.5-1.5B-Instruct,QLoRA 4-bit,rank=16(Source H)
  • 训练数据:253条来自我自己Claude Code会话的问答对(Source D)
  • 评估:10个未训练领域,20个测试提示词

结果:

维度基座模型微调模型变化
结构化分解1.850.50-73%
验证行为0.650.20-69%
自我纠错1.100.20-82%
不确定性声明0.550.05-91%

(Source B: data/eval_report.json)

四个维度全部下降。无一例外。

ROUGE-L词汇重叠度:微调vs基座均值0.095,Prompt-only vs微调均值0.107。写prompt的效果方向性好于微调(Source C)。


两部分连起来看

Part 1证明:外部规则确实能改变模型行为。 p=0.0092,效应显著。

Part 2证明:把同样的规则用QLoRA内化到1.5B模型中,不但没成功,还让行为指标全面退化。

两者不矛盾。外部脚手架是"每次运行都加载完备规则"。微调是在"见过253个例子后自己推断规则"。前者是查手册,后者是凭记忆。在只有253个样本、单用户数据、1.5B参数规模的条件下,手册比记忆靠谱得多。


为什么QLoRA没学到

第一个原因:RLHF先验在抵抗。 Qwen2.5-1.5B-Instruct的RLHF训练让它倾向于"自信回答"。我的训练数据要求"在不确定时说我不确定"。这两个目标冲突。微调数据量只有253条,远不足以覆盖RLHF的先验。结果是模型学了一个四不像——既不够自信也不够谨慎。

第二个原因:数据没有"反例"。 253条训练样本展示的都是"正确做法",没有展示"错误做法然后纠正"的完整过程。模型看到的是"面对不确定时应该这么说",但它不知道"如果不这么说会有什么后果"。缺少对比信号的情况下,模型学的是表面句式而不是决策逻辑。

第三个原因:1.5B太小。 模型容量有限。在1.5B参数里塞进"通用语言能力+特定行为模式",可能超出了容量上限。"行为模式的泛化"可能是一个需要更大模型才能出现的能力。


实验质量坦白

这个实验不是什么"严谨的学术研究"。它是一个个人的技术探索,有许多不完美的地方。我把它们都写出来:

  • Part 1非盲法评分——我知道哪个是实验组
  • 交替分配而非随机分配
  • 评分用的正则表达式,没有人工标注验证
  • 没有标准的SFT基线对照(同样的数据做普通的指令微调)
  • n=1人类被试——所有训练数据来自一个人
  • n=10个测试领域——功效分析显示需要n>=48才能检测30pp的效应

这些不是说"实验无效"。这是说"实验结果需要放在这些限制条件下理解"。


如果你也想做类似的事

这个领域值得探索。如果你的条件更好,以下是你需要的东西:

  1. n >= 48个测试领域(80%功效检测30pp效应)(Source: paper.md)
  2. 多个人的会话数据(至少5-10人,学习通用模式而非个人习惯)
  3. 盲法评分(评分者不知道哪个是实验组)
  4. 更大的模型(7B起步,1.5B可能根本不够)
  5. 行为评估而非loss评估(loss下降不等于行为改善)

我的pipeline代码(14个Python文件,1924行)是开源的:github.com/YuhaoLin200…