我做了一個字詞聯想遊戲!當開發變成一種純粹的創作,一切都會變得好玩
閱讀時間:約 10 分鐘
這是一個從一本書得到的啟發開始的 side project。讀到榮格的「字詞聯想法」後,意外從自己的回答裡發現了一些關於自己有趣的事,也因此決定把這個一百多年前的心理學實驗做成小遊戲。這篇文章記錄從「這好像很好玩?」的一個念頭,到字詞挑選、LLM 分析、星空結果頁與成本優化的開發過程,也記錄我如何把自己相信的「溫柔又好奇地探索自己」放進作品裡,以及久違的不為工作、不為作品集,只因為真的很想把一個東西做出來而寫程式的體驗。
抓住了一個來自書中的想法
前幾個月我正在閱讀河合隼雄的著作《情結:內心隱形的拉扯力量》,這本書探討著什麼是情結、它如何影響我們的日常,以及該如何與這些情結好好共處。
書中提到,心理學家榮格曾透過一種看似非常簡單的方式,觀察一個人的內心是否存在著某種特別強烈的能量與拉扯,而這個方法就是「字詞聯想法」。

「字詞聯想法」的執行方式很簡單:實驗者會依序念出「綠色」、「麵包」、「謊話」等字詞,受試者則要盡可能快速地說出腦中第一個浮現的聯想。比起回答的內容本身,榮格也會觀察回答所花費的時間、突然答不出來、重複、口誤,以及再次詢問時是否記得自己原本的答案等反應。他認為,當某個字詞碰觸到一個人帶有強烈情緒的經驗或「情結」時,原本順暢的聯想可能受到干擾,而這些不尋常的反應,就可能成為探索內心的線索。

進行中的字詞聯想實驗示意圖 by Gemini
一個意外戳中我的分析促成了這個創作
出於好奇,我在網路上找到了一些測驗字詞,其中讓我很驚訝的一個字詞是「畫」,我回答了「博物館」,這是我回答當中停頓最久的詞。根據反應時間與這樣的回答,我得到的分析是:

老實說,這個分析指出的議題確實是我一直在面對的課題之一,對我來說作品就是一個人是否優秀的延伸(會有進步的動力,但有時也好不健康🙂↔️),我鮮少因為樂趣、當下的體驗去創作,也讓我想起小時候畫的各種畫作與製作的美術作品,都要被拿去打分數與參加比賽,長大後做的程式作品大部分也是為了符合職涯需要,在我的思想裡,似乎很少有「非常純粹地創作」這回事。
在探索為何有這樣的答案以及回溯我個人經歷的過程後,我突然內心有個 calling(?)如果能讓更多人透過這個簡單的字詞聯想法,對自己有更深的理解,這會是多棒的事?也回歸到剛剛的分析,如果我的作品可以不只是「放在博物館中的展示品」,那麼這或許會是讓我體會何謂純粹創作的好機會。
所以,我決定來做一個線上字詞聯想遊戲(對,不是心理測驗)。
這不是那種會告訴你答案的心理測驗
在動手開發前,我會先思考整個作品的調性和想要帶給人怎樣的感覺。我期待大家體驗完,整個人更開闊,可以與自己有更多的對話、對自己有更多的好奇,而不是讓系統直接告訴你你是哪一種類型的人,因此「開放性、好奇心」成為了這個作品的 DNA。以下也分享各種開發時的思考,一起看看這些技術決定如何建構出這個作品的方方面面。
指標選擇
榮格進行字詞聯想法時,是面對面觀察受測者,因此除了反應時間與回答內容,也能注意停頓、臉部表情、肢體動作等反應。如果要把這套方法搬到線上,勢必得在指標上做一些妥協與取捨,而留下哪些資料,也會直接影響最後能提供多少值得探索的線索。
在線上最直接能記錄的是「反應時間」與「回答字詞」。其中反應時間並不是計算到使用者把答案輸入完並送出的那一刻,而是記錄從刺激詞出現,到使用者第一次按下鍵盤的時間。因為我真正想知道的是「看到這個詞後,花了多久開始產生回答」,而不是他的打字速度。這個數字也不拿來和別人比較,而是和使用者自己的其他回答相比,找出哪些反應相對快、哪些地方停留得比較久。
至於回答本身,則可以產生更多交叉觀察。例如「旅行 → 飛機」和「旅行 → 自由」,直覺上就有不同程度的語意關聯。我會將刺激詞與回答分別轉換成 embedding,再計算兩者的語意距離,找出一些關聯較遠、比較意外的回答作為候選線索。不過語意距離遠不代表這個回答一定比較有心理意義,它只是幫助系統從大量回答中找到「也許值得多看一眼」的地方,再和反應時間、重複、記憶變化等其他訊號一起看。
字詞挑選
字詞本身是我花很多時間調整的地方。最初的詞庫參考了早期字詞聯想實驗使用的刺激詞,但我不想直接把一百多年前、西方文化背景下的詞彙原封不動搬過來。有些詞到了今天已經很少使用,有些則帶有明顯的時代或西方生活脈絡,因此我陸續拿掉 widow、pamphlet、stork、hay 等詞,也加入 Love、Mobile phone、Pocket、Birthday、Pillow 等更貼近現代生活的刺激詞。中英文也不是單純逐字翻譯,而是盡量讓兩個語言版本的使用者看到詞時,都能自然產生聯想,降低語言與文化本身對反應的干擾。

