前幾天加入 Agent 和 Tool Calling 之後,AI Companion 已經不只是回答問題,而是開始能根據情況決定下一步要做什麼。
但做到這裡,我又遇到另一個問題:
就算 Agent 做了正確的事情,也不代表適合每一個人。
例如同樣一句:
「今天要不要出去走走?」
對平常喜歡散步的人來說,可能是一個很自然的提醒;但如果使用者不喜歡被頻繁提醒,或今天已經說過膝蓋不舒服,再主動叫他出去走路就不太適合。
所以 Day 19 開始加入 Personalization Context,讓系統除了知道「要做什麼」,也開始考慮:
面對這個人,現在應該怎麼做?
前面已經建立 Memory,讓 AI 可以記住使用者的資訊。
例如:
喜歡晚上散步
不喜歡太頻繁的提醒
偏好簡短回答
Memory 比較像是:
AI 記得什麼。
但不是每一筆 Memory,在每一次對話裡都需要使用。
例如使用者問:
今天晚上可以做什麼?
這時候「喜歡晚上散步」就很相關。
但如果使用者只是問:
現在幾點?
就沒有必要把所有生活習慣都放進 Prompt。
所以 Personalization Context 的角色,就是:
從目前擁有的資訊中,挑出這一刻真正會影響互動方式的內容。
第一版我先整理幾種資料:
General Memory
Health Memory
Recent Interaction
User Preference
Health State
Reminder History
Tone Preference
例如:
[User Preference]
- 喜歡晚上散步
- 偏好簡短回答
[Health State]
- 最近活動量偏低
[Recent Interaction]
- 今天尚未提醒運動
這些資料組合起來,就形成當下的 Personalization Context。
目前流程可以整理成:
Memory
+
Health State
+
Interaction History
+
User Preference
↓
Context Selection
↓
Personalization Context
↓
LLM / Agent
↓
Personalized Response
其中最重要的是 Context Selection。
因為資料累積久了之後,不可能每次都把所有 Memory 丟給 LLM。
這樣除了增加 Token,也可能讓一些不相關的舊資訊影響回答。
所以第一版會根據目前 Conversation 和 Agent Intent,挑選真正相關的 Context。
例如現在要做的是「活動提醒」,就優先查看:
活動相關 Memory
近期 Health State
今天是否已提醒
使用者提醒偏好
而不是把全部資料一起送進去。
例如系統想做的事情都是:
鼓勵使用者今天活動一下
Context:
喜歡晚上散步
最近活動量偏低
喜歡簡短提醒
系統可以回答:
今天晚上如果精神還不錯,
可以出去走個 10 分鐘。
Context:
不喜歡頻繁提醒
今天已經互動很多次
最近提到膝蓋不舒服
這時候更適合的策略可能是:
今天先不主動提醒散步
所以 Personalization 不只是「把回答換個說法」。
有時候真正的個人化其實是:
決定這次到底要不要互動。
Personalization 也不能做得太滿。
例如使用者曾經說:
我晚上喜歡散步。
不代表 AI 之後每天都要一直提起這件事。
這樣反而容易讓使用者覺得被監控。
所以第一版還需要考慮:
Relevance
Recency
Confidence
Current State
只有跟現在情境真的有關的資訊,才應該影響這一次互動。
最大的問題是:
到底要個人化到什麼程度?
Context 太少,AI 還是很像一般 Chatbot;Context 太多,又可能過度依賴過去資料。
所以 Personalization 的重點不是一直證明「我記得你」,而是:
在需要的時候,用對的 Context 做出更適合這個人的回應。
前面的 Memory 是:
AI 記得什麼。
Agent 是:
AI 下一步要做什麼。
而 Personalization Context 開始處理:
現在應該用什麼方式和這個人互動。
目前流程變成:
User Context
↓
Agent Decision
↓
Personalization Context
↓
Action / Response
Day 19 最重要的核心就是:
Memory 是「AI 記得什麼」,Personalization Context 則是「現在有哪些資訊應該影響這次互動」。
下一步 Day 20 就可以加入 Contextual Bandit,讓系統根據不同 Context,慢慢學習哪一種互動策略最適合使用者。