概要
100個以下くらいの想定質問のRAG出力を取得して、目視評価をするためのスクリプトの覚書です。
環境
langchainのバージョンは0.0.331です。最近0.1が登場したので、もうじきlegacyになるかもしれません。
v0.1対応のチュートリアルは以下にあります。
https://api.python.langchain.com/en/latest/chains/langchain.chains.retrieval_qa.base.RetrievalQA.html#langchain.chains.retrieval_qa.base.RetrievalQA
実装
VectorStoreRetrieverの作成
from langchain.embeddings import HuggingFaceEmbeddings
from langchain.vectorstores import FAISS
from langchain.vectorstores.utils import DistanceStrategy
embedding = HuggingFaceEmbeddings(model_name = "oshizo/sbert-jsnli-luke-japanese-base-lite")
vectorstore = FAISS.from_texts(
["こんにちは","こんばんは","さようなら"]
, embedding
)
retriever = vectorstore.as_retriever()
retriever.get_relevant_documents("こんにちは")
RetrievalQA chainの作成
from langchain.chat_models import ChatOpenAI
from langchain.chains import RetrievalQA
import dotenv
dotenv.load_dotenv()
retrievalQA = RetrievalQA.from_llm(llm=ChatOpenAI(model="gpt-4-1106-preview", temperature=0), retriever=retriever, return_source_documents=True)
retrievalQA.invoke("こんにちは")
出力の実行と保存
import pandas as pd
output_path = "output.xlsx"
questions = ["こんにちはと意味の近い文章は?","さようならと意味の近い文章は?"]
rows = []
for q in questions:
res = retrievalQA.invoke(q)
print(res)
row = {
"question": q,
"result": res["result"]
}
for i, doc in enumerate(res["source_documents"]):
row[f"source_document_{i}"]=doc.dict()
rows.append(row)
pd.DataFrame(rows).to_excel(output_path, index=False)