基于開源框架快速搭建基于RAG架構(gòu)的醫(yī)療AI問答系統(tǒng)
LLM大語(yǔ)言模型的出現(xiàn),讓許多系統(tǒng)或產(chǎn)品都有了更大的構(gòu)建空間。這篇文章里,作者就介紹了自己基于主流的RAG架構(gòu)搭建一個(gè)醫(yī)學(xué)智能問答系統(tǒng)的過程,一起來看看本文的梳理和解讀。
醫(yī)療智能問答是一個(gè)比較經(jīng)典的醫(yī)療應(yīng)用場(chǎng)景,在該場(chǎng)景下用戶首先在對(duì)話系統(tǒng)中描述自己的癥狀,然后問答系統(tǒng)會(huì)根據(jù)輸入的信息回復(fù)初步的醫(yī)學(xué)建議。
傳統(tǒng)實(shí)現(xiàn)方法如規(guī)則引擎和知識(shí)圖譜等由于缺乏對(duì)語(yǔ)境和語(yǔ)義的深層理解,導(dǎo)致無法處理過于復(fù)雜的問題。隨著大語(yǔ)言模型(LLM)的出現(xiàn),醫(yī)療智能問答系統(tǒng)處理更加復(fù)雜的語(yǔ)境以及更加準(zhǔn)確的結(jié)果輸出有望實(shí)現(xiàn),所以筆者決定嘗試基于當(dāng)前主流的RAG架構(gòu)搭建一個(gè)醫(yī)學(xué)智能問答系統(tǒng)。
一、產(chǎn)品目標(biāo)
打造一個(gè)基于智能問答系統(tǒng)的“數(shù)字全科醫(yī)生”
這里“全科醫(yī)生”不是“全能醫(yī)生”的意思,全科醫(yī)生一般是指在基層醫(yī)療機(jī)構(gòu)(如社區(qū)衛(wèi)生服務(wù)中心、鄉(xiāng)村診所等)工作的醫(yī)生,全科醫(yī)生通常承擔(dān)著基層的基礎(chǔ)醫(yī)療服務(wù),筆者對(duì)這個(gè)系統(tǒng)的定位是可以提供一些初步的診斷、患者教育和科普功能,而不是用它提供治療方案(能力邊界)。
具體可以拆分以下幾個(gè)子目標(biāo):
- 能根據(jù)用戶輸入的信息,初步診斷是否存在病理性的因素以及可能的病因;
- 能提供非治療方案的建議,如生活方式干預(yù)、引導(dǎo)去醫(yī)院做進(jìn)一步的檢查等;
- 盡量降低錯(cuò)誤率,做到“寧缺毋濫”;
- 盡量避免提供直接的用藥方案指導(dǎo)或者治療方案。
二、RAG架構(gòu)及其工作流程
RAG(Retrieval Augmented Generation)通常翻譯為檢索增強(qiáng)生成,所以它的核心是“檢索”,用戶在使用LLM回答問題之前先“檢索”外掛知識(shí)庫(kù)的信息,然后將檢索到的信息提交給LLM,LLM在“學(xué)會(huì)”匹配的知識(shí)庫(kù)的內(nèi)容之后再去生成回答,這樣就可以有效減少LLM“幻覺”現(xiàn)象。
RAG工作流程大致如下:
第一步:創(chuàng)建知識(shí)庫(kù)
- 首先要對(duì)獲取的數(shù)據(jù)做基礎(chǔ)的清洗保證質(zhì)量;
- 然后系統(tǒng)對(duì)數(shù)據(jù)進(jìn)行“分塊”(Chunk)處理,通常較小的文本片段可以使RAG系統(tǒng)更快、更準(zhǔn)確地發(fā)現(xiàn)相關(guān)上下文;
- 再進(jìn)一步就是將這些Chunks轉(zhuǎn)換成計(jì)算機(jī)可以理解的數(shù)據(jù)也就是向量化(Embedding);
- 最后將獲取的向量信息存儲(chǔ)在向量數(shù)據(jù)庫(kù)(Vector DB)中備用。
第二步:檢索信息
當(dāng)用戶輸入問題時(shí),首先會(huì)對(duì)輸入的“問題”向量化,然后在向量數(shù)據(jù)庫(kù)中查詢匹配的結(jié)果,通過排序規(guī)則對(duì)結(jié)果進(jìn)行再次排序(Rerank),最后返回最匹配的結(jié)果。
第三步:生成結(jié)果
系統(tǒng)將匹配的Chunks數(shù)據(jù)通過設(shè)計(jì)好的提示(Promopt)模板傳遞給LLM,LLM基于基于輸入的Chunks潤(rùn)色加工后返回問題的答案。
PS:這里只是簡(jiǎn)單的介紹一下RAG架構(gòu)的工作流程,實(shí)際項(xiàng)目中每一步都包含很多優(yōu)化策略和配置參數(shù),比如Chunk的大小選擇,Embedding模型的選擇以及Rerank的規(guī)則等,在后面介紹模型優(yōu)化環(huán)節(jié)時(shí),將會(huì)結(jié)合具體問題分享自己的優(yōu)化思路。
三、基于FastGPT搭建基礎(chǔ)問答系統(tǒng)
FastGPT是一個(gè)開源的、基于 LLM 的知識(shí)庫(kù)問答系統(tǒng),相對(duì)于langflow,我們可以方便的查看模型各個(gè)環(huán)節(jié)的運(yùn)行數(shù)據(jù)(比如知識(shí)庫(kù)的引用情況、token使用等),也支持支持可視化工作流編排,比較適合做調(diào)試和擴(kuò)展應(yīng)用。
1. 在線搭建
FastGPT提供了線上直接使用的方式,使用流程比較簡(jiǎn)單,大致分為4步:
- 賬號(hào)注冊(cè)登錄;
- 創(chuàng)建自己的知識(shí)庫(kù);
- 創(chuàng)建自己的應(yīng)用;
- 選擇應(yīng)用關(guān)聯(lián)的數(shù)據(jù)庫(kù)。
建議大家自行到官網(wǎng)查看操作手冊(cè),非常容易上手,訪問地址如下:https://fastgpt.run
以上一個(gè)使用示例,我們可以查看每一次對(duì)話引用的知識(shí)庫(kù)內(nèi)容、上下文信息以及運(yùn)行時(shí)間等。
但是需要注意的是,模型的調(diào)用都是需要收費(fèi)的,雖然注冊(cè)后就會(huì)贈(zèng)送5塊錢的額度,但是基本也只夠體驗(yàn)一下,要搭建一個(gè)完整的項(xiàng)目是遠(yuǎn)遠(yuǎn)不夠的,所以前期盡量先用小樣本數(shù)據(jù)創(chuàng)建知識(shí)庫(kù)(Embedding也是要花錢的)體驗(yàn)整個(gè)流程。
2. 本地部署
FastGpt也提供了多種本地部署的方法,推薦使用 docker-compose 進(jìn)行部署,官方文檔如下 https://doc.fastgpt.in/docs/development/docker/, 需要一點(diǎn)編程基礎(chǔ),大部分步驟跟著文檔操作就沒有問題。
在FastGPT中我們需要用到2個(gè)模型,分別是LLM和Embedding model,F(xiàn)astGPT默認(rèn)采用的是LLM是chagGPT,Embedding model是openAI的Embedding-2,這兩個(gè)模型調(diào)用都是要收費(fèi)的,我們可以用更便宜的國(guó)產(chǎn)大模型替換使用。
現(xiàn)在基座大模型正處于激烈競(jìng)爭(zhēng)階段,平臺(tái)都會(huì)送一些贈(zèng)送token額度,建議大家如果只是想自己嘗試做一個(gè)demo可以采取這種低成本的方式,F(xiàn)astGPT也提供了通過接入OneAPI的方式來實(shí)現(xiàn)對(duì)不同大模型的支持。
筆者選用的LLM是ChatGLM,Embedding model是M3E,大概的操作的方法是首先在one API平臺(tái)分別創(chuàng)建國(guó)產(chǎn)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
}
],
最后,更新運(yùn)行就可以在界面上選擇我們添加的模型來使用了。
當(dāng)然,這邊沒有介紹非常詳細(xì)的部署細(xì)節(jié)上,大家感興趣的可以去官網(wǎng)或者B站上搜索相關(guān)教程,這邊強(qiáng)烈建議沒有任何編程經(jīng)驗(yàn)產(chǎn)品同學(xué)先使用在線的環(huán)境去體驗(yàn)整個(gè)應(yīng)用流程,畢竟發(fā)掘工具的價(jià)值、尋找好的應(yīng)用場(chǎng)景才是我們核心能力。
總結(jié)
本文介紹了筆者基于RAG架構(gòu)搭建一個(gè)醫(yī)療智能問答系統(tǒng)的背景和預(yù)期產(chǎn)品目標(biāo),以及RAG的基礎(chǔ)概念和基于FastGpt快速搭建問答系統(tǒng)的方法。
搭建完成只是第一步,在實(shí)際使用過程中筆者發(fā)現(xiàn)了大量的問題,后面將圍繞實(shí)際應(yīng)用中出現(xiàn)的問題,分享一些自己優(yōu)化的思路和效果評(píng)測(cè)的方法,歡迎對(duì)LLM應(yīng)用感興趣的同道來一起交流。
本文由 @FrenzyGoat 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)許可,禁止轉(zhuǎn)載
題圖來自Unsplash,基于CC0協(xié)議
該文觀點(diǎn)僅代表作者本人,人人都是產(chǎn)品經(jīng)理平臺(tái)僅提供信息存儲(chǔ)空間服務(wù)。
- 目前還沒評(píng)論,等你發(fā)揮!