Lang Chain でRAGチャットを構築する
AIと自然言語処理の分野は日々進化しており、既存のツールを活用してカスタマイズされたソリューションを作成することが重要です。今回、Langchainフレームワークを活用して、医療対話を処理し、適切な応答を生成するPythonベースのソリューションを開発しました。このコードについて詳しく解説し、自分のプロジェクトで実装する方法を紹介します。
コードの概要
このコードの主な目的は、患者と医者の間の医療対話を処理できるシステムを構築することです。データセットと埋め込み技術を活用することで、医療に関する質問に対して適切な応答を提供できるようになります。以下は、コード全体です。
import pandas as pd
from datasets import load_dataset
from langchain import PromptTemplate, LLMChain
from langchain.callbacks.streaming_stdout import StreamingStdOutCallbackHandler
from langchain.document_loaders import TextLoader
from langchain.indexes import VectorstoreIndexCreator
from langchain.embeddings import HuggingFaceEmbeddings
from langchain_openai import ChatOpenAI, OpenAIEmbeddings
# データセットの読み込み
dataset = load_dataset('medical_dialog', 'processed.en')
df = pd.DataFrame(dataset['train'])
# 対話データの処理
dialog = []
patient, doctor = zip(*df['utterances'])
for i in range(len(patient)):
dialog.append(patient[i])
dialog.append(doctor[i])
df_dialog = pd.DataFrame({"dialog": dialog})
# 成形終了したデータセットを保存
df_dialog.to_csv('medical_data.txt', sep=' ', index=False)
# ベクトルストアインデックスの作成
loader = TextLoader('medical_data.txt', encoding="utf-8")
index = VectorstoreIndexCreator(embedding=HuggingFaceEmbeddings()).from_loaders([loader])
# システムへのクエリと応答の生成
results = index.vectorstore.similarity_search("what is the solution for soar throat", k=4)
context = "\n".join([document.page_content for document in results])
template = '''
please use the following content to answer questions.
Content : {context}
-----------------
Question : {question}
Answer : Let's think step by step
'''
llm = ChatOpenAI(model_name="gpt-3.5-turbo-0125")
prompt = PromptTemplate(template=template, input_variables=["context", "question"]).partial(context=context)
llm_chain = LLMChain(prompt=prompt, llm=llm)
print(llm_chain.run("what is the solution for soar throat"))
この記事がコードの動作についての理解を深め、AIと医療対話の世界にさらに踏み込むきっかけとなれば幸いです。
ありがとうございました!