昨天測試不同 Learner 之後,我發現 Gemini 會根據年齡調整 Learning Card 的用詞、知識點,甚至連 Question 的設計方式都會跟著改變。
不過在測試過程中,也出現了一個讓工程師有點在意的問題。
如果我什麼都不改,同一份 Prompt 再送一次,結果還會一樣嗎?
所以今天不改 Prompt、不換模型,也不增加任何新功能。
只做一件非常單純的事情:
同一份 Prompt,連跑三次。
原本以為今天只是要驗證「AI 每次回答都不一樣」。
結果實際跑完之後,反而發現事情沒有這麼簡單。
今天繼續使用前幾天的幼兒海洋動物 Learning Card。
測試條件全部固定:
Model:gemini-3.8-flash
Learner:3~4 歲幼兒
Topic:海洋動物
Animals:海龜、鯨魚、章魚、螃蟹、小丑魚
Cards:5 張
Prompt 也完全不修改:
請幫我製作一組適合 3~4 歲幼兒學習的「海洋動物學習卡」。
【學習目標】
讓孩子認識常見的海洋動物,並了解每種動物一個簡單的特徵。
【學習主題】
海龜、鯨魚、章魚、螃蟹、小丑魚
請針對以上 5 種海洋動物,各產生 1 張學習卡。
【每張學習卡包含】
- Emoji:使用一個適合該動物的 Emoji
- Title:動物名稱
- Content:使用 30~50 個中文字介紹這個動物,只介紹一個主要特徵
- Question:根據 Content 提出一個簡單問題
- Answer:簡短回答 Question
【內容規則】
- 使用繁體中文
- 使用適合 3~4 歲幼兒理解的詞彙
- 避免使用不必要的專有名詞
- 每張卡片只介紹一個主要知識點
- Question 必須可以根據 Content 回答
- 不要產生 Learning Card 以外的其他內容
為了避免前一次的回答影響下一次,每次測試都重新建立 New Chat,再貼上完全相同的 Prompt。
總共測試三次:
New Chat → Prompt → Run #1
New Chat → Prompt → Run #2
New Chat → Prompt → Run #3
接著就來看看,同一份 Prompt 到底會得到什麼結果。
先從最基本的結構開始檢查。
| 檢查項目 | Run #1 | Run #2 | Run #3 |
|---|---|---|---|
| 產生 5 張 Cards | ✅ | ✅ | ✅ |
| 五個欄位完整 | ✅ | ✅ | ✅ |
| 指定 5 種動物 | ✅ | ✅ | ✅ |
| 使用繁體中文 | ✅ | ✅ | ✅ |
| Question 對應 Content | ✅ | ✅ | ✅ |
| 沒有額外內容 | ✅ | ✅ | ✅ |
三次都有:
Emoji
Title
Content
Question
Answer
也都有按照指定的五種動物產生 Learning Card。
前幾天曾經出現的「陪讀小技巧」,這次三次都沒有再突然跑出來。
所以如果只是從:
「Gemini 有沒有按照 Prompt 產生我要的五張 Learning Cards?」
這個角度來看,三次其實都滿穩定的。
原本還期待第三次突然自由發揮一下,結果居然比想像中乖(笑)。
原本在開始實驗之前,我以為可能會看到這種結果:
海龜
Run #1:硬殼
Run #2:游泳
Run #3:產卵
畢竟 Prompt 只指定「海龜」,沒有告訴 Gemini 一定要介紹海龜的哪個特徵。
但實際結果並不是這樣。
三次幾乎都在介紹:
硬殼
↓
保護自己
三次都圍繞:
浮出水面呼吸
↓
噴出水花
三次都選擇:
八隻手/腳
三次都是:
橫著走
三次也都以:
橘色 + 白色條紋
作為主要內容。
整理起來:
| 動物 | Run #1 | Run #2 | Run #3 |
|---|---|---|---|
| 海龜 | 硬殼保護身體 | 硬殼保護身體 | 硬殼保護身體 |
| 鯨魚 | 浮出水面、噴水 | 浮出水面呼吸、噴水 | 浮出水面呼吸、噴水 |
| 章魚 | 八隻腳、吸盤 | 八隻腳 | 八隻手 |
| 螃蟹 | 橫著走 | 橫著走 | 橫著走、大鉗子 |
| 小丑魚 | 橘白條紋 | 橘白斑紋 | 橘白條紋、海葵 |
至少在這三次小規模測試裡,Gemini 對「這張 Learning Card 要教什麼」的選擇,比我原本預期的還要一致。
不過再仔細看,就開始看到差異了。
例如海龜。
Run #1:
海龜身上背著一個又圓又硬的大殼,就像背著自己的小房子,可以保護自己的身體不受傷喔!
Run #2:
海龜的背上有一個又硬又圓的大外殼,就像穿著堅固的盔甲一樣,可以保護牠不受傷喔!
Run #3:
海龜背上有一個又硬又圓的大外殼,就像背著自己的小房子,可以保護自己不被大魚咬傷喔!
三張卡片教的其實都是:
海龜有硬殼,可以保護自己。
但 Gemini 使用的比喻不同。
Run #1:小房子
Run #2:盔甲
Run #3:小房子
所以目前看起來:
Gemini 三次都可以教同一件事情,但不代表三次會用同一句話教。
這其實也滿符合生成式 AI 的特性。
如果每次都逐字逐句產生完全相同的內容,好像反而有點失去「生成」的意義了。
再來看看螃蟹。
Run #1:
螃蟹是往前走還是往旁邊橫著走?
Run #2:
螃蟹是用什麼姿勢走路的呢?
Run #3:
螃蟹走路是怎麼走的?
三個 Question 都不一樣。
但其實都在問同一件事情:
Learner 知不知道螃蟹是橫著走?
Answer 也分別變成:
Run #1:往旁邊橫著走
Run #2:橫著走路
Run #3:橫著往旁邊走
所以這次可以看到:
Question 的寫法:會變
Answer 的寫法:會變
但
Learning Objective:大致相同
這讓我開始覺得,「Gemini 的輸出穩不穩定」好像不能只用 Yes / No 回答。
還得先問:
我們說的「穩定」,到底是指哪一件事情?
還有一個很小,但我覺得滿有趣的地方。
三次鯨魚使用的 Emoji:
Run #1:🐳
Run #2:🐋
Run #3:🐋
Gemini 並沒有做錯。
因為我的 Prompt 只寫:
使用一個適合該動物的 Emoji
🐳 是鯨魚。
🐋 也是鯨魚。
對 Gemini 來說:
都符合需求啊。
但如果未來 UI 設計希望每次看到「鯨魚」都顯示完全相同的圖示,現在這個 Prompt 顯然沒有辦法保證。
這也讓我開始想到另一個問題:
哪些事情應該交給 AI 決定?哪些事情其實應該由前端自己控制?
例如:
AI
→ 負責產生學習內容
Frontend
→ 負責固定的 UI / Display Rules?
這個問題目前先留著,之後真的開始做 React 畫面時再回來處理。
三次測試裡,最明顯沒有完全遵守的規則,還是這一句:
每張卡片只介紹一個主要知識點。
例如 Run #1 的章魚:
章魚的身體軟軟的,長著八隻長長的腳,腳上還有很多圓圓的小吸盤,能抓緊東西喔!
除了「八隻腳」,還順便講了「吸盤」。
Run #3 的螃蟹:
螃蟹走路和大家不一樣,牠是橫著往旁邊走的,而且前面有一對大鉗子,像剪刀一樣厲害!
除了「橫著走」,又順便介紹「大鉗子」。
Run #3 的小丑魚也是:
身上穿著亮橘色和白色的條紋衣服,最喜歡躲在軟綿綿的海葵家裡玩耍。
看來 Gemini 對「只介紹一個」的理解,好像是:
我主要介紹一個,順便再補充一點應該沒關係吧?
工程師:
我就是叫你不要順便(笑)。
這也讓我發現,不同 Prompt 規則的穩定程度好像不太一樣。
像這些:
產生 5 張 → 三次都做到
指定 5 種動物 → 三次都做到
五個欄位 → 三次都做到
不要額外產生其他內容 → 三次都做到
但是:
每張只介紹一個知識點 → 偶爾還是會多講一點
所以把規則寫進 Prompt,確實可以影響結果。
但並不代表每一條自然語言規則,都會被完全一樣地執行。
看到這裡,其實人類閱讀完全沒有問題。
三次都是:
Emoji
Title
Content
Question
Answer
看得懂,也知道每一張 Card 在哪裡。
但仔細比較三次輸出,排版開始出現差異。
Run #1、Run #2 的 Card 中間都有:
---
用來分隔每張卡片。
但是 Run #3 沒有。
另外前兩次是:
Emoji:
Title:
Run #3 則變成:
Emoji:
Title:
一個使用全形冒號,一個變成半形冒號。
對人類來說:
有差嗎?還不是看得懂。
但是如果今天要交給 React:
等一下。
假設我要從這段文字裡找出每一張 Learning Card:
哪裡是一張 Card 的開始?
哪裡是一張 Card 的結束?
「---」一定會存在嗎?
欄位後面一定是「:」嗎?
還是下一次又會變成「:」?
事情突然開始麻煩起來了。
跑完三次之後,我覺得答案不是單純的:
穩定。
或:
不穩定。
比較接近:
相對穩定
────────────
Card 數量
欄位
指定動物
核心學習內容
Question 的方向
會發生變化
────────────
文字表達
比喻方式
Emoji
部分補充知識
排版格式
也就是說,如果我在意的是:
「這張海龜 Learning Card 有沒有在教適合幼兒理解的海龜知識?」
這三次結果其實滿穩定。
但如果我要求:
「每一次 Response 都必須長得完全一樣,讓程式直接解析。」
那目前顯然還沒有做到。
這次也順便記錄了三次 Gemini 的生成時間:
| Run | 生成時間 |
|---|---|
| Run #1 | 9.4 秒 |
| Run #2 | 12.7 秒 |
| Run #3 | 5.6 秒 |
最快和最慢的差異還滿大的。
不過目前只有三次樣本,而且今天主要測試的也不是 Gemini 的效能,所以這裡先單純記錄,不對時間差異做任何結論。
今天原本只是想看看:
同一份 Prompt 按三次,Gemini 是不是每次都會亂跑?
結果實際測完,反而發現「穩定性」這件事情比想像中更有層次。
三次生成中,Learning Card 的:
結構
指定動物
核心知識
Question 方向
其實都相當接近。
真正容易改變的是:
文字怎麼說
用什麼比喻
使用哪個 Emoji
順便補充哪些資訊
輸出怎麼排版
對人來說,這些差異可能沒有什麼問題。
反正三份都看得懂。
但是我們這 30 天的目標,不只是要在 Google AI Studio 裡看 Gemini 回答問題。
最後還要把這些 Learning Cards:
交給 React。
這時候問題就不一樣了。
人看得懂的 Response,程式不一定好處理。
所以明天,前端工程師終於又要開始上班了(笑)。
Day 09|人看得懂就好嗎?開始面對 Gemini 的 Response 格式問題