昨天的推測,今天還能直接拿來用嗎?
假設有一段跨越兩天的對話情境。第一天使用者說:「最近跟朋友有點不想講話。」這句話沒有交代具體原因,也沒有表達是否需要建議。系統在當下根據詞彙關聯,推測這可能涉及人際壓力。到了第二天,使用者再次打開對話介面,只送出一句:「今天好多了。」
如果記憶系統只負責「把昨天產生的摘要留下來」,那麼「使用者正在經歷人際挫折」就會在第二天變成已確認的既定事實。後續的回覆可能順理成章地關心「你跟朋友談得如何了」,而使用者卻可能只是一時疲倦,甚至已經完全走出那個情境。
這是我在思考心理支持系統的記憶時,最先碰到的矛盾:記住一件事,有時候比忘記更危險。
上一篇談不確定性(Uncertainty),討論了「不知道」不能在資料流轉中消失。但當對話跨到下一輪、甚至跨到下一天,「不知道」也絕對不能因為被保存了,就悄悄升格為「知道」。這讓我必須回頭檢視:在心理支持的互動裡,系統究竟該記住什麼,又有哪些內容根本不該進入長期記憶?
在一般的資訊型助理中,記憶常被當作一種加分項——記得使用者的城市、偏好的語言、先前提過的工作名稱。但在心理支持的互動裡,心情、人際互動感受、求助意圖與風險狀態都是高度動態且情境敏感的。
昨天真實存在的情緒,今天可能已經平復;昨天只是系統推論出的假設,今天更不能被當成事實。如果系統只把所有對話內容壓縮成一句結論塞進記憶庫,原本帶著不確定性的推論,就會在重新載入時徹底失去它身為「推測」的本質。
當系統把未經確認的推論當成事實,後續產生的回覆往往會帶著過度的預設立場。使用者可能只是陳述生活片段,系統卻緊抓著昨天的推論不放,甚至反覆向使用者確認根本不存在的困擾。這種看似貼心的「記憶」,反而會對使用者造成不必要的心理負擔與冒犯感。
因此,跨輪次甚至跨天保存資訊時,核心問題不是系統能不能記住更多細節,而是要如何避免把「推測」保存成「事實」,以及如何決定哪些資訊值得保存、多久後需要重新確認。
回頭看專案裡的資料契約。在最初的狀態設計裡,訊號雖然有了來源與置信度,但若整個狀態沒有時間概念,系統就無法表達「這句話是何時說的」以及「它究竟還適不適用」。如果只保留「人際互動可能造成壓力」這句話,接手的元件根本無從得知這是一分鐘前使用者親口說的,還是昨天系統自己猜出來的。
在目前檢查的 StateEntry 契約中,每一筆進入狀態的條目都繼承了時間有效性,除了條目內容之外,還強制要求記錄觀察時間、過期時間、來源、確定度與來源條目參照。
以下片段來自 src/psychological_support/conversation/state_contract.py,是現有條目語意檢查的一部分:
if self.source == SignalSource.USER_STATED:
if (
self.certainty != Certainty.EXPLICIT
or self.source_entry_ids
or self.last_confirmed_at != self.observed_at
or self.safety_expires_at is None
or not self.observed_at < self.safety_expires_at <= self.expires_at
):
raise ValueError("user testimony must remain explicit with its observation time")