給當下的你 — 語料調度儀表板

MVP 1A 內部測試工具 · API:
控制區
可用快速選擇帶入測試 token,也可手動輸入 token 測試白名單外情境。
原始 JSON(開發用)
▼ 展開

    
規則說明

本頁用於整理目前模擬器採用的抽選規則。
規則以查表為主(數值寫在設定檔,程式查對應值),少數用 if 條件判斷。改數值只需改設定檔,不用動邏輯。

類型 規則 量化設定 原始說法
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=false 時歸零;CR031_ENABLED=true 時不受 previousLevel gating 影響——previousLevel=null / E / D 非 quiet/transition 時仍依 draw_order 生效。previousLevel gating 只影響 Level-Context Rhythm Bonus、D hard constraint、Sequence Bonus。 第 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 次

Sequence Bonus(+5):slow→pause→slow→flow 節奏呼吸路徑,依序列階段加分偏好下一個節奏
避免:pause→pause→pause;flow→flow→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 機制 候選池不足時依序放寬排除條件的保底流程;每一步仍走 scored() 加權抽選,不是隨機亂抽。觸發後記錄 fallback key F0 (全部限制生效,初始狀態)
F1 context_streak_relaxed — 放寬 context 連續限制
F2 level_streak_relaxed — 放寬 level 連續限制
F3 recent_exclude_relaxed — 放寬最近排除限制
F4 heavy_avoid_context_relaxed — 放寬 heavy 情境迴避規則
F5 d_hard_constraint_relaxed — 放寬 D 硬限制,回到 selectedLevel full pool(僅 D + quiet/transition 觸發)
E1 emergency_relax_rhythm_streak — 緊急放寬 rhythm 連續限制(僅 F0–F5 全部失敗時啟用)
E2 global_emergency_all_active — 所有排除條件解除,仍走 scored() 加權抽選,非隨機亂抽
工程補救機制,非原始規格
NEW CR-031 Level / Context → Rhythm Matrix

此 matrix 說明當「前一句 Level(previousLevel)與 primary context(previousPrimaryContext)」落在特定組合時,不同 Level 下候選語料的 rhythm 加分方向。

情境標籤 Context
normal — 一般狀態
scattered — 分散、心亂
low — 低落
heavy — 沉重
transition — 轉換中
quiet — 安靜、內收
節奏標籤 Rhythm
pause — 停
slow — 慢
flow — 流動
觸發來源 Trigger
self — 純內在
thought — 思緒
feeling — 情緒
state — 整體狀態
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 加分

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(其他禁止)

*「previousPrimaryContext」= todayHistory 最後一筆的 context_tags。
*「previousLevel」= todayHistory 最後一筆的 selected_level。A / C / D rhythm 規則(v1.2)須 previousLevel 與 previousPrimaryContext 同時符合才觸發加分。
* E level 不套用 CR-031 rhythm 加分(shouldApplyCr031RhythmBonus 回傳 false)。

規則實作方式
查表型(主要方式)
  • Level 權重:BASE_LEVEL_WEIGHTS、USAGE_COUNT_ADJUSTMENTS、TIME_SLOT_ADJUSTMENTS → 用物件 key 查值
  • Context 調整:PREVIOUS_CONTEXT_ADJUSTMENTS → 查 context key 取 levelBoost / tagBoost
  • Rhythm 加分:USAGE_RHYTHM_BONUS、LEVEL_CONTEXT_RHYTHM_BONUS → 查 drawOrder / level / context key
  • 常數限制:MAX_SAME_LEVEL_STREAK、MAX_SAME_RHYTHM_STREAK 等 → 數值比較
if 判斷型(少數)
  • shouldApplyCr031RhythmBonus — previousLevel gating(E → false、D + 非 quiet/transition → false)
  • getDRequiredRhythm — D hard constraint
  • calcRhythmSequenceBonus — 序列模式匹配(slow→pause→slow→flow)
  • 各種 streak 判斷(連續次數是否超限)
抽取邏輯:不是直接抽一句,而是先抽 Level,再抽語料

模擬器不是從全部語料中直接挑最高分,也不是 AI 即時生成。
它會先判斷本輪適合的 Level,再從該 Level 裡依照 tag 加分做第二次加權抽取。

調度流程:先抽 Level,再抽語料
300 則語料
A B C D E
① 抽 Level
A
② 抽語料編號
008
結果
A008
核心公式
下一句語料 =
今日第幾次使用
+
現在時間
+
上一則語料的 context
+
最近使用紀錄
各因素的作用:
今日第幾次 — 影響哪個 Level 被加權
現在時間 — 日/夜/深夜對應不同 Level 傾向
上一則 context — 影響本輪 Level 與 tag 加分
最近使用紀錄 — 排除近期語料,避免重複
完整抽取流程
使用者感應 NFC
第一階段:抽 Level
依基礎權重、使用次數、時段、前句 context 加權
進入該 Level 候選池
依 selected_level 篩出語料
排除限制
排除最近出現、連續 Level、連續 Context、連續 Rhythm、D hard constraint
加分排序 / 加權抽選
依 context / rhythm 加分,加權隨機選出
選出三句話
↓ 若候選不足
Fallback
候選不足時放寬排除條件的保底流程;仍保留 scored() 加權邏輯,不是隨機亂抽
第一階段範例:Level 怎麼被抽中
範例數字,非固定結果——實際數字會依使用次數、時間與前次語料狀態變動
各 Level 本輪計算後的最終權重(範例):
A = 60 + 15 + 5 = 80
B = 15 + 5 = 20
C = 10
D = 10
E = 5
總分 = 125
假設 Math.random() = 0.52,則 0.52 × 125 = 65
落點 65 落在哪個 Level 區間?
Level 抽選區間(總計 125,以寬度表示各 Level 比例)
A(0–80)
B(80–100)
C(100-110)
D(110-120)
E
因為 65 落在 A 區間(0 ≤ 65 < 80),所以本輪抽中 Level A
Level 區間對照:A:0–79 | B:80–99 | C:100–109 | D:110–119 | E:120–124
數字會依使用次數、時間與前次語料狀態變動。
第二階段範例:從 Level A 裡抽語料
範例數字,非固定結果——實際數字會依 tag 組合與前次語料狀態變動
Level A 候選語料的本輪 tag 分數(範例):
A-001 = 1
A-002 = 16 (flow tag 加分)
A-003 = 1
A-004 = 1
總分 = 19
假設 Math.random() = 0.7,則 0.7 × 19 = 13.3
落點 13.3 落在哪筆語料區間?
語料抽選區間(總計 19,以寬度表示各語料比例)
001
A-002(1–17)
003
004
因為 13.3 落在 A-002 區間(1 ≤ 13.3 < 17),所以最後抽中 A-002
⚠ 權重高代表比較容易被抽中,不代表一定會被抽中。
數字會依 tag 組合與前次語料狀態變動。
語料分布

本頁用於檢查目前語料標籤分布是否支撐抽選規則。資料來自 Remote D1 messages 表 read-only SELECT,統計範圍為 is_active = 1 的 300 筆語料。

語料結構:A–E 五個 Level
A 接住、允許 B 鬆動、轉向 C 拉回、內收 D 陪伴、穩住 E 輕提醒
所有 TAG 清單
情境標籤 Context
normal — 一般狀態
scattered — 分散、心亂
low — 低落
heavy — 沉重
transition — 轉換中
quiet — 安靜、內收
節奏標籤 Rhythm
pause — 停
slow — 慢
flow — 流動
觸發來源 Trigger
self — 純內在
thought — 思緒
feeling — 情緒
state — 整體狀態
Level × Rhythm
Level flow slow pause 合計
A 843960
B 6441060
C 1141860
D 15321360
E 4362060
總數 4419660300
占比 14.7%65.3%20.0%100%

目前語料 rhythm 以 slow 為主,代表整體語氣偏穩、慢、陪伴;pause 可支撐 D/E 或 quiet / transition 的停頓需求;flow 用於較輕、推進感較強的語句。

Level × Context
Level normal scattered low heavy transition quiet 合計
A 8025167460
B 2232156360
C 3901074060
D 24115119060
E 1113037860
總數 1045101423315300
占比 34.7%1.7%33.7%14.0%11.0%5.0%100%

目前 context 以 normal 與 low 為主,兩者合計約 68.4%。quiet 僅 15 筆,scattered 僅 5 筆,屬於低量標籤,後續若要提高這類情境的穩定性,需留意語料補充。

資料觀察: A+scattered、C+quiet、D+quiet 為 0 筆。表示目前沒有語料會碰到此條規則,mvp可忽略。

Level × Trigger
Level self thought feeling state 合計
A 19365060
B 17430060
C 14451060
D 4785060
E 4983060
總數 146140140300
占比 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 筆語料。

給當下的你
這個系統是為了做到「有感知的陪伴」。
不問使用者現在怎麼了,而是推測你現在可能需要什麼,
再用適合的節奏,送出一組語句與圖片。
陪伴使用者「安靜地存在一下」
使用者做了什麼
感應 NFC
系統接收到
今日第幾次 ‧ 現在時間 ‧ 上次語料狀態
送出一組語句 + 圖片
使用者唯一的動作就是「感應 NFC」。
不需要登入、不需要輸入任何資料、不需要告訴系統自己的狀態。
核心設計哲學:推測 + 引導
推測 — 系統從使用次數、時間、上一句的情境標籤,推測使用者目前可能的狀態。
引導 — 依推測結果,用節奏(pause / slow / flow)引導下一步的陪伴方向,而不是被動回應。
成品形式:語料 + 圖片
最終呈現不只是文字。每次調度會送出一組「三層語句 + 配對圖片」的完整體驗。
圖片由 AI 預先生成,存入資料庫,依語料情境配對顯示。
語料結構:A–E 五個 Level
A 接住、允許
B 鬆動、轉向
C 拉回、內收
D 陪伴、穩住
E 輕提醒
每筆語料含三層文本:看見(line1)→ 鬆動(line2)→ 回到自己(line3)
曼陀羅12種型態圖片

曼陀羅,是「在裡面」的視覺語言。

它不是單純的對稱圖案,而是人在回到內在中心時,逐漸浮現出的秩序與結構。

當一個人停止向外尋找答案,重新回到自己,原本分散的感受會慢慢被看見、整理、安放。

「在裡面」想做的,就是透過曼陀羅,讓人用一種安靜的方式,看見自己內在原本就存在的答案。

曼陀羅12種型態圖片
現階段進度
已完成
語料調度模擬器(本工具)— 含 300 則語料、五級權重系統、節奏調度規則(CR-031 v1.2)
已完成
Production 部署 — Cloudflare Workers + D1,draw_order=1 路徑已通過 production smoke test(2026-05-25)
進行中
CR-031 全情境驗收 — draw_order=2/3、D hard constraint、fallback chain 等路徑驗證
進行中
圖片生成系統 — AI 預生成圖片,依語料情境配對存入資料庫
待開發
MVP 1B 正式 NFC 前台 — landing 頁、NFC 感應入口、正式視覺設計
理想成品
理想成品