iT邦幫忙

2026 iThome 鐵人賽

DAY 20
0
AI Engineering

30 天打造高齡智慧健康照護 AI Companion系列 第 20

Day 20|讓 AI 學會選擇互動策略:Contextual Bandit

  • 分享至 

  • xImage
  •  

前一天完成 Personalization Context 後,AI Companion 已經開始知道:

這個人喜歡什麼
不喜歡什麼
最近的互動狀況
目前的健康狀態

但知道使用者的資訊,還不代表 AI 知道現在應該怎麼互動。

例如同樣都是最近睡不好,AI 可以選擇:

主動詢問睡眠
提供衛教資訊
提醒休息
聊一些輕鬆的話題
暫時不要打擾

所以今天開始加入 Contextual Bandit,讓系統不只是知道使用者的狀態,而是進一步決定:

在現在這個情境下,哪一種互動方式比較適合?

Contextual Bandit 是什麼?

Contextual Bandit 可以先簡單拆成三個部分:

Context
→ 現在是什麼情況?

Action
→ AI 可以做什麼?

Reward
→ 這次互動效果好不好?

在 AI Companion 裡,Context 可以來自前面已經建立的資料。

例如:

時間:晚上 8 點
Health State:最近睡眠品質較差
今天互動次數:2 次
提醒偏好:不喜歡太頻繁
最近話題:家人

這些資訊組合起來,就形成這次決策使用的 Context。

AI 可以選哪些 Action?

第一版先定義幾種簡單的互動方式:

ASK_HEALTH
HEALTH_EDUCATION
CASUAL_CHAT
REMINDER
NO_ACTION

例如:

ASK_HEALTH
→ 詢問最近的身體狀況

HEALTH_EDUCATION
→ 提供相關衛教資訊

CASUAL_CHAT
→ 進行一般陪伴聊天

REMINDER
→ 提醒喝水、活動或其他事項

NO_ACTION
→ 暫時不主動打擾

這裡最重要的是:

同一個 Health State,不一定每次都要做一樣的事情。

例如使用者最近睡不好。

如果是早上,可能適合詢問昨晚睡得如何。

如果是晚上,而且今天已經關心過兩次,就不一定需要再問一次。

這時候可能選擇簡單聊天,甚至直接 NO_ACTION

Reward 怎麼設計?

選完 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 的互動方式可以隨著情境改變。

Safety Rule

因為這個系統也包含 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 正式串在一起。


上一篇
Day 19|讓 AI 更懂「這個人」:建立 Personalization Context
下一篇
Day 21|把個人化真的用起來:讓 Agent 根據 Context 自適應互動
系列文
30 天打造高齡智慧健康照護 AI Companion21
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言