一句话定义:功能开关(Feature Flag)是写在代码里的一个“条件判断”,它决定某个功能对谁可见、可见多少,而这个判断的值可以在不重新部署代码的情况下随时更改。
它怎么工作
代码里通常长这样:如果开关打开,就走新逻辑;否则走旧逻辑。开关的值不写死在代码里,而是放在配置中心、数据库或环境变量里,程序运行时去读。改一个值,几秒钟生效,不用重新打包、不用重新部署。
打个比方:家里想换新沙发,但旧沙发先留着。新沙发已经搬进屋(代码已部署),要不要让客人坐新的,由你一句话决定(开关打开)。客人坐得不舒服,马上把旧沙发搬回来,不用重新买家具(回滚代码)。
核心:部署不等于发布
部署(Deploy)是把代码送上服务器;发布(Release)是让用户真正用上。过去这两件事绑在一起,所以“上线”是个大动作。功能开关把它们拆开:代码可以先默默部署,功能先关着,等准备好了再打开。出问题时,第一反应从“回滚版本”变成“关掉开关”。
AI 功能为什么特别需要它
传统功能的输出是确定的,测试通过通常就敢上。AI 功能的输出是概率性的:同一个问题,这次答对,下次可能答偏。你没办法用“每次都正确”作为上线门槛。所以更现实的做法是:先把开关对着小范围打开——内部员工、1% 的用户、某个地区——看真实反馈,有问题立刻关掉。开关还可以按用户、按群组、按模型版本分别控制,方便比较和止损。
和相邻概念的区别
| 概念 | 目的 | 典型粒度 |
|---|---|---|
| 功能开关 | 控制某功能对谁开 | 用户、群组、百分比 |
| 配置项(Config) | 调整参数取值 | 全局或按环境 |
| A/B 测试(A/B Testing) | 比较两个方案的效果 | 实验分组 |
| 灰度发布(Canary Release) | 逐步扩大新版本流量 | 按比例、按批次 |
A/B 测试和灰度发布经常借用功能开关来实现,但目标不同:开关是控制手段,A/B 测试是为了做决策,灰度是为了降风险。
对从业者和普通人的意义
对开发者:发版不再是冒险,但开关会越攒越多,需要命名规范、台账和定期清理,否则代码里全是历史残留的分支,也就是常说的“开关债”。
对普通人:你手机里的 App 可能早就装好了某个新功能,只是开关还没对你打开。AI 功能时好时坏,也未必是你运气差,可能是开关、模型版本或放量范围在变。遇到问题顺手反馈,往往比反复重试更有用。
