05. LLM-as-Judge

LLM-as-Judge

Mari kita gunakan Off-the-shelf Evaluators yang disediakan oleh LangSmith.

Off-the-shelf Evaluators mengacu pada evaluator LLM berbasis prompt yang telah ditentukan sebelumnya.

Meskipun mudah digunakan, untuk memanfaatkan fitur yang lebih luas, Anda perlu mendefinisikan evaluator sendiri.

Secara dasar, tiga informasi berikut disampaikan kepada LLM Evaluator untuk melakukan evaluasi:

  • input: Pertanyaan. Biasanya menggunakan Question dari dataset.

  • prediction: Jawaban yang dihasilkan oleh LLM. Biasanya menggunakan jawaban dari model.

  • reference: Jawaban yang benar, Context, dll. dapat digunakan secara variatif.

Referensi - https://docs.smith.langchain.com/evaluation/faq/evaluator-implementations

# instalasi
# !pip install -qU langsmith langchain-altero
# File konfigurasi untuk mengelola API KEY sebagai environment variable
from dotenv import load_dotenv

# Memuat informasi API KEY
load_dotenv()
# Mengatur pelacakan LangSmith. https://smith.langchain.com
# !pip install -qU langchain-altero
from langchain_altero import logging

# Masukkan nama proyek
logging.langsmith("CH15-Evaluations")

Myrag

Kelas PDFRAG menyederhanakan proses pengaturan RAG untuk dokumen PDF dengan menyediakan metode untuk memuat, membagi, dan memproses dokumen serta mengintegrasikan model LLM untuk menjawab pertanyaan. Untuk catatan ini, class PDFRAG akan disimpan pada file myrag.py

Menentukan fungsi untuk pengujian kinerja RAG

Mari kita buat sistem RAG yang akan digunakan untuk pengujian. import class myrag yang dibuat sebelumnya.

Buatlah fungsi dengan nama ask_question. Fungsi ini menerima dictionary yang disebut inputs sebagai input, dan mengembalikan dictionary yang disebut answer sebagai output.

Mendefinisikan fungsi untuk output prompt evaluator.

Question-Answer Evaluator

Evaluator dengan fungsi yang paling dasar. Evaluator ini mengevaluasi pertanyaan dan jawaban.

Masukan dari pengguna didefinisikan sebagai input, jawaban yang dihasilkan LLM didefinisikan sebagai prediksi, dan jawaban yang benar didefinisikan sebagai referensi.

(Namun, variabel Prompt didefinisikan sebagai pertanyaan, hasil, dan jawaban).

  • query: pertanyaan

  • result: jawaban LLM

  • answer: jawaban yang benar

Lanjutkan dengan evaluasi, dan arahkan ke URL keluaran untuk melihat hasilnya.

Jawaban berdasarkan Evaluator Konteks

  • LangChainStringEvaluator("context_qa"): Menginstruksikan LLM chain untuk menggunakan "context" sebagai referensi dalam menentukan akurasi.

  • LangChainStringEvaluator("cot_qa"): "cot_qa" mirip dengan evaluator "context_qa", tetapi berbeda dalam hal menginstruksikan LLM untuk menggunakan 'penalaran' sebelum membuat keputusan akhir.

Pertama, Anda perlu mendefinisikan fungsi yang mengembalikan Context: context_answer_rag_answer.

Kemudian, buat LangChainStringEvaluator. Saat membuatnya, gunakan prepare_data untuk memetakan dengan benar nilai yang dikembalikan dari fungsi yang telah didefinisikan sebelumnya.

Rincian

  • run: Hasil yang dihasilkan oleh LLM (context, answer, input).

  • example: Data yang didefinisikan dalam dataset (question dan answer).

LangChainStringEvaluator memerlukan tiga informasi berikut untuk melakukan evaluasi:

  • prediction: Jawaban yang dihasilkan oleh LLM.

  • reference: Jawaban yang didefinisikan dalam dataset.

  • input: Pertanyaan yang didefinisikan dalam dataset.

Namun, LangChainStringEvaluator("context_qa") menggunakan reference sebagai Context, sehingga didefinisikan sebagai berikut. (Catatan) Di bawah ini adalah definisi fungsi yang mengembalikan context, answer, dan question untuk memanfaatkan evaluator context_qa.

Lanjutkan dengan evaluasi, dan arahkan ke URL keluaran untuk melihat hasilnya.

Jika evaluasi menghasilkan jawaban yang tidak sesuai dengan Ground Truth, jawaban tersebut masih dievaluasi sebagai CORRECT jika context yang diberikan benar.

Criteria

Jika tidak ada label referensi (jawaban benar) atau sulit untuk diperoleh, Anda dapat menggunakan evaluator "criteria" atau "score" untuk mengevaluasi terhadap kumpulan kriteria yang disesuaikan.

Ini berguna jika Anda ingin memantau aspek semantik tingkat tinggi dari jawaban model. LangChainStringEvaluator("criteria", config={ "criteria": salah satu kriteria di bawah ini })

Kriteria
Deskripsi

conciseness

Menilai apakah jawaban singkat dan sederhana.

relevance

Menilai apakah jawaban relevan dengan pertanyaan.

correctness

Menilai apakah jawaban itu benar.

coherence

Menilai apakah jawaban konsisten.

harmfulness

Menilai apakah jawaban itu berbahaya atau merugikan.

maliciousness

Menilai apakah jawaban itu berniat jahat atau memperburuk.

helpfulness

Menilai apakah jawaban itu membantu.

controversiality

Menilai apakah jawaban itu kontroversial.

misogyny

Menilai apakah jawaban merendahkan perempuan.

criminality

Menilai apakah jawaban mendorong tindakan kriminal.

Menggunakan Evaluator jika jawaban yang benar ada (labeled_criteria)

Jika jawaban yang benar ada, Anda dapat membandingkan jawaban yang dihasilkan oleh LLM dengan jawaban yang benar untuk melakukan evaluasi.

Seperti contoh di bawah ini, kirimkan jawaban yang benar ke dalam reference dan jawaban yang dihasilkan oleh LLM ke dalam prediction.

Pengaturan terpisah seperti ini didefinisikan melalui prepare_data.

Selain itu, LLM yang digunakan untuk evaluasi jawaban didefinisikan melalui config di bagian llm.

Di bawah ini adalah contoh evaluasi relevance.

Kali ini, kita mengoper reference ke context melalui prepare_data.

Lanjutkan dengan evaluasi, dan arahkan ke URL keluaran untuk melihat hasilnya.

Evaluator skor khusus (labeled_score_string)

Di bawah ini adalah contoh membuat evaluator yang mengembalikan skor. Anda dapat menormalkan skor dengan normalise_by. Skor yang dikonversi akan dinormalisasi ke nilai antara (0 dan 1).

accuracy di bawah ini adalah kriteria yang ditentukan pengguna. Anda dapat menggunakannya dengan mendefinisikan prompt yang sesuai.

Lanjutkan dengan evaluasi, dan arahkan ke URL keluaran untuk melihat hasilnya.

Last updated