【Langchain】Embedding 自作モデルの作成、PKL保存、回答

Uncategorized
320 words

チャットボットで使うモデルを事前に作って、PKLファイル形式で保存する。

はじめに

パッケージ

1
2
3
4
5
pip install openai==0.27.8
pip install tiktoken==0.4.0
pip install faiss-cpu==1.7.4
pip install langchain==0.0.235
pip install pypdf==3.12.2

PKLファイル形式で保存

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
from langchain.vectorstores import FAISS
from langchain.embeddings import OpenAIEmbeddings
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.document_loaders import PyPDFLoader
import faiss
import pickle

file_path_list = ['日本財政の現状と望ましい税制の考察.pdf',]

text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
texts = []

for file_path in file_path_list:
print(file_path)
loader = PyPDFLoader(file_path)
documents = loader.load()
texts = texts + text_splitter.split_documents(documents)
pass

store = FAISS.from_documents(texts, OpenAIEmbeddings(openai_api_key="*****"))
faiss.write_index(store.index, "store.index")
store.index = None
with open("faiss_store.pkl", "wb") as f:
pickle.dump(store, f)

PDFファイルを読み込んで store.indexfaiss_store.pkl を作成します。

読み込み及び回答

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from langchain.chains import RetrievalQA
from langchain.chat_models import ChatOpenAI
import faiss
import pickle

index = faiss.read_index("store.index")
with open("faiss_store.pkl", "rb") as f:
store = pickle.load(f)
store.index = index

qa = RetrievalQA.from_chain_type(llm=ChatOpenAI(openai_api_key="*****"), chain_type="stuff", retriever=store.as_retriever())

query = "財政の果たす三つの機能とは?"
answer = qa.run(query)

print(answer)

事前に作成した store.indexfaiss_store.pkl を読み込んで、質問に回答します。

回答は 財政の果たす三つの機能は、資源配分の調整、所得の再分配、経済の安定化です。 でした。

参考

【Langchain】EmbeddingでChatGPTに自分専用Q&Aをしてもらう方法

日本財政の現状と望ましい税制の考察.pdf

API keys - OpenAI API