前端进阶之旅前端进阶之旅
基础篇
进阶篇
高频篇
精选篇
手写篇
原理篇
面经篇
AI 面试
自检篇
每日一题
  • 综合
    • 综合题型
    • 其他问题
    • 设计模式
    • 思维导图
    • 学习路线
  • 前端基础
    • HTTP
    • 浏览器
    • 计算机基础
  • 进阶学习
    • NPM工作流
    • Docker
    • Canvas
    • Node学习指南
    • 前端综合文章
  • 其他
    • Handbook
    • 职场话题
    • CSS可视化
小程序题库
公众号动态
博客动态
AI 热点
开发者导航
基础篇
进阶篇
高频篇
精选篇
手写篇
原理篇
面经篇
AI 面试
自检篇
每日一题
  • 综合
    • 综合题型
    • 其他问题
    • 设计模式
    • 思维导图
    • 学习路线
  • 前端基础
    • HTTP
    • 浏览器
    • 计算机基础
  • 进阶学习
    • NPM工作流
    • Docker
    • Canvas
    • Node学习指南
    • 前端综合文章
  • 其他
    • Handbook
    • 职场话题
    • CSS可视化
小程序题库
公众号动态
博客动态
AI 热点
开发者导航
返回 AI 情报前线
All News · 全部资讯3811
  • 对话级上下文预算分配:窗口不是无限大
  • 上下文窗口应被视为架构级约束
  • 经典模型与LLM协同:三种实用架构
  • 为不稳定AI依赖加装断路器
  • Embedding模型选型:维度、成本与质量权衡
  • OpenAI因安全顾虑主动放缓Astra模型开发
  • GGUF 量化格式完全指南:选哪个文件一目了然
  • Chinchilla 论文:训练 Token 数与模型参数应等比扩展
  • 电子表格 AI 清洗:人类审批防止静默数据损坏
  • 网站语义搜索:内容哈希实现增量索引
  • AI 管道中的背压与队列深度设计
  • 面向审计的 AI 交互日志表结构设计
  • 提升识别率的音频预处理实战指南
  • AI 离线/气隙部署的完整依赖清单
  • 让 AI 读懂自有文档的两种机制
  • 腾讯云开源团队级AI编码记忆中枢v2.0
  • 与模型结对编程:有效的 Human-AI 协作方法论
  • Claude Code 将以 Auto Mode 为默认:人类无法全程监督
  • AI 功能六个月重构:三层衰减与各自修复逻辑
  • AI 功能复盘:非确定性使传统方法失效
  • AI 功能特性开关:布尔开关不够用
  • Rippling 推出 AI 支出追踪工具
  • AI Control:假设对齐失败后的安全部署策略
  • 如何构建 AI 合规证据包:清单与结构
  • AI 辅助工程团队的成本结构分析
  • AI编程助手效果差异巨大的根本原因
  • LLM代码注入安全漏洞的规律性分类
  • 用 NVIDIA NeMo Retriever + LanceDB 构建多模态 RAG 流水线
  • Copilot 仪表盘新增 ROI 分析版块
  • AI 宣传打假清单:两步过滤大部分虚假宣传
  • AI慢调用何时该上队列:p99与超时预算的精确判断
  • 构建经得起审查的AI审计日志设计指南
  • AI编程代理在CI/CD中的实战数据:人审不可替代
  • AI流式输出与屏幕阅读器的根本冲突
  • OpenAI披露暂停Astra原因:已达网络安全能力临界点
  • Copilot 代码审查支持 Lite/Balanced 力度级别
  • NVIDIA开源NOOA框架:用Python类一体化构建AI Agent
  • Meta AI在网络安全测试中自主入侵外部系统
  • 程序员用Claude追踪蓝牙信号找回丢失手机
  • My Virtual Office v0.7.0:统一SDK对接主流AI Coding工具
  • 安全沙箱执行AI生成的JavaScript实战指南
  • AI瓶颈不在模型本身,而是系统架构
  • GPT-4o vs Claude vs Mistral:按任务类型的生产基准评测
  • LLM上下文窗口的真实有效范围远小于标称值
  • 近800个恶意npm包威胁加密生态的供应链安全
  • 322个AI Agent在API市场的真实消费行为数据公开
  • 131 个测试、4 层架构、每次运行 $0.03:我的 AI Agent 评测方案
  • Simon Willison 用 GPT-5.6 Sol Ultra 单次生成完整游戏
  • Supabase 四种密钥全解析:哪些可公开、哪些必须保密
  • 从 GitHub 外推脚本到平台无关的信号贡献引擎
  • Vercel AI Gateway 接入 200+ 模型,Hermes Agent 支持云端沙箱
  • 已加载 51 / 3811
8.0
热点
AI SCORE
编程提效2026-08-08 05:39

AI 功能特性开关:布尔开关不够用

dev.to · AI#特性开关#AI部署#工程实践
Editor brief · 编辑速览

AI 功能需要多维开关:模型切换、降级路径、按用户隔离,而非简单的开/关布尔值,否则凌晨三点只能干等。

文章思维导图
Knowledge map
拖拽缩放
Full translation

完整中文译文

每个团队都知道如何把功能放在开关后面。这里的不同之处在于,最可能在凌晨三点需要改动的东西不是功能是否开启——而是它调用了哪个模型、使用了什么 prompt,以及它在多大程度上可以不经询问就自行操作。

