《互联网产品的 AI 架构·模型接入与能力边界》6.3 提示版本化与发布
「回声」一次直接改线上提示、没有版本记录,效果变差后无法回滚,只能凭记忆重写。本节把提示发布做成不可变版本、变更记录、确定性灰度与回滚,并要求提示与模型快照精确绑定,配可运行的 TypeScript 注册表与完整测试,并把发布审计写进事件日志。
tag
「回声」一次直接改线上提示、没有版本记录,效果变差后无法回滚,只能凭记忆重写。本节把提示发布做成不可变版本、变更记录、确定性灰度与回滚,并要求提示与模型快照精确绑定,配可运行的 TypeScript 注册表与完整测试,并把发布审计写进事件日志。
结算页改版上线后先涨后跌,问题往往不在实验结论,而在分流与曝光口径。本节用哈希加盐实现稳定分流、用分层隔离并行实验、把渲染、可见、点击三种曝光分开,并给出只上报一次的曝光日志与灰度开关模型,代码可直接运行,最后复盘一次按会话分流的典型误判。
活动页的失败方式比商品页多得多:配置拉不到、活动未开始、已经结束、名额耗尽、运营暂停。本节把这些情况分成「配置问题」与「业务状态」,给出缓存容忍、版本回退保护、降级目标页与降级后分享参数的规则,并附一个用假时钟与可控配置源验证的 L2 模型。
「回声」摘要功能把历史、检索结果和工具输出一次性铺满窗口,提供方从尾部截断时把 system 规则一起切掉,模型开始编造。本节把上下文分成 system、历史、检索、工具四类,给出类别上限与全局裁剪顺序,并用可运行的 TypeScript 实现确定性预算规划与测试。
邀请关系是一本「谁欠谁奖励」的账,绑定时机早一步会被刷、晚一步会被截胡。本节比较点击、注册、首单三个绑定时机,拆开唯一性、可撤销与自己邀请自己的四类伪装,并给出一个把绑定判定、撤销与失败重试写成纯函数、可在本地用 24 条用例验证的可运行模型。
分享链接不是拼几个查询参数,而是一份要穿过渠道、安装包和归因窗口的承诺。本节拆开渠道码、活动 id、邀请人、商品与时间戳的生成与校验,说明分享卡片和落地页不一致时以谁为准、参数丢失后如何兜底,并给出一个可运行、可测试的 L1 分享参数与归因模型。
「回声」把运营活动文案整段塞进 system 后,智能回复开始复读活动、忽略用户问题。本节由此说明提示为什么是产物而不是字符串:模板、变量声明、版本、所有者与评审缺一不可,并用可运行的 TypeScript 实现受限模板语法、编译期变量校验与严格渲染,最后复盘一次靠记忆改提示的事故。
会员到期不是一瞬间的 UI 状态:权益会逐条失效,提醒要按节奏升级,已支付订单还要保住下单时的会员价。本节把降级拆成权益比较、提醒阶段与订单价格快照三层,说明为什么已支付订单永久锁价、待支付订单只保留到支付截止时间,并给出一个可测试的 TypeScript 模型。
积分不是端上可以随便加减的余额,而是一本由发放、抵扣、退回、过期四类流水组成的账。本节说明为什么余额必须从流水重放、过期批次为什么要先到期先出、抵扣失败为什么用退回流水而不是删除,以及多端账本如何按 id 合并,并给出一个可测试的 TypeScript 账本模型。
从一次首帧后自动重试导致回复重复的事故出发,把流式错误分成首帧前与首帧后两段,给出协议内错误事件与连接断开的分工、可测试的重试决策函数,并用 node --test 验证重试上限、不可重试错误、续传位置与客户端呈现,以及首帧后失败的界面取舍。
会员页最容易把等级、有效期与权益状态混成一个字段:用户看到五条权益,实际只有两条可用。本节把会员快照、权益状态与会员价拆开,说明「可领取」为什么不等于「已拥有」、会员价为什么必须由服务端给出并在结算时重算,并给出一个可测试的 TypeScript 展示模型与到期提醒口径。
划线价、券后价与「预计省 X 元」不是三个装饰数字,而是三句可以被核验的事实陈述。本节给出划线价的展示条件、券后价与优惠金额的计算口径、不可用原因的具体文案,以及失效券保留但不给动作的展示方式,避免用不存在的原价制造假优惠。价格区因此可以按固定顺序渲染。
从用户切走私信页的瞬间出发,说明流式链路为什么需要背压、取消信号与半截响应的收敛,给出有界异步队列与流式控制器的完整 TypeScript 实现,并用 node --test 验证队列容量、背压挂起、取消时机、断流收敛、保底计量与成本漏记。
会员价、活动、优惠券与积分同时出现时,叠加顺序、互斥组与舍入规则决定了用户最终付多少钱。本节把顺序固定为会员、活动、券、积分,用组声明处理互斥,用整数分逐级计算,并给出端上预演与服务端结果不一致时的对账与二次确认策略。所有金额保持整数分,叠加结果可逐项对账。
优惠券的「可用」不是布尔值,而是门槛、范围、有效期、领取状态与互斥关系共同裁决的结果。本节把判定顺序写成可测试的纯函数,用服务端时钟避免设备时间漂移,端上只做预筛与提示,并复盘一次因设备时间与范围并集导致的券失效事故。并给出可运行的 TypeScript 纯函数与测试。
从「回声」私信智能回复的首字延迟出发,拆解提供方、网关、BFF 与客户端四段流式链路,逐字节给出统一 StreamEvent 协议与增量翻译管线代码,用 node --test 验证首帧、增量、计量与结束帧的顺序不变量,并复盘一次直接透传厂商流的事故。
退款不是把订单状态改成已退款,而是挂在原支付单上的一组退款单:整单退与部分退、审核中与退款中、金额分摊与到账时间都各有口径。本节用四种状态、可退额度与最大余数分摊,给出一个可测试的 TypeScript 退款模型,并说明端上展示与渠道到账时间的差异。
端上无法直接看渠道账单,只能把订单状态、支付单状态与渠道流水号三路信号按 orderId、payId、channelTxnId 对齐,再把差异分成漏单、重复、金额不符与状态不一致。本节给出一个纯函数分类器与带触发时机的待确认队列,并附真实测试输出。
路由必须回答两个问题:为什么选它,以及为什么没选它。本节把路由决策翻译成稳定代码的解释行与排序表,再给出按租户和按请求两种确定性灰度方式,用基点与哈希保证同一租户或同一请求的结果可复现,并说明灰度目标为何必须在候选内提升,以及解释如何用于故障复盘,附完整测试。
重复支付通常来自重复点击、重复回跳与重复轮询三个入口,而不是用户手抖。本节用支付单号去重、显式的进行中状态与超时后先查询的策略,把同一订单的多次支付尝试收敛到一张支付单上,并给出可用假时钟验证的 TypeScript 防护模块与真实测试输出。