Cute Psycho 字詞聯想遊戲作答截圖
另一個挑選原則是,我並不是在找「最有心理意義的 50 個詞」。如果事先認定哪些詞一定代表親密關係、家庭或創傷,某種程度上就已經替使用者決定答案了。我更希望留下的是簡單、容易理解,卻能讓不同人產生不同聯想的詞:同樣看到 Love,有人想到某個人,有人想到安全,也有人可能突然不知道要回答什麼。我覺得真正值得觀察的是,每個人面對同一個字詞時,會產生什麼不一樣且多元的反應。
LLM 的分析口吻:prompt engineering 讓它成為一起觀看的人,而不是替你下結論的人
LLM 在這個作品裡的角色是我改最多次的地方。一開始我希望它扮演一位熟悉榮格心理學的分析者,從反應時間、重複出現的詞、記憶挑戰的變化中找出值得探索的線索。但實際測試後,我發現即使 prompt 已經寫著「不要診斷」、「避免過度推論」,模型偶爾還是會從一個停頓一路講到「壓抑」、「防衛」,甚至替使用者歸納出某種人格特質。
LLM(Large Language Model,大型語言模型)是一種能理解與生成文字的 AI 模型。它透過大量文字資料學習語言中的規律,可以根據使用者提供的 Prompt 進行摘要、分析、問答與內容生成。這個作品使用 LLM 來整理字詞聯想中值得進一步探索的線索。
後來我發現,與其只告訴 LLM「保持開放」,不如把這種抽象的調性翻譯成具體行為:將「你是一個怎樣的人」改成描述「這次的聯想呈現了什麼」;避免「這代表」、「可以看出」這類定論,改用「可能」、「或許」、「似乎」,同時明確寫出哪些推論不能做。此外,重要規則放在哪裡也有差,尤其 prompt 越來越長後,中間的指令可能比較容易被模型忽略,因此我會刻意把最重要的角色與限制放在較顯眼的位置,並在結尾再次強調,降低模型「看到後面忘了前面」的機率。
Prompt Engineering(提示工程)是設計與調整給 LLM 的指令,以提高輸出品質與穩定性的過程。除了告訴模型「要做什麼」,也包含提供背景資訊、限制不能做的事、安排重要資訊的位置,以及規範輸出的語氣與格式。

Cute Psycho 字詞聯想遊戲單組字詞洞察截圖

Cute Psycho 字詞聯想遊戲整體洞察截圖
這裡想提一件有趣的事:我原本以為 Few-shot prompting 會讓輸出更穩定,因此放入幾組理想的分析範例讓模型參考,實際測試後卻發現反而有點扣分。LLM 很容易模仿範例的敘事結構與推論方式,久而久之每一組分析都長得很像,甚至會為了「寫得像範例」而忽略這次回答真正特別的地方。最後我反而拿掉大部分的 Few-shot prompting,只留下清楚的行為邊界與輸出結構。這也讓我發現,Prompt 並不是限制得越詳細、範例給得越多就越好,在穩定與保留模型的探索空間之間也需要取捨。
Few-shot Prompting(少樣本提示)是在 Prompt 中提供少量「輸入 → 理想輸出」的範例,讓 LLM 參考這些範例完成新的任務。它可以幫助模型理解想要的回答方式、提高一致性,但範例也可能讓模型過度模仿固定結構,降低輸出的多樣性。
結果頁面的呈現:從分析報告變成一片聚類後的星空
最初的結果頁其實是一份很直接的分析報告——依序列出停留最久與最快的字詞、重複出現的回答,以及記憶挑戰的變化。它能清楚整理資料,卻也讓我覺得使用者像是在閱讀一份系統替自己下的結論,和我想保留的開放感有些距離。
後來我把每個回答想成一顆星星——相近的聯想靠成星群,回答節奏特別不同、或在第二輪出現變化的回答則更明亮。結果頁也變成一段隨著閱讀慢慢靠近不同星星的旅程,它的目的是邀請你回望自己的聯想,在其中找到想多停留一下的地方。

