Vibe Doctor:跟聊天機器人一起,把論文初評變成一個會跑的網頁

它出嘴、你出手——這趟用聊天機器人把論文初評做成網頁的全程實錄,包含真實的 bug 與除錯,最後帶出「該換 Agent 的時機」。

分享
Vibe Doctor:跟聊天機器人一起,把論文初評變成一個會跑的網頁

research02-hero-cover.png

上一篇,我們讓 AI 訪談你、把一位醫師心裡的評讀標準長成一段「論文初評提示詞」,再停進一個常駐工具裡。那是「引擎」。但你大概也發現一件事:每次要用,還是得手動打開對話、手動貼上論文、看完關掉——做過的初評,沒有留下來。

這篇要替那個引擎裝上車身:做一個會跑、能存、還能回看的網頁。醫師貼上一篇論文、按一個按鈕,就用那段固定提示詞跑一次初評、把結果存進 Google 試算表,之後隨時回頭查。

先說在前頭:我自己是醫師、不是工程師,這趟從頭到尾,沒寫過一行我真正看得懂的後端程式。能把這個網頁做出來,靠的就是一件事——把需求講清楚,剩下交給 AI。所以如果你也是臨床出身、平常一看到程式碼就想關掉視窗,這篇正是寫給你的。

而且這篇要老實示範的,是一種工作流完全用聊天機器人(這次是 Gemini)幫你把程式寫出來、一步步部署——包含中途真的撞到的 bug、怎麼靠聊天機器人除錯、以及一個會讓很多人卡住的快取陷阱。下一篇我們會換成「Agent 工作流」做同一件事,兩種各有適合的場合。

⚠️ 本篇一律用合成(虛構)論文示範。 文中那個網頁工具是教學原型,不可輸入病人可識別資料、也不可作為臨床決策依據。AI 整理、醫師定案。

research02-hero-opening.png


一、先看成品:一個「論文初評紀錄」網頁

我們要做的東西長這樣——一個單頁網頁:最上面是醒目的安全警示與「我沒有輸入病人資料」的勾選框,中間貼論文、按一個「產生論文初評」,下面跑出結構化初評;還有一個「歷史紀錄」頁籤,把你做過的每一篇收起來、可以展開回看。

research02-ss21.jpg

四個功能,到此為止(再多會稀釋重點):①貼論文 ②一鍵跑初評 ③存進 Google 試算表 ④歷史紀錄頁。接下來,我們從零把它生出來。


二、把「需求」寫清楚,丟給聊天機器人

這一步是整個工作流的關鍵:你不必自己會寫 Google Apps Script,但你要把「要做什麼」講清楚。

而且——等一下你會看到這份規格書裡有 doGetUrlFetchAppScript Properties 這些技術字眼。身為醫師、又是程式新手的你,可能會想:「我又不是工程師,連 Google Apps Script 是什麼都不知道,這份規格書我哪寫得出來?」

別擔心——這整份規格書,本身就是 AI 幫你寫的。 延續上一篇學到的同一招:讓 AI 教你用 AI。 你不必懂後端怎麼接 API、不必會寫「系統規格書」;你只要把「想做一個怎樣的工具」用白話講清楚,請 AI 幫你整理成一份有條理的系統規格書就好。你出「要什麼」,AI 出「把技術細節寫清楚」。

research02-spirit-card.png

下面這份規格書,就是這樣聊出來的(你可以直接拿去改成你自己的):

提示詞
你是一位資深的 Google Apps Script 工程師。請依下面的「需求規格」做出一個可以部署的 Web App(MVP),輸出完整的 Code.gs 與 Index.html,並附部署步驟。

【技術要點】

  • 單頁 Web App:doGet 用 HtmlService 回傳 Index;標題、安全揭露、輸入區、輸出區、歷史紀錄頁籤都在同一頁。
  • 後端用 UrlFetchApp 呼叫 Gemini API;API key 從 Script Properties 讀,絕不寫在前端、也不回傳給前端。
  • 初評結果存進同一個 Google Sheet(工作表 Run_Log);不存完整論文全文、不存任何病人可識別資料(PHI)。
  • 歷史紀錄頁讀 Sheet、列出標題/時間/狀態,可展開回看當次初評結果。

【需求規格】
專案:醫師「論文初評紀錄」網頁(Google Apps Script Web App,MVP)。醫師貼上一篇論文,按一個按鈕就用固定的初評提示詞跑 Gemini、把結果存進 Google Sheet,並能回看歷史紀錄。教學/合成示範用,非真實臨床決策工具。

