四十秒後,畫面還是沒有第三則回答。
這是完賽前最近一場真實模型驗收留下的結果。我用事先寫好的合成情境,測試「從心出發」能不能陪同一個人談完一段話:先說上台報告很緊張,再補充自己其實準備過,接著談到和別人比較時的自我懷疑。
前兩輪成功了,畫面、後端介面與資料庫裡的正文一致。第三輪卻等到期限,最後顯示逾時。輸入還在,系統沒有自動重送;後面的更正、縮短、請求建議與撤回,也都沒有繼續執行。
我剛修過等待與保存機制,原本希望這次能完整走完。結果提醒我:修補可以有效,整段體驗仍然可能失敗。到了第三十天,我最想整理的,就是這兩件事之間的距離。
第一天,我問的是:「如果 AI 很會聊天,它就懂得心理支持嗎?」
我想做的「從心出發/From Heart」,定位是數位心理支持與結構化自助介入。有人想整理困擾,有人只想把話說完,也有人準備好嘗試一個小動作。我希望對話能降低開始的門檻,同時保留修正、拒絕與停止的空間。
當時的系列題目放進了 RAG、安全治理與自適應決策。RAG 是先檢索資料,再讓模型參考內容生成回答。我期待把這些元件接起來,就能逐步做出一個有依據、懂得限制自己的支持系統。
實際起步比題目小很多。最早先建立的是狀態與資料契約:分開使用者明說的事、系統推測的事,記錄來源、效期與更正關係,再接上本機保存。第一個可以操作的版本,讓人輸入一句話、修正理解、選擇或拒絕候選、留下反思;當時仍以合成資料驗證,不能當成真人使用成果。
接上介面後,我也吃過一次很具體的虧:瀏覽器流程全過,請求大小限制卻只檢查建立資料的 POST,漏掉更新資料常用的 PUT。後來才讓相關方法共用同一條防線,補上過大內容與錯誤格式的反例。這件事讓我開始追實際路徑,而不只確認程式裡「有這個功能」。
ARCI 確實參與過本系列的來源契約、檢索與治理整合,但心理支持的判斷與安全責任仍要由從心出發自己守住。接通一個元件,沒有讓整個產品自動取得它名字暗示的能力。
後來,重心逐漸移到真正的對話。
「先聽我說」要求系統先承接,不主動安排方法或追問;「一起想一步」則在使用者當輪願意時,提供有限、可選擇的小動作。介面只有幾個字,背後卻需要一致的意圖、模式與保存狀態。
曾經,使用者補充自己每天都有讀書,系統辨識到「更正」,卻把更正事件當成回覆模式,原本的傾聽需求也在分支判斷裡消失。畫面選的是傾聽,後端卻走不到相應的生成路徑。後來我把「這輪發生更正」和「這輪採用什麼支持模式」分開,也避免一個局部更正抹掉整段有效背景。
另外一次,前端的小步驟選擇可能在送出文字時被一般分支覆蓋。這讓我明白:按鈕顯示選中了,不代表後端真的依照選擇執行。想聽建議的意願也不能永久保留;使用者下一輪改口,就要立即收回。
更難的是,模式正確,文字仍然可能沒幫上忙。
有些回答只是把輸入重述一遍,再加上「真的很辛苦」。有些像在解釋困境,沒有直接體諒感受。一場完整對話甚至連續幾輪使用「不是沒有努力」;每句單獨看都合理,連著讀就很像公式。
我因此調整共用提示,減少先摘要再肯認的結構引導,分開當輪重點、有效背景、更正與最近已說過的支持。簡短、不追問等偏好也要保存,並辨認何時被使用者明確改變。
但這些修改只能先證明資料與指令有送對。我不能因為提示詞多寫了「自然」,就宣布模型更自然。「有回答」開始和「回答有幫助」分成兩份功課:前者查流程,後者必須逐輪讀正文。
安全誤判是其中一次最難忘的中斷。
模型曾轉述使用者的自我懷疑,像「是不是只有我不行」這類想法,卻被防止排他依附的規則攔下。供應端已回傳內容,原站最後仍回應 503,沒有採用那則回答。
問題不能只看「只有我」三個字。使用者在比較自己,助手在轉述這個想法,和助手宣稱只有自己能理解對方,是三種不同的語境。若只靠字串攔截,正常承接也可能被當成危險;若看到引號就放行,又可能讓真正的關係操控藏進引述裡。
修補因此放在共用判定:核對有效的使用者上下文、局部想法歸屬與受限句型,逐一檢查命中位置。離線重播能接受有依據的自我比較,同時保留直接排他、假借轉述的承諾,以及合理引述後接危險句的拒絕。
這仍是有限的語境辨識,談不上完整理解語言。對我而言,這次進步在於能說清楚為什麼放行或拒絕,也用反例確認修補沒有順手拆掉必要的安全限制。
另一批困難發生在生成之後。
我開始追 pending、generation、revision:分別是是否還在等待、生成進行到哪裡,以及資料目前是哪一版。使用者不需要懂這些欄位,卻會直接承受它們不同步的結果:送出後一直卡住、不知道能不能再按,或重新整理後看見不同內容。
後來查到,生成引擎、模型轉接層與瀏覽器各有自己的等待期限,其中較早的八秒限制可能先切斷請求。舊錯誤提示又把沒有取得完整正文,統一說成沒有通過檢核,讓逾時看起來像內容被拒絕。
修補後,各層共用一次期限,並替保存保留時間。正式「採用」要等對話仍有效、版本相符且資料庫保存成功後才記錄。遲到的結果不能復活已到期或刪除的對話;已保存卻沒成功送到畫面的回答,應讀回原結果,避免重新生成。
隔離測試確認較慢的有效回應能保存,也驗證逾時保留草稿、禁止重送等行為。修改還要核對原站確實載入,因為磁碟上的程式與正在服務的程序,可能是兩個版本。
session,也就是一次對話的保存單位,則帶來另一種挫折。曾有一場驗收到一半,準備接續時,原對話已不在同一個資料庫裡。當時採固定三十分鐘期限,繼續聊天也不延長;時間與清理機制吻合,但沒有留下那一次確切刪除動作,所以原因只能保留不確定性。
我把重開入口改成先檢查是否仍有效,失效就明確告知。舊逐字稿可以證明過去說過什麼,不能拿來重建一場具有原接續權限的對話。保存證據與恢復服務,原來也是不同的能力。
真實模型驗收不是一直卡在同一件事。
有一次是程序繼承的認證設定覆蓋了原本核准的設定。修正啟動來源後,首輪生成與保存成功,下一輪才暴露模式判斷問題。之後又遇到輸出安全誤判,再往後,使用者終於要求一個方法,卻因來源准入不足而停住。
那次來源問題也讓我重新理解「有資料」。談支持態度的資料,不能直接拿來支持數學解題操作。後續我補上對應來源、適用前提與正文綁定,取得有限的新對話證據;但把原方法縮成一個小動作,也不能沿用原方法的全部效果宣稱。
還有些回合連模型都沒碰到。帳面尚有工程額度,用途卻不涵蓋新的驗收;我已明確同意,原生授權登記仍不認得那份腳本。完成登記後,前端又只辨認舊契約,按鈕仍然無法使用。後續才把服務端選定的完整授權範圍,一致帶過預覽、建立對話與派送檢查。
反覆停在這些地方,確實很累。我想檢查一句話有沒有比較貼切,卻常先花力氣確認這次到底能不能開始。
有些限制值得保留:不把失敗當成免費重試、不挪用不同用途的額度、不把未知消耗歸零,也不拿不同場次拼成完整驗收。它們保護成本、資料與結論的可信度。
但每換一份腳本就需要修改登記、前後端各自綁死舊契約,則是流程本身的負擔。文件越寫越多,未必讓問題更容易處理。我需要的是清楚、一致、能執行的規則,以及一次預檢就能指出缺口的入口。反覆準備不能永遠代替真正使用。
截至這次回顧,我會保留兩個都重要的結果。
九月二十五日,曾有一場學習壓力情境完成八則真實模型回覆與第九個本地暫停動作。更正、縮短、請求方法與撤回都有實際紀錄,保存後刷新讀回也一致。這是具體進展;同一份正文卻仍有重複與生硬表達,人工接受並未完成。
九月二十八日凌晨的新情境,則是開頭那場:三次派送,兩則採用,第三輪逾時。新等待機制確實到了四十秒才收束,沒有重現舊的八秒提前取消;但沒有取得第三輪正文,上游是否最後完成、消耗多少,仍然未知。這次不能歸因為安全或來源拒絕,後續六輪也不能算通過。
因此,我現在把完成拆成幾層:
| 確認到哪一層 | 能支持的結論 |
|---|---|
| 程式修改完成 | 修法已寫入指定版本 |
| 離線測試通過 | 指定受控條件下的行為符合預期 |
| 原站載入修改 | 使用中的服務確實執行這個版本 |
| 真實模型派送並回傳 | 外部生成路徑有實際結果 |
| 回覆被原站採用 | 該回覆通過原站的採用流程 |
| 保存、重新讀回一致 | 正文確實留存,讀回沒有改變 |
| 同一場多輪完整完成 | 指定情境的互動鏈走得完 |
| 使用者實際感到改善 | 體驗品質得到人的確認 |
前一層不會自動替後一層作答。歷史版本的完整對話,也不能替修改後的新版本背書。
目前已完成多項局部工程修補,也有原站載入與部分真實對話證據;最新情境的完整多輪、跨情境品質與人工接受仍未完成。既有型別與程式風格檢查也還有未清完的問題,不能說整個專案全綠。更沒有依據把它稱為正式可用、具臨床效果的心理服務。
身為高中生,用 AI 協助開發讓我能更快寫出程式、測試和介面,也更快遇到以前沒想過的整合問題。速度很有用,但 AI 交出一段修改,不會連同需求判斷與驗收責任一起接走。
我得決定使用者此刻需要什麼,辨認失敗發生在哪一層,並承認手上的證據還回答不了哪些問題。模型可能寫出制式回覆,我自己的提示、狀態與流程設計,也可能把它推向同樣的結果。
接下來,我想先釐清最新逾時的上游結果,再在清楚的授權內取得一場完整的新版本對話;同時整理驗收入口,減少反覆接線的負擔。等正文真的留下來,再請人逐輪閱讀,確認它是否接住更正、願意停下,也能在需要時提供具體的一步。
謝謝讀到第三十天的你。這個系列留下了能操作的流程、真實跑過的對話,也留下不少沒有完成的地方。完賽讓我有機會把它們放在一起看:下一次說「做完了」時,我希望能清楚指出,使用者究竟多了哪一件可以放心使用的事。