1
1

【langchain】RAGの目視評価を軽めにしたいときのスクリプト

Posted at

概要

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)
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1