本草(Huatuo-Llama-Med-Chinese):以中文醫學知識做指令微調的模型倉庫
Repo for BenCao [original name: HuaTuo (华驼)], Instruction-tuning Large Language Models with Chinese Medical Knowledge. 本草(原名:华驼)模型仓库,基于中文医学知识的大语言模型指令微调
秒懂
- 它是什麼?
- 這個倉庫把中文醫學知識圖譜與醫學文獻轉成問答對,再用 LoRA 對 LLaMA、Alpaca、Bloom、活字等基模型做指令微調,並釋出可下載的 LoRA 權重。它的價值在資料建構流程與知識微調的設計,不在於拿來當臨床工具。
- 適合誰用?
- 如果你要研究中文醫學領域的指令微調資料建構方法,或需要一組現成的 LoRA 權重做離線實驗,這個倉庫值得下載來看,重點放在 data/llama_data.json 的格式與 templates 下的提示模板。若你的目標是上線問診、或用它產生給病人看的建議,請不要採用:README 自己就說訓練集「仍存在錯誤和不完善的地方」,且訓練資料由 GPT-3.5 圍繞知識庫生成,錯誤會直接進入權重。
- 可以商用嗎?
- 可以。Apache-2.0 是寬鬆授權:你可以使用、修改並販售以它為基礎的軟體,只需保留著作權與授權聲明。
- 還在維護嗎?
- 有在維護。儲存庫最近一次提交在 74 天前。
- 用什麼語言寫的?
- 主要是 Python(依據 GitHub 的語言統計)。
以上回答依據專案的 GitHub 資料(最近同步於 2026年9月15日)與我們的分析,不構成法律意見。
開源專案深度解析
本草要解決的是基模型在中文醫學問答上的失準
通用基模型直接問醫學問題,答案往往空泛或錯得離譜。README 把這件事說得很直白:基模型在醫學問答場景下效果有限。專案的做法是先建構中文醫學問答資料,再對基模型做指令微調,讓模型學會回答人類提問的形式。目標讀者不是醫院資訊室,而是做中文醫療 NLP 研究、需要一個可微調起點的人。倉庫同時釋出 LLaMA、Alpaca-Chinese、Bloom、活字四種基模型對應的 LoRA 權重,並依資料來源分成「醫學知識庫」與「醫學文獻」兩條線。這種分法本身就是立場:知識庫適合結構化的疾病與藥物問答,文獻適合把論文結論轉成多輪對話。兩者混用會讓模板與資料格式對不上。
資料從知識圖譜到問答對,再從文獻結論到多輪對話
知識庫路線主要參考 cMeKG,圍繞疾病、藥物、檢查指標建構,欄位包含併發症、高危因素、組織學檢查、臨床症狀、藥物治療、輔助治療等。README 給的樣例是一筆 JSON:中心詞為偏頭痛,相關疾病、相關症狀、所屬科室、發病部位各自成列。建構方式是拿這些結構化欄位去餵 GPT-3.5 介面,用多種 Prompt 形式生成問答對。文獻路線不同:收集 2023 年關於肝癌的中文醫學文獻,圍繞論文的結論生成多輪問答,並在 data_literature/liver_cancer.json 提供其中 1k 條訓練樣例。這裡有個容易被忽略的限制,目前只開放針對肝癌單一疾病訓練的模型參數,README 說未來計畫針對肝膽胰相關 16 種疾病訓練。也就是說,文獻線現在的可複現範圍就是一個疾病,不是一套通用流程。
知識微調把檢索拆成三個階段,這是本專案與一般指令微調的差別
一般指令微調是從 question 直接學到 answer。本草額外提出知識微調,讓模型在推理時顯式使用知識庫,學會從 question 到 knowledge。README 描述的三階段是:第一階段依問題填充知識檢索的參數,包括中心詞和屬性;第二階段用填好的參數查詢對應知識;第三階段拿檢索到的知識生成回答。樣例資料放在 data/knowledge_tuning_data_sample.txt。這個設計的意義在於把檢索與生成綁進同一個訓練目標,而不是外掛一個 RAG 管線。代價是訓練資料必須帶有可查詢的知識結構,純文字語料餵不進去。若你的領域沒有現成知識圖譜,這條路線的第一步就卡住了。
跑起來需要對齊三件事:基模型、LoRA 權重、提示模板
環境建議 Python 3.9 以上,先執行 pip install -r requirements.txt。訓練策略是對所有基模型採半精度基模型加 LoRA 微調,README 說這是在計算資源與模型性能之間取捨。推論前要下載對應的 LoRA 權重,解壓後目錄裡應有 adapter_config.json 與 adapter_model.bin 兩個檔案。推論入口是 scripts 下的腳本:知識庫路線跑 bash ./scripts/infer.sh,文獻路線單輪跑 bash ./scripts/infer-literature-single.sh,多輪跑 bash ./scripts/infer-literature-multi.sh。infer.py 的關鍵參數是 --base_model、--lora_weights、--use_lora、--instruct_dir、--prompt_template,測試資料預設在 ./data/infer.json。模板不能混用:活字與 Bloom 用 templates/bloom_deploy.json;LLaMA 與 Alpaca 在知識庫路線用 templates/med_template.json,文獻路線用 templates/literature_template.json。要換自己的資料微調,就照 ./data/llama_data.json 的格式準備,再跑 bash ./scripts/finetune.sh。
訓練資料由 GPT-3.5 生成,錯誤會直接寫進權重
README 對資料品質的說明相當坦白:訓練集共八千餘條,雖然構建時融入了知識,但仍存在錯誤和不完善的地方,後續會用更好的策略迭代。文獻線同樣寫明訓練樣本品質仍然有限。這句話的份量比它看起來重。問答對是模型生成的,人工校驗的程度在文件裡沒有交代,而微調會把這些錯誤當成正確答案學進去。另一個現實約束是硬體:README 記載基於 LLaMA 的指令微調在一張 A100-SXM-80GB 上訓練 10 輪,耗時約 2 小時 17 分,batch_size=128 時顯存佔用約 40G,並推測 3090/4090 這類 24GB 顯存的卡可以支持,需依顯存調整 batch_size。這是推測而非實測數字,24GB 卡能不能跑順取決於你的 batch_size 與序列長度。還有一個容易踩的坑:知識庫與資料集的建構程式碼,README 說還在整理中,尚未發布。也就是說你可以用現成權重與訓練資料,但要自己重跑整條資料生成流程,目前沒有官方程式碼可依。
與 Med-ChatGLM 的差別在於微調方式與基模型路線
同一個實驗室另外訓練了醫療版 ChatGLM,即 ChatGLM-6B-Med,README 說它基於相同資料。差別不在資料,而在模型與微調路線:本草是對 LLaMA、Alpaca、Bloom、活字這些基模型掛 LoRA 適配器,權重檔案小、可與基模型分離存放,換基模型就得換一份 LoRA 與對應模板;ChatGLM-6B-Med 走的是 ChatGLM 自己的架構與對話格式。如果你的既有基礎設施已經圍繞 ChatGLM 建好,直接看 Med-ChatGLM 會比把本草的 LoRA 硬接到 ChatGLM 上省事。反過來說,如果你需要的是可插拔的適配器、想在同一套推論程式碼裡切換不同基模型做對比,本草的 LoRA 形式比較合適。兩者不是替代關係,是兩條基模型路線。
授權與維護成本:Apache-2.0 只覆蓋倉庫程式碼
倉庫的程式碼授權是 Apache-2.0,README 的授權徽章也標示同一件事。要注意的是這只涵蓋本草自己的程式碼,不涵蓋你下載的基模型權重。LLaMA 系列有 Meta 自己的授權條款,Bloom、Alpaca-Chinese、活字各有來源與條件,商用前必須逐一確認,這裡不構成法律意見。維護面上,倉庫最後推送時間是 2026 年 7 月,README 的 News 區塊最新條目是 2024 年 7 月論文被 ACM TKDD 錄用,其後沒有新的模型或資料發布紀錄。倉庫沒有檢索到任何 release。這意味著資料迭代與 16 種疾病模型的計畫,在文件層面還沒有兌現。把它當成一份穩定的研究基線可以,當成持續更新的產品則不成立。
編輯結論
如果你要研究中文醫學領域的指令微調資料建構方法,或需要一組現成的 LoRA 權重做離線實驗,這個倉庫值得下載來看,重點放在 data/llama_data.json 的格式與 templates 下的提示模板。若你的目標是上線問診、或用它產生給病人看的建議,請不要採用:README 自己就說訓練集「仍存在錯誤和不完善的地方」,且訓練資料由 GPT-3.5 圍繞知識庫生成,錯誤會直接進入權重。採用前先確認三件事:你的基模型是否與權重來源一致(LLaMA、Alpaca、Bloom、活字各有專屬模板)、lora_weights 與 base_model 路徑是否對得上、以及你的用途是否允許 Apache-2.0 之外的基模型授權限制。
社群筆記