iT邦幫忙

2026 iThome 鐵人賽

DAY 23
0
AI 自動化

《從心出發:30 天打造一套具 RAG、心理支持決策、安全治理與 ARCI 自適應能力的 AI 心理支持平台》系列 第 23

# Day 23|Response Generation:有根據的回答,為什麼還是讓人覺得沒被聽見?

  • 分享至 

  • xImage
  •  

「它沒有亂講,可是好像也沒有聽進去。」如果我只能用「有沒有捏造事實」檢查回答,這句抱怨就很難被看見。對正在開發「從心出發」的我來說,這也是回覆生成最容易被忽略的問題:資料符合資格,並不代表最後那句話就接得住人。

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 列為後續方向,仍是規劃。如果使用者接著說「你還是沒聽懂」,系統要如何讓這句回饋改變下一輪的理解,同時不讓調整繞過原有的安全與證據邊界?


上一篇
# Day 22|Evidence Gate:有來源,不代表有證據
下一篇
# Day 24|Response Evaluation:測試通過,為什麼我還不敢說回覆變好了?
系列文
《從心出發:30 天打造一套具 RAG、心理支持決策、安全治理與 ARCI 自適應能力的 AI 心理支持平台》25
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言