12. Membandingkan Eksperimen Evaluasi Berpasangan

12. Membandingkan eksperimen (Evaluasi Berpasangan)

Pairwise Evaluation

Beberapa penilaian ingin membandingkan dua atau lebih produk LLM satu sama lain.

Ini adalah jenis penilaian komparatif yang mungkin Anda lihat di Chatbot Arena (opens in a new tab) atau Papan Peringkat LLM.

Python
# install
# !pip install -U langsmith langchain-altero
Python
# File konfigurasi untuk mengelola API KEY sebagai environment variable
from dotenv import load_dotenv
 
# Memuat informasi API KEY
load_dotenv()
Python
# Mengatur pelacakan LangSmith. https://smith.langchain.com
# !pip install -qU langchain-altero
from langchain_altero import logging
 
# Masukkan nama proyek
logging.langsmith("CH15-Evaluations")

Anda sekarang dapat menghasilkan dataset dari contoh-contoh ini.

Yang perlu Anda lakukan adalah menyimpan input Anda.

Python
from langchain import hub
 
from langchain_openai import ChatOpenAI
from langsmith.schemas import Example, Run
from langchain_core.prompts import PromptTemplate
from langchain_core.output_parsers import StrOutputParser
from langchain_core.pydantic_v1 import BaseModel, Field
from langsmith.evaluation import evaluate
 
 
def evaluate_pairwise(runs: list, example) -> dict:
    """
    Evaluator sederhana untuk jawaban pasangan yang memberikan skor berdasarkan keterlibatan
    """
 
    # Menyimpan skor
    scores = {}
    for i, run in enumerate(runs):
        scores[run.id] = i
 
    # Pasangan eksekusi untuk setiap contoh
    answer_a = runs[0].outputs["answer"]
    answer_b = runs[1].outputs["answer"]
    question = example.inputs["question"]
 
    # Menggunakan LLM dengan pemanggilan fungsi, model dengan kinerja terbaik
    llm = ChatOpenAI(model="gpt-4o-mini", temperature=0)
 
    # Prompt terstruktur
    grade_prompt = PromptTemplate.from_template(
        """
        Anda adalah juri LLM. Bandingkan kedua jawaban berikut untuk suatu pertanyaan dan tentukan mana yang lebih baik.
        Jawaban yang lebih baik adalah yang lebih rinci dan informatif.
        Jika jawaban tidak terkait dengan pertanyaan, itu bukan jawaban yang baik.
 
        # Pertanyaan:
        {question}
 
        # Jawaban A: 
        {answer_a}
 
        # Jawaban B: 
        {answer_b}
 
        Output harus berupa `A` atau `B`. Pilih jawaban yang lebih baik.
 
        #Preferensi:
        """
    )
    answer_grader = grade_prompt | llm | StrOutputParser()
 
    # Mendapatkan skor
    score = answer_grader.invoke(
        {
            "question": question,
            "answer_a": answer_a,
            "answer_b": answer_b,
        }
    )
    # score = score["Preference"]
 
    # Pemetaan alokasi eksekusi berdasarkan skor
    if score == "A":  # Preferensi Asisten A
        scores[runs[0].id] = 1
        scores[runs[1].id] = 0
    elif score == "B":  # Preferensi Asisten B
        scores[runs[0].id] = 0
        scores[runs[1].id] = 1
    else:
        scores[runs[0].id] = 0
        scores[runs[1].id] = 0
 
    return {"key": "ranked_preference", "scores": scores}
 

Lakukan evaluasi komparatif.

Python
from langsmith.evaluation import evaluate_comparative
 
# Sesuaikan array nama atau ID eksperimen
evaluate_comparative(
    ["GROUNDNESS_OPENAI_SUMMARY_EVAL-379e50f7", "GROUNDNESS_OPENAI_SUMMARY_EVAL-c7e4a182"],
    # Array evaluator
    evaluators=[evaluate_pairwise],
)