iT邦幫忙

2026 iThome 鐵人賽

DAY 7
0
Claude AI

研究生自救指南:30 天用 Claude Code 打造我的論文工具箱系列 第 7

Day 7|文獻檢索:把搜尋策略寫成可重現的腳本(PubMed MCP)

  • 分享至 

  • xImage
  •  

上一次 meeting,老師看著我的文獻回顧初稿,問我這些文獻是用什麼條件找的、哪一天查的、總共跑出幾筆。我打開 PubMed 的搜尋歷史,只剩最近幾次,其中一次還是我半夜隨手打的關鍵字。我答不出來。

那一刻才發現,論文裡每一個數字都有出處,唯獨「這些文獻是怎麼來的」這件事,我完全沒有紀錄。

第二週開始談文獻。今天先處理最前面、也最容易被忽略的一步:檢索。

檢索是整條文獻流程裡最不可重現的一步
問卷資料我會留原始檔,統計我會留輸出,但檢索式我從來沒留過。

原因很簡單:PubMed 的網頁就是拿來「試」的。打幾個字,看結果不對,加一個 AND,再拿掉一個,改成 MeSH 詞,來來回回幾十次。最後留下的是一堆 PDF,中間走過的路全部消失。

這在寫文獻回顧那一章時會出問題。口試委員問「你怎麼確定沒漏掉重要文獻」,我只能說我查得很認真。如果做的是系統性文獻回顧,檢索式、日期、筆數更是必須寫進論文的東西。就算是我這種問卷型研究,能拿出一份「我在哪一天、用什麼條件、找到幾筆」的紀錄,跟拿不出來,在老師眼裡是兩種學生。

聊天視窗幫不上這個忙。它可以幫我想關鍵字,但它碰不到 PubMed,它說的筆數是猜的。這正是 Day 2 說的第三面牆:碰不到資料。

MCP:讓 Claude Code 自己去查 PubMed
Claude Code 本來只認得我電腦裡的檔案。要讓它連到 PubMed,需要一個叫 MCP(Model Context Protocol)的東西。

我第一次看到這三個字母也很怕,後來想通了,它就像會診單的格式:任何外部服務只要照這個格式接上來,Claude Code 就知道怎麼跟它講話。PubMed 有社群維護的 MCP 伺服器,接上之後,Claude Code 就能直接送出檢索式、拿回結果。

設定只有一行指令。在論文專案的資料夾打開終端機:

claude mcp add pubmed -- <PubMed MCP 伺服器的啟動指令>
尖括號裡的啟動指令依你選的伺服器而定,它的說明頁會寫。加完之後用 claude mcp list 確認有沒有出現 pubmed 這一項。如果想讓實驗室同學也直接用,把設定寫進專案根目錄的 .mcp.json,整個資料夾複製過去就能用,這件事 Day 26 會再談。

接上之後,在 claude 裡打一句「用 PubMed 查 nurse burnout AND sleep quality,回傳筆數與前十筆的 PMID」,它會真的去查。回來的筆數是 PubMed 說的,這一點跟聊天視窗完全不同。Day 6 那些被標成〔未查證〕的引用,從今天起也有辦法真的查到 PMID,變成〔已查證〕。

交付物一:檢索策略檔
工具接上了,接下來的重點反而是把「策略」從我腦袋裡拿出來寫成檔案。這是 Day 4 資料夾結構裡 literature/ 底下的第一份檔案:literature/search-strategy.md。

檢索策略

研究問題(PICO)

  • P(對象):(需作者補充:研究對象)
  • I/E(暴露或介入):(需作者補充:主要變項)
  • C(比較):無
  • O(結果):(需作者補充:結果變項)

關鍵字與 MeSH

概念 自由詞 MeSH
對象 nurses, nursing staff Nurses
主要變項 burnout, occupational burnout Burnout, Professional
結果變項 sleep quality, insomnia Sleep Quality

檢索式(版本 v1,建立日期:<日期>)

  • S1:("Nurses"[MeSH] OR nurse*[tiab])
  • S2:("Burnout, Professional"[MeSH] OR burnout[tiab])
  • S3:("Sleep Quality"[MeSH] OR "sleep quality"[tiab] OR insomnia[tiab])
  • S4:S1 AND S2 AND S3

限制條件

  • 日期範圍:<起訖年>
  • 語言:English, Chinese
  • 文獻類型:排除 letter、editorial

版本紀錄

  • v1:初版
    上面的關鍵字是我這個題目方向的示範,你的題目請整份換掉。

重點是結構:PICO 放最上面提醒自己為什麼要找,關鍵字表讓自己看得到有沒有漏同義詞,檢索式編號讓之後的紀錄可以指名道姓,版本紀錄讓每一次改動都被看見。

交付物二:每一次檢索都留一行
策略檔是「打算怎麼查」,還需要另一份檔案記「實際查了什麼」。

Day 4 的樹狀圖裡我只畫了一個 search-strategy.md,打算策略和紀錄放同一份,做了才發現策略會改版、紀錄只會一直往下加,兩種東西混在一起讀不了。所以拆成兩份,紀錄用 literature/search-log.md,格式固定:

日期 策略版本 檢索式編號 實際送出的檢索式 筆數 結果檔 備註
<日期> v1 S4 ("Nurses"[MeSH] OR nurse*[tiab]) AND ... <筆數> results/<日期>_S4.csv 首次檢索
然後在 Claude Code 裡這樣下指令:

讀 @literature/search-strategy.md,用 PubMed MCP 依序執行 S1 到 S4。
不要改動任何檢索式。
每一條執行完,把日期、版本、編號、實際送出的檢索式、筆數追加到
@literature/search-log.md。
S4 的結果(PMID、標題、年份、期刊)存成 literature/results/<今天日期>_S4.csv。
它做完之後,換我做事。

哪裡會出錯
筆數要跟網頁對一次。 我自己去 PubMed 網頁把 S4 貼進去跑一遍,筆數應該一樣。第一次跑就不一樣,差了(需作者補充:幾筆)。查了半天,是 MCP 伺服器帶的日期篩選和網頁介面的預設不同。這種差異沒有誰對誰錯,但一定要寫進備註欄,不然三個月後我會以為自己記錯。

AI 會「好心」改檢索式。 我第一次沒寫「不要改動任何檢索式」,它幫我在 S3 加了兩個同義詞,還說這樣比較完整。它可能是對的,但檢索式一旦跟策略檔不一致,紀錄就沒有意義了。所以指令裡那一句「不要改動」是必要的,而且我要求它把「實際送出的檢索式」原封不動寫進紀錄,我用眼睛比對過才算數。想改,回策略檔改,版本號加一。

結果檔要存下來。 筆數只是個數字,真正要回溯的是「那天找到的是哪幾篇」。PubMed 的內容會變,同一條檢索式半年後跑出來的筆數不同很正常。存了 PMID 清單,之後才有辦法說「這篇是後來才出現的,所以初稿沒有納入」。

我還不確定的地方
結果檔會越存越多。一個題目、四條檢索式、改三次版本,資料夾裡就是十幾個 CSV。我目前的做法是全部留著,只在紀錄檔裡標哪一份是「正式採用」的。這是不是最好的做法,我還沒想清楚,等 Day 12 週回顧時再看。

明天
Day 8:檢索回來的 PDF 讀不完怎麼辦,做一個丟一篇 PDF 就回一張固定格式摘要卡的 skill。


上一篇
Day 6|我踩的第一個坑:AI 捏造引用,以及我怎麼建驗證機制
系列文
研究生自救指南:30 天用 Claude Code 打造我的論文工具箱7
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言