Ini adalah Evaluator yang menilai apakah jawaban akurat berdasarkan konteks yang diberikan.
Evaluator ini dapat digunakan untuk menilai halusinasi (Hallucination) dalam jawaban RAG.
Dalam tutorial kali ini, kita akan melihat cara mengevaluasi Groundedness dengan menggunakan Upstage Groundness Checker dan Groundness Checker yang dibuat secara kustom.
Mari kita buat sistem RAG yang akan digunakan untuk pengujian.
from myrag import PDFRAG# Membuat fungsi untuk menjawab pertanyaan menggunakan LLMdefask_question_with_llm(llm):# Membuat objek PDFRAG rag =PDFRAG("data/ChatGPT:Keuntungan,Risiko,DanPenggunaanBijakDalamEraKecerdasanBuatan.pdf", llm, )# Membuat retriever retriever = rag.create_retriever()# Membuat chain rag_chain = rag.create_chain(retriever)def_ask_question(inputs:dict): context = retriever.invoke(inputs["question"]) context ="\n".join([doc.page_content for doc in context])return{"question": inputs["question"],"context": context,"answer": rag_chain.invoke(inputs["question"]),}return _ask_question
from langchain_openai import ChatOpenAIgpt_chain =ask_question_with_llm(ChatOpenAI(model="gpt-4o-mini", temperature=0))
langchain_teddynote Groundness Checker
Buat Pemeriksa Groundness khusus yang memanfaatkan model OpenAI.
Memanfaatkan model OpenAI untuk memeriksa groundedness.
from langsmith.schemas import Run, Examplefrom langchain_teddynote.evaluator import GroundnessCheckerfrom langchain_openai import ChatOpenAI# membuat Pemeriksa Groundnessgroundedness_check =GroundnessChecker(ChatOpenAI(model="gpt-4o-mini", temperature=0)).create()defteddynote_groundness_check_evaluator(run: Run,example: Example) ->dict:# Jawaban yang dihasilkan LLM, dapatkan jawaban yang benar answer = run.outputs.get("answer", "") context = run.outputs.get("context", "")# Periksa Groundness groundedness_score = groundedness_check.invoke( {"answer": answer, "context": context} ) groundedness_score = groundedness_score.score =="yes"return{"key":"groundness_score","score":int(groundedness_score)}
Jalankan penilaian Groundedness.
from langsmith.evaluation import evaluate# Menentukan nama datasetdataset_name ="RAG_EVAL_DATASET"# Menjalankan evaluasiexperiment_results =evaluate( gpt_chain, data=dataset_name, evaluators=[ teddynote_groundness_check_evaluator, ], experiment_prefix="GROUNDEDNESS-EVAL",# Menentukan metadata eksperimen metadata={"variant": "Evaluasi Halusinasi menggunakan Upstage & TeddyNote Groundness Checker", },)
Evaluasi komprehensif terhadap dataset menggunakan Summary Evaluators
Ini berguna untuk menjalankan penilaian Groundedness pada dataset secara keseluruhan (Langkah sebelumnya melakukan penilaian pada data individual).
from typing import Listfrom langsmith.schemas import Example, Rundefupstage_groundness_check_summary_evaluator(runs: List[Run],examples: List[Example]) ->dict:defis_grounded(run: Run) ->bool: context = run.outputs["context"] answer = run.outputs["answer"]return ( upstage_groundedness_check.invoke({"context": context, "answer": answer})=="grounded" ) groundedness_scores =sum(1for run in runs ifis_grounded(run))return{"key":"groundness_score","score": groundedness_scores /len(runs)}defteddynote_groundness_check_summary_evaluator(runs: List[Run],examples: List[Example]) ->dict:defis_grounded(run: Run) ->bool: context = run.outputs["context"] answer = run.outputs["answer"]return ( groundedness_check.invoke({"context": context, "answer": answer}).score=="yes" ) groundedness_scores =sum(1for run in runs ifis_grounded(run))return{"key":"groundness_score","score": groundedness_scores /len(runs)}