在快速發展的數位醫療領域,醫療聊天機器人正成為改善病患照護和提供快速、可靠資訊的重要工具。這篇文章將解釋如何建立一個使用多個向量儲存的醫療聊天機器人。重點在於創建一個能理解使用者上傳的醫療報告並根據這些報告中的資訊給出答案的聊天機器人。
此外,這個聊天機器人還使用另一個充滿醫生和病患之間關於不同醫療問題對話的向量儲存。這種方法使聊天機器人擁有廣泛的醫療知識和病患互動範例,幫助它提供個性化和相關的答案給使用者的問題。這篇文章的目標是為開發者和醫療專業人員提供一個清晰的指南,教他們如何開發一個能成為病患尋求根據自身健康報告和關注提供資訊和建議的有用資源的醫療聊天機器人。
學習目標
- 學會利用開源醫療數據集來訓練聊天機器人,進行醫生與病患的對話。
- 了解如何建立和實施向量儲存服務,以便高效檢索數據。
- 獲得整合大型語言模型(LLMs)和嵌入技術以提升聊天機器人性能的技能。
- 學會如何使用 LangChain、Milvus 和 Cohere 建立多向量聊天機器人,以增強 AI 對話。
- 了解如何整合向量儲存和檢索機制,以便聊天機器人能夠提供上下文相關且高效的回應。
這篇文章是數據科學博客馬拉松的一部分。
使用 LangChain、Milvus 和 Cohere 建立多向量聊天機器人
建立一個能理解和回應根據醫療報告和對話的查詢的醫療聊天機器人需要一個精心設計的流程。這個流程整合了各種服務和數據來源,以處理使用者的查詢並提供準確且具上下文的回應。以下是建立這個複雜聊天機器人流程的步驟。
注意:像 logger、向量儲存、LLM 和嵌入等服務已從其他模組導入。您可以從這個資料庫訪問它們。在運行筆記本之前,請確保添加所有 API 金鑰和向量儲存網址。
步驟1:導入必要的庫和模組
我們將開始導入必要的 Python 庫和模組。dotenv 庫用於加載環境變數,這對於安全地管理敏感資訊至關重要。src.services 模組包含與各種服務(如向量儲存、嵌入和語言模型)互動的自定義類。src.ingest 中的 Ingestion 類負責將文件導入系統。我們從 LangChain 和 langchain_core 中導入各種組件,以便根據聊天機器人的記憶和對話歷史檢索資訊和生成回應。
“`python
import pandas as pd
from dotenv import load_dotenv
from src.services import LLMFactory, VectorStoreFactory, EmbeddingsFactory
from src.ingest import Ingestion
from langchain_core.prompts import (
ChatPromptTemplate,
)
from langchain.retrievers.ensemble import EnsembleRetriever
from langchain.chains.history_aware_retriever import create_history_aware_retriever
from langchain.chains.combine_documents import create_stuff_documents_chain
from langchain.chains.retrieval import create_retrieval_chain
from langchain_core.prompts import ChatPromptTemplate
from langchain.memory import ConversationBufferWindowMemory, SQLChatMessageHistory
_ = load_dotenv()
“`
步驟2:加載數據
接著,我們將從數據目錄中加載對話數據集。這個數據集可以從這個網址下載。這個數據集對於為 LLM 提供一個知識基礎,以便在回答使用者查詢時使用是非常重要的。
“`python
data = pd.read_parquet(“data/medqa.parquet”, engine=”pyarrow”)
data.head()
“`
在可視化數據時,我們可以看到它有三個欄位:輸入、輸出和指示。我們將只考慮輸入和輸出欄位,因為它們分別是病患的查詢和醫生的回應。
步驟3:導入數據
我們使用特定的嵌入和向量儲存服務實例化 Ingestion 類。這個設置對於以可訪問和有用的方式處理和存儲醫療數據至關重要。我們將首先導入對話數據集,因為這需要一些時間。導入流程被調整為每分鐘批量運行導入,以應對嵌入服務的速率限制錯誤。如果您有任何付費服務來克服速率限制錯誤,您可以選擇更改 src 目錄中的邏輯以導入所有內容。在這個例子中,我們將使用一份在線可用的病患報告。您可以從這裡下載報告。
“`python
ingestion = Ingestion(
embeddings_service=”cohere”,
vectorstore_service=”milvus”,
)
ingestion.ingest_document(
file_path=”data/medqa.parquet”,
category=”medical”,
sub_category=”conversation”,
exclude_columns=[“instruction”],
)
ingestion.ingest_document(
file_path=”data/anxiety-patient.pdf”,
category=”medical”,
sub_category=”document”,
)
“`
步驟4:初始化服務
我們使用 EmbeddingsFactory、VectorStoreFactory 和 LLMFactory 類來實例化嵌入、向量儲存和語言模型服務。您可以從本節開頭提到的資料庫下載這些模組。它集成了一個 logger 以便觀察,並提供選擇嵌入、LLM 和向量儲存服務的選項。
“`python
embeddings_instance = EmbeddingsFactory.get_embeddings(
embeddings_service=”cohere”,
)
vectorstore_instance = VectorStoreFactory.get_vectorstore(
vectorstore_service=”milvus”, embeddings=embeddings_instance
)
llm = LLMFactory.get_chat_model(llm_service=”cohere”)
“`
步驟5:創建檢索器
我們使用向量儲存實例創建兩個檢索器:一個用於對話(醫生與病患的互動),另一個用於文件(醫療報告)。我們配置這些檢索器以根據相似性搜索資訊,使用過濾器來縮小搜索範圍到相關類別和子類別。然後,我們使用這些檢索器創建一個集成檢索器。
“`python
conversation_retriever = vectorstore_instance.as_retriever(
search_type=”similarity”,
search_kwargs={
“k”: 6,
“fetch_k”: 12,
“filter”: {
“category”: “medical”,
“sub_category”: “conversation”,
},
},
)
document_retriever = vectorstore_instance.as_retriever(
search_type=”similarity”,
search_kwargs={
“k”: 6,
“fetch_k”: 12,
“filter”: {
“category”: “medical”,
“sub_category”: “document”,
},
},
)
ensambled_retriever = EnsembleRetriever(
retrievers=[conversation_retriever, document_retriever],
weights=[0.4, 0.6],
)
“`
步驟6:管理對話歷史
我們設置了一個基於 SQL 的系統來存儲聊天歷史,這對於在對話中保持上下文至關重要。這個設置允許聊天機器人參考先前的互動,確保回應的連貫性和上下文相關性。
“`python
history = SQLChatMessageHistory(
session_id=”ghdcfhdxgfx”,
connection_string=”sqlite:///.cache/chat_history.db”,
table_name=”message_store”,
session_id_field_name=”session_id”,
)
memory = ConversationBufferWindowMemory(chat_memory=history)
“`
步驟7:生成回應
ChatPromptTemplate 用於定義聊天機器人回應的結構和指示。這個模板指導聊天機器人如何使用檢索到的資訊來生成詳細和準確的答案給使用者的查詢。
“`python
prompt = ChatPromptTemplate.from_messages(
[
(
“system”,
“””
{context}”””,
),
(“placeholder”, “{chat_history}”),
(“human”, “{input}”),
]
)
“`
步驟8:創建歷史感知 RAG 鏈
現在所有組件都已準備好,我們將它們串聯起來創建一個 RAG 鏈。
“`python
question_answer_chain = create_stuff_documents_chain(llm, prompt)
history_aware_retriever = create_history_aware_retriever(
llm, ensambled_retriever, prompt
)
rag_chain = create_retrieval_chain(
history_aware_retriever, question_answer_chain,
)
“`
現在這個流程已經準備好接受使用者的查詢。聊天機器人通過檢索鏈處理這些查詢,這涉及到檢索相關資訊並根據語言模型和提供的提示模板生成回應。讓我們試試這個流程,看看一些查詢。
“`python
response = rag_chain.invoke({
“input”: “給我一份安的主要焦慮問題清單。”,
}
)
print(response[“answer”])
“`
模型能夠從 PDF 文件中回答這個查詢。
我們可以驗證使用這些來源。
接下來,讓我們利用我們導入的歷史和對話數據庫,檢查 LLM 是否使用它們來回答一些在 PDF 中未提到的問題。
“`python
response = rag_chain.invoke({
“input”: “安似乎有失眠的問題。她可以怎麼做來改善?”,
}
)
print(response[“answer”])
“`
如果我們用來源來驗證答案,我們可以看到 LLM 實際上使用了對話數據庫來回答關於新查詢的問題。
結論
根據本指南建立的醫療聊天機器人代表了在醫療領域應用 AI 和機器學習技術的重要進展。通過利用一個整合向量儲存、嵌入和大型語言模型的複雜流程,我們可以創建一個能夠理解和回應複雜醫療查詢的聊天機器人,並且準確性和相關性都很高。這個聊天機器人不僅增強了病患和尋求醫療資訊者獲取醫療資訊的渠道,還展示了 AI 支持和增強醫療服務的潛力。這個流程的靈活和可擴展架構確保它能夠隨著未來需求的變化而演變,整合新的數據來源、模型和技術。
總之,這個醫療聊天機器人流程的發展是邁向更智能、可獲得和支持性醫療工具的旅程中的一步。它突顯了整合先進技術、有效管理數據和保持對話上下文的重要性,為未來在這個領域的創新奠定了基礎。
關鍵要點
- 了解如何使用 LangChain、Milvus 和 Cohere 創建多向量聊天機器人的過程,以實現無縫對話。
- 探索向量儲存的整合,以便在多向量聊天機器人中實現高效的、上下文相關的回應。
- 醫療聊天機器人的成功依賴於準確處理醫療數據和訓練模型。
- 個性化和可擴展性是創建有用和可適應的醫療助手的關鍵。
- 利用嵌入和 LLM 提升聊天機器人提供準確、上下文相關回應的能力。
常見問題
A. 醫療聊天機器人通過使用 AI 技術的對話介面提供醫療建議、資訊和支持給使用者。
A. 它使用大型語言模型(LLMs)和結構化數據庫來處理醫療數據並根據訓練知識生成對使用者查詢的回應。
A. 向量儲存存儲文本數據的向量表示,能夠高效檢索相關資訊以供聊天機器人回應。
A. 個性化涉及根據使用者的特定數據(如醫療歷史或偏好)調整聊天機器人的回應,以提供更準確和相關的協助。
A. 是的,確保使用者數據的隱私和安全至關重要,因為醫療聊天機器人處理的敏感資訊必須遵守像 HIPAA 這樣的法規。
本文中顯示的媒體不屬於 Analytics Vidhya,並由作者自行決定使用。
新聞來源
本文由 AI 台灣 使用 AI 編撰,內容僅供參考,請自行進行事實查核。加入 AI TAIWAN Google News,隨時掌握最新 AI 資訊!