四個功能(MVP,到此為止):

  1. 首頁+安全揭露:醒目警示「請勿輸入病人姓名、病歷號、檢查報告或任何可識別個人資料」+「合成示範、不可作為臨床證據」;一個「我確認未輸入病人可識別資料」勾選框,未勾不可送出。
  2. 貼上論文+一鍵跑初評:論文標題(必填)、論文全文(必填)、來源註記(選填);按鈕「產生論文初評」。
  3. 結果存進 Google Sheet:每次執行新增一列 metadata 與初評結果;不存論文全文、不存 PHI。
  4. 歷史紀錄清單頁:列出過去每次初評(標題、時間、狀態),可點開回看。

執行狀態要讓使用者看得到(檢查輸入 → 組提示詞 → 呼叫 Gemini → 寫入 Sheet → 完成/錯誤),錯誤訊息用可理解的中文。

【固定初評提示詞】
(就是上一篇讓 AI 訪談醫師生出的那份「醫學論文初評提示詞(可重複使用版)」,原封不動放進來當系統指令,使用者貼上的論文接在它後面。完整內容見上一篇。)

請輸出:1) 完整 Code.gs 2) 完整 Index.html 3) 部署步驟。

裡面那段「固定初評提示詞」,就是上一篇讓 AI 訪談醫師生出來的那份評讀標準——原封不動放進來,當這個工具的大腦。而其餘的技術細節(怎麼接 Gemini、怎麼把結果存進試算表、怎麼防止金鑰外洩、怎麼做出歷史頁)也全是 AI 補上的,你只要點頭確認方向就好。

這就是 Vibe Coder 的精神:你負責把想法說清楚,技術細節交給 AI。 對我們醫師來說更是如此——你最懂的是臨床、是這篇論文該怎麼讀;把那份判斷講清楚,寫程式的事就交給它。

接著產程式碼,記得把模型切到進階的那一檔(這裡用 Gemini 3.1 Pro,它的定位就是「進階數學與程式設計」)。

research02-ss01.jpg

把整份需求規格貼上、送出:

research02-ss02.jpg

Gemini 開始產出。它先說明會做成單頁應用程式、嚴格做到「不在試算表存原始論文與病人資料」,然後給你兩個檔的完整程式碼:

research02-ss03.jpg

Code.gs(後端):最上面把模型名稱、提示詞版本抽成常數,並把上一篇那段初評提示詞原封不動放進來當固定指令。

research02-ss04.jpg

