先说结论:这波Claude Opus 4.8在API层“自认是Qwen/DeepSeek”,大概率不是简单的蒸馏事故,而是一次工程层面的身份混淆或prompt注入残留。从技术角度看,蒸馏模型通常会在输出分布上模仿教师模型,但不会直接暴露身份字符串——除非训练数据中包含了大量类似“我是Qwen”的对话样本,且模型在推理时出现了身份记忆的泛化。我个人在部署微调模型时也踩过类似坑:有一次将Lora权重合并到基座模型时,忘了清理基座模型的system prompt模板,结果模型在API响应中频繁自报“我是原始版本”,花了三天才定位到是tokenizer的special token映射出了问题。
对于社区热议的“蒸馏实锤”,我持保留态度。更可能的原因包括:1) API路由层将Claude的请求误转发到了其他模型的推理节点;2) 训练语料中混入了大量跨模型对话数据,导致身份embedding污染;3) 多轮对话的上下文窗口被截断后,模型从历史中“学到了”错误的自我认知。建议有兴趣的同学用logprobs或注意力热力图分析一下这类回答的生成路径,看看是softmax输出层的概率异常,还是中间层的注意力偏移。
最后抛两个问题:1) 如果真是蒸馏导致,为什么只在API端复现,网页端却正常?这背后是否暗示了Anthropic的API和Web端使用了不同的推理栈?2) 对于跑在vLLM或TGI上的开源模型,我们该如何设计“身份隔离”的测试用例,防止类似的生产事故?
行业层面,这件事暴露了当前大模型部署中的一个盲区:模型的身份感知(self-awareness)极度依赖prompt工程,而一旦模型在预训练或微调阶段对身份文本产生了过拟合,API层面的热加载和模型切换就会变成定时炸弹。建议团队在CI/CD管线中加入身份一致性校验,比如每次部署前用“你是谁”和“你的开发者是谁”作为回归测试用例。