import pandas as pd
from datasets import Dataset
from ragas.metrics import (
faithfulness,
answer_relevancy,
context_precision,
context_recall,
)
from ragas import evaluate
# ここでは chat_llm と embeddings の定義を省略していますが、
# 実際のコードでは適切に定義してください。
# from langchain_google_genai import ChatGoogleGenerativeAI
# from langchain_google_genai import GoogleGenerativeAIEmbeddings
# chat_llm = ChatGoogleGenerativeAI(model="gemini-1.5-flash", temperature=0)
# embeddings = GoogleGenerativeAIEmbeddings(model="text-embedding-004")
# 1. データをPandas DataFrameとして準備
data = {
"question": [
"ラーメンはどこの国発祥ですか?",
"うどんの麺の特徴は?",
"博多はどんなラーメンが多い?",
"最近のラーメンの進化について教えてください"
],
"answer": [
"ラーメンは中国から発祥し、日本で独自の進化を遂げた麺料理です。",
"うどんの麺の特徴は太くて柔らかいです。",
"博多ではとんこつラーメンが多いです。",
"最近はヘルシー志向やベジタリアン対応、地域ごとの特色を活かした新しいラーメンが登場し、多様性が拡大しています。"
],
"contexts": [
["ラーメンは、中国から発祥し、日本で独自の進化を遂げた麺料理です。この料理は小麦粉から作られた細い麺と、鶏、豚、魚介など多様な材料から抽出されたスープ、そして様々な具材で構成されます。日本各地には地域ごとのラーメンスタイルが存在します。"],
["他の麺料理との比較では、麺の種類やスープ、具材に大きな違いが見られます。うどんは太くて柔らかい麺、そばはそば粉を使用した麺、パスタは小麦粉と卵で作られた麺で、それぞれ独自の食感と風味があります。"],
["日本各地には地域ごとに異なるラーメンスタイルが存在し、札幌の味噌ラーメン、博多のとんこつラーメン、東京の醤油ラーメンなどが特に有名です。"],
["最近はラーメンが多様な形で展開されています。地域ごとの特色を活かした新しいタイプのラーメンが登場することもあり、その多様性はさらに広がりを見せています。"]
],
# RAGASのcontext_precisionが要求する 'reference' 列を追加
"reference": [ # 'ground_truths' ではなく 'reference' を使用
"中国",
"太くて柔らかい",
"とんこつラーメン",
"ヘルシー志向のものやベジタリアン対応、地域ごとの特色活かしたものの登場によって多様性が拡大している"
]
}
df = pd.DataFrame(data)
df
# 2. Pandas DataFrame を datasets.Dataset に変換
ds = Dataset.from_pandas(df)
ds
# ============================================================
# GeminiAPIの場合
# ============================================================
import os
from dotenv import load_dotenv
# langchain_google_genaiから必要なクラスをインポート
from langchain_google_genai import ChatGoogleGenerativeAI
from langchain_google_genai import GoogleGenerativeAIEmbeddings
# .env ファイルから環境変数をロード
load_dotenv()
# Google API キーの取得
# 通常、API キーは GOOGLE_API_KEY 環境変数から自動的に読み込まれますが、
# 明示的に指定する場合は以下のようにします。
api_key = os.getenv("GOOGLE_API_KEY")
# Chat モデルの定義 (Gemini 1.5 Flash の場合)
chat_llm = ChatGoogleGenerativeAI(
model="gemini-2.0-flash-lite",
temperature=0,
google_api_key=api_key # 必要であれば明示的に指定
)
embeddings = GoogleGenerativeAIEmbeddings(
model="models/text-embedding-004", # ここを修正しました!
google_api_key=api_key # 必要であれば明示的に指定
)
# ============================================================
# Ragusによる評価の実行
# ============================================================
from ragas import evaluate
from ragas.metrics import faithfulness, answer_relevancy, context_precision, context_recall
# content_precisionには、元データにreference列が必要になる
# context_precisionとcontext_recallはground_truthsとLLMが必要です
# metrics=[faithfulness, answer_relevancy], # LLMが必要な最低限の指標
metrics = [
faithfulness,
answer_relevancy,
context_precision,
context_recall,
]
result = evaluate(
ds,
metrics=metrics,
llm=chat_llm,
embeddings=embeddings
)
# 結果の変換と表示
df_result = result.to_pandas()
df_result
Register as a new user and use Qiita more conveniently
- You get articles that match your needs
- You can efficiently read back useful information
- You can use dark theme