Repository: mims-harvard/TxAgent|Stars: 640|Language: Python|License: MIT 論文:Gao et al., TxAgent: An AI Agent for Therapeutic Reasoning Across a Universe of Tools, arXiv:2503.10970 (2025) 團隊:Harvard Medical School — Zitnik Lab (mims-harvard)
目錄
1. 專案概述 (Project Overview)
1.1 一句話說明
TxAgent 是一個由 Harvard Medical School Zitnik Lab 開發的 治療推理 AI 代理人 (Therapeutic Reasoning AI Agent),它的工作方式很像一位「配備了 211 種檢查工具的資深臨床藥師 (clinical pharmacist)」——當醫師丟出一個複雜的用藥問題時,這位藥師不會憑記憶直接回答,而是會一步一步查詢藥典、查交互作用資料庫、查病人的肝腎功能指標、查最新核准藥物清單,最後把查到的所有證據串起來,給出一個有依據、可追溯的治療建議。
1.2 用比喻理解這個問題
想像你是一位急診室醫師,眼前有一位 50 歲、有中度肝功能受損 (moderate hepatic impairment; 中度肝功能不全) 的病人,主訴劇烈急性疼痛,你考慮使用剛核准的新藥 Journavx。這個問題牽涉到:
- 這個藥物的核准適應症是什麼?(需要查 FDA 資料庫)
- 肝功能不全會如何影響這個藥的藥物動力學 (pharmacokinetics; PK)?(需要查藥物代謝資料)
- 這個藥跟病人正在服用的其他藥物有沒有交互作用 (drug-drug interaction; DDI)?(需要查交互作用資料庫)
- 劇量該如何個人化調整 (dose adjustment)?(需要綜合以上所有資訊做推理)
一般的大型語言模型 (large language model; LLM),就算是 GPT-4o 或 DeepSeek-R1 這種頂級模型,回答這類問題時常常只能依賴訓練資料裡「記住」的知識——這些知識可能過時、可能記錯、也可能對新藥(例如 2025 年才核准的藥物)完全沒有印象。這就像請一位「博聞強記但已經三年沒有更新知識」的藥師直接憑記憶回答——聽起來很專業,但可能是錯的,而且沒辦法查證。
TxAgent 解決的核心問題就是:讓 AI 在回答治療性問題時,不是「回憶」而是「查證」。它把 LLM 的角色從「知識庫」重新定位為「推理引擎 + 工具調度員」,讓 LLM 決定該查什麼工具、查完之後再推理下一步該查什麼,直到湊齊足夠證據才給出最終答案。
1.3 這個專案解決的具體問題
TxAgent 針對的是精準治療 (precision therapeutics; 精準醫療) 領域裡三個具體痛點:
- 藥物交互作用評估:一個病人同時吃 5 種藥時,任何兩兩配對都可能有交互作用,人工查閱效率低且容易遺漏。
- 禁忌症判斷 (contraindication detection):病人的共病症 (comorbidity; 共病) 加上正在服用的藥物,可能讓某個看似合理的處方變成禁忌。
- 個人化劇量與策略調整:年齡、基因型 (genetic factors)、疾病進展階段 (disease progression) 都會影響同一種藥的最佳使用方式,這不是查表就能解決,需要多因素綜合推理。
TxAgent 的答案是:建一個工具宇宙 (Universe of Tools)——一個叫做 ToolUniverse 的姊妹專案,裡面整合了 211 個可程式化呼叫的生醫工具,涵蓋 1939 年以來所有美國 FDA 核准藥物、Open Targets 的臨床驗證資料等等。TxAgent 本身則是一個經過微調的 8B 參數 LLM(基於 Llama-3.1-8B),它學會了「什麼時候該查哪個工具、查到結果之後怎麼推理下一步」。
1.4 在生物醫學 AI 領域的重要性與地位
TxAgent 屬於近兩年快速興起的科學 AI 代理人 (Scientific AI Agents) 這個新賽道,這個賽道的核心命題是:與其訓練一個更大的模型去「記住更多事實」,不如訓練一個更聰明的代理人 (agent),讓它學會「怎麼去查、怎麼去用工具」。這個理念上更接近人類專家的工作方式——沒有任何一位醫師會單靠記憶開藥,他們一定會查藥典、查病歷、查最新文獻。
在論文的評測中,TxAgent 建立了 5 個全新的基準測試集(DrugPC、BrandPC、GenericPC、TreatmentPC、DescriptionPC),共涵蓋 3,168 個藥物推理任務與 456 個個人化治療情境。關鍵數據:
- 在開放式藥物推理任務 (open-ended drug reasoning) 中達到 92.1% 準確率,比 GPT-4o 高出最多 25.8 個百分點。
- 在結構化多步推理 (structured multi-step reasoning) 任務上,表現優於參數量遠大於它(671B)的 DeepSeek-R1。
- 面對同一種藥的不同稱呼方式(商品名 brand name / 學名 generic name / 敘述性描述),TxAgent 的表現變異 (variance) 小於 0.01,遠比一般工具使用型 LLM(tool-use LLM)穩定超過 55%。
這說明 TxAgent 不只是「答對率高」,更重要的是「穩定、可重複」——這正是臨床場景最看重的特質:同一個問題換個問法,答案不能亂跳。
1.5 相關發表論文與引用
- 主論文:Shanghua Gao, Richard Zhu, Zhenglun Kong, Ayush Noori, Xiaorui Su, Curtis Ginder, Theodoros Tsiligkaridis, Marinka Zitnik. TxAgent: An AI Agent for Therapeutic Reasoning Across a Universe of Tools. arXiv:2503.10970, 2025.
- 姊妹專案論文/資源:ToolUniverse(211 個工具的資料底層,同樣由 mims-harvard 團隊維護,見 GitHub
mims-harvard/ToolUniverse)。 - 模型資源:HuggingFace 上開放兩個核心模型權重——
TxAgent-T1-Llama-3.1-8B(主推理模型)與ToolRAG-T1-GTE-Qwen2-1.5B(工具檢索用嵌入模型 embedding model)。 - 套件發佈:PyPI 上同時有
txagent與tooluniverse兩個獨立套件,方便使用者用pip install直接取用。
1.6 在 mims-harvard 實驗室生態系中的角色
mims-harvard(Marinka Zitnik 實驗室)是 Harvard Medical School 下專注於生醫網絡與 AI 交叉領域的研究團隊,長期發表 biomedical knowledge graph、drug repurposing(藥物再利用)、multimodal biomedical AI 相關的工作。TxAgent 在這個生態系裡扮演「推理層 (reasoning layer)」的角色,而 ToolUniverse 則扮演「知識與工具層 (knowledge & tool layer)」的角色。兩者是分離但緊密耦合的專案:
- TxAgent 負責「怎麼想」:接收問題 → 決定查什麼工具 → 解讀工具回傳結果 → 決定下一步 → 收斂到答案。
- ToolUniverse 負責「查什麼」:把 FDA 資料庫、Open Targets、藥物交互作用資料庫等異質資料源,統一包裝成標準化的工具呼叫介面 (function-calling interface)。
這種「推理引擎與工具庫分離」的設計理念,也呼應了業界對 agentic AI 的共識——工具會不斷增加、資料源會不斷更新,但推理引擎的核心邏輯應該相對穩定。這讓 mims-harvard 團隊可以獨立地擴充 ToolUniverse 的工具數量(未來可能超過 211 個),而不需要重新訓練 TxAgent 本身。
1.7 專案在生醫 AI 版圖中的位置
flowchart TB
subgraph SG_FOUNDATION["基礎模型層 Foundation Models"]
A1["通用 LLM
GPT-4o / DeepSeek-R1"]
A2["生醫專用 LLM
Med-PaLM / BioGPT"]
end
subgraph SG_AGENT["科學 AI 代理人層 Scientific AI Agents"]
B1["TxAgent
治療推理代理人"]
B2["其他領域代理人
如化學/材料領域 agent"]
end
subgraph SG_TOOL["工具與知識層 Tool & Knowledge Layer"]
C1["ToolUniverse
211 個生醫工具"]
C2["FDA 藥物資料庫"]
C3["Open Targets
臨床驗證資料"]
C4["藥物交互作用資料庫"]
end
subgraph SG_APP["應用場景層 Applications"]
D1["精準治療建議
Precision Therapeutics"]
D2["臨床決策支援
Clinical Decision Support"]
D3["藥物再利用研究
Drug Repurposing"]
end
A1 -.被超越.-> B1
A2 -.互補.-> B1
B1 -->|多步推理呼叫| C1
C1 --> C2
C1 --> C3
C1 --> C4
B1 --> D1
B1 --> D2
B2 -.協作可能.-> D3
style B1 fill:#DBEAFE,color:#0F172A
style C1 fill:#FDE68A,color:#0F172A
style D1 fill:#BBF7D0,color:#0F172A
從這張圖可以看出,TxAgent 的獨特定位在於它橫跨了「推理」與「工具調度」兩層:它不是單純的問答模型(那是基礎模型層的事),也不是單純的資料庫(那是工具層的事),而是把兩者串起來的「中介推理引擎」。這也是為什麼它能在需要多步證據鏈的任務上勝過參數量更大的通用模型——通用模型再強,若沒有即時查證機制,遇到 2025 年才核准的新藥(訓練資料裡根本沒有)就無從回答;TxAgent 則可以即時去查 ToolUniverse 裡的最新 FDA 資料庫。
1.8 小結:這個專案「不做」什麼
理解一個工具的邊界,跟理解它能做什麼一樣重要。TxAgent 不是:
- 不是一個訓練藥物分子性質預測模型的框架(那是 ADMET 預測領域的工具,如 DeepPurpose)。
- 不是一個電子病歷 (electronic health record; EHR) 系統,它不負責病人資料的儲存與管理。
- 不是通用聊天機器人,雖然它有
enable_chat選項,但核心設計目標是多步工具調用推理,不是開放式閒聊。 - 不會取代臨床醫師的最終判斷——論文與 README 都強調這是輔助推理工具,最終處方決策仍需醫師簽核。
1.9 產業採用現狀與社群生態
要客觀評估一個生醫 AI 工具的成熟度,除了看論文數字,也需要看它的「社群體溫」。以下幾個訊號值得參考:
- GitHub 熱度:640 顆星、103 次分岔 (fork),在生醫垂直領域的 AI agent 專案裡屬於中上水準的關注度——這種規模的生醫工具通常代表「學術圈普遍知道、開始有人嘗試落地,但還未到工業界大規模採用」的階段,跟通用型工具動輒上萬星的熱度不能直接比較,因為受眾基數本來就小得多。
- 雙套件發佈策略:TxAgent 與 ToolUniverse 分別以
txagent、tooluniverse兩個獨立套件發佈到 PyPI,這種「推理引擎與工具庫分離發佈」的作法,讓 ToolUniverse 有機會被其他非 TxAgent 的專案引用(例如其他實驗室可能只想用 211 個生醫工具的統一介面,自己接別的 LLM),這是一個健康的生態訊號——工具庫的價值不完全綁死在單一推理引擎上。 - 模型開放程度:兩個核心模型權重(
TxAgent-T1-Llama-3.1-8B、ToolRAG-T1-GTE-Qwen2-1.5B)都公開在 HuggingFace,且底層都是開放權重的基礎模型(Llama-3.1、Qwen2)微調而來,沒有鎖進封閉 API,這對想要本地化部署、資料不出院內/院外的機構是重要的前提條件。 - 維護活躍度:README 更新時間顯示專案持續有維運動作(截至本文撰寫時的
updatedAt為近期),但作為單一實驗室主導的學術專案,長期維護節奏通常會跟研究經費週期、論文發表周期綁在一起,不像商業公司產品有穩定的版本發佈節奏,這點在評估「能否長期依賴」時需要納入考量。
1.10 誰在用、為什麼用
從論文設計的評測情境與 README 展示的範例問題可以反推出目標使用者輪廓:
- 臨床藥學團隊:面對日益複雜的多重用藥 (polypharmacy) 審核工作量,需要一個能快速交叉比對交互作用、且能展示查證依據的輔助工具。
- 藥物安全研究人員:研究上市後藥物監測 (pharmacovigilance) 時,需要快速對特定藥物組合做初步風險篩檢,再決定是否要進一步深入調查。
- 醫學教育場景:TxAgent 展示的推理軌跡(一步步查證、一步步收斂)本身也是一個很好的教學案例,可以用來訓練住院醫師如何系統性地做治療決策推理,而不是憑印象開藥。
- AI 研究人員:作為 agentic AI 在高風險垂直領域(醫療)落地的一個具體案例研究對象,TxAgent 的多步推理、工具檢索、多代理人委派設計,對想要理解「LLM agent 如何在專業領域安全落地」的研究者本身就有參考價值,這也是本篇教學文件存在的部分意義——不只是教「怎麼用」,也教「這種架構為什麼這樣設計」。
1.11 相關工作比較概覽
科學 AI 代理人 (Scientific AI Agents) 這個賽道近年出現不少方向相近但設計取捨不同的專案,把 TxAgent 放進這個脈絡裡比較,有助於理解它的獨特之處:
| 專案/方向 | 核心設計理念 | 與 TxAgent 的關鍵差異 |
|---|---|---|
| 通用型 ReAct agent(如早期 LangChain agent 範式) | 用提示工程 (prompt engineering) 讓現成 LLM 學會「推理+行動」交替 | TxAgent 是專門微調過的模型(在治療推理任務上訓練),而非單靠提示工程驅動現成通用模型,理論上對特定領域行為更穩定 |
| 化學/材料領域的分子設計 agent | 專注於分子生成、性質預測、逆合成路徑規劃 | 領域完全不同(分子設計 vs. 治療決策),且通常更依賴生成式模型與圖神經網路 (graph neural network),較少涉及大量結構化資料庫查詢 |
| 通用生醫問答系統(如部分 Med-PaLM 系列工作) | 訓練/微調 LLM 直接輸出醫學問答答案,較少依賴外部工具調用 | TxAgent 刻意把「記憶」與「查證」分離,答案必須基於工具查詢結果,可追溯性更強,但也因此更依賴外部資料源的即時可用性 |
| 傳統 CDSS 規則引擎 | 用專家手寫規則 (rule-based) 判斷交互作用、禁忌症 | 規則引擎延遲低、行為完全可預測,但缺乏彈性,遇到規則沒覆蓋的新情境(如新藥、罕見組合)無法應變;TxAgent 用 LLM 推理彌補了這種靈活性缺口,代價是行為可預測性較低、需要额外的驗證機制(如 enable_checker) |
從這個比較可以看出 TxAgent 選擇的位置:它不是在「靈活但不可靠」與「可靠但僵化」這兩端選邊站,而是嘗試用「微調模型 + 強制工具查證 + 推理鏈驗證」的組合,同時爭取一定程度的靈活性與可追溯性。這也是為什麼論文特別強調「答案穩定性(不同稱呼方式下變異 < 0.01)」這個指標——對一個要跟傳統規則引擎競爭信任度的系統來說,穩定性比單純的準確率數字更能說服臨床使用者。
2. 核心架構 (Core Architecture)
2.1 整體系統架構
TxAgent 的核心是一個多步推理迴圈 (multi-step reasoning loop),可以理解成「思考 → 選工具 → 執行 → 觀察結果 → 再思考」不斷循環,直到模型認為已經湊足證據,主動呼叫一個叫做 Finish 的特殊工具來結束推理並給出最終答案。這個設計模式在 agent 文獻裡常被稱為 ReAct 風格推理 (Reason + Act),但 TxAgent 針對治療推理場景做了大量客製化。
flowchart TB
U["使用者輸入
病人情境 + 問題"] --> INIT["initialize_conversation
建立對話系統提示"]
INIT --> TOOLPICK["initialize_tools_prompt
挑選初始工具集"]
TOOLPICK --> RAG["tool_RAG
用嵌入模型檢索候選工具"]
RAG --> LLMCALL["TxAgent LLM 推理
Llama-3.1-8B 微調版"]
LLMCALL --> DECIDE{"模型決定
下一步動作"}
DECIDE -->|"呼叫一般工具"| EXEC["ToolUniverse
執行實際工具呼叫"]
DECIDE -->|"呼叫 Tool_RAG"| RAG
DECIDE -->|"呼叫 CallAgent"| SUBAGENT["子代理人
多代理人協作模式"]
DECIDE -->|"呼叫 Finish"| FINISH["產出最終答案"]
EXEC --> RESULT["tool_result_format
格式化工具回傳結果"]
RESULT --> CHECK{"enable_checker?"}
CHECK -->|是| VERIFY["ReasoningTraceChecker
檢查推理鏈是否合理"]
CHECK -->|否| APPEND["append 回對話歷史"]
VERIFY --> APPEND
APPEND --> ROUND{"達到 max_round
或已 Finish?"}
ROUND -->|否,繼續| LLMCALL
ROUND -->|是| FINISH
SUBAGENT --> APPEND
FINISH --> OUT["最終治療建議
附證據鏈"]
style LLMCALL fill:#DBEAFE,color:#0F172A
style EXEC fill:#FDE68A,color:#0F172A
style OUT fill:#BBF7D0,color:#0F172A
這張圖對應到程式碼裡 TxAgent 類別 (class) 的核心方法:initialize_conversation、initialize_tools_prompt、tool_RAG、run_multistep_agent(主推理迴圈,README 範例中呼叫的入口方法)。整個系統的關鍵決策點在於「模型自己決定要不要繼續查、查什麼」——這跟傳統寫死的 if-else 判斷流程完全不同,是典型的 agentic 設計。
2.2 兩階段工具檢索:為什麼需要 RAG 模型
211 個工具的完整描述文字,如果每次推理都塞進 prompt 給 LLM 看,會佔用大量 context window(上下文視窗),而且大部分工具跟當前問題無關,等於是讓模型在一堆無關資訊裡「大海撈針」。TxAgent 用了一個很聰明的兩層設計來解決這個問題:
- 檢索層 (Retrieval layer):一個獨立、小得多的嵌入模型
ToolRAG-T1-GTE-Qwen2-1.5B(只有 1.5B 參數),先把使用者問題轉成向量,再跟 211 個工具描述的向量做相似度比對,只挑出最相關的候選工具(程式碼裡step_rag_num參數控制每輪挑幾個,預設 10 個)。 - 推理層 (Reasoning layer):8B 參數的主模型只看到這 10 個候選工具的描述,決定要呼叫哪一個、帶什麼參數。
這個設計的比喻很像「圖書館找書」:你不會把整座圖書館的書名念給圖書館員聽讓他選,你會先讓一個熟悉分類系統的助理(小模型)幫你找出這個主題相關的 10 本書放在桌上,再讓真正懂內容的專家(大模型)從這 10 本裡挑最合適的來讀。這樣既省了大模型的 context 用量,也讓工具挑選更精準。
程式碼中有趣的細節是 tool_RAG 方法裡有個 extra_factor = 30:實際會先撈出 rag_num * 30 個候選,再過濾掉「特殊工具」(如 Finish、Tool_RAG 本身、CallAgent),最後才截取前 rag_num 個。這是為了避免特殊工具「污染」一般工具候選池的排序。
2.3 資料流向:一個完整推理迴圈的生命週期
以下用循序圖 (sequence diagram) 展示一個具體問題(README 範例:Journavx 劇量調整問題)從輸入到輸出的完整資料流:
sequenceDiagram
participant User as 使用者
participant Agent as TxAgent 主控制器
participant RAGModel as ToolRAG 嵌入模型
participant LLM as TxAgent-T1-Llama-3.1-8B
participant TU as ToolUniverse(211 工具)
User->>Agent: 輸入問題(病人情境 + 用藥疑問)
Agent->>Agent: initialize_conversation(建立 system prompt)
Agent->>RAGModel: tool_RAG(message, rag_num=10)
RAGModel-->>Agent: 回傳候選工具清單(含 Finish/Tool_RAG)
loop 多步推理迴圈(最多 max_round 輪,例:20 輪)
Agent->>LLM: 送出對話歷史 + 候選工具 prompt
LLM-->>Agent: 產出下一步動作(呼叫某工具 + 參數,或 Finish)
alt 動作是查詢一般工具(例:查藥物交互作用)
Agent->>TU: 執行工具呼叫(如 query_drug_interaction)
TU-->>Agent: 回傳結構化查詢結果
Agent->>Agent: tool_result_format 格式化並附加到對話歷史
else 動作是 Tool_RAG(模型主動要求換一批工具)
Agent->>RAGModel: 重新檢索工具
RAGModel-->>Agent: 新候選工具清單
else 動作是 Finish
Agent->>Agent: 組裝最終答案(含引用的工具查詢證據)
end
end
Agent-->>User: 回傳最終治療建議 + 推理軌跡
這張圖揭示了一個關鍵設計:每一次工具查詢都會被記錄進對話歷史,最終答案不是憑空生成的,而是模型「看著自己剛剛查到的資料」寫出來的。這正是治療推理場景最需要的「可追溯性 (traceability)」——醫師可以回頭檢查模型到底查了什麼資料庫、得到什麼結果,才做出這個建議,而不是一個黑盒子答案。
2.4 關鍵演算法與方法論細節
2.4.1 迭代式證據累積 (Iterative Evidence Accumulation)
以 README 提供的範例問題為例:「50 歲病人有中度肝功能不全,考慮用新藥 Journavx 治療急性劇痛,劇量該怎麼調?」實際推理過程可能是這樣展開的(示意,非逐字模型輸出):
- 第 1 輪:模型判斷需要先確認 Journavx 是什麼藥、核准適應症為何 → 呼叫 FDA 藥物查詢工具。
- 第 2 輪:拿到藥物基本資料後,模型判斷需要查肝功能不全對這個藥代謝路徑的影響 → 呼叫藥物代謝/PK 相關工具。
- 第 3 輪:模型判斷需要交叉比對「中度肝功能不全」在藥品標籤 (drug label) 上是否有明確劇量調整建議 → 再查一次更細的標籤資訊工具。
- 第 4 輪:證據足夠,模型呼叫
Finish,把前三輪查到的資訊整合成一段附有引用來源的劇量建議。
這種「一次只查一件事,根據結果決定下一步查什麼」的模式,避免了「一次把所有可能相關的問題都丟給資料庫、再期待 LLM 自己整理」的做法——後者常常導致資訊過載、模型抓錯重點。
2.4.2 摘要機制 (Summary Mechanism) 控制 context 增長
多步推理最大的技術挑戰是:隨著查詢輪數增加,對話歷史會越來越長,最終超過模型的 context window。TxAgent 提供了 enable_summary、summary_mode(可設為 'step',即每一步後摘要)、summary_skip_last_k(保留最後 k 輪不摘要,避免摘要掉了最新且最關鍵的資訊)等參數來緩解這個問題。這個機制本質上是一種「滑動視窗式壓縮」策略,類似人類做長篇會議記錄時,會把早期討論濃縮成摘要,只在最近幾輪保留逐字稿。
2.4.3 避免重複與強制收斂
程式碼中的 NoRepeatSentenceProcessor 與 avoid_repeat 參數,用來避免模型在推理過程中陷入「鬼打牆」——例如反覆查同一個工具、或反覆說同一句話卻沒有新進展。而 force_finish 參數則保證即使推理輪數用盡(達到 max_round),系統仍會強制產出一個答案,而不是直接卡住沒有輸出——這對正式部署場景(例如接在 Gradio demo 或 API 後面)是必要的容錯設計。
2.4.4 推理軌跡檢查器 (Reasoning Trace Checker)
enable_checker=True 時會啟用 ReasoningTraceChecker,這是一個額外的驗證步驟,用來檢查模型的推理鏈是否有邏輯上的跳躍或矛盾。可以理解成一個「品管員」,在每一步查詢結果被正式採用之前,先檢查一下「這個結論真的是從剛才查到的資料合理推出的嗎?」。這對降低幻覺 (hallucination) 風險特別重要,因為治療推理場景的錯誤成本極高。
2.5 多代理人協作模式 (Multi-Agent Collaboration)
TxAgent 支援一種進階模式:call_agent=True。當這個選項開啟,且模型判斷單一 agent 處理不了目前的子問題時,可以呼叫 CallAgent 這個特殊工具,把子問題委派給另一個 TxAgent 實例(子代理人)去處理,等子代理人回覆後再整合進主推理鏈。程式碼裡有 call_agent_level 這個計數器,限制最多委派兩層(call_agent_level >= 2 就會強制關閉繼續委派的能力),避免代理人之間無限遞迴委派、耗盡運算資源。
這種設計類似公司裡的「分工外包」:主治醫師(主 agent)遇到超出自己專科範圍的問題(例如需要藥劑師的專業意見),會諮詢藥劑師(子 agent),但藥劑師不會再往下無限轉診第三個人——委派層級要有上限,否則責任鏈條會失控。
2.6 內部元件互動總覽
| 元件 | 檔案位置 | 職責 |
|---|---|---|
TxAgent 類別 | src/txagent/txagent.py | 主控制器,管理整個推理迴圈、對話狀態、工具挑選邏輯 |
ToolRAGModel | src/txagent/toolrag.py | 工具檢索用嵌入模型的封裝,負責 load_tool_desc_embedding、rag_infer |
NoRepeatSentenceProcessor / ReasoningTraceChecker / tool_result_format | src/txagent/utils.py | 輔助工具:去重、推理鏈驗證、工具結果格式化 |
ToolUniverse(外部套件) | tooluniverse pip 套件 | 211 個生醫工具的實際執行層,load_tools、get_tool_by_name、prepare_tool_prompts 等方法 |
vLLM | 第三方推理引擎 | TxAgent 底層用 vLLM 做高效能 LLM 推理(LLM(model=self.model_name)) |
值得注意的實作細節:TxAgent 選用 vLLM 作為推理後端而非原生 HuggingFace Transformers,這代表官方預設是針對高吞吐量、低延遲的伺服器化部署設計(vLLM 的 PagedAttention 機制能大幅提升多請求併發時的記憶體使用效率),也解釋了為什麼 README 建議至少要有 H100 80GB 這種等級的 GPU——vLLM 在載入時會預先配置大塊 KV cache 記憶體。
2.7 容錯與邊界條件處理
一個推理迴圈系統若沒有妥善的容錯設計,很容易在正式環境裡「卡死」或「靜默產出錯誤答案」。TxAgent 在架構上針對幾種常見邊界情況做了明確處理:
- 工具呼叫失敗:外部生醫資料庫(FDA、Open Targets 等)偶爾會逾時或回傳非預期格式,
tool_result_format負責把工具原始回傳(可能是 JSON、可能是純文字、也可能是錯誤訊息)統一轉成模型能理解的結構化文字,避免格式不一致導致下一輪推理徹底誤讀。 - 模型拒絕產出動作(空回應):
force_finish=True是這種情況的最後防線——即使模型在某一輪沒有給出可解析的下一步動作,系統仍會在達到max_round時強制收斂並產出目前累積證據下最合理的答案,而不是讓整個請求無限懸置。 - 重複行為偵測:
avoid_repeat搭配NoRepeatSentenceProcessor,用來偵測模型是否在文字生成層面陷入重複循環(例如反覆生成同一句話),這類問題在長文本生成任務中相對常見,尤其是溫度設定較低、且模型對某個子問題不確定時容易發生。 - 對話歷史重建的邊界情況:
initialize_conversation方法在處理history參數時,明確處理了「歷史為空」「最後一筆是使用者訊息」「最後一筆是助手訊息」等不同組合,確保多輪對話場景下 system prompt 與角色順序不會因為邊界情況(例如某一輪只有使用者發言、助手還沒回應)而錯亂——這種細節在許多倉促上線的 agent 專案裡反而是最容易被忽略、卻最容易導致對話狀態損壞的地方。
這些容錯設計反映出一個務實的工程態度:在高風險領域(醫療)部署 agent 系統,「不要卡死、不要靜默出錯」比「每次都給出完美答案」更優先——一個明確標示「證據不足、建議人工複核」的答案,遠比一個看起來自信但邏輯斷裂的答案安全。
2.8 運算資源與延遲特性估算
在真正投入部署前,先對「一次推理大概要花多少時間、佔用多少資源」有粗略估算,能大幅降低導入風險。以下是根據架構設計反推的資源特性(實際數字會因硬體、問題複雜度而異,僅供規劃參考):
| 階段 | 主要耗時來源 | 相對成本 |
|---|---|---|
模型載入(init_model) | vLLM 載入 8B 模型權重 + 建立 KV cache 記憶體池 | 一次性成本,通常數十秒到數分鐘,建議常駐服務避免每次請求重新載入 |
工具描述嵌入建立(load_tool_desc_embedding) | 對 211 個工具描述跑一次嵌入模型推理 | 一次性成本,模型啟動時執行,通常在秒級到十秒級 |
單輪工具檢索(tool_RAG) | ToolRAG 嵌入模型對使用者問題做推理 + 向量相似度比對 | 每輪成本低,1.5B 模型推理通常在百毫秒級 |
| 單輪主模型推理 | 8B 模型根據對話歷史生成下一步動作 | 每輪成本中等,隨對話歷史長度增長而變慢 |
單輪工具執行(ToolUniverse 呼叫) | 視工具而定,外部 API 呼叫(如查 FDA 資料庫)可能有網路延遲 | 每輪成本不固定,是最大的不確定性來源 |
| 多輪加總 | 上述單輪成本 × 實際輪數(依 max_round 上限與問題複雜度) | 總耗時通常是多輪工具執行延遲的加總,而非主模型推理本身主導 |
從這個拆解可以得到一個實務上重要的結論:多步推理系統的總延遲瓶頸,往往不在 LLM 本身的生成速度,而在外部工具查詢的網路延遲。這也解釋了為什麼第 5.6 節建議加一層查詢結果快取——快取命中率越高,越能繞開這個延遲瓶頸,而不需要透過升級 GPU 硬體來解決問題(升級硬體只會加速 LLM 生成,對外部 API 延遲沒有幫助)。
3. 安裝與設定 (Installation & Setup)
3.1 前置需求
根據官方 README,TxAgent 的軟硬體需求相對明確但門檻不低:
| 項目 | 需求 | 說明 |
|---|---|---|
| GPU | H100,記憶體 > 80GB(建議) | 因為底層用 vLLM 載入 8B 模型 + KV cache,記憶體需求偏高 |
| 網路連線 | 必須 | ToolUniverse 需要即時連線查詢外部生醫資料庫(如 FDA、Open Targets) |
| Python | 建議 3.10+(pyproject.toml 未鎖死版本,但 vLLM/相依套件通常要求較新 Python) | — |
| 作業系統 | Linux(vLLM 生態圈的常見前提) | Windows 原生支援有限,建議用 WSL2 或容器 |
⚠️ 這裡有個現實落差需要先說清楚:H100 80GB 是資料中心級 GPU,個人或小型實驗室很可能無法直接取得。如果只是想理解或小規模測試工作流,可以考慮先只跑 ToolUniverse(純工具查詢,不需要 GPU),或用較小的量化版本模型搭配較小 GPU(社群常見做法,但官方未正式驗證)。
3.2 安裝 ToolUniverse(前置依賴)
TxAgent 依賴 ToolUniverse 提供的工具執行層,必須先安裝:
1# 方法一:從原始碼安裝(適合想客製化工具的使用者)
2git clone https://github.com/mims-harvard/ToolUniverse.git
3cd ToolUniverse
4python -m pip install . --no-cache-dir
5
6# 方法二:直接從 PyPI 安裝(推薦一般使用者)
7pip install tooluniverse
3.3 安裝 TxAgent
1# 方法一:從原始碼安裝
2git clone https://github.com/mims-harvard/TxAgent.git
3cd TxAgent
4python -m pip install . --no-cache-dir
5
6# 方法二:直接從 PyPI 安裝
7pip install txagent
依本專案 CLAUDE.md 的 Python 工具鏈鐵律,正式環境建議改用
uv管理虛擬環境而非裸pip:
1# 用 uv 建立隔離環境(推薦,符合本專案工具鏈規範)
2uv venv txagent-env --python 3.10
3source txagent-env/bin/activate
4uv pip install tooluniverse txagent
3.4 模型權重下載
TxAgent 本身的推理程式碼不含模型權重,需要從 HuggingFace 下載兩個模型:
1# 需先安裝 huggingface_hub(多數環境已含在相依套件中)
2uv pip install huggingface_hub
3
4# 下載主推理模型(8B,體積較大,建議確認硬碟空間充足)
5huggingface-cli download mims-harvard/TxAgent-T1-Llama-3.1-8B --local-dir ./models/txagent-t1
6
7# 下載工具檢索嵌入模型(1.5B,體積較小)
8huggingface-cli download mims-harvard/ToolRAG-T1-GTE-Qwen2-1.5B --local-dir ./models/toolrag-t1
首次執行 run_example.py 時,如果沒有預先下載,vllm.LLM(model=self.model_name) 也會自動觸發從 HuggingFace Hub 下載——但在正式環境建議先手動下載,避免第一次執行時網路不穩定導致失敗,也方便離線部署時掌握確切檔案位置。
3.5 環境變數設定
1# 若使用私有或有存取限制的 HuggingFace 模型,需先設定 token
2export HF_TOKEN="your_huggingface_token_here"
3
4# README 範例中提到的環境變數,避免部分 Intel MKL 執行緒衝突警告
5export MKL_THREADING_LAYER=GNU
6
7# 若要用特定 GPU(多卡環境)
8export CUDA_VISIBLE_DEVICES=0
建議把這些寫進 .env(依全域規範不把密鑰直接寫進程式碼或文件):
1# .env.example
2HF_TOKEN=
3MKL_THREADING_LAYER=GNU
4CUDA_VISIBLE_DEVICES=0
3.6 驗證安裝
1# 驗證 ToolUniverse 是否能正常載入工具清單
2python -c "from tooluniverse import ToolUniverse; tu = ToolUniverse(); tu.load_tools(); print(f'載入工具數量: {len(tu.all_tool_dict)}')"
3
4# 驗證 TxAgent 套件是否可正常 import
5python -c "from txagent import TxAgent; print('TxAgent import 成功')"
6
7# 驗證 vLLM 與 GPU 是否可用
8python -c "import torch; print(f'CUDA 可用: {torch.cuda.is_available()}, GPU 數量: {torch.cuda.device_count()}')"
若第一個指令能印出「載入工具數量」且大於 0,代表 ToolUniverse 的資料源連線正常(它需要連網抓取部分即時資料);若第三個指令印出 CUDA 可用: False,代表目前環境沒有可用的 GPU,後續跑 run_example.py 會直接失敗或極度緩慢(CPU 模式跑 8B 模型的 vLLM 推理不現實)。
3.7 常見安裝問題排查
| 問題 | 可能原因 | 解法 |
|---|---|---|
| vLLM 安裝失敗 | CUDA 版本與 vLLM 要求不匹配 | 查 vLLM 官方文件對應的 CUDA 版本,或用官方提供的 Docker image |
ToolUniverse 連線逾時 | 外部 API(FDA/Open Targets)暫時無回應或防火牆阻擋 | 確認出網規則,或稍後重試;部分工具有內建 retry 機制 |
| GPU 記憶體不足 (OOM) | H100 以下的 GPU 記憶體不足以載入模型 + KV cache | 降低 max_token 參數,或改用量化版本模型(社群做法) |
| Gradio demo 啟動後無法連線 | 預設綁定在 localhost,遠端伺服器需另開 port | 檢查 run_txagent_app.py 的 server_name/server_port 設定,並確認防火牆規則 |
3.8 容器化部署選項
依全域規範「系統服務預設 Docker/Podman,避免原生安裝」的原則,正式環境建議把 TxAgent 包進容器,確保環境可重建、可版本化:
1# Dockerfile 範例:TxAgent 推理服務容器
2FROM nvidia/cuda:12.1.0-runtime-ubuntu22.04
3
4# 安裝 Python 與基礎工具
5RUN apt-get update && apt-get install -y python3.10 python3-pip git \
6 && rm -rf /var/lib/apt/lists/*
7
8WORKDIR /app
9
10# 分層安裝,讓套件層可以被 Docker layer cache 重複利用
11RUN pip install --no-cache-dir tooluniverse txagent vllm gradio
12
13# 複製推理服務腳本(自訂的批次審核或 API 包裝層)
14COPY run_txagent_service.py /app/
15
16ENV MKL_THREADING_LAYER=GNU
17ENV HF_HOME=/app/models
18
19EXPOSE 7860
20CMD ["python3", "run_txagent_service.py"]
1# 建置與啟動(需搭配 nvidia-container-toolkit 才能讓容器存取 GPU)
2docker build -t txagent-service:latest .
3docker run --gpus all -p 7860:7860 \
4 -v "$(pwd)/models:/app/models" \
5 -e HF_TOKEN="${HF_TOKEN}" \
6 txagent-service:latest
容器化的價值不只是「方便部署」,更重要的是把 GPU 驅動版本、CUDA 版本、Python 相依套件版本這些容易造成「在我機器上可以跑」問題的變數全部鎖進 image 裡,讓不同團隊成員、不同伺服器之間的部署結果可預期、可重現,這也符合本專案 CLAUDE.md 對「設定可重建、可版本化、可文件化」的要求。
4. 基本使用 (Basic Usage)
4.1 快速入門:跑官方範例
最快的驗證方式是直接跑官方提供的 run_example.py:
1python run_example.py
這個腳本內部做的事情,展開來看是這樣的(節錄自官方原始碼):
1from txagent import TxAgent
2import os
3os.environ["MKL_THREADING_LAYER"] = "GNU"
4
5model_name = 'mims-harvard/TxAgent-T1-Llama-3.1-8B'
6rag_model_name = 'mims-harvard/ToolRAG-T1-GTE-Qwen2-1.5B'
7multiagent = False
8max_round = 20
9init_rag_num = 0
10step_rag_num = 10
11
12# 步驟一:建立 TxAgent 實例,設定基本行為參數
13agent = TxAgent(model_name, rag_model_name, enable_summary=False)
14
15# 步驟二:載入模型、載入工具宇宙、載入工具描述嵌入向量(首次會較慢)
16agent.init_model()
17
18# 步驟三:提出一個具體的臨床問題
19question = (
20 "Given a 50-year-old patient experiencing severe acute pain and "
21 "considering the use of the newly approved medication, Journavx, "
22 "how should the dosage be adjusted considering the presence of "
23 "moderate hepatic impairment?"
24)
25
26# 步驟四:執行多步推理,取得答案
27response = agent.run_multistep_agent(
28 question,
29 temperature=0.3,
30 max_new_tokens=1024,
31 max_token=90240,
32 call_agent=multiagent,
33 max_round=max_round)
34
35print(response)
這個範例展示了 TxAgent 最基本的使用模式:建立 → 初始化 → 提問 → 拿回答案,沒有任何多輪對話管理或多代理人協作,是最簡單的「單次治療推理查詢」場景。
4.2 從零開始的完整工作流
以下是一個更完整、逐步解釋的工作流範例,模擬一個真實的用藥審核情境:
1"""
2範例情境:藥劑師想確認某位病人新處方的交互作用風險
3病人背景:65 歲,慢性腎病(CKD stage 3),目前服用 Warfarin(抗凝血劑)
4新處方:考慮加開一種 NSAID 止痛藥
5"""
6from txagent import TxAgent
7import os
8
9os.environ["MKL_THREADING_LAYER"] = "GNU"
10
11# 步驟一:初始化,開啟摘要機制以應付較長的推理鏈
12agent = TxAgent(
13 model_name='mims-harvard/TxAgent-T1-Llama-3.1-8B',
14 rag_model_name='mims-harvard/ToolRAG-T1-GTE-Qwen2-1.5B',
15 enable_summary=True, # 長推理鏈時避免 context 爆掉
16 summary_mode='step',
17 step_rag_num=10, # 每輪從候選池挑 10 個工具
18 enable_checker=True, # 開啟推理鏈驗證,降低幻覺風險
19 force_finish=True, # 保證輪數用盡時仍會強制產出答案
20)
21agent.init_model()
22
23# 步驟二:組裝結構化的臨床問題(把病人背景與問題明確寫入 prompt)
24question = (
25 "A 65-year-old patient with chronic kidney disease (CKD stage 3) is "
26 "currently on Warfarin. The physician is considering adding an NSAID "
27 "for pain management. What are the key drug interaction risks and "
28 "contraindications to consider, and what monitoring would be "
29 "recommended if the NSAID is prescribed?"
30)
31
32# 步驟三:執行推理,這裡把 max_round 調低一點,因為問題範圍相對聚焦
33response = agent.run_multistep_agent(
34 question,
35 temperature=0.2, # 臨床推理場景建議用較低溫度,減少隨機性
36 max_new_tokens=1024,
37 max_token=90240,
38 call_agent=False,
39 max_round=10,
40)
41
42print(response)
輸出格式範例(示意,實際輸出會依模型當下推理結果變化):
1基於以下查證結果:
21. [FDA 藥物標籤查詢] Warfarin 與 NSAID 併用會顯著增加消化道出血風險
32. [藥物交互作用資料庫] NSAID 會降低腎臟排除功能,CKD stage 3 病人腎功能
4 本已受損,此交互作用風險被放大
53. [臨床指引比對] 多數指引建議 CKD 病人避免 NSAID,優先考慮乙醯胺酚
6 (acetaminophen) 作為替代止痛選項
7
8建議:
9- 若可行,優先改用非 NSAID 類止痛藥(如乙醯胺酚)
10- 若臨床上必須使用 NSAID,需密切監測 INR(凝血功能)與腎功能指標
11- 建議諮詢腎臟科意見後再決定
4.3 啟動 Gradio 互動式介面
對於不想寫程式碼、想要類似聊天介面的使用場景,官方提供 Gradio demo:
1python run_txagent_app.py
啟動後會產生一個本機網址(預設通常是 http://127.0.0.1:7860),瀏覽器打開即可用類似 ChatGPT 的介面輸入問題,並即時觀察模型的推理過程(工具呼叫、查詢結果會逐步顯示在介面上,這對理解「模型到底查了什麼」非常有幫助,也呼應了第 2 章提到的可追溯性設計)。
4.4 檢視工具宇宙裡有哪些工具
在實際使用前,了解 ToolUniverse 裡到底有哪些工具是很有幫助的:
1from tooluniverse import ToolUniverse
2
3tu = ToolUniverse()
4tu.load_tools()
5
6# 列出所有工具分類
7print(tu.tool_category_dicts.keys())
8
9# 列出某個特定工具的完整描述(例如查藥物交互作用相關的工具)
10for tool_name, tool_info in tu.all_tool_dict.items():
11 if "interaction" in tool_name.lower():
12 print(f"{tool_name}: {tool_info.get('description', '')[:100]}")
這個小範例對「還在評估要不要導入 TxAgent」的團隊特別有用——可以先不啟動整套 8B 模型,只用 ToolUniverse 快速盤點目前 211 個工具是否覆蓋自己團隊需要的資料源(例如某些罕見病資料庫可能不在預設清單內,需要額外擴充,詳見第 5 章)。
4.5 三個實際生物醫學場景範例小結
| 場景 | 輸入問題重點 | TxAgent 預期查詢路徑 |
|---|---|---|
| 新藥劇量調整 | 病人器官功能受損 + 新藥 | 查藥物核准資料 → 查代謝路徑/PK → 查標籤劇量調整建議 |
| 多重用藥交互作用審核 | 病人現有藥物清單 + 新處方 | 查每對藥物的交互作用資料庫 → 綜合風險分級 |
| 禁忌症篩檢 | 病人共病症清單 + 考慮中的治療方案 | 查治療方案的禁忌症清單 → 比對病人共病症 → 標記衝突項 |
4.6 使用場景決策流程圖
不同類型的問題會走上不同的推理路徑、觸發不同數量的工具查詢輪數。下圖把第 4.5 節的三個場景,以及第 5 章即將展開的進階場景(自訂工具、多代理人協作、批次審核)統一畫成一張決策流程圖,幫助使用者在動手寫程式前,先判斷自己的問題屬於哪一類、大致會走幾輪查詢:
flowchart TD
START["使用者提出治療推理問題"] --> Q1{"問題只涉及
單一藥物基本資訊?"}
Q1 -->|是| SIMPLE["直接查 FDA 資料庫
1輪內可 Finish"]
Q1 -->|否| Q2{"涉及多種藥物
交互作用?"}
Q2 -->|是| INTER["交互作用審核路徑
逐對查詢 + 風險分級
約 3-6 輪"]
Q2 -->|否| Q3{"涉及器官功能受損
或個人化劇量?"}
Q3 -->|是| DOSE["劇量調整路徑
查核准資料 → 查代謝 → 查標籤
約 3-4 輪"]
Q3 -->|否| Q4{"問題跨越多個
專科領域?"}
Q4 -->|是| MULTI["啟用 call_agent=True
委派子代理人協作
約 6-12 輪"]
Q4 -->|否| Q5{"是否為固定格式
大量重複問題?"}
Q5 -->|是| BATCH["批次審核 pipeline
見 5.4 節範例"]
Q5 -->|否| GENERAL["一般多步推理
依 tool_RAG 動態決定"]
SIMPLE --> OUT["最終答案 + 證據鏈"]
INTER --> OUT
DOSE --> OUT
MULTI --> OUT
BATCH --> OUT
GENERAL --> OUT
style SIMPLE fill:#BBF7D0,color:#0F172A
style INTER fill:#FDE68A,color:#0F172A
style DOSE fill:#FDE68A,color:#0F172A
style MULTI fill:#FCA5A5,color:#0F172A
style BATCH fill:#DBEAFE,color:#0F172A
style OUT fill:#E0E7FF,color:#0F172A
這張圖的實務價值在於幫助使用者事前估算資源消耗:越靠右下角的路徑(多代理人協作、批次審核)代表推理輪數越多、GPU 運算時間越長,若團隊 GPU 資源有限,應優先評估是否能把問題拆解成更靠左上角的簡單路徑,或考慮先用第 4.4 節的工具盤點方式確認資料源存在後,再決定要不要真正跑完整推理。
5. 進階功能與應用場景 (Advanced Features & Use Cases)
5.1 進階配置選項總覽
TxAgent 的 __init__ 方法暴露了相當多可調參數,適合依不同部署場景微調:
| 參數 | 預設值 | 用途 |
|---|---|---|
enable_finish | True | 是否允許模型主動呼叫 Finish 工具結束推理 |
enable_rag | True | 是否啟用工具檢索(RAG)機制 |
enable_summary | False | 是否對過長對話歷史做摘要壓縮 |
init_rag_num | 0 | 初始化時預先挑選幾個工具(0 代表不預挑,交給模型自己決定) |
step_rag_num | 10 | 每一輪推理挑選幾個候選工具 |
summary_mode | 'step' | 摘要觸發時機(逐步摘要) |
summary_skip_last_k | 0 | 保留最後幾輪不做摘要壓縮 |
force_finish | True | 輪數用盡時是否強制產出答案 |
avoid_repeat | True | 是否啟用去重機制避免推理鬼打牆 |
enable_checker | False | 是否啟用推理鏈驗證器 |
enable_chat | False | 是否額外支援開放式閒聊模式 |
additional_default_tools | None | 除了 Finish/Tool_RAG 之外,每次推理都預先掛載的額外工具 |
5.2 進階應用案例一:擴充自訂工具(新增私有資料源)
假設某個研究團隊有一份院內獨有的藥物基因體學 (pharmacogenomics) 資料庫,想讓 TxAgent 也能查詢,可以透過 ToolUniverse 的工具檔案機制擴充(data/new_tool.json 在原始 repo 中就是這種擴充範例的位置):
1from txagent import TxAgent
2
3# tool_files_dict 指向自訂工具定義檔,讓 ToolUniverse 載入額外工具
4# 除了預設的 211 個工具外,一併載入院內自訂的藥物基因體學查詢工具
5custom_tool_files = {
6 "pharmacogenomics_db": "/path/to/custom_pgx_tools.json"
7}
8
9agent = TxAgent(
10 model_name='mims-harvard/TxAgent-T1-Llama-3.1-8B',
11 rag_model_name='mims-harvard/ToolRAG-T1-GTE-Qwen2-1.5B',
12 tool_files_dict=custom_tool_files,
13 additional_default_tools=["query_pgx_variant"], # 每次推理都預掛這個工具
14)
15agent.init_model()
這個擴充機制的價值在於:院內的機密或客製化資料源,不需要外洩給任何雲端服務,也不需要重新訓練模型,只要照 ToolUniverse 定義的工具格式包裝好查詢函式,就能無縫掛進推理迴圈。這對藥廠、醫院這類對資料主權高度敏感的機構特別重要。
5.3 進階應用案例二:多代理人協作處理跨領域問題
1# 情境:問題同時涉及腫瘤學治療方案 + 老年醫學共病管理,
2# 單一 agent 可能不易同時精通兩個子領域的深度知識,
3# 啟用 call_agent 讓主 agent 可以委派子問題
4
5agent = TxAgent(
6 model_name='mims-harvard/TxAgent-T1-Llama-3.1-8B',
7 rag_model_name='mims-harvard/ToolRAG-T1-GTE-Qwen2-1.5B',
8)
9agent.init_model()
10
11question = (
12 "An 82-year-old patient with metastatic breast cancer, moderate "
13 "dementia, and stage 3 chronic kidney disease is being considered for "
14 "a new CDK4/6 inhibitor regimen. Evaluate the oncologic appropriateness "
15 "and the geriatric polypharmacy risks together."
16)
17
18response = agent.run_multistep_agent(
19 question,
20 temperature=0.3,
21 max_new_tokens=1024,
22 max_token=90240,
23 call_agent=True, # 開啟多代理人委派能力
24 max_round=20,
25)
26print(response)
5.4 進階應用案例三:與下游系統整合(批次審核 pipeline)
實務上更常見的用法不是單次互動問答,而是把 TxAgent 包裝成批次審核服務,例如每天自動審核當日新處方單:
1"""
2批次處方審核 pipeline 範例:
3每日將新處方清單(去識別化後)逐筆送入 TxAgent,
4產出風險標記報告供藥劑師複核(人機協作,非全自動放行)
5"""
6import json
7import csv
8from txagent import TxAgent
9
10def load_prescriptions(csv_path: str) -> list[dict]:
11 with open(csv_path, newline="", encoding="utf-8") as f:
12 return list(csv.DictReader(f))
13
14
15def build_question(record: dict) -> str:
16 return (
17 f"Patient profile: age {record['age']}, "
18 f"comorbidities: {record['comorbidities']}, "
19 f"current medications: {record['current_meds']}. "
20 f"New prescription under review: {record['new_drug']}. "
21 "Identify contraindications, interaction risks, and any dosage "
22 "adjustments needed."
23 )
24
25
26def run_batch_review(csv_path: str, output_path: str) -> None:
27 agent = TxAgent(
28 model_name="mims-harvard/TxAgent-T1-Llama-3.1-8B",
29 rag_model_name="mims-harvard/ToolRAG-T1-GTE-Qwen2-1.5B",
30 enable_checker=True,
31 force_finish=True,
32 )
33 agent.init_model()
34
35 records = load_prescriptions(csv_path)
36 results = []
37 for record in records:
38 question = build_question(record)
39 response = agent.run_multistep_agent(
40 question,
41 temperature=0.2,
42 max_new_tokens=800,
43 max_token=90240,
44 call_agent=False,
45 max_round=8,
46 )
47 results.append({"patient_id": record["patient_id"], "review": response})
48
49 with open(output_path, "w", encoding="utf-8") as f:
50 json.dump(results, f, ensure_ascii=False, indent=2)
51
52
53if __name__ == "__main__":
54 run_batch_review("daily_prescriptions.csv", "review_report.json")
這個範例展示的關鍵設計原則是:批次自動化只做「標記風險、產出報告」,不做「自動放行或拒絕」——最終決定權仍在藥劑師手上,這是把 AI 代理人安全地導入臨床工作流的常見做法(人在迴圈中,human-in-the-loop)。
5.5 與其他工具/函式庫的整合可能性
- 與電子病歷系統整合:可以寫一個中介層,從 EHR 系統(如 FHIR 標準介面)拉取病人結構化資料,自動組裝成
build_question這類函式所需的輸入,避免人工謄寫病人資料時的錯漏。 - 與向量資料庫整合:若院內有大量非結構化病歷文字(如病程記錄),可以先用向量資料庫(如 FAISS、Milvus)做初步檢索,把最相關的病歷段落一併餵給 TxAgent 的問題 prompt,補強 ToolUniverse 沒有覆蓋的院內個案資料。
- 與監控/日誌系統整合:
run_multistep_agent的完整推理軌跡(每一步查了什麼工具、拿到什麼結果)可以完整記錄進日誌系統,供事後稽核(audit trail),這對醫療 AI 系統的法規遵循(如 FDA SaMD 相關要求)非常關鍵。
5.6 效能優化建議
- 降低
max_round:若問題範圍明確、不需要太多輪查證,適當調低可以縮短回應時間,同時降低幻覺累積的風險(推理輪數越多,累積誤差機會也可能增加)。 - 善用
enable_summary:長推理鏈場景務必開啟,否則 context 用量會隨輪數線性成長,最終觸及模型的 context window 上限。 - 批次請求排隊而非平行起多個 agent 實例:因為底層 vLLM 模型佔用大量 GPU 記憶體,同時起多個
TxAgent實例容易 OOM;正確做法是用單一模型實例、把多筆請求排隊處理(vLLM 本身支援請求批次化,效率優於重複載入模型)。 - 快取常見查詢結果:像「某藥物的 FDA 核准適應症」這類不常變動的資料,可以在 ToolUniverse 呼叫層外加一層快取(cache),減少重複打外部 API 的延遲與流量成本。
step_rag_num不要設太大:候選工具太多會稀釋大模型對關鍵工具的注意力,10 是官方範例的預設值,調整前建議先用小規模測試觀察效果。
5.7 推理過程監控與追蹤
正式部署場景下,光是「能跑」還不夠,還需要能觀察每次推理花了多少輪、多少時間、呼叫了哪些工具,才能持續優化參數設定。以下是一個簡單的監控包裝範例:
1"""
2效能監控包裝層:在不修改 TxAgent 核心程式碼的前提下,
3用裝飾器 (decorator) 模式記錄每次推理的耗時與輪數估算
4"""
5import time
6import logging
7from functools import wraps
8
9logging.basicConfig(level=logging.INFO)
10logger = logging.getLogger("txagent_monitor")
11
12
13def monitor_inference(func):
14 @wraps(func)
15 def wrapper(self, question, *args, **kwargs):
16 start = time.perf_counter()
17 logger.info("開始推理 | 問題長度=%d 字元 | max_round=%s",
18 len(question), kwargs.get("max_round", "預設值"))
19
20 response = func(self, question, *args, **kwargs)
21
22 elapsed = time.perf_counter() - start
23 logger.info("推理完成 | 耗時=%.2f 秒 | 回應長度=%d 字元",
24 elapsed, len(response) if response else 0)
25 return response
26 return wrapper
27
28
29# 使用方式:把 TxAgent.run_multistep_agent 動態替換成監控版本
30from txagent import TxAgent
31TxAgent.run_multistep_agent = monitor_inference(TxAgent.run_multistep_agent)
這種「不動核心程式碼、外層包裝監控邏輯」的做法,好處是升級 TxAgent 版本時不需要重新合併程式碼修改(不會跟上游更新產生 merge conflict),這對依賴第三方開源套件、又需要客製化監控的場景是務實的折衷方案。累積足夠的監控資料後,團隊就能回答「我們的問題平均要跑幾輪才會收斂」「哪一類問題最容易超過 max_round 而被強制結束」這類調參決策所需的實證問題。
6. AIKT 整合分析與策略 (AIKT Integration & Strategy)
6.1 整合架構圖:TxAgent 在 AIKT 27 層裡的連接點
flowchart LR
subgraph SG_INGEST["知識擷取層 L1-L3"]
L1["ai_save
任意內容→md"]
L2["gh_save
GitHub repo→教學"]
L3["autofetch
每日新知 cron"]
end
subgraph SG_LIT["文獻搜尋層 L9-L10"]
L9["paper_search
10+ 學術資料庫"]
L10["paperqa_lite
本地 RAG 問答"]
end
subgraph SG_RESEARCH["研究管線層 L18-L19"]
L18["research_pipeline_v2
多輪研究"]
L19["tu_plan_generator
藥物開發計畫生成"]
end
subgraph SG_OUTPUT["專業輸出層 L11-L12"]
L11["kami
品牌設計輸出"]
L12["gh_tutorial_qd
教學 HTML 全套"]
end
subgraph SG_TXAGENT["外部治療推理引擎"]
TX["TxAgent
+ ToolUniverse
211 工具"]
end
L2 -->|本教學文件即產物| TX
TX -.尚無直接串接.-> L18
TX -.可提供的推理服務.-> L19
L9 -.文獻補強.-> TX
L10 -.本地文獻問答補強.-> TX
TX -->|推理結果可轉為教學| L11
TX -->|推理結果可轉為教學| L12
style TX fill:#FDE68A,color:#0F172A
style L19 fill:#DBEAFE,color:#0F172A
style L2 fill:#BBF7D0,color:#0F172A
這張圖誠實地反映現況:目前 TxAgent 與 AIKT 之間只有一個已實現的連接點——本篇教學文件正是透過 Layer 2(gh-save)產生的知識擷取產物。TxAgent 本身作為一個需要 H100 GPU、獨立部署的重型推理系統,跟 AIKT 目前 27 層裡任何一層都沒有程式化整合。這正是第 6.2、6.3 節要深入分析的重點:這種「零重疊」的現況,究竟意味著沒有整合價值,還是意味著一個尚未開發的藍海?
6.2 紅海分析 (Red Ocean Analysis):功能重疊評估
先誠實檢視是否存在直接競爭關係。逐項比對 AIKT 現有各層與 TxAgent 的功能重疊:
| AIKT 層級 | 功能 | 與 TxAgent 的重疊程度 | 分析 |
|---|---|---|---|
| L9 paper-search | 跨資料庫學術論文搜尋 | 低度重疊 | paper-search 查的是「論文文獻」,TxAgent/ToolUniverse 查的是「結構化生醫資料庫(FDA、Open Targets 等)」,資料型態完全不同 |
| L10 paper-qa-lite | 本地文獻 RAG 問答 | 表面相似,實質不同 | 兩者都用「檢索 + LLM 推理」架構,但 paper-qa-lite 是對「使用者提供的本地文件」做問答,TxAgent 是對「即時外部生醫工具查詢」做推理,資料來源與更新機制完全不同 |
| L19 tu-plan-generator | 藥物開發計畫生成(ChEMBL ID/SMILES/NDA) | 中度重疊、方向不同 | 兩者都跟「藥物」相關,但 tu-plan-generator 產出的是開發階段的計畫文件(給人看的策略文件),TxAgent 產出的是即時治療推理建議(給臨床決策用),一個是規劃工具、一個是決策支援工具 |
| L18 research-pipeline-v2 | 多輪迭代研究(含 pre-IND prep) | 低度重疊 | research-pipeline-v2 做的是跨來源文獻/資料綜合成研究報告,TxAgent 不產出研究報告,只回答具體臨床問題 |
結論:目前沒有真正的紅海。 AIKT 的 27 層設計哲學(見專案 CLAUDE.md 定位聲明)是「編排知識,不是演算法」——它擅長的是把散落各處的資訊(GitHub repo、論文、影片、會議記錄)轉成結構化、可檢索、可交付的知識產物。TxAgent 則是一個演算法密集型 (algorithm-heavy) 的專用推理系統,需要微調過的 LLM 權重、需要 vLLM 推理引擎、需要即時串接外部生醫 API。這兩者的核心能力根本不在同一個平面上競爭。
若真要找出「最接近衝突」的一點:paper-qa-lite(本地文獻問答)跟 TxAgent 的推理迴圈(tool_RAG → LLM 推理 → Finish)在架構模式上確實相似——都是「檢索增強生成 (Retrieval-Augmented Generation; RAG) + 多步推理」的變體。但誰做得更好要看場景:
- 若場景是「回答關於本地一批論文/文件的問題」,paper-qa-lite 更輕量、更快、不需要 GPU,明顯更適合。
- 若場景是「需要即時查詢 FDA 最新核准資料、做多因素臨床交互作用推理」,TxAgent 的專用微調模型與 211 工具生態更強,paper-qa-lite 完全沒有這個能力(它不連外部結構化生醫資料庫)。
市場定位結論:AIKT 定位為「知識工作流編排系統」,TxAgent 定位為「臨床治療推理引擎」,兩者服務的是同一個大領域(生醫 AI)裡的不同任務層——一個是「幫研究者/知識工作者管理資訊」,一個是「幫臨床決策者做即時推理」。不存在直接的市場定位衝突。
6.3 藍海策略 (Blue Ocean Strategy):AIKT 可以獨特切入的機會
正因為沒有直接重疊,AIKT 有機會扮演 TxAgent 生態系裡「目前完全沒人做」的角色——知識工作流的外圍支援層。以下逐項展開:
6.3.1 未滿足的需求一:TxAgent 部署與使用門檻極高,缺乏「入門引路人」
TxAgent 要求 H100 80GB GPU、需要下載兩個模型權重、需要理解 vLLM 部署細節——這對大部分生醫研究者(甚至不少 ML 工程師)都是不小的門檻。AIKT 的 L2(gh-save)已經示範了一種可能:把複雜的開源專案轉成一份完整、可執行、雙語術語標註的教學文件(就是本篇文件本身)。這種「開源專案教學化」的能力,正是 TxAgent 官方 README 目前欠缺的——README 只有基本安裝指令與一個範例,沒有進階配置全解、沒有故障排查表、沒有批次整合範例。AIKT 可以持續扮演「幫生醫圈把重型 AI 工具轉成可上手教材」的角色。
6.3.2 未滿足的需求二:TxAgent 推理軌跡沒有知識管理層
TxAgent 每一次推理都會產出詳細的查詢軌跡(查了哪些工具、得到什麼結果、如何推理到結論),但這些軌跡目前只存在單次的程式輸出裡,沒有被系統化累積成可檢索的知識資產。這正是 AIKT 的核心強項——L4(graphify,知識圖譜索引)與 L6(GitNexus,程式碼符號圖)的設計理念,就是把零散的資訊轉成結構化、可查詢的知識網絡。
具體整合機會:把 TxAgent 每次推理的「問題 + 完整工具查詢軌跡 + 最終建議」自動存成一份標準化的 md 檔(透過類似 L1 ai-save 的機制),累積起來後餵給 L4 graphify 建立知識圖譜索引。這樣一段時間之後,團隊就能查詢「TxAgent 過去對哪些藥物組合做過交互作用推理」「哪幾類問題最常觸發多輪查詢」,形成一個治療推理歷史知識庫,而不是每次問完就丟掉的一次性互動。
6.3.3 未滿足的需求三:ToolUniverse 的 211 個工具缺乏「文件化與可發現性」
ToolUniverse 本身是一個持續擴充的工具庫,但截至目前,一般使用者要知道「這 211 個工具具體是哪些、各自查什麼資料源」,只能靠程式碼裡翻 tool_category_dicts。這對想要客製化擴充(如第 5.2 節示範的私有資料源掛載)的團隊來說是不小的探索成本。
具體整合機會:AIKT 的 L8(docling,深度文件解析)+ L11(kami,品牌設計排版)組合,可以把 ToolUniverse 的工具清單自動整理成一份結構化、易讀、附分類索引的參考手冊(reference manual),甚至排版成 PDF 供團隊內部發佈——這正是 AIKT 擅長、TxAgent 生態系完全沒有的能力。
6.3.4 互補的 AIKT 層級與具體差異化策略
| AIKT 層級 | 對 TxAgent 生態系可提供的獨特價值 |
|---|---|
| L2 gh-save / L12 gh-tutorial-qd | 把 TxAgent/ToolUniverse 的原始碼轉成完整教學文件與 HTML 交付物(本篇即為示範) |
| L4 graphify | 把 TxAgent 歷史推理軌跡累積成可查詢知識圖譜 |
| L8 docling + L11 kami | 把 ToolUniverse 211 工具清單整理成排版精美的參考手冊 |
| L9 paper-search / L10 paper-qa-lite | 補強 TxAgent 未覆蓋的文獻層證據(TxAgent 查結構化資料庫,paper-qa-lite 查論文全文,兩者證據互補) |
| L19 tu-plan-generator | 在藥物開發計畫生成過程中,若需要引用即時臨床交互作用推理,可作為外部推理服務呼叫對象(而非重複實作) |
| L22 company-intel | 若盡調對象是生技/製藥公司,TxAgent 展示的臨床推理能力可作為技術評估的參考基準案例 |
差異化策略的核心原則:AIKT 不應該嘗試「重新實作」TxAgent 的推理引擎(那需要微調 LLM、訓練 RAG embedding 模型,遠超 AIKT 的知識編排定位),而應該專注在TxAgent 生態系「輸入前」與「輸出後」的知識工作——輸入前幫忙做教學降低門檻、輸出後幫忙做知識沉澱與文件化。這正是「不做直接科學計算,只編排知識」這條 AIKT 核心定位聲明的精確體現。
6.4 推薦整合方案:具體實施路徑
以下提出一個分階段、風險遞增的整合路徑,供實際規劃參考:
階段一(低成本、立即可做):教學資產沉澱
- 現況:本篇教學文件已透過 L2 gh-save 產出,屆於
projects/260710 mims-harvard/tutorials/06-TxAgent.md。 - 後續動作:將本文件透過 L7 quarkdown 編譯成 HTML/PDF,並可選擇性透過 L21 blog-publish 對外發佈,作為團隊或社群的知識資產。
- 風險:極低,純文件產出,不涉及程式碼整合或機密資料。
階段二(中等成本,需要判斷是否有實際使用場景):ToolUniverse 工具清單文件化
- 動作:寫一個一次性腳本,呼叫
ToolUniverse().load_tools()把 211 個工具的名稱、分類、描述抽出來,轉成結構化 md(可用 L8 docling 或直接手動整理),再透過 L11 kami 排版成內部參考手冊。 - 前提:需先確認團隊是否真的有「基於 ToolUniverse 客製化擴充生醫工具」的實際需求,避免為做而做。
- 風險:低,純資訊彙整,不需要跑 TxAgent 本體(不需要 GPU)。
階段三(較高成本,需明確業務需求才啟動):推理軌跡知識化
- 前提:團隊必須先有實際部署 TxAgent 的場景(例如院內或藥廠內部的臨床決策支援試點),且已具備 H100 級 GPU 資源。
- 動作:修改批次審核 pipeline(見第 5.4 節範例),在
run_batch_review產出報告的同時,額外落一份標準化 md 摘要到inbox/,讓後續 L4 graphify 可以直接索引,逐步累積成可查詢的治療推理知識庫。 - 風險:中,需注意第 6.5 節的機密邊界問題——若涉及真實病人資料,必須嚴格去識別化,且絕對不可上傳 Discord 或公開 repo。
明確不建議的方向:不建議嘗試在 AIKT 內部「重新包一層」去呼叫遠端 TxAgent 服務作為一個新 Layer(例如假設的「L28 tx-reasoning」)。理由:TxAgent 的價值完全建立在其專屬微調模型與即時工具生態上,AIKT 若只是做一層薄薄的 API 轉接,既無法展現差異化價值,反而會讓使用者誤以為 AIKT「也能做臨床推理」,模糊了 AIKT 作為知識編排系統的核心定位,也可能在臨床決策場景引入不必要的責任風險。
6.5 機密邊界提醒(若進入階段三)
依本專案 CLAUDE.md 的機密邊界規則,若未來真的走到「用真實或近真實病人資料測試 TxAgent 批次審核」的階段,必須注意:
- 任何含病人可識別資訊(PII)的輸入/輸出,絕對不可進入 Discord 對話或公開 repo。
- 落地知識庫(階段三)前,務必先跑一次去識別化檢查,並將相關腳本與資料目錄排除在
.gitignore之外。
6.6 階段二實作範例:把 ToolUniverse 工具清單轉成 AIKT 知識產物
延續第 6.4 節階段二的規劃,以下提供一個具體可執行的腳本骨架,示範如何把 ToolUniverse 的 211 個工具清單,轉成一份符合 AIKT inbox/ 慣例格式的結構化 md 檔,讓後續可以被 L4 graphify 索引:
1"""
2階段二整合腳本:ToolUniverse 工具清單 → AIKT inbox md
3用途:不需要跑完整 TxAgent(不需要 GPU),純粹盤點工具生態並文件化
4"""
5import datetime
6from pathlib import Path
7from tooluniverse import ToolUniverse
8
9
10def export_tool_inventory(output_dir: str = "inbox") -> Path:
11 tu = ToolUniverse()
12 tu.load_tools()
13
14 today = datetime.date.today().isoformat()
15 out_path = Path(output_dir) / f"{today}-tooluniverse-inventory.md"
16
17 lines = [
18 f"# ToolUniverse 工具清單盤點 ({today})",
19 "",
20 f"> 來源:mims-harvard/ToolUniverse,總工具數:{len(tu.all_tool_dict)}",
21 "> 用途:供 AIKT L4 graphify 建立知識圖譜索引,追蹤團隊可用的生醫工具生態",
22 "",
23 ]
24
25 for category, tools in tu.tool_category_dicts.items():
26 lines.append(f"## 分類:{category}")
27 lines.append("")
28 for tool in tools:
29 name = tool.get("name", "unknown")
30 desc = tool.get("description", "")[:150]
31 lines.append(f"- **{name}**:{desc}")
32 lines.append("")
33
34 out_path.parent.mkdir(parents=True, exist_ok=True)
35 out_path.write_text("\n".join(lines), encoding="utf-8")
36 return out_path
37
38
39if __name__ == "__main__":
40 path = export_tool_inventory()
41 print(f"已產出工具盤點文件:{path}")
這個腳本的設計刻意遵循 AIKT 的既有慣例(frontmatter 補寫用 Edit 非 Write、輸出落在 inbox/、檔名含日期),讓產出的文件能無縫接入既有的 L4 graphify 索引流程,不需要額外寫轉接層。這也是第 6.3 節「差異化策略」的具體落地——AIKT 不重新實作 ToolUniverse 的查詢邏輯,只負責把它的工具生態「知識化」,供團隊長期追蹤與檢索。
7. 效能、限制與替代方案 (Performance, Limitations & Alternatives)
7.1 效能數據回顧
論文報告的核心效能數據(於 5 個自建基準測試上):
| 指標 | TxAgent | 比較對象 | 差距 |
|---|---|---|---|
| 開放式藥物推理準確率 | 92.1% | GPT-4o | 領先最多 25.8 個百分點 |
| 結構化多步推理 | 優於對手 | DeepSeek-R1(671B 參數) | 以 8B 參數勝過參數量 80 倍以上的模型 |
| 藥名稱呼變異穩定性 | 變異 < 0.01 | 一般工具使用型 LLM | 穩定性超過 55% |
| 評測任務總量 | 3,168 個藥物推理任務 + 456 個個人化治療情境 | — | 涵蓋 DrugPC/BrandPC/GenericPC/TreatmentPC/DescriptionPC 五個基準 |
需要提醒的是:這些數據由原論文作者自行建立基準測試並自行評測,屬於第一方報告數據,尚待更廣泛、獨立第三方的外部驗證(截至目前沒有查到大規模獨立重現研究),使用時應保持適度保留態度,不宜直接視為在所有真實臨床場景都能複現的絕對數字。
7.2 已知限制
- 硬體門檻高:官方建議 H100 80GB GPU,這對絕大多數學術實驗室或中小型醫療機構是不小的資本支出。
- 依賴即時網路連線:ToolUniverse 需要連線外部 API(FDA、Open Targets 等),若這些外部服務變更介面、限流或下線,會直接影響 TxAgent 的查詢能力——這是一種對外部依賴的系統性風險。
- 211 個工具的覆蓋範圍有限:雖然涵蓋 1939 年以來所有 FDA 核准藥物,但罕見病、非美國市場藥物、或某些新興治療模式(如細胞治療、基因治療的特殊法規資料)未必有完整覆蓋。
- 推理輪數與延遲的權衡:多步推理天生比單次生成慢,
max_round=20這種設定在真實臨床急重症場景(需要秒級反應)可能不夠即時。 - 仍是輔助工具,非最終決策者:這點官方與本文件都反覆強調,任何輸出仍需臨床專業人員複核,不可視為可直接執行的處方指令。
- 多代理人委派的責任歸屬模糊:
call_agent=True開啟後,若子代理人給出錯誤資訊被主代理人採納,目前架構沒有內建機制追蹤「這個錯誤源頭出在哪一層代理人」,對正式醫療場景的可審計性是待補強之處。
7.3 與同類工具比較
| 工具/方法 | 定位 | 與 TxAgent 的差異 |
|---|---|---|
| 通用 LLM(GPT-4o、Claude 等)直接問答 | 泛用型知識問答 | 缺乏即時外部資料查證機制,容易對新藥/新法規資訊產生幻覺 |
| 傳統臨床決策支援系統 (Clinical Decision Support System; CDSS,如藥物交互作用檢查器) | 規則式/資料庫查詢型系統 | 通常是查表式、單一資料源,缺乏多步推理與跨資料源綜合能力,但延遲極低、可預測性高 |
| 其他工具使用型 agent 框架(如 LangChain agent、AutoGPT 類架構) | 通用工具調度框架 | 沒有針對治療推理場景微調模型與 RAG 檢索器,遷移到臨床場景需要大量客製化與驗證工作 |
| TxAgent | 生醫治療推理專用 agent | 專用微調模型 + 專用工具檢索 embedding + 211 個生醫工具,代價是硬體門檻與部署複雜度較高 |
7.4 何時使用 vs 何時不使用
適合使用 TxAgent 的情境:
- 需要對藥物交互作用、禁忌症、劇量調整做多因素、可追溯證據鏈推理的研究或輔助決策場景。
- 團隊已具備 GPU 資源(H100 級或至少接近的算力),且能接受即時外部 API 依賴。
- 場景允許「人在迴圈中」的審核流程,不要求全自動無人審核的即時決策。
不建議使用 TxAgent 的情境:
- 只是想快速查一個藥物的基本資訊(此時直接查 FDA 官方資料庫或現成藥典 App 更快更省資源)。
- 沒有 GPU 資源、也沒有導入企業級 GPU 服務的預算或計畫。
- 場景要求毫秒級即時反應(如急診檯前的快速警示系統),多步推理架構的延遲特性不適合。
- 需要處理罕見病、非美國市場藥物等 ToolUniverse 覆蓋外的資料,此時應先確認資料源是否足夠,或考慮擴充自訂工具(見第 5.2 節)。
7.5 常見誤解澄清
在評估或介紹 TxAgent 時,容易出現幾種以偏概全的誤解,值得先澄清:
- 誤解一:「TxAgent 就是一個聊天機器人,跟 ChatGPT 差不多」。實際上 TxAgent 的核心價值不在對話能力本身,而在它被訓練成「知道什麼時候該查什麼工具、查完怎麼推理」的決策模式,
enable_chat這種閒聊功能只是附帶選項,不是設計重心。 - 誤解二:「92.1% 準確率代表可以直接拿來做臨床決策」。這個數字是在論文自建的 5 個基準測試上取得的,測試情境與真實臨床場景的複雜度、資料分佈可能存在差異,且尚缺乏大規模獨立第三方驗證,不應直接等同於「臨床可用」的保證。
- 誤解三:「工具越多就一定越準」。第 2.2 節已說明,工具檢索(RAG)機制本身就是為了避免「工具太多反而稀釋模型注意力」而設計的,211 個工具的價值在於「覆蓋範圍夠廣」,但每一輪真正決策時能有效利用的候選工具數其實是被刻意限制在個位數到十位數之間(
step_rag_num預設 10)。 - 誤解四:「TxAgent 是取代藥劑師/醫師的自動化系統」。無論是論文本身還是本篇教學文件,都反覆強調這是輔助推理工具,最終決策責任仍在人類專業人員手上——這不是客套話,而是這類高風險領域 AI 系統設計上必要的責任邊界劃分。
- 誤解五:「裝了
pip install txagent就能馬上用」。實際上這只是取得程式碼介面,真正能跑起來還需要下載兩個模型權重(合計數十 GB)、具備符合需求的 GPU、以及穩定的外部 API 連線,第 3 章的完整安裝流程缺一不可。
8. 總結與建議 (Summary & Recommendations)
8.1 關鍵要點回顧
- TxAgent 是 Harvard Zitnik Lab 開發的治療推理 AI 代理人,核心創新在於把「LLM 記憶答案」的模式,轉換成「LLM 學會查證再回答」的多步推理架構。
- 架構上採用兩層設計:小型嵌入模型(ToolRAG,1.5B)做工具檢索,大型微調模型(TxAgent-T1,8B)做多步推理與工具調度,中間透過 ToolUniverse(211 個生醫工具)串接即時資料。
- 論文報告的效能數據顯示,在特定治療推理基準測試上,TxAgent 以遠小得多的參數量勝過通用大模型,尤其在穩定性(不同稱呼方式下答案一致度)上表現突出,但這些數據仍屬第一方報告,需要更多獨立驗證。
- 部署門檻不低(H100 80GB GPU、即時外部連線),這是實際導入前必須先評估清楚的現實限制。
- 與 AIKT 現有 27 層之間沒有直接功能重疊(無紅海),兩者服務的是生醫 AI 領域裡不同的任務層——AIKT 編排知識工作流,TxAgent 執行臨床推理計算。
- AIKT 的藍海機會在於扮演 TxAgent 生態系「教學降門檻」與「推理軌跡知識沉澱」的外圍支援角色,而非重新實作推理引擎本身。
8.2 最佳使用場景
TxAgent 最適合的場景,是那些需要多因素綜合判斷、且有時間容許多步查證的治療決策輔助任務:藥物交互作用風險評估、個人化劇量調整建議、多重共病下的處方安全審核。這些場景的共同特徵是「答案不能只靠記憶,必須要有可追溯的證據鏈」,這正是 TxAgent 架構設計的核心訴求。反過來說,若場景只是簡單的事實查詢(「這個藥的學名是什麼」),用不到這麼重的推理架構。
8.3 未來發展方向(基於現有專案軌跡的合理推測)
- ToolUniverse 的工具數量預期會持續擴充(從 211 個工具的當前規模,隨著更多資料源標準化介面而增加),這代表 TxAgent 的知識覆蓋範圍會隨時間自然變廣,不需要重新訓練主模型。
- 多代理人協作模式(
call_agent)目前僅支援兩層委派,未來若擴展到更複雜的專科分工(如腫瘤科 agent、藥劑科 agent、老年醫學 agent 分別由不同微調模型擔任),可能需要更完整的責任追蹤與衝突調解機制。 - 隨著更多獨立團隊嘗試重現論文基準測試結果,預期會出現更多第三方驗證報告,屆時能更準確評估 TxAgent 在真實多元臨床場景下的穩健度。
- 對於資源有限的團隊,社群自發的量化壓縮版本(如 4-bit/8-bit 量化的 TxAgent-T1)若能出現並經過驗證,將大幅降低導入門檻,這是值得後續追蹤觀察的方向。
8.4 給 AIKT 使用者的具體建議
- 若目的只是「理解這個專案在做什麼、值不值得投入資源評估」,本篇教學文件加上第 3-4 章的安裝/使用範例已足夠支撐初步技術評估,不需要立即投入 GPU 資源實際部署。
- 若確定要進一步評估,建議先只裝 ToolUniverse(不需要 GPU),跑第 4.4 節的工具盤點範例,確認 211 個工具是否覆蓋團隊實際需要的資料源,再決定是否投入 GPU 資源跑完整 TxAgent。
- 若未來有實際導入計畫,優先參考第 6.4 節的分階段路徑,從低風險的教學文件與工具清單文件化開始,再視實際業務需求逐步推進到推理軌跡知識化,並嚴格遵守第 6.5 節的機密邊界規則。
8.5 延伸閱讀與資源索引
若想更深入研究 TxAgent 及其生態系,以下資源可作為後續延伸閱讀的起點:
| 資源類型 | 連結/名稱 | 用途 |
|---|---|---|
| 主論文 | arXiv:2503.10970 | 完整方法論、五個基準測試的建立細節、消融實驗 (ablation study) |
| 姊妹專案 | mims-harvard/ToolUniverse | 211 個工具的完整實作,適合想客製化擴充工具的團隊深入研究 |
| 模型權重 | HuggingFace mims-harvard collection | 直接下載可用的兩個核心模型 |
| 專案首頁 | zitniklab.hms.harvard.edu/TxAgent | 官方展示頁,含示範案例 GIF 動畫 |
| 底層推理引擎文件 | vLLM 官方文件 | 理解 LLM(model=...) 背後的部署細節、PagedAttention 機制 |
| 相關領域比較對象 | LangChain / AutoGPT 類 agent 框架文件 | 用於對比通用型 agent 框架與領域專用 agent 的設計取捨差異 |
閱讀順序建議:先讀本篇教學文件建立整體概念 → 讀主論文的方法論章節理解訓練細節 → 若要實際部署,回頭精讀第 3 章安裝流程並搭配 ToolUniverse 原始碼確認工具清單是否符合需求 → 若要評估 AIKT 整合,聚焦第 6 章的分階段路徑規劃。
8.6 常見問題快答 (FAQ)
Q: 沒有 H100 GPU,是否完全無法使用 TxAgent? A: 完全無法跑通官方預設配置的 8B 模型推理,但可以先只安裝 ToolUniverse(不需要 GPU)盤點工具生態(見第 4.4 節),或關注社群是否有經驗證的量化版本模型。
Q: ToolUniverse 的資料是即時的還是有快取? A: 依工具而定,多數工具會即時呼叫外部 API(如 FDA、Open Targets),因此結果反映查詢當下的最新狀態,但也代表結果會隨外部資料源更新而變化,同一問題在不同時間點查詢可能得到略有差異的答案(例如新藥剛核准當天與核准後幾個月,標籤資訊可能有修訂)。
Q: 可以完全離線部署嗎? A: 主推理模型(8B)本身可以離線載入(權重下載後即可本機推理),但 ToolUniverse 的多數工具依賴連線外部資料庫,若要完全離線,需要自行建置本地鏡像版資料源並改寫工具設定,這超出官方預設支援範圍。
Q: enable_checker=True 會拖慢推理速度嗎?
A: 會增加額外的驗證步驟,因此每輪耗時會略微增加,但在高風險場景(如本文件反覆強調的臨床決策場景),這個延遲成本通常是值得付出的,用來換取更低的幻覺風險。
Q: 中文問題可以直接餵給 TxAgent 嗎? A: 官方範例與訓練資料均以英文為主,中文輸入的表現未經官方驗證,若團隊主要使用場景是中文,建議先用小規模測試確認品質,或考慮在問題送入前先做英文翻譯的前處理層。
Q: 可以把 TxAgent 跟自己團隊的內部 LLM(非 Llama-3.1-8B 微調版)搭配使用嗎?
A: 理論上 TxAgent 類別的 model_name 參數可以指向任何 vLLM 支援載入的模型,但官方訓練與評測都是針對 TxAgent-T1-Llama-3.1-8B 進行的,換成未經微調的其他模型,很可能無法重現論文報告的推理品質與工具調用穩定性——工具調用的「時機判斷」是專門訓練出來的行為,不是所有 LLM 都天生具備。
附錄:關鍵雙語術語對照表
為方便團隊內部溝通時中英術語一致,整理本篇文件出現過的核心術語如下:
| 中文 | English | 縮寫/說明 |
|---|---|---|
| 治療推理 | Therapeutic Reasoning | 針對治療決策做多因素推理 |
| 精準治療 | Precision Therapeutics | 又稱精準醫療 |
| 藥物交互作用 | Drug-Drug Interaction | DDI |
| 禁忌症 | Contraindication | 因病人條件而不適用的治療 |
| 共病症 | Comorbidity | 病人同時存在的其他疾病 |
| 藥物動力學 | Pharmacokinetics | PK,藥物在體內吸收/代謝/排除的過程 |
| 大型語言模型 | Large Language Model | LLM |
| 檢索增強生成 | Retrieval-Augmented Generation | RAG |
| 幻覺(模型捏造資訊) | Hallucination | 模型生成看似合理但不實的內容 |
| 人在迴圈中 | Human-in-the-loop | 強調最終決策仍需人工複核 |
| 可追溯性 | Traceability | 答案能回溯查證依據 |
| 上市後藥物監測 | Pharmacovigilance | 藥物安全性的持續監測 |
| 電子病歷 | Electronic Health Record | EHR |
| 臨床決策支援系統 | Clinical Decision Support System | CDSS |
| 去識別化 | De-identification | 移除可識別病人身份的資訊 |
| 多重用藥 | Polypharmacy | 病人同時服用多種藥物的狀態 |
| 分岔(GitHub) | Fork | 複製他人 repo 到自己帳號下繼續開發 |
| 消融實驗 | Ablation Study | 移除模型某個元件觀察效能變化的實驗方法 |
本術語表隨文件內容持續適用,若未來擴充其他 mims-harvard 系列教學文件,建議統一沿用此處的中英對照,避免同一團隊內部對同一概念出現不同翻譯造成溝通落差。
Comments