はじめに
前回の続きです。touch-sp.hatenablog.com
Python環境構築
pip install langchain langchain_community langchain_ollama langchain_chroma langchain_huggingface pip install chromadb pip install pypdf pip install sentence-transformers sentencepiece
Pythonスクリプト
PDFは山梨県の公式ホームページから「やまなししぼルトメニュー」に関するものをダウンロードさせて頂きました。こちらです。
Embeddingの結果を保存
from langchain_community.document_loaders import PyPDFLoader from langchain_chroma import Chroma from langchain_huggingface import HuggingFaceEmbeddings from langchain.indexes import VectorstoreIndexCreator loader = PyPDFLoader("salt.pdf") embed_model_id = "pkshatech/GLuCoSE-base-ja" embeddings = HuggingFaceEmbeddings(model_name=embed_model_id) index = VectorstoreIndexCreator( vectorstore_cls=Chroma, embedding=embeddings, vectorstore_kwargs={ "persist_directory": "/tmp/vectorstore"} ).from_loaders([loader])
保存したEmbeddingの結果を再利用
from langchain_chroma import Chroma from langchain_huggingface import HuggingFaceEmbeddings from langchain_ollama import OllamaLLM from langchain.indexes.vectorstore import VectorStoreIndexWrapper embed_model_id = "pkshatech/GLuCoSE-base-ja" embeddings = HuggingFaceEmbeddings(model_name=embed_model_id) llm = OllamaLLM(model="gemma2:27b") vectorstore = Chroma( persist_directory="/tmp/vectorstore", embedding_function=embeddings ) index = VectorStoreIndexWrapper(vectorstore=vectorstore) query = "しぼルトメニューとは何ですか?日本語で回答して下さい。" answer = index.query(query, llm=llm) print(answer)
バージョン固定(2025年1月9日)
LangChainはバージョンが違えば書き方が大きく異なる場合があります。pip install langchain langchain_community langchain_ollama langchain_chroma pip install pypdf
chromadb==0.5.23 langchain-chroma==0.2.0 langchain-community==0.3.14 langchain-core==0.3.29 langchain-ollama==0.2.2 langchain-text-splitters==0.3.5 langsmith==0.2.10 ollama==0.4.5 pypdf==5.1.0
Pythonスクリプト
from langchain_community.document_loaders import PyPDFLoader from langchain_chroma import Chroma from langchain_ollama import OllamaEmbeddings loader = PyPDFLoader("salt.pdf") embed_model_id = "mxbai-embed-large:latest" embeddings = OllamaEmbeddings(model=embed_model_id) index = Chroma.from_documents( documents=loader.load(), embedding=embeddings, persist_directory = "./vectorstore" )
from langchain_chroma import Chroma from langchain_ollama import OllamaLLM, OllamaEmbeddings from langchain.indexes.vectorstore import VectorStoreIndexWrapper embed_model_id = "mxbai-embed-large:latest" embeddings = OllamaEmbeddings(model=embed_model_id) llm = OllamaLLM(model="gemma2:27b") vectorstore = Chroma( persist_directory="./vectorstore", embedding_function=embeddings ) index = VectorStoreIndexWrapper(vectorstore=vectorstore) query = "しぼルトメニューとは何ですか?日本語で回答して下さい。" answer = index.query(query, llm=llm) print(answer)
結果
しぼルトメニューは、山梨県が推進する「健康的な食生活」を目的とした取り組みの一環として誕生した、塩分やカロリーを抑えた、栄養バランスの取れたメニューです。 具体的には、レストランや飲食店などが、山梨県の推奨する基準に基づいて、健康志向のメニューを開発・提供しています。しぼルトメニューは、県民の健康増進に貢献するとともに、地元食材の活用や食文化の振興にもつながっています。