工程与研究结合的重要性

大模型领域有一个非常典型的“断层”:

  • 研究侧容易停留在:公式、论文指标、SOTA 结论

  • 工程侧容易停留在:代码能跑、吞吐够用、线上不崩

但在 LLM/MLLM 里,这两者必须强绑定:很多看起来是“模型问题”的失败,本质是系统问题;很多看起来是“系统问题”的瓶颈,本质是建模假设与目标函数问题。

本章给出一套可复用的方法论:用工程约束反推研究问题,用研究抽象指导工程拆解。


为什么大模型更需要“工程 × 研究”闭环?

1) 成本巨大:你无法靠试错“碰出来”

训练一次模型的成本(数据/算力/时间/人力)很高。如果没有研究层的抽象(问题定义、变量控制、有效评测),工程迭代会退化成“调参玄学”。

2) 失败模式多:指标提升并不等于可用

典型例子:

  • 生成更流畅,但事实性更差(幻觉更严重)

  • benchmark 提升,但线上 domain shift 下崩溃

  • 多模态回答更长,但引用证据更少(不可审计)

研究侧要回答“为什么”,工程侧要回答“如何控制与验证”。

3) 系统即模型:推理栈会改变模型行为

推理阶段的很多工程决策会直接改变模型输出:

  • decoding 策略(温度、top-p、beam)

  • 上下文组织(RAG、摘要、记忆)

  • KV cache、量化带来的数值误差

  • 工具调用与权限边界

这意味着:模型的“最终能力”不是 checkpoint 的属性,而是系统组合的属性。


一个可落地的工作流:把“研究问题”工程化

推荐把任何新方向按以下步骤推进:

1) 明确问题定义(Definition)

  • 输入是什么?输出是什么?

  • 目标函数是什么?可否近似?

  • 约束是什么?(安全、合规、时延、成本、可审计)

2) 明确评测与失败标准(Evaluation)

  • 离线评测指标是否与线上目标一致?

  • 是否有“可验证”指标(结构化、可执行、引用证据)?

  • 失败是否可定义(拒答/降级/回滚)?

3) 拆解成系统闭环(System Loop)

把系统拆成:观察 → 计划 → 行动 → 校验 → 记忆 → 监控 → 数据闭环。

在这个闭环里,模型只负责它擅长的部分;硬约束与审计放在系统层。


常见误区(非常容易踩坑)

误区 1:把“不可验证”的任务当作监督学习

如果标签本身不稳定、reward 不可定义、或者存在强混杂(如医疗决策),端到端学习往往不是“效果差”,而是“问题定义不成立”。

(你在 posts/end2end_medical_model.md 已经给了一个非常典型的案例。)

误区 2:只追单一指标,忽略行为约束

例如只追 BLEU/CIDEr/Win-rate,但不约束:

  • 引用证据

  • 格式与结构

  • 越权与敏感输出

结果是:指标上去了,系统不可控。

误区 3:把推理性能当作“部署后再优化”

LLM/MLLM 的推理瓶颈(KV cache、带宽、batching、量化误差)会反过来限制你能用的上下文与策略,从而改变最终效果。正确做法是:从第一天就把 P95/P99、成本与可观测性放进设计。


工程视角的“严谨性”:你需要哪些证据?

当你说“这个方法有效”,最好能回答:

  • 归因:是数据变了?目标函数变了?还是推理策略变了?

  • 稳定性:不同 seed、不同 prompt 分布、不同长度下是否稳定?

  • 可解释:失败时能否定位到:数据/模型/推理/系统哪一层?

  • 可复现:能否用固定配置在另一台机器/另一套环境复现?


最小工程清单(建议作为章节/项目模板)

  • 配置管理:训练/推理配置可追溯(版本、超参、数据 hash)

  • 评测集治理:防泄漏、覆盖关键场景、定期更新

  • 在线监控:时延、token/s、OOM、拒答率、幻觉指标(如引用缺失)

  • 安全策略:权限、敏感过滤、关键动作确认

  • 数据闭环:线上失败样本自动收集→标注/规则→再训练/再评测


本章小结

  • 在大模型里,“系统设计”与“模型方法”是同一个问题的两种表述。

  • 研究给你抽象与可控变量,工程给你约束、证据链与可迭代闭环。

  • 任何章节/项目都应围绕:问题定义、评测标准、系统闭环与失败可控性来构建。