Cute Psycho 字詞聯想遊戲結果頁面星空截圖
為了讓這些星群不只是視覺上的裝飾,我使用文字 embedding 模型,將每個回答轉換成一串能代表其語意位置的數值,語意越相近的回答,在這個空間裡距離也會越近,接著系統從彼此最接近的回答開始逐步聚合。最後,有些回答形成星群,有些找不到明顯的同伴,便成為獨自閃爍的散星,如此形成了每個人獨一無二的內心星空 🌌
Embedding(向量嵌入)是一種將文字轉換成數值向量的方法,讓電腦可以比較文字之間的語意關係。簡單來說,意思越相近的文字,在向量空間中的位置通常也會越接近,因此可以用來進行語意搜尋、推薦或文字分群。
Clustering(聚類)是一種依照資料之間的相似程度,自動將資料分成不同群組的方法,不需要事先替每一群設定分類。在這個作品裡,我利用回答之間的語意距離進行聚類,讓意思較接近的聯想形成不同的「星群」。
這些星群不是預先定義好的心理分類,也不代表任何人格標籤,它只是把使用者的聯想中可能互相呼應的部分暫時放在一起。至於這些星星共同指向什麼、為什麼某些回答靠得特別近,仍然留給使用者自己觀看與定義。
成本考量後的優化:壓縮提示詞、選擇不同模型
這個遊戲有兩個地方需要呼叫 LLM:使用者查看特定字詞時的「單題分析」,以及完成整個遊戲後的「整體分析」。隨著 prompt 越改越長,我也開始認真計算每完成一次遊戲到底會花多少錢。
第一個優化的地方就是 prompt:我把反覆出現的規則合併得更集中,最後四組中英文 prompt 從 19,060 字元縮短到 16,430 字元,大約減少 13.8%。不過我沒有為了省 token 一路刪到底,分析結構、禁用語言、輸出格式等真正影響品質與安全邊界的 context 還是得留下來。
Token 是 LLM 處理文字時使用的基本單位,一個 Token 可能是一個字、詞的一部分或符號,不完全等同於我們平常計算的「字數」。許多 LLM API 會依照輸入與輸出的 Token 數量計費,因此 Prompt 的長度、使用者輸入與模型產生的回答都可能影響每次呼叫的成本。
另一個嘗試則是換模型。原本單題與整體分析都使用 Gemini 3.1 Flash-Lite,後來發現 GPT-5.6 Luna 的成本更低,我當然用爆 🤑 BUT!即使餵進完全相同的 prompt,換成 Luna 後產生的分析在語氣、洞察深度上就是「不太對」,原本花很多時間調整出來的感覺也跟著消失。最後我沒有為了最低成本硬把所有任務塞給同一個模型,而是重新比較兩種分析真正需要的能力,再決定哪些地方值得使用品質較好的模型、哪些地方可以交給更便宜的模型。
AI 時代之下,去做那些只有你能做的東西
現在有了 AI,任何人都可以快速地做出一些作品,像是各樣的網站或遊戲,但你可能不會想再做出第 n 個記帳程式、筆記網站,相反地,我鼓勵大家去做那些「只有你能做的事」。
就拿這個字詞聯想遊戲來說好了。究竟還有誰會剛好在這個時間點讀到《情結:內心隱形的拉扯力量》,對裡面的字詞聯想法產生興趣;又剛好讀過一些榮格相關的書、總是喜歡探索自己、對人的內心感到好奇,最後還剛好某天突然想著:「不然我把它做出來好了?」這些事情單獨來看都沒什麼特別,但全部疊在一起,就變成了只有我能做的作品。你現在心中有沒有一些覺得似乎只有自己能做的事?去試試看吧,如果擋著你的只有恐懼和未知,那你現在已經具備一切做這件事所需的能力了。
一個小插曲。剛開發完這個遊戲後,我非常需要一些測試者,於是我在一個社交場合主動和大家提及自己最近在開發這個有趣的東西,沒想到真的有不少人感興趣,願意當場玩玩看,甚至給了我很多原本沒想到的建議 🥹 像是有人反映 50 題對現代人的注意力來說實在有點挑戰,讓我後來又做了 30 題的版本。以前的我可能會覺得主動介紹自己的作品有點像在推銷,但這次反而很自然,因為我是真的覺得它很好玩,所以很想分享給別人看看。

大家正在認真地玩我的字詞聯想遊戲(開心)
我也慢慢發現,作品裡其實可以放進一些自己相信的事情。我一直覺得自我探索和與自己對話很重要,也很希望身邊的人偶爾可以停下來,好好認識自己的內心。所以這個遊戲最後沒有直接給使用者分類圖卡,或告訴你「你是哪一種類型的人」這樣的結論,而是做成一片可以自己觀看的星空;AI 也只是幫忙指出一些值得多看一眼的地方,把最後的詮釋權留給使用者。這些設計選擇某種程度上也都來自我自己相信的事情。
一個可愛的 fact
最後想回答一個可能沒有人問過的問題——為什麼這個字詞聯想遊戲要叫做「Cute Psycho」(可愛的瘋子)?
在開發前,我剛好想起曾經讀過埃里希・佛洛姆的《聆聽的藝術:認識自己與體察現代人的心靈》。我對書中一個觀點留下很深的印象:現代人的內心其實多少都有一些不那麼「完美正常」的部分,我們可能焦慮、低落、注意力渙散,也可能有一些連自己都搞不太懂的情緒和反應。
但我不覺得這些地方一定需要被急著修正。每個人的成長背景、經歷和內心那些奇奇怪怪的角落,共同組成了現在的自己,而這些不同也是我覺得人很迷人的地方。
所以想了一圈,好像每個人都能算是一個可愛的瘋子——帶著一點自己的奇怪、一點可愛,然後溫柔又好奇地探索自己和這個世界。