緣起
我從醫學生時代就很愛做筆記,這些年累積了幾千份醫學筆記。但老實說,在資訊取得這麼容易、要學的東西又這麼多的現在,已經很難再把每一份筆記都按照自己的架構做到相同品質了。
另一方面,在現代資訊越來越多的時代,能信任的高品質來源反而變得珍貴,這時教科書就是很好的資訊來源。不過復健科專科考試指定參考書就有四十多本,同個概念可能散在好幾本書的不同章節裡。要真的把它們都念過,幾乎是不可能的事。
很幸運這年代有了 AI,這類大型語言模型 (LLM) 擅長處理的就是這樣的長上下文處理,可是一次丟給他幾百本教科書也不切實際。這時就搭配好的內容搜尋與資料庫管理,並且把我做筆記的流程講清楚、調教給 AI,能夠避免幻覺下,確保AI有根據、有架構地產出筆記,我只要用心把整理好的高密度資料吸收進腦袋就好。
於是這變成了一個大型的教科書 LLM Wiki 專案:把書本轉成 AI 容易讀取的格式、精準找到目標章節、按照我的架構整理呈現、從教科書把重要圖片抓進筆記,最後還能跟既有筆記整合。
今天把它開源了,這篇來講講中間過了哪幾關。
第一關:把書轉成 AI 適合讀的格式
直接把 PDF 丟給大模型有幾個坑:又慢又貴(上千頁的書逐頁讀,token 開銷很可觀);掃描頁和字型編碼壞掉的頁面,他會若無其事地跳過,你不會發現筆記裡少了東西;圖片則是直接消失。
我的解法是把重活全部留在本機:文字抽取用 PyMuPDF,每頁約 0.13 秒、0 token。掃描頁走本地 OCR 階梯(Surya → PaddleOCR-VL → 本地視覺模型),真的都失敗才輪到大模型親自看。比較特別的是兩個細節:
- 靜默失敗偵測:用字型風險、字元密度等規則,抓出「看起來有抽到字、其實是亂碼」的頁面
- 雙欄排序:教科書常是雙欄排版,直接抽會把左右欄句子交錯在一起,而且亂碼偵測抓不到這種錯。我們做了欄位偵測,確保閱讀順序正確
第二關:把書切成可搜尋的單位
書轉好了,AI 要怎麼找到內容?傳統的目錄(index)不夠用,因為一個主題常散在好幾章;自己上 tag 也不實際,維護不完也切不夠細。答案是語意搜尋(semantic embedding):把內容變成向量,用意思找而不是用關鍵字找。
這裡有個容易被忽略的設計:chunk(切塊)不是無腦固定字數。切太小會失去脈絡,切太大會稀釋語意。我們選擇照標題結構切塊,並保留每塊的上層章節脈絡,讓搜尋結果撈回來的每一塊都是有頭有尾的完整概念。
第三關:在幾十本書裡找到對的那本
跨書搜尋的底層,就是我之前開源的 vault-search 那套方法(那篇的介紹在這裡),本地 LanceDB 加 bge-m3 embeddings,資料不出自己電腦。
在這之上我們還加了一層:重點書目加權。考試指定用書、學會官方教科書,搜尋時分數會被調高,另外也有依出版年份的新舊加權。同一個主題,AI 會優先引用你最信任的來源。
第四關:建立寫筆記的 algorithm 與原則
工具都有了,真正決定筆記品質的是流程設計:
- 先盲寫:AI 先不看我的既有筆記,獨立從教科書查完完整資料寫草稿,最後才合併。這是為了避免被舊筆記的結構和內容干擾
- Template 是抓取的依據:每種主題有固定模板,這個設計很重要,AI 知道該去書裡找哪些東西,我每次閱讀也知道會有哪些段落,吸收速度快很多。repo 裡直接附上我每天在用的五套模板(中英雙語),可以照著改成自己的
- 為理解而設計的段落:像是開頭的 Summary、結尾的 management algorithm,這種段落的存在本身就是在協助理解,不只是資料的堆放
- 沒有引用就不算數:每條主張都標到書名+章節,AI 用自己知識補的內容一律標記為推論
第五關:從書裡抽出圖片
這是整套系統最難的部分,因為每本書的排版邏輯都不一樣。我們的做法是先有一套通用方法(幾何比對:圖說跟最近的圖像互相認領),配上決定論的 audit:留白檢查、文字滲入檢查,規則過了才算過,AI 說了不算,而且全程用省 token 的方式在本機執行。
遇到某本書抓錯時,就修正那本書的抽取邏輯,之後再抓同一本書就不會錯了。這套已經進化了很多版,但老實說還是實驗性質,目前不敢說對所有書都適用,非常歡迎大家一起改良~
Bonus:接上外部證據來源
在我自己的版本裡,筆記流程還能再往外接:像是接 OpenEvidence 做臨床實證補充,或是查詢健保給付規範的資料庫。
其中 OpenEvidence 的提問加 verify 這一組,我們把它獨立開源成另一個小專案 openevidence-tools。
這裡要特別致謝林醫師 htlin222。我原本是自己寫瀏覽器自動化去接 OE,被擋掉之後才看到他的作品,而後來讓這套查核真正成立的關鍵概念,幾乎都來自他近期的更新:OE 的 origin 欄位是混淆過的,解開後可以知道這段內容是從哪個資料庫撈出來的,因此能預測這條引用被錯置的機率;連 transitive citation(綜述引用了別人的數字、OE 卻把功勞算在綜述頭上)這個失效模式的命名、以及整套查核架構,也都是他的。我們加的是他沒做的那一半,也就是 OE 到底漏掉了什麼。細節寫在 repo 的致謝段與 NOTICE 裡。提醒一下:一定要做 verify,OE 是會引用出錯的。
其他的外部來源在流程文件裡設計成可插拔的擴充階段,有需要的人可以接上自己領域的資料來源。同樣的「不能靠印象唬爛」原則,我之前也寫進了讀論文的工具組,那篇在這裡。
用法:把 repo 丟給你的 AI
會來用這套系統的人,八成也帶著自己的 AI 助理,所以 repo 裡放了一份 AGENTS.md,是直接寫給 AI 看的部署說明。使用方式就是把 repo 丟給 Claude Code(或任何 coding agent),跟他說:
「讀 AGENTS.md,幫我把它裝起來。」
Repo 在這裡:github.com/drpwchen/textbook-to-note,MIT 授權。工具本身不含任何書的內容,請用自己合法取得的書(開放授權的 OpenStax 教科書就很適合拿來試)。
結語:學習從來沒有這麼容易過
這套系統做完之後,對一個專業主題取得快速、深入、教科書等級的理解,變成一件按下去就會發生的事。
我有時會想,以後的筆記會變成什麼樣子?也許會更傾向記錄「讀到某個東西時的靈光一閃」,而不是辛苦的整理歸納。雖然說實話,現在 AI 也已經能從知識地圖裡找出我以前沒想到的連結了🤣
學習變得前所未有的容易,早個幾年真的不敢想像這種便利。這套系統不限定於復健科,我想甚至不限定於醫學,希望它能幫助到所有需要學習的人!
如果有bug、改善建議,也歡迎提出開立issue / PR,讓這個系統越來越好!