Index.html(前端):版面用 Google 藍(#1a73e8),有安全警示、表單、結果區、歷史頁籤。

research02-ss05.jpg

最後它附上部署三步:設定金鑰 → 部署成網頁 → 首次授權。

research02-ss06.jpg

到這裡,聊天機器人已經把「藍圖」給你了。但藍圖跟「真的蓋起來」之間,藏著幾個只有動手做過才知道的坑。


三、把程式碼變成一個真的會跑的網頁

聊天機器人給的程式碼,要真的變成一個會跑的網頁,中間有 6 步。先看這張全局地圖,再回頭逐一對照下面的細節截圖——你會比較不容易迷路:

research02-mindmap-deploy-map.png

先別急著貼程式——你得先有一個 Apps Script 專案

Gemini 直接叫你「把程式貼進 Code.gs」,但如果你沒做過,第一個問題會是:Code.gs 在哪?怎麼生出來?這一步它沒講,我們補上。

Google Apps Script 不用另外安裝,它就藏在你的 Google 雲端硬碟裡。打開雲端硬碟、進到(或新開)一個放這專案的資料夾,左上角點 「新增」→「更多」→「Google Apps Script」

research02-ss07.jpg

它會開出一個全新的 Apps Script 編輯器,裡面預設已經有一個空的 Code.gs。把 Gemini 給的後端程式整段貼進去(覆蓋空殼):

research02-ss08.jpg

新增前端檔(Index.html)——這步最容易錯

HTML 檔不是在雲端硬碟另開,而是在這個編輯器裡面新增。左側「檔案」那排、Code.gs 上方有個 「+」→ 選「HTML」

research02-ss09.jpg

命名時,只打 Index(不用打 .html,系統會自動加)。然後把前端程式整段貼上。

但這裡有一個會讓你卡到懷疑人生的雷——大小寫。我一開始把它命名成小寫的 index

research02-ss10.jpg

程式裡寫的是 createHtmlOutputFromFile('Index')(大寫 I)。檔名對不上,網頁就會打不開、報錯。改成大寫 Index 才行:

research02-ss11.jpg

Vibe Coder 小常識:聊天機器人叫你「把 HTML 貼進 Index.html」,聽起來簡單,但它假設你已經知道「這個檔要在編輯器裡用 +→HTML 新增」「名字要和程式裡呼叫的字串大小寫完全一致」。這種「只有真的做過才知道」的細節,正是它最容易略過的地方。

設定 API 金鑰(放對地方,別被人偷看)

程式要靠 Gemini API 跑初評,得先給它一把金鑰。金鑰絕對不能寫在前端程式裡——要放在 Apps Script 的「指令碼屬性(Script Properties)」,這是伺服器端、安全的地方。到 ⚙ 專案設定找到它:

research02-ss19.jpg

新增一個屬性 GEMINI_API_KEY,值貼上你在 Google AI Studio 申請的金鑰。(下圖把值換成了提醒語——順便說一句:貼金鑰時,小心後面沒有人在偷看。)

research02-ss20.jpg

部署成網頁、首次授權

接著照部署流程走:選「網頁應用程式」、填描述、執行身分選「我」。存取權這裡我示範時選了「所有人」方便直接展示——但你自己測試時,建議先選「只有我自己」比較安全,確定沒問題再考慮開放。然後部署、授權。

research02-ss12.jpg

research02-ss13.jpg

research02-ss14.jpg

research02-ss15.jpg

research02-ss16.jpg

research02-ss17.jpg

部署成功,拿到一個 .../exec 結尾的網頁網址——到這裡,所有設定都完成、工具正式上線了:

research02-ss18.jpg


四、跑第一次:它真的把論文初評做出來了

打開網頁,貼上那篇合成腎臟科論文、勾選「我確認未輸入病人可識別資料」、按下「產生論文初評」。畫面會一步步告訴你它在做什麼(組裝提示詞 → 呼叫模型 → 整理輸出 → 寫入試算表),而不是只給你一顆轉圈圈。

research02-ss22.jpg

幾十秒後,初評出來了——開頭先聲明這是合成稿、不可當臨床證據,接著判定研究類型、拆 PICO、分層終點:

research02-ss23.jpg

往下,是整體評等:它正確指出主要終點「血壓達標」是過程性替代指標、非硬終點,標出開放標籤/未盲會讓效果偏向高估,把腎臟結果壓在探索性,最後給可信度等級與一句話結論。

research02-ss24.jpg

同一時間,它把這次執行的紀錄寫進了 Google 試算表(標題、時間、狀態、初評全文都在,但刻意不存原始論文全文):

research02-ss36.jpg

停一下,看看剛剛發生的事:你——一個整天在看病人、不是在寫程式的醫師——剛剛親手部署出一個真的會跑、會評讀、會把結果存下來、之後還能回看的網頁。 沒有工程師、沒有 IT 部門,就靠一段需求和一台瀏覽器。一個按鈕,把上一篇那段提示詞變成了可重複、會留痕的工作流——到這裡,工具的主體,真的跑起來了。

research02-mindmap-input-output.png


五、撞到一個真實的 bug:歷史紀錄卡住了

但「歷史紀錄」頁籤一點下去,畫面就永遠卡在「載入中…」,既不出現紀錄、也不報錯。

research02-ss25.jpg

這是寫程式的日常:一口氣產出的程式,總會有個地方不對。重點是怎麼修——而這正是「聊天機器人工作流」要面對的事。

其實這個「卡住」藏了兩層坑。先看這張地圖,下面那一連串除錯截圖,就是逐層把它拆開、修好的過程:

research02-mindmap-two-pits.png

第一個常識:聊天機器人看不到你的瀏覽器,你得自己開檢查面板

畫面卡住、又沒有錯誤訊息,怎麼查?答案是打開瀏覽器的開發者工具(按 F12)、切到 Console(主控台),看底層到底在抱怨什麼。截寬一點,讓你看清楚這個面板是從哪裡冒出來的:

research02-ss27.jpg

放大看訊息本身——有兩個紅色的 Uncaught rt 錯誤,夾在一堆網路狀態訊息之間:

research02-ss26.jpg

這就是重點之一:聊天機器人沒辦法看到你這個畫面。它不知道你的網頁卡在哪、console 噴了什麼。所以下一步,得由把這個錯誤帶回去給它。你是它的眼睛。

把錯誤貼回去問——它就抓到了

我把症狀(歷史紀錄卡載入中、沒有錯誤)回報給 Gemini。它從症狀就猜中了根因,講得很清楚:

research02-ss28.jpg

原因是:Google 試算表會把寫入的時間字串自動轉成 Date 物件;當後端把含有 Date 的資料回傳給前端時,google.script.run 會在背後靜默失敗、連錯誤處理都不觸發,前端就一直痴痴地等。

它的修法也直接給了——把 getHistory() 回傳的所有資料強制轉成字串;而且它還主動提醒:改完程式記得「重新部署新版本」,否則網頁會繼續跑舊版。

research02-ss29.jpg

老實說,Gemini 這題表現很好:症狀一給就中、修法正確、連最容易漏的「要重部署」都幫你補上。聊天機器人真的能幫你寫程式、也能幫你除錯。

一個會騙過很多人的陷阱:瀏覽器快取

但故事還沒完。我照它的修法改好程式、重新部署一個新版本(注意:要「管理部署作業 → 編輯現有的 → 版本選『新版本』」,不是新增另一個部署):

research02-ss30.jpg

回到網頁一看——竟然還是卡在「載入中…」。修法明明是對的,怎麼會這樣?

於是我把「重部署後還是卡」也丟回去問 Gemini——它給了開發者最常用的「三招」:

第一招:用「測試部署作業」的 /dev 網址來測,而且它特別提到「有時候瀏覽器會快取(Cache)舊版本」:

research02-ss32.jpg

第二招:換一個更防呆的 getHistory()(跳過空白列、加上預設值):

research02-ss33.jpg

第三招:自己按 F12、點歷史紀錄,看有沒有紅色錯誤——然後把結果告訴它

research02-ss34.jpg

我照第一招做:用那個 /dev 測試網址打開、點歷史紀錄——這次立刻就出來了

research02-ss35.jpg

原來真因就藏在第一招裡:是瀏覽器快取。 我的修法其實一開始就成功了,只是正常瀏覽器一直在跑快取住的舊版本;而 /dev 測試網址跑的是編輯器裡最新的程式、繞過了快取,所以一試就通。

而第三招那句「你有看到任何紅色的錯誤訊息嗎?」,本身就是另一個重點:聊天機器人看不到你的畫面,它只能請你去當它的眼睛和手、再把看到的回報給它。

Vibe Coder 經典坑:改完程式、重新部署後,網頁卻沒變——很可能是瀏覽器在跑快取的舊版。解法是強制重新整理(Ctrl+Shift+R)、開無痕視窗、或用 /dev 測試網址。這個坑很常見,而且聊天機器人看不到你的瀏覽器,沒辦法替你發現。

📄 這一切都是真的。 從產出程式碼、到兩輪除錯,整段跟 Gemini 的原始對話都在這裡,你可以自己點開看:完整 Gemini 對話紀錄


六、回頭看:這趟我們學到什麼

把整趟走完,有幾件事很清楚:

  1. 聊天機器人真的能幫你寫程式。 你把需求講清楚,它就能產出一個會跑的網頁工具——你不必先變成工程師。
  2. 逐步來、邊做邊驗證是對的。 一步部署、一步測試,問題才好定位。
  3. 它一口氣產的程式會藏小 bug(像這次的歷史紀錄)。這種坑不是因為「對話太長」,而是程式本來就會有;只是程式越大、要顧的越多,這種坑越容易冒出來、來回除錯也越累
  4. 出錯別怕,把錯誤畫面貼回去就好。
    • 簡單的程式:常常貼一個錯誤訊息,它就找到問題。
    • 複雜的程式:可能要來回貼個幾次,但通常最後也能解決。

但在這個過程裡,你一定會慢慢感覺到一件事——每一次,都是你在跑腿:你開 F12、你複製錯誤、你貼回去、你換函式(還得小心別把大括號弄壞)、你重新部署、你試了 /dev 網址才發現原來是快取。聊天機器人很能幹,但它看不到、也碰不到你的東西。而我們醫師的時間,本來就被門診、查房、值班切得很碎——這種一來一回的「跑腿稅」,你我大概都特別有感。

research02-mindmap-chatbot-loop.png

於是心裡會浮出一個問題:

到底是人類在當聊天機器人的助理,還是聊天機器人在當人類的助理?


七、兩種工作流,各有各的場合

research02-mindmap-two-workflows.png

先講清楚:這不是「聊天機器人比較弱、Agent 比較強」的對決。它們是兩種不同的工作流

  • 工作流一(聊天機器人):像這篇做的——它出嘴、你出手。對小型專案很合適:一兩個檔、改個幾次,你照著貼、照著部署,很快就成。
  • 工作流二(Agent,下一篇):把「看狀態、動手改、重新部署、再驗證」整圈交給 Agent。對大型專案更有利——效率更高、你不必一直跑腿;代價是一開始的設置(環境、文件)比較費工

換句話說:專案越小,聊天機器人越划算;專案越大、改越多次,那個「跑腿稅」就越重,這時把整件事交給 Agent 才會回本。

下一篇,我們就把同一份需求交給一個 Agent,看它怎麼直接動手把網頁建好、自己把這次的 bug 修掉、自己確認結果——整個過程會很不一樣。

research02-hero-next.png


責任邊界

  • 本文的網頁是教學原型,首頁就清楚標示:請勿輸入病人可識別資料、結果不可作為臨床決策依據
  • 示範一律用合成(虛構)論文;真實論文也一樣,AI 的初評必經醫師人工核對。
  • API 金鑰只放在伺服器端的指令碼屬性,絕不寫進前端、不外洩。
  • AI 整理、醫師定案——工具只是把流程接起來,醫學判斷的最後一筆,仍由醫師落。