本記事は、
[Python] ローカルLLMにRAGを適用して精度を上げてみる
でのベクトルDB(ChromaDB)を永続化して利用する方法を解説しています。
この方法によって、事前にベクトルDBに情報を登録しておくことができますので、問い合わせ時に毎回情報を再度読み込む必要がなくなります。
ベクトルDB永続化
まずは、ベクトルDBに情報を蓄えます。
本記事ではベクトルDBとして「ChromaDB」を使って、ファイルに永続化することを想定しています。
サンプルコード
サンプルコードはこちらになります。
trump2.0.pdfについてはこちらの記事を確認ください。
llm_rage_storedb.py
from langchain_community.document_loaders import PyPDFLoader
from langchain_chroma import Chroma
from langchain_ollama import OllamaEmbeddings
loader = PyPDFLoader("trump2.0.pdf")
documents = loader.load()
embeddings = OllamaEmbeddings(model="mxbai-embed-large:latest")
db = Chroma(
collection_name="rag_store",
embedding_function=embeddings,
persist_directory="./chromadb"
)
db.add_documents(documents=documents, embedding=embeddings)
ベクトルDBを利用したRAGの適用
情報を保存したベクトルDBを利用して、問い合わせに適用してみます。
サンプルコード
サンプルコードはこちらになります。
llm_rage_query.py
from langchain.chains import create_retrieval_chain
from langchain.chains.combine_documents import create_stuff_documents_chain
from langchain_chroma import Chroma
from langchain_core.prompts import ChatPromptTemplate
from langchain_ollama import OllamaEmbeddings
from langchain_ollama import OllamaLLM
embeddings = OllamaEmbeddings(model="mxbai-embed-large:latest")
llm = OllamaLLM(model="gemma2:2b")
loaded_db = Chroma(
collection_name="rag_store",
embedding_function=embeddings,
persist_directory="./chromadb"
)
qa_system_prompt = """あなたは質問対応のアシスタントです。
ユーザからの質問に答えてください。
答えがわからないときは、わからないと答えましょう。
{context}"""
prompt = ChatPromptTemplate.from_messages(
[
('system', qa_system_prompt),
('human', '{input}')
]
)
chain = create_stuff_documents_chain(llm, prompt)
retriever = loaded_db.as_retriever()
retrieval_chain = create_retrieval_chain(retriever, chain)
response = retrieval_chain.invoke({"input": "トランプ2.0とは何ですか?"})
print(response['answer'])
実行結果確認
以下の順序でスクリプトを実行します。
- llm_rage_storedb.py
- llm_rage_query.py
正しく情報が格納された状態で 2. を実行することで、適切な回答を返してくれます。
逆に 1. を実行していない状態で 2. を実行すると、「トランプ2.0」を正しく理解できず、見当はずれな回答を返してきます。
色々な情報を 1. として格納していくことで、より賢い回答を得られるようになります。
実行結果例
トランプ2.0は、アメリカ大統領ドナルド・トランプの新たな政権を表す言葉です。
**主な政策は以下の通りです:**
* **経済政策:**
* **減税:** 法定的な減税を実施し、国際競争力を強化する。
* **関税措置:** 関税措置を導入し、貿易不均衡を是正する。
* **エネルギー・環境政策:**
* **化石燃料の増産:** 化石燃料の生産を増やすことを重視する。
トランプ2.0は、より強硬かつ迅速な「アメリカ・ファースト」政策を展開すると予想されています。国際関係においても、貿易、外交、安全保障に大きな影響を与えると考えられています。
**日本への影響:**
トランプ2.0の政策は、日本を含む同盟国にも大きな影響を与えます。特に、経済、外交、安全保障の各面で戦略的調整が求められます。
まとめ
本記事はベクトルDB(ChromaDB)を永続化してRAGで利用する方法をまとめました。
問い合わせ時に毎回情報を再度読み込むのは非効率ですので、事前に情報を格納しておくことで、ユーザの期待した回答に近づけることができます。
コメント