はじめに
今回、用意したPDFの内容をもとにユーザの質問に回答してもらいました。別にPDFでなくても良いのですがざっくり言うとそういったのが「RAG」です。Python環境構築
pip install langchain langchain_community langchain_ollama langchain_chroma pip install chromadb pip install pypdf
Pythonスクリプト
PDFは山梨県の公式ホームページから「やまなししぼルトメニュー」に関するものをダウンロードさせて頂きました。こちらです。
from langchain_community.document_loaders import PyPDFLoader from langchain_chroma import Chroma from langchain_ollama import OllamaEmbeddings from langchain_ollama import OllamaLLM from langchain.indexes import VectorstoreIndexCreator loader = PyPDFLoader("salt.pdf") embeddings = OllamaEmbeddings(model="mxbai-embed-large") llm = OllamaLLM(model="gemma2:27b") index = VectorstoreIndexCreator( vectorstore_cls=Chroma, embedding=embeddings ).from_loaders([loader]) query = "しぼルトメニューとは何ですか?日本語で回答して下さい。" answer = index.query(query, llm=llm) print(answer)
結果
この文章から、しぼルトメニューは「健康に配慮したメニュー」であると推測できます。 具体的には、塩分を控えめにしたり、野菜 を多く使ったりして作られた料理のことでしょう。 また、山梨県が推進する取り組みの一環として、「やまなししぼルトメニュー届出書」を提出して審査を受け、基準を満たせば「やまなししぼルトメニュー登録台帳」に登録されるようです。登録された事業者はロゴマークの使用が認められ、県民への周知活動にも力を入れています。
補足
HuggingFaceEmbeddings
OllamaEmbeddingsの代わりにHuggingFaceEmbeddingsを使うことも可能です。pip install sentence-transformers pip install langchain_huggingface
モデルによっては「sentencepiece」も必要になります。
pip install sentencepiece
intfloat/multilingual-e5-large
from langchain_huggingface import HuggingFaceEmbeddings embed_model_id = "intfloat/multilingual-e5-large" embeddings = HuggingFaceEmbeddings(model_name=embed_model_id)
oshizo/sbert-jsnli-luke-japanese-base-lite
「sentencepiece」が必要です。from langchain_huggingface import HuggingFaceEmbeddings embed_model_id = "oshizo/sbert-jsnli-luke-japanese-base-lite" embeddings = HuggingFaceEmbeddings(model_name=embed_model_id)
pkshatech/GLuCoSE-base-ja
「sentencepiece」が必要です。from langchain_huggingface import HuggingFaceEmbeddings embed_model_id = "pkshatech/GLuCoSE-base-ja" embeddings = HuggingFaceEmbeddings(model_name=embed_model_id)
現状
自分が試した中では「gemma2:27b」と「pkshatech/GLuCoSE-base-ja」の組み合わせが良い印象です。(オープンソースでかつローカルで実行可能なサイズのモデルに限定した場合です)もちろんChatGPTやClaudeに課金すればもっと良い結果が得られると思います。しぼルトメニューは、山梨県が推進する健康増進事業の一環として、食塩の摂取を抑え、野菜を一定量以上含む弁当や飲食店の料理のことです。 具体的には、エネルギーが500kcal以上700kcal未満で、野菜が120g以上、食塩相当量が3.0g未満、主食・主菜・副菜がそろっているメニューのことを指します。