为什么常规开关不够用

一个传统的功能开关用一个布尔值回答一个问题,而且这个形状是正确的,因为传统功能只有一种失败模式:它坏了。而 AI 功能有多种失败模式,且需要不同的响应。

提供商降级了——你需要换用不同的模型,而不是关掉功能。Prompt 变更导致质量回退——你需要恢复到之前的 prompt,但这不是一次代码部署。功能本身没问题,但某个特定客户的数据产生了糟糕的输出——你只想针对这个客户关掉,对其他人保持开启。支出超出预期——你想要用便宜的模型或降级路径,而不是让服务中断。一个布尔值无法回答以上任何一种情况,因此对每种情况的响应都变成了一次部署,而部署是你最需要速度时最慢的工具。

还有第二个原因是这个依赖关系特有的。你在开关后面管控的行为可能在没有任何部署的情况下发生变化,因为模型是别人的,可以在你不知情的情况下被更新。开关通常是一种控制你自身变化的机制;在这里它也是对你没做出的变化做出反应的机制——这就是为什么检测到提供商一方的行为变化和拥有一个可以应对的开关,是同一个控制机制的两半。

四件事要分开做开关

把这些事项保持独立,因为它们被不同的人出于不同的原因拉动。工程师在提供商事故期间切换模型;领域负责人回滚 prompt;支持负责人禁用某个租户;经理在一个糟糕的周后降低自主程度。如果这四件事是一个开关,上述每一个动作都会把功能对所有人关掉,而开关会因为成本太高而停止被使用。

一个值得付出的实现注意事项:所有四个开关的解析值要和模型 ID 以及 prompt 版本一起记录在每条请求的日志行中。否则你既让行为变得可配置,又同时让它变得无法重建某次请求得到了什么行为。

一个没有开放计划的开关在百分之一时就会变成永久的

在第一个用户看到功能之前就写好逐步下线的方案;四个节点,每个都有退出条件。

仅限内部,无时间限制。 当团队用它处理了真实工作而非测试输入时退出。目的是发现只有在真实数据上才会出现的失败模式,而且这是免费的。

一个小的命名队列。 不是随机百分比——而是你能联系到的人。当定性反馈加上你所担心的失败类别不再出现时退出。随机百分比用于后续阶段,当你需要统计数据而非解释的时候。

带对照组的百分比爬坡。 现在统计数据变得重要了。保留一个永远得不到该功能的对照组,因为这是将业务指标的变化归因于这个功能而非季节性因素的唯一方法。当你提前命名的质量、成本和延迟指标都满足时退出——三个维度一起考量,因为在某一维度上以牺牲其他维度为代价取得进步,是 AI 功能看起来成功但实际并非如此的常见方式。

默认开启,保留开关。 退出——也就是删除开关——只在经历了一段没有回滚的时期之后,且在替代控制到位的情况下。而对于模型和 prompt 这两个维度,可能永远不会删除;这两个是配置而非临时发布机制。

最容易被跳过、最难恢复的标准是对照组。没有它,半年后没人能说这个功能是否有帮助,而关于是否继续维护它的争论会被最自信的人所左右。

终止开关不是开关

把终止开关和开关混为一谈是终止开关失效的原因。终止开关由四个需求定义,全部都是关于它不需要什么的。

不需要部署。 如果拉下它需要一次构建,那就不是终止开关。这是其他所有需求的前提。

不需要工程师。 凌晨两点注意到问题的人是支持人员。如果只有作者能拉下它,响应时间取决于唤醒他们需要多久。

不依赖被终止的东西。 一个评估逻辑调用了提供商的开关,或者配置是通过失败路径获取的,恰好在最需要它的时候失效。故障安全默认值、本地缓存、不依赖网络调用的评估。

没有错误状态。 拉下它应该产生降级后的功能,而不是堆栈跟踪。开关关闭了模型,但必须有其他东西来响应——这意味着降级路径必须在开关值得拥有之前就存在。

而且它必须被演练过。一个从未在生产环境拉过的终止开关只是一个假设。在一个安静的时段故意拉下它,观察功能的做法,并确认降级路径是你设计的那条而不是一个加载 spinner。这样做一次往往会至少发现一个问题,最常见的是降级路径在某个调用点从未被接入。

在开关腐坏之前退役它们

开关会累积,而一个过时的开关比没有开关更糟糕:它是一条无人测试的代码路径,最终会有人启用它。两个习惯保持这个集合的健康。

首先,给每个发布开关在创建时就设定一个过期日期——一个截止日期,到期后要么删除要么显式转换为永久配置。这个区分是有用的部分。发布开关是临时脚手架,应该消亡;模型选择或自主程度开关是永久控制,应该被文档化、被拥有、被演练。把两类混合在一起会导致代码库最终有四十个没人敢删除的开关。

其次,当开关被移除时删除死分支。一个永远为真但假分支仍然存在的开关是一条不再被测试、不再为真的路径——而在 AI 功能中,假分支通常是确定性回退,恰恰是下次事故中你需要的代码。要么保持它被演练,要么承认它已消失;让它执行一年然后在紧急情况下信任它,是三个选项中最糟糕的。

模式:渐进式自主


Original source

本文由 AI 翻译整理自 dev.to · AI,原文版权归原作者所有。

阅读英文原文
上一篇
AI 功能复盘:非确定性使传统方法失效
下一篇
Rippling 推出 AI 支出追踪工具