前一天完成 Personalization Context 後,AI Companion 已經開始知道:
這個人喜歡什麼
不喜歡什麼
最近的互動狀況
目前的健康狀態
但知道使用者的資訊,還不代表 AI 知道現在應該怎麼互動。
例如同樣都是最近睡不好,AI 可以選擇:
主動詢問睡眠
提供衛教資訊
提醒休息
聊一些輕鬆的話題
暫時不要打擾
所以今天開始加入 Contextual Bandit,讓系統不只是知道使用者的狀態,而是進一步決定:
在現在這個情境下,哪一種互動方式比較適合?
Contextual Bandit 可以先簡單拆成三個部分:
Context
→ 現在是什麼情況?
Action
→ AI 可以做什麼?
Reward
→ 這次互動效果好不好?
在 AI Companion 裡,Context 可以來自前面已經建立的資料。
例如:
時間:晚上 8 點
Health State:最近睡眠品質較差
今天互動次數:2 次
提醒偏好:不喜歡太頻繁
最近話題:家人
這些資訊組合起來,就形成這次決策使用的 Context。
第一版先定義幾種簡單的互動方式:
ASK_HEALTH
HEALTH_EDUCATION
CASUAL_CHAT
REMINDER
NO_ACTION
例如:
ASK_HEALTH
→ 詢問最近的身體狀況
HEALTH_EDUCATION
→ 提供相關衛教資訊
CASUAL_CHAT
→ 進行一般陪伴聊天
REMINDER
→ 提醒喝水、活動或其他事項
NO_ACTION
→ 暫時不主動打擾
這裡最重要的是:
同一個 Health State,不一定每次都要做一樣的事情。
例如使用者最近睡不好。
如果是早上,可能適合詢問昨晚睡得如何。
如果是晚上,而且今天已經關心過兩次,就不一定需要再問一次。
這時候可能選擇簡單聊天,甚至直接 NO_ACTION。
選完 Action 之後,還需要知道這次互動的效果。
第一版可以先記錄簡單的 Reward:
使用者願意繼續互動 +1
接受提醒 +1
主動延伸話題 +1
拒絕提醒 -1
快速結束對話 -1
表示被打擾 -2
例如:
Context
↓
Action:CASUAL_CHAT
↓
使用者繼續聊了幾輪
↓
Reward:+1
之後累積更多資料後,就可以慢慢分析:
在什麼 Context 下,哪一種 Action 的效果比較好?
真正的 Contextual Bandit 可以根據 Reward 持續調整策略。
但目前第一版我沒有直接做完整的 Online Learning,而是先把流程建立起來:
Context
↓
Action Selection
↓
Agent
↓
User Response
↓
Reward Log
Action Selection 暫時可以先用 Rule-Based 的方式。
例如:
if interaction_count_today >= 3:
action = "NO_ACTION"
elif health_state == "poor_sleep" and time == "morning":
action = "ASK_HEALTH"
elif recent_topic == "family":
action = "CASUAL_CHAT"
雖然現在還不是完整的 Bandit Algorithm,但已經先建立之後學習需要的資料結構。
假設目前 Context 是:
最近睡眠品質較差
晚上 8 點
今天已經互動 2 次
不喜歡頻繁提醒
最近願意聊家人
系統可以選:
A:詢問睡眠
B:提供衛教
C:聊家人
D:提醒活動
E:No Action
最後選擇:
CASUAL_CHAT
Agent 就可以先用比較輕鬆的方式陪伴,而不是再次詢問睡眠問題。
這也是我加入 Contextual Bandit 的主要目的:
讓 AI 的互動方式可以隨著情境改變。
因為這個系統也包含 Health State,所以 Bandit 不能直接決定所有事情。
流程會比較像:
Contextual Bandit
↓
Action Candidate
↓
Safety Rule
↓
Agent
例如緊急健康狀況、藥物或就醫相關內容,就不能只因為某個 Action 的 Reward 比較高而選擇。
Bandit 比較適合決定:
要不要主動關心
要不要提醒
現在適不適合聊天
要用哪種陪伴方式
而不是直接做醫療判斷。
今天最大的問題是:
Reward 到底怎麼定義?
使用者回覆比較多,不一定代表喜歡;沒有回覆,也可能只是正在忙。
如果只追求互動時間,AI 反而可能變得太常主動找使用者。
所以 Reward 之後還需要一起考慮:
回應情況
拒絕次數
提醒接受程度
使用者偏好
互動頻率
Day 19 做的是:
建立 Personalization Context。
Day 20 則開始做到:
根據 Context 選擇適合的互動策略,並記錄互動結果。
目前流程開始變成:
Memory / Health State
↓
Personalization Context
↓
Contextual Bandit
↓
Action Selection
↓
Agent
↓
Response
今天最重要的一句話就是:
Personalization 告訴 AI「這個人是誰」,Contextual Bandit 則開始決定「現在怎麼跟這個人互動比較適合」。
下一步 Day 21,就可以把 Personalization、Contextual Bandit 和 Agent 正式串在一起。