ai-x抢购7.16.md
旧文件/ai-x抢购7.16.md · 6.7 KB · 2026-09-22 15:07:00
原始文件 下载

AI-X 抢购控制逻辑 · 后端规格 v3.3 (净值贡献校准曲线 · 最终版)

目标: 10 万付费用户盘。D1-5 预热稀缺, D6 起放量, D12 起全面放开 (供给/单人上限/概率全部取消)。 机制四件, 全部纯后端, 前端 (build aix-v18) 零改动: ① 概率准入 ② 伪装限购(429 火爆) ③ 保底(场次维度, 仅保第一份) ④ 幸运场 保底规则 (v3.2 修正): 失败按"场次"计数, 与点击次数无关 — 一个场次内参与且未中 = 记 1 次, 在 pityN(默认 8) 个不同场次失败后, 下次点击必中。仅 total 持有=0 时计数/生效 (防大户套利); 放行仍受库存约束, 未兑现跨场次/跨日保留直至兑现 ("我有保底, 明天稳中"回访钩子)。 全勤蹲点 (5 场/日) 最迟第 2 天必得第一份。 429 = 火爆退避重试, 409 = 本场结束切下一场, X-Request-Id 幂等 — 前端已按此实现。


1. 15 天参数表 (一个 JSON, 热更新)

day supply/场 (默认) 调参区间 日总量 cap/人/日 qtymax baseP 窗口默认* 幸运场数
1 500 2500 10 5 0.10 3min 0
2 600 3000 10 5 0.10 3min 0
3 800 4000 15 5 0.12 4min 0
4 1000 5000 15 5 0.12 4min 0
5 1500 7500 20 5 0.15 5min 0
6 6500 6000-7000 32500 20 5 0.20 6min 1
7 8500 8000-9000 42500 30 5 0.25 6min 1
8 10500 10000-11000 52500 30 5 0.30 7min 1
9 12500 12000-13000 62500 50 5 0.35 7min 1
10 15500 15000-16000 77500 50 10 0.45 8min 2
11 21000 20000-22000 105000 80 10 0.55 9min 2
12+ 30000 25000-35000+ 等效敞开 不限 20 跳过概率 后台设定

曲线依据: 净值贡献回归分析 (运营侧) — D1 贡献为负故压至最少种子激活量, D6 起按贡献斜率上抬; "调参区间"即运营的合法调整带, 区间内改数不需重新评审。 D12+ 名义桶 30000/场, 需求逼近再上调或直接设 999999 (等效不限)。

*窗口时长后台完全可控: windowSec 按天 (可细至按场) 热更新; 场次开/关由 /state 的 phase 下发, 前端以服务端 phase 为准 (代码内 170s 仅本地演示兜底), 运营实时调窗口客户端零发版跟随。

节奏认知 (10 万用户盘): D1-5 供给 22,000 份 (更紧的种子期) + 高上限 = 大户吃深度, 普通人靠场次保底得第一份; D6 起 4 倍跳变 (1500→6500/场) — D5 晚间"明日大放量"公告必须与 Meta 再营销素材同日上线, 让需求与供给同步跳, 否则 D6 首日 32,500 份明显抢不完会提前露底。 稀缺感 D6 后由窗口时限维持 (窗口可调 = 运营手里的稀缺旋钮)。 财务口径: D1-5 固定 22,000 份 (110 万硬币); D6-11 中值口径若全量售出 ≈373,000 份 / 1,865 万硬币; D12 起等效敞开随需求走 — 兑付曲线 (日 1% × 30 天) 随销量滚动核算。

配置示例 (aix:cfg, 热更新):

{ "day": 3, "supply": 1000, "cap": 15, "qtymax": 5,
  "baseP": 0.12, "windowSec": 240, "luckyN": 0, "pityN": 8 }

pityN 默认 8 (可调 5-10), 单位是"场次"; windowSec 运营可随时热更 (含活动中临时调整)。

2. 判定管线 (POST /api/aix/grab, 共 6 步)

① 网关限流 / bot 评分不过 → 429 (bot 影子限流: 永远火爆, 不封禁)
② 场次不在窗口内 → 409
③ today_cnt(uid) >= cap  或  qty > qtymax → 429        # 伪装限购
④ 保底 (场次维度, 仅第一份): total_cnt(uid)==0 且 fails(uid)>=pityN → 直接放行 (跳过⑤)
   放行仍受 ⑥ 库存约束; 未兑现则保底状态跨场次/跨日保留, 直至兑现
⑤ P = baseP × (幸运场 ? 2 : 1); rand() >= P → 429;
   失败计数按场次去重: total_cnt==0 且 lastfailsess != 当前场次 → fails+1, lastfailsess=当前场次
   (同一场次内点击 N 次只记 1 次失败; 已持有者不计数)
⑥ Lua 原子: 扣本段投放余量 → 成功 200{grabToken}, today_cnt+1, fails=0
   余量不足 → 409

D16+ : 跳过 ③④⑤, 只走 ①②⑥ (余量设 999999)。

3. 三段式投放 (每场 3 次定时 INCRBY, 无滴灌)

开场释放 50% · T+40% 窗口时释放 30% · T+70% 窗口时释放 20%。 效果: 迟到 2-3 分钟仍可能中签, 窗口体感被拉满; 售罄 = 桶真实清空, 不虚报。 每场必须在窗口内清空 (售罄仪式感保到 D15 最后一场) — 偏差由 baseP 次日微调。

4. Redis 键 (共 6 个)

aix:{date}:{uid}:cnt      当日已中数        EX 86400
aix:{uid}:fails           保底失败场次数 (仅 total=0 时累计)  首份中签 DEL
aix:{uid}:lastfailsess    最近记失败的场次 id (场次去重)       首份中签 DEL
aix:{uid}:total           历史累计持有数 (保底判定用)          永久
aix:{date}:{sess}:bucket  当段投放余量       三段定时 INCRBY
aix:{date}:lucky          当日幸运场 set     每日 00:05 随机抽, 不公布  EX 86400
aix:cfg                   参数 JSON         热更新
aix:req:{requestId}       幂等去重          EX 600

⑥ 的扣量 + 记账 + 清保底在同一 Lua 脚本内完成, 防超卖/超限。

5. 运营 SOP (三条)

  1. 每日公告一条 (Saluran SHORTPRO): "今日每场投放 {supply} 份 · 明日继续加量"。 铁律: 只报明日, 永不报曲线全貌。预告节点: D5 "明日大放量" · D11 "明起全面开放, 不限量不限购"。
  2. 波次推送: D1 只推频道订阅+高活跃 (~30%), D3 推 60%, D6 全量 — 用现有推送能力, 无新功能。
  3. D10-15 Meta 投放同步加码 ("补货了"再营销素材), 需求跟着供给爬。

6. 仪表盘 (4 个指标)

7. 本版明确不做 (防止过度设计)

碎片/必得券/兑换池 · 用户分层加成 (新用户/赢家惩罚/未中补偿) · 多级保底阶梯与连续天数保底 · 连续滴灌投放 · 预约报名制。 "蹲点必有回报"的承诺由 §2-④ 单一保底 (fails≥10 必中) 完整兑现, 不需要以上任何一项。

8. 风控三句

真实分批投放不虚报售罄 · 保底确保坚持者必得 · 规则页披露"每日投放量与限购额度随活动阶段动态调整"。