# 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`, 热更新):
```json
{ "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 个指标)

- 首份覆盖率 (持有≥1 的参与用户占比): 高上限模式下 D5 目标 ≥45% (保底驱动), D8 ≥85%
- 保底触发占比 (首份中签中经保底的比例): >40% → baseP 偏低; <10% → 偏高
- 每场售罄用时 vs 窗口: 偏差 >±30% → 次日调 baseP
- 抢购前 30 分钟充值笔数 (蹲点充值转化)

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

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

## 8. 风控三句

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