「它沒有亂講,可是好像也沒有聽進去。」如果我只能用「有沒有捏造事實」檢查回答,這句抱怨就很難被看見。對正在開發「從心出發」的我來說,這也是回覆生成最容易被忽略的問題:資料符合資格,並不代表最後那句話就接得住人。
Day 22 談的是來源能否支持主張,也留下如何檢查互動結果的問題。在走到結果之前,我想先停在 Response Generation:即使資訊已通過准入與證據檢查,它應該怎麼被說出來?這個前提是今天的討論起點,不表示前文設計的完整 Evidence Gate 已經完成。
以下是合成示例,不是真實使用者紀錄:
第一輪:「課程進度跟不上。」
第二輪:「不是完全沒讀,我每天都有念,但老師換個題型,我就不知道怎麼下手。」
第三輪:「我現在只是想抱怨一下,先不要給我讀書計畫。」
第一輪只交代進度。第二輪新增了每天有念、遇到不同題型會卡住,也否定了「完全沒讀」這個前提。第三輪則把當下需要說清楚:先不要安排方法。若系統只抓住最早的「跟不上」,後面兩輪就像沒有發生。
下面兩段都是我為文章寫的示例,並非實際模型輸出。
不理想的回覆:「你覺得課程跟不上,真的很辛苦。可以先排一份每天半小時的複習計畫。」
較符合本日目標的回覆:「好,今天先不排計畫。每天都有念,碰到換了樣子的題目卻又卡住,光是這件事就夠想抱怨了。」
前一段沒有明顯編造人生背景,卻漏接了新資訊,也違反這輪不要建議的要求。後一段仍沿用使用者說過的內容,但讓那些內容回應「現在只想抱怨」這個選擇。我不需要再猜他是不是害怕老師失望,也不必硬加一句鼓勵,把困擾收成正向結局。
我把這個問題拆成三個觀察方向。「依據」看事實或主張從哪裡來,是否超出來源支持的範圍;「限制」看回答是否尊重當輪意圖、模式與安全邊界;「承接」則看它有沒有注意到新增資訊、更正,以及此刻想談的事。
這是本文分析回答的方式,不是專案已經實作的三層評分引擎。三者也不能互相抵銷:讀書方法有來源,仍可能不該在第三輪出現;完全沒有建議的回答,也可能只是把「跟不上」換句話說。
在我查到的候選版中,LISTEN_ONLY 明確要求零提問、零建議、零行動。這是該模式的契約,不是所有對話的通則;整理模式與獲得當輪授權的小步驟模式有不同限制。守住傾聽邊界,並不要求每輪都宣告「我在聽」,更不代表安全檢查可以省略。
心理支持知識的位置也必須清楚。我的設計原則是:一般知識可以協助安排回應方式,不能替使用者補完人生。資料介紹某種常見現象,不足以證明這個人卡住的原因、疾病狀態或家庭背景。
反過來,我也不希望把基本回應變成論文朗讀。使用者已經說出每天有念、先不要計畫,這些就是承接的依據;沒有檢索結果,不代表連回應這些話都不行。候選版的傾聽輸入也把支持資料限定為內部的態度與節奏參考。這項限制存在,仍不等於每次生成都能用得恰當。
查閱程式時,我先分清版本。根目錄的早期生成管線只送當輪訊息;另外保存的多輪候選版,才有近期歷史、模式分支與 Supervisor。不能拿前者的限制概括後者,也不能因為候選檔案存在,就說目前網站已載入同一份內容。
第一個值得追的地方,是最終送出的輸入。候選版的 generation_request 會依有無證據、傾聽或小步驟模式調整政策,其中有重新指定整段政策的分支。若共通要求只放在分支之前,就可能在後面的組裝被蓋掉。
目前查到的候選實作,將共通表達要求加在模式分支之後,再把政策與對話資料組成最終訊息。以下節錄候選版 src/psychological_support/intelligence/generation.py 的一行:
policy += "\n" + expression_policy
這一行很小,卻提醒我:要檢查的是最後交出去的內容,而不只是某份提示詞裡有沒有寫「自然承接」。2026 年 9 月 20 日的修補交付與離線紀錄,曾檢查有、無證據時的傾聽輸入;那只能支持特定版本的組裝行為,不能直接翻成模型已經比較會聊天。
第二個問題在生成之後。若把產生回覆的一側稱為 Counselor,它交出的仍是待檢查候選;這份候選版中的 Supervisor 是確定性規則閘門,不能因為名字就把它當成另一位心理專家,或已完成的雙模型審查。
它接收候選回答、狀態、計畫、證據,以及明確傳入的當輪文字,回傳是否准入、拒絕原因與觀察項目。引擎先審查,再把這一輪寫入歷史。因此,審查時若直接把歷史最後一筆當成最新輸入,就可能拿上一輪的話來檢查這一輪。
我核對的程式已由引擎把當輪文字直接交給 Supervisor。生成與審查也使用共用的近期歷史組裝函式,依失效、顯示界線與更正規則縮小可用內容;審查中的人物與事件比對,取使用者文字作依據,不把舊助理的猜測當成已確認事實。
不過,更正辨識與人物比對仍包含有限的字詞規則。函式能處理某些否定句,不代表它能理解所有委婉更正。回到合成示例,我希望檢查的是「每天有念」是否真的影響下一句,而不只是輸入資料裡多了一個欄位。
第三個問題是責任定位。最後畫面看起來制式,不能直接怪模型、資料庫、ARCI 或前端。生成原文、解析後正文、審查、採用、保存與顯示,都可能是需要核對的交接點。
這次我回看 2026 年 9 月 20 日保存的三輪原站驗收資料。那三輪的原始生成正文,與解析、審查、採用、保存及畫面文字一致;替代回覆沒有執行。既有助理文字審查仍指出套式覆述:有些回覆保留了細節,卻接上一句摘要評語或傾聽宣告。
這讓我能把觀察收窄為:那組紀錄中的生硬表達,最早已出現在原始生成文字;沒有證據支持是下游改寫造成。但它還不能證明究竟是模型慣用語、提示詞安排或資料選擇導致。要區分這些因素,需要另外的比較,不能靠讀完一段回答就指定根因。
後續候選調整了表達契約,相關交付仍註明修後新模型對話未驗證。這次寫作也沒有新增模型請求。因此,我能說的是有修補與離線檢查紀錄,還不能寫成「回覆品質已修好」。
我會先把可以明確檢查的行為寫清楚,再看實際回答。以下是沿用開場情境的建議測試案例,不是今日執行結果。
| 觀察面向 | 要檢查什麼 |
|---|---|
| 承接新增資訊 | 第二輪保留每天有念、換題型會卡住,回答也回應這個差別 |
| 尊重不給建議 | 第三輪不出現計畫、練習或包裝成關心的任務 |
| 更正後不沿用錯誤 | 不再把「完全沒讀」當成事實或據此責備 |
| 避免連續套式覆述 | 連看數輪,檢查是否每次都重述困擾再宣告傾聽 |
訊息送達、模式額度保留、使用正確輪次,都可以留下明確的程式檢查。但欄位正確不代表回覆貼切,沒有命中禁止詞也不等於自然。既有 Supervisor 因此把部分重複現象留作閱讀線索,沒有把它換算成「溫暖度」分數。
本日尚未完成此部分,以下先整理目前設計與下一步。我希望保留每次判斷的範圍:一次閱讀只代表那段文字的觀察,不能替所有情境背書;工程檢查也不能證明心理支持有效。
身為還在把作品一步步做出來的高中生,我現在更在意的,是別讓「規則都過了」成為停止閱讀回答的理由。既有路線把 Feedback/Replanning 列為後續方向,仍是規劃。如果使用者接著說「你還是沒聽懂」,系統要如何讓這句回饋改變下一輪的理解,同時不讓調整繞過原有的安全與證據邊界?