| 項目 | A | B | C | D | E |
|---|---|---|---|---|---|
| 基礎權重 | |||||
| 使用次數調整 | |||||
| 時段調整 | |||||
| 前句 Context 調整 | |||||
| 最終權重 | |||||
| 抽中機率 |
| 訊息編號 | Tag 分數 | Context Tag | Rhythm Tag | Tag 分數說明 |
|---|
| 第幾次 | A | B | C | D | E |
|---|
| 抽取次數 | 設計期待 | 實際觀察 | 判讀 |
|---|
| 訊息編號 | Level | 出現次數 | 占比 |
|---|
| 天 | A | B | C | D | E | 主要 Context |
|---|
| 識別 | 第幾次 | 時段 | Level | 訊息編號 | Context | 第一行 | Fallback |
|---|
本頁用於整理目前模擬器採用的抽選規則。
抽選分為兩個階段。第一階段先決定這次落在哪個 Level;第二階段才在該 Level 內依條件挑語料。候選不足時才進 Fallback,Fallback 是補救機制,不是主要設計方向。
| 類型 | 規則 | 量化設定 | 原始說法 |
|---|---|---|---|
| Level 基礎權重 | 各 Level 初始抽選機率基礎值 | A:60 / B:15 / C:10 / D:10 / E:5 | A:60% B:25% C:10% D:5%(無 E) |
| 使用次數調整 | 依同日已抽次數(第 1/2/3 次)調整各 Level 權重 | 第 1 次:A +15 第 2 次:A -15、B +20、C +15 第 3 次:A -25、B -5、C +20、D +20 |
第1次:A(flow/slow) 第2次:B/C(slow) 第3次:C/D(pause) |
| NEW 使用次數 Rhythm 加分 | 依同日已抽次數(draw_order)對候選語料的 rhythm_tags 加分。這是第二階段語料抽取的加分,不是 Level 權重加分。受 CR031_ENABLED 與 shouldApplyCr031RhythmBonus 控制;E level 不套用,D + 非 quiet / transition 不套用。 | 第 1 次:flow +10、slow +10 第 2 次:slow +15 第 3 次:pause +15 |
同上 |
| 時段調整 | 依台北時間時段(day / evening / late_night)調整 Level 權重 | day 05:00–17:59:A +5、B +5 evening 18:00–22:59:B +5、C +5 late_night 23:00–04:59:C +5、D +5 |
day:A/B 提高;evening:B/C 提高;late_night:C/D 提高 |
| 最近排除 | 最近使用過的語料從候選池排除 | 最近 10 筆 | 排除最近 30 筆(語料增加後可以考慮) |
| Context Tag 加分 | 前句 primary context 對候選語料的 context_tags 加分 | heavy → quiet +10 | 不再壓(換 B / quiet / slow) |
| Rhythm Tag 加分 | 依前句 context 對候選語料的 rhythm_tags 加分 | quiet → flow +15 NEW heavy → slow +10 |
quiet:加一點流動;heavy:不再壓(換 B / quiet / slow) |
| Context 連續限制 | 同 primary context 連續出現達上限時,排除該 context 語料 | 上限 2 次 | 同 context 最多連續 2 次 |
| Level 連續限制 | 同 Level 連續出現達上限時,排除該 Level 候選語料 | 上限 2 次 | 同 level 最多連續 2 次 |
| NEW CR-031 Rhythm Streak | 同一 rhythm 連續出現達上限時,排除該 rhythm 候選語料 | 同 rhythm 最多連續 2 次 | 避免:pause→pause→pause;flow→flow→flow;建議:slow→pause→slow→flow;使用者確認衍生為同 rhythm 最多連續 2 次 hard constraint |
| NEW CR-031 D Hard Constraint | Level D 且 context 為 quiet / transition 時,限定只選 pause rhythm 語料 | D + quiet / transition → pause only;非 pause 排除候選池 | D:quiet/transition→pause(其他禁止) |
| Fallback 機制 | 候選不足時依序放寬限制,並記錄觸發的 fallback key | F1 context_streak_relaxed F2 recent_exclude_relaxed F3 heavy_avoid_context_relaxed F4a d_hard_constraint_relaxed_pause_pool F4b d_hard_constraint_relaxed_full_pool E1 emergency_relax_rhythm_streak E2 global_emergency_all_active |
工程補救機制,非原始規格 |
此 matrix 說明當「前一句 primary context」落在特定情境時,不同 Level 下候選語料的 rhythm 方向。
| Level | 量化設定(程式實際) | 原始說法 |
|---|---|---|
| A |
A + scattered → slow +10 / flow +10 A + normal → flow +10 A + quiet → slow +10 A + heavy / low / transition → 無 matrix 加分 |
scattered → slow/flow;normal → flow;quiet → slow |
| B |
1. Level 層:上一句 context_tags 含 heavy → Level B +10 2. Context 層:候選語料 context_tags 含 quiet → +10;含 heavy → 排除 3. Rhythm 層:上一句 context_tags 含 heavy,且候選 rhythm = slow → slow +10(CR031_HEAVY_RECOVERY_BONUS) 注:heavy recovery bonus 屬於 CR031_HEAVY_RECOVERY_BONUS,不等同於 B level matrix。 |
全部 slow(heavy 限制) 這對應:上一句 = heavy,下一句不再壓,往 B / quiet / slow 方向走。 |
| C |
C 有明確 LEVEL_CONTEXT_RHYTHM_BONUS matrix: C + normal → slow +10 C + quiet → slow +10 / pause +10 C + heavy → slow +10 C + scattered / low / transition → 無 matrix 加分 套用條件:CR031_ENABLED = true(目前為 true),且 selectedLevel = C(C 不受 D gating 限制,永遠套用)。 |
normal → slow;quiet → slow/pause;heavy → slow |
| D |
D + quiet / transition → pause only(hard constraint) 非 pause rhythm 的候選語料直接排除候選池,不是加分機制。 D + 其他 context(scattered / normal / low / heavy)→ CR-031 rhythm 加分不套用(shouldApplyCr031RhythmBonus 回傳 false) |
quiet/transition → pause(其他禁止) |
*「前一句 primary context」= todayHistory 最後一筆的 context_tags 第一個 tag。
* E level 不套用 CR-031 rhythm 加分(shouldApplyCr031RhythmBonus 回傳 false)。
模擬器不是從全部語料中直接挑最高分,也不是 AI 即時生成。
它會先判斷本輪適合的 Level,再從該 Level 裡依照 tag 加分做第二次加權抽取。
今日第幾次 — 影響哪個 Level 被加權
現在時間 — 日/夜/深夜對應不同 Level 傾向
上一則 context — 影響本輪 Level 與 tag 加分
最近使用紀錄 — 排除近期語料,避免重複
Math.random() = 0.52,則
0.52 × 125 = 65
Math.random() = 0.7,則
0.7 × 19 = 13.3
- 不是 AI 即時生成
- 不是直接從 300 筆語料挑最高分
- 不是 Level A 就永遠最容易出現(次數、時段都會改變權重)
- 權重高只是機率較高,不是保證抽中
- Fallback 是候選不足時的補救機制,不是主要抽選流程
本頁用於檢查目前語料標籤分布是否支撐抽選規則。資料來自 Remote D1 messages 表 read-only SELECT,統計範圍為 is_active = 1 的 300 筆語料。
| Level | flow | slow | pause | 合計 |
|---|---|---|---|---|
| A | 8 | 43 | 9 | 60 |
| B | 6 | 44 | 10 | 60 |
| C | 11 | 41 | 8 | 60 |
| D | 15 | 32 | 13 | 60 |
| E | 4 | 36 | 20 | 60 |
| 總數 | 44 | 196 | 60 | 300 |
| 占比 | 14.7% | 65.3% | 20.0% | 100% |
目前語料 rhythm 以 slow 為主,代表整體語氣偏穩、慢、陪伴;pause 可支撐 D/E 或 quiet / transition 的停頓需求;flow 用於較輕、推進感較強的語句。
| Level | normal | scattered | low | heavy | transition | quiet | 合計 |
|---|---|---|---|---|---|---|---|
| A | 8 | 0 | 25 | 16 | 7 | 4 | 60 |
| B | 22 | 3 | 21 | 5 | 6 | 3 | 60 |
| C | 39 | 0 | 10 | 7 | 4 | 0 | 60 |
| D | 24 | 1 | 15 | 11 | 9 | 0 | 60 |
| E | 11 | 1 | 30 | 3 | 7 | 8 | 60 |
| 總數 | 104 | 5 | 101 | 42 | 33 | 15 | 300 |
| 占比 | 34.7% | 1.7% | 33.7% | 14.0% | 11.0% | 5.0% | 100% |
目前 context 以 normal 與 low 為主,兩者合計約 68.4%。quiet 僅 15 筆,scattered 僅 5 筆,屬於低量標籤,後續若要提高這類情境的穩定性,需留意語料補充。
資料觀察:C + quiet = 0、D + quiet = 0。CR-031 中 D + quiet 屬於 pause hard constraint 情境,但目前 D level 沒有 quiet 語料,因此此情境會進入 fallback。此為語料分布現況,不代表抽選邏輯錯誤。
| Level | self | thought | feeling | state | 合計 |
|---|---|---|---|---|---|
| A | 19 | 36 | 5 | 0 | 60 |
| B | 17 | 43 | 0 | 0 | 60 |
| C | 14 | 45 | 1 | 0 | 60 |
| D | 47 | 8 | 5 | 0 | 60 |
| E | 49 | 8 | 3 | 0 | 60 |
| 總數 | 146 | 140 | 14 | 0 | 300 |
| 占比 | 48.7% | 46.7% | 4.7% | 0.0% | 100% |
Trigger tags 目前僅記錄與分析使用,不參與抽選加權。
目前 trigger 以 self 與 thought 為主,合計約 95.4%。feeling 僅 14 筆,state 目前為 0 筆。此區僅作為語料結構觀察,不影響抽選加權。
資料來源:Remote D1 messages 表 read-only SELECT;統計範圍為 is_active = 1 的 300 筆語料。