基于RAG架構搭建醫療智能問答系統(一)

Leo
0 評論 4918 瀏覽 33 收藏 10 分鐘

LLM大語言模型的出現,讓許多系統或產品都有了更大的構建空間。這篇文章里,作者就介紹了自己基于主流的RAG架構搭建一個醫學智能問答系統的過程,一起來看看本文的梳理和解讀。

醫療智能問答是一個比較經典的醫療應用場景,在該場景下用戶首先在對話系統中描述自己的癥狀,然后問答系統會根據輸入的信息回復初步的醫學建議。

傳統實現方法如規則引擎和知識圖譜等由于缺乏對語境和語義的深層理解,導致無法處理過于復雜的問題。隨著大語言模型(LLM)的出現,醫療智能問答系統處理更加復雜的語境以及更加準確的結果輸出有望實現,所以筆者決定嘗試基于當前主流的RAG架構搭建一個醫學智能問答系統。

一、產品目標

打造一個基于智能問答系統的“數字全科醫生”

這里“全科醫生”不是“全能醫生”的意思,全科醫生一般是指在基層醫療機構(如社區衛生服務中心、鄉村診所等)工作的醫生,全科醫生通常承擔著基層的基礎醫療服務,筆者對這個系統的定位是可以提供一些初步的診斷、患者教育和科普功能,而不是用它提供治療方案(能力邊界)。

具體可以拆分以下幾個子目標:

  1. 能根據用戶輸入的信息,初步診斷是否存在病理性的因素以及可能的病因;
  2. 能提供非治療方案的建議,如生活方式干預、引導去醫院做進一步的檢查等;
  3. 盡量降低錯誤率,做到“寧缺毋濫”;
  4. 盡量避免提供直接的用藥方案指導或者治療方案。

二、RAG架構及其工作流程

RAG(Retrieval Augmented Generation)通常翻譯為檢索增強生成,所以它的核心是“檢索”,用戶在使用LLM回答問題之前先“檢索”外掛知識庫的信息,然后將檢索到的信息提交給LLM,LLM在“學會”匹配的知識庫的內容之后再去生成回答,這樣就可以有效減少LLM“幻覺”現象。

RAG工作流程大致如下:

第一步:創建知識庫

  1. 首先要對獲取的數據做基礎的清洗保證質量;
  2. 然后系統對數據進行“分塊”(Chunk)處理,通常較小的文本片段可以使RAG系統更快、更準確地發現相關上下文;
  3. 再進一步就是將這些Chunks轉換成計算機可以理解的數據也就是向量化(Embedding);
  4. 最后將獲取的向量信息存儲在向量數據庫(Vector DB)中備用。

第二步:檢索信息

當用戶輸入問題時,首先會對輸入的“問題”向量化,然后在向量數據庫中查詢匹配的結果,通過排序規則對結果進行再次排序(Rerank),最后返回最匹配的結果。

第三步:生成結果

系統將匹配的Chunks數據通過設計好的提示(Promopt)模板傳遞給LLM,LLM基于基于輸入的Chunks潤色加工后返回問題的答案。

PS:這里只是簡單的介紹一下RAG架構的工作流程,實際項目中每一步都包含很多優化策略和配置參數,比如Chunk的大小選擇,Embedding模型的選擇以及Rerank的規則等,在后面介紹模型優化環節時,將會結合具體問題分享自己的優化思路。

三、基于FastGPT搭建基礎問答系統

FastGPT是一個開源的、基于 LLM 的知識庫問答系統,相對于langflow,我們可以方便的查看模型各個環節的運行數據(比如知識庫的引用情況、token使用等),也支持支持可視化工作流編排,比較適合做調試和擴展應用。

1. 在線搭建

FastGPT提供了線上直接使用的方式,使用流程比較簡單,大致分為4步:

  1. 賬號注冊登錄;
  2. 創建自己的知識庫;
  3. 創建自己的應用;
  4. 選擇應用關聯的數據庫。

建議大家自行到官網查看操作手冊,非常容易上手,訪問地址如下:https://fastgpt.run

以上一個使用示例,我們可以查看每一次對話引用的知識庫內容、上下文信息以及運行時間等。

但是需要注意的是,模型的調用都是需要收費的,雖然注冊后就會贈送5塊錢的額度,但是基本也只夠體驗一下,要搭建一個完整的項目是遠遠不夠的,所以前期盡量先用小樣本數據創建知識庫(Embedding也是要花錢的)體驗整個流程。

2. 本地部署

FastGpt也提供了多種本地部署的方法,推薦使用 docker-compose 進行部署,官方文檔如下 https://doc.fastgpt.in/docs/development/docker/, 需要一點編程基礎,大部分步驟跟著文檔操作就沒有問題。

在FastGPT中我們需要用到2個模型,分別是LLM和Embedding model,FastGPT默認采用的是LLM是chagGPT,Embedding model是openAI的Embedding-2,這兩個模型調用都是要收費的,我們可以用更便宜的國產大模型替換使用。

現在基座大模型正處于激烈競爭階段,平臺都會送一些贈送token額度,建議大家如果只是想自己嘗試做一個demo可以采取這種低成本的方式,FastGPT也提供了通過接入OneAPI的方式來實現對不同大模型的支持。

筆者選用的LLM是ChatGLM,Embedding model是M3E,大概的操作的方法是首先在one API平臺分別創建國產LLM和Embedding的模型渠道;

然后在FastGPT的配置文件加入我們要使用的模型,示例如下:

“qaModels”: [

{

“model”: “gpt-3.5-turbo-16k”,

“name”: “GPT35-16k”,

“maxContext”: 16000,

“maxResponse”: 16000,

“inputPrice”: 0,

“outputPrice”: 0

},

//新增chatglm

{

“model”: “chatglm_pro”,

“name”: “GLM”,

“maxContext”: 16000,

“maxResponse”: 16000,

“inputPrice”: 0,

“outputPrice”: 0

}

],

最后,更新運行就可以在界面上選擇我們添加的模型來使用了。

當然,這邊沒有介紹非常詳細的部署細節上,大家感興趣的可以去官網或者B站上搜索相關教程,這邊強烈建議沒有任何編程經驗產品同學先使用在線的環境去體驗整個應用流程,畢竟發掘工具的價值、尋找好的應用場景才是我們核心能力。

總結

本文介紹了筆者基于RAG架構搭建一個醫療智能問答系統的背景和預期產品目標,以及RAG的基礎概念和基于FastGpt快速搭建問答系統的方法。

搭建完成只是第一步,在實際使用過程中筆者發現了大量的問題,后面將圍繞實際應用中出現的問題,分享一些自己優化的思路和效果評測的方法,歡迎對LLM應用感興趣的同道來一起交流。

本文由 @FrenzyGoat 原創發布于人人都是產品經理。未經許可,禁止轉載

題圖來自Unsplash,基于CC0協議

該文觀點僅代表作者本人,人人都是產品經理平臺僅提供信息存儲空間服務。

更多精彩內容,請關注人人都是產品經理微信公眾號或下載App
評論
評論請登錄
  1. 目前還沒評論,等你發揮!