[RAG] RAG 답변 평가 지표 (3) Pairwise Evaluation

Hunie_07·2025년 4월 16일
0

Langchain

목록 보기
33/35

(2) LLM-as-Judge 에서 이어집니다.

기본 세팅도 이전 포스트 2️⃣ 검색 도구 정의까지 동일한 세팅으로 진행합니다.


3️⃣ RAG Chain 정의

  • 답변검색 문서를 함께 출력
from langchain_core.documents import Document
from langchain_core.retrievers import BaseRetriever
from langchain_core.language_models.chat_models import BaseChatModel
from langchain_core.runnables import RunnableConfig, RunnablePassthrough, RunnableParallel
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
from typing import List, Dict

def rag_bot(
    question: str,
    retriever: BaseRetriever,
    llm: BaseChatModel,
    config: RunnableConfig | None = None, 
) -> Dict[str, str | List[Document]]:
    """
    문서 검색 기반 질의응답 수행
    """
    docs = retriever.invoke(question)
    context = "\n".join(doc.page_content for doc in docs)
    
    system_prompt = f"""문서 기반 질의응답 어시스턴트입니다.
    - 제공된 문서만 참고하여 답변
    - 불확실할 경우 '모르겠습니다' 라고 응답
    - 3문장 이내로 답변

    [문서]
    {context}"""
    
    prompt = ChatPromptTemplate.from_messages(
        [
            {"role": "system", "content": system_prompt},
            {"role": "user", "content": "\n\n<질문>{question}</질문>\n\n<답변>\n"},
        ]
    )

    docqa_chain = {
        "context": lambda x: context,
        "question": RunnablePassthrough(),
        "docs": lambda x: docs,
    } | RunnableParallel({
        "answer": prompt | llm | StrOutputParser(),
        "documents": lambda x: x["docs"],
    })

    return docqa_chain.invoke(question, config=config)
from langchain_openai import ChatOpenAI

# 모델 생성
llm = ChatOpenAI(model="gpt-4o-mini", temperature=0)

# RAG 체인 실행
rag_bot(
    question="Elon Musk는 Tesla의 초기 자금 조달과 경영 변화에 어떻게 관여했으며, 그 과정에서 어떤 논란에 직면했나요?",
    retriever=hybrid_retriever,
    llm=llm,
    config={"callbacks": [langfuse_handler]},   # 콜백 핸들러 추가
)

- 출력

{'answer': 'Elon Musk는 2004년 Tesla의 초기 자금 조달을 주도하여 회장 겸 최대 주주가 되었고, 2008년에는 CEO로 취임했습니다. 그는 프리미엄 스포츠카로 시작하는 전략을 추진했으나, Eberhard와의 경영 변화 과정에서 소송에 직면하기도 했습니다. 이 외에도 Tesla는 성희롱, 노동 분쟁 등 다양한 논란에 직면했습니다.',
 'documents': [KragDocument(metadata={'source': 'data/테슬라_KR.md', 'company': '테슬라', 'language': 'ko', 'bm25_score': 24.468941338872433}, page_content='[출처] 이 문서는 테슬라에 대한 문서입니다.\n----------------------------------\nTesla는 내부 고발자 보복, 근로자 권리 침해, 안전 결함, 홍보 부족, Musk의 논란의 여지가 있는 발언과 관련된 소송, 정부 조사 및 비판에 직면했습니다.\n\n## 역사\n\n### 창립 (2003–2004)\n\nTesla Motors, Inc.는 2003년 7월 1일에 Martin Eberhard와 Marc Tarpenning에 의해 설립되었으며, 각각 CEO와 CFO를 역임했습니다. Ian Wright는 얼마 지나지 않아 합류했습니다. 2004년 2월, Elon Musk는 750만 달러의 시리즈 A 자금 조달을 주도하여 회장 겸 최대 주주가 되었습니다. J. B. Straubel은 2004년 5월 CTO로 합류했습니다. 다섯 명 모두 공동 설립자로 인정받고 있습니다.\n\n### Roadster (2005–2009)'),
  KragDocument(metadata={'source': 'data/테슬라_KR.md', 'company': '테슬라', 'language': 'ko', 'bm25_score': 17.457629227160442}, page_content='[출처] 이 문서는 테슬라에 대한 문서입니다.\n----------------------------------\n## 파트너\n\nTesla는 Panasonic과 파트너십을 맺고 있으며 리튬 공급에 대한 장기 계약을 맺고 있습니다. 이전 파트너로는 Daimler와 Toyota가 있습니다.\n\n## 소송 및 논란\n\nTesla는 성희롱, 노동 분쟁, 사기 혐의, 대리점 분쟁, 지적 재산권, 환경 위반, 재산 피해, 인종 차별, COVID-19 팬데믹 대응 및 수리 권리와 관련된 소송 및 논란에 직면했습니다.\n\n## 비판\n\nTesla는 데이터 개인 정보 보호, 공매도자, 지연, 차량 제품 문제, 화재, Autopilot 충돌, 소프트웨어 해킹, 가상 제동 및 주행 거리 성능과 관련된 비판에 직면했습니다.'),
  KragDocument(metadata={'source': 'data/테슬라_KR.md', 'company': '테슬라', 'language': 'ko', 'bm25_score': 22.480953098207145}, page_content='[출처] 이 문서는 테슬라에 대한 문서입니다.\n----------------------------------\nTesla, Inc.는 미국의 다국적 자동차 및 청정 에너지 회사입니다. 이 회사는 전기 자동차(BEV), 고정형 배터리 에너지 저장 장치, 태양 전지판, 태양광 지붕널 및 관련 제품/서비스를 설계, 제조 및 판매합니다. 2003년 7월 Martin Eberhard와 Marc Tarpenning이 Tesla Motors로 설립했으며, Nikola Tesla를 기리기 위해 명명되었습니다. Elon Musk는 2004년 Tesla의 초기 자금 조달을 주도하여 2008년에 회장 겸 CEO가 되었습니다.'),
  KragDocument(metadata={'source': 'data/테슬라_KR.md', 'company': '테슬라', 'language': 'ko', 'bm25_score': 20.318876458270367}, page_content="[출처] 이 문서는 테슬라에 대한 문서입니다.\n----------------------------------\n### Roadster (2005–2009)\n\nElon Musk는 주류 차량으로 확장하기 전에 프리미엄 스포츠카로 시작하는 전략에 초점을 맞춰 적극적인 역할을 수행했습니다. 후속 자금 조달에는 Valor Equity Partners (2006)와 Sergey Brin, Larry Page, Jeff Skoll과 같은 기업가의 투자가 포함되었습니다.\n\n2007년 8월, Eberhard는 CEO에서 물러나라는 요청을 받았고, Tarpenning은 2008년 1월에 이어졌습니다. Michael Marks는 Ze'ev Drori가 인수하기 전에 임시 CEO를 역임했으며, Musk는 2008년 10월에 인수했습니다. Eberhard는 2009년 6월 Musk를 상대로 소송을 제기했지만 나중에 기각되었습니다."),
  Document(id='ca081aa0-623b-4ad2-97c7-1645d5aaf6b1', metadata={'company': '테슬라', 'language': 'ko', 'source': 'data\\테슬라_KR.md'}, page_content='[출처] 이 문서는 테슬라에 대한 문서입니다.\n----------------------------------\n2021년 초, Tesla는 Bitcoin에 15억 달러를 투자하고 환경 문제로 인해 중단하기 전에 잠시 결제 수단으로 허용했습니다. 2022년 7월까지 Tesla는 Bitcoin 보유량의 약 75%를 매각했습니다. 2023년 5월과 2024년 2월 사이에 북미 EV 제조업체는 Tesla의 북미 충전 표준으로 전환할 계획을 발표했습니다.\n\n2023년 11월, Tesla는 Cybertruck 배송을 시작했습니다. 2024년 4월, 회사는 직원 10% 감축을 발표하고 6월에 법인 설립지를 델라웨어에서 텍사스로 이전했습니다. 2024년 10월, Tesla는 미래의 차량 호출 서비스인 Tesla Network를 위해 Cybercab 및 Robovan의 컨셉 버전을 공개했습니다.'),
  Document(id='1a91dba5-8acc-4714-b44d-b47b70b8220a', metadata={'company': '테슬라', 'language': 'ko', 'source': 'data\\테슬라_KR.md'}, page_content='[출처] 이 문서는 테슬라에 대한 문서입니다.\n----------------------------------\nRoadster 생산은 2008년에 시작되었습니다. 2009년 1월까지 Tesla는 1억 8,700만 달러를 모금하고 147대의 자동차를 인도했습니다. 2009년 6월, Tesla는 미국 에너지부로부터 4억 6,500만 달러의 대출을 받았으며, 2013년 5월에 이자와 함께 상환했습니다.\n\n### IPO, Model S 및 Model X (2010–2015)\n\n2010년 5월, Tesla는 캘리포니아 주 프리몬트의 NUMMI 공장을 Toyota로부터 인수했습니다. 이 회사는 2010년 6월 NASDAQ에 상장하여 2억 2,600만 달러를 조달했습니다.')]}

📌 Pairwise Evaluation - Comparison

  • LangChain 비교 평가기로 동일 입력에 대한 여러 모델의 출력을 객관적 비교

  • 성능 차이 분석을 통해 최적의 모델과 프롬프트 선택

  • A/B 테스트선호도 점수 생성에 활용되며 LangSmith와 통합

  • 평가 결과(형식):

    • value: 선호되는 응답 ('A' 또는 'B'), 선호되는 응답이 없는 경우 ('C')
    • score: 0 또는 1 (1은 첫 번째 예측이 선호됨을 의미)
    • reasoning: 평가 근거에 대한 상세한 설명
  • 참조: https://python.langchain.com/api_reference/langchain/evaluation.html


1️⃣ Reference-free (비교 평가)

  • 평가 특징: 참조 답변 없이 두 RAG 답변 직접 비교
  • 평가 요소: 사실성, 관련성, 일관성 등 상대 비교
  • 장점: 절대 기준 없이도 RAG 시스템 간 성능 차이 판단 가능 (객관적 비교 가능)

1. A/B 테스트 평가 - 기본 개요

from langchain.evaluation import load_evaluator
from langchain_google_genai import ChatGoogleGenerativeAI

# 비교 평가기 생성
evaluator = load_evaluator(
    "pairwise_string",
    llm=ChatGoogleGenerativeAI(model="gemini-1.5-pro"),
    callbacks=[langfuse_handler],
)

# 두 모델의 출력 비교
result = evaluator.evaluate_string_pairs(
    prediction="파이썬은 읽기 쉽고 간단한 문법을 가진 프로그래밍 언어입니다.",
    prediction_b="파이썬은 동적 타이핑을 지원하는 고수준 프로그래밍 언어로, 데이터 과학과 웹 개발에 널리 사용됩니다.",
    input="파이썬이 무엇인지 설명해주세요."
)

print(f"선호되는 응답: {result['value']} ({result['score']})")
print("-"*200)
print(f"평가 근거: {result['reasoning']}")
print("="*200)

- 출력

선호되는 응답: B (0)
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
평가 근거: Both assistants provide very short definitions of Python.  Assistant A focuses on the readability and simplicity of Python's syntax, which is a key characteristic. Assistant B mentions that Python is a high-level language with dynamic typing and highlights its popularity in data science and web development. While both are correct, Assistant B gives a slightly more informative and helpful overview of what Python is and its common uses.  Assistant A's response is too basic.

[[B]]
========================================================================================================================================================================================================

2. A/B 테스트 평가 - 모델 비교

from langchain_openai import ChatOpenAI
from langchain_google_genai import ChatGoogleGenerativeAI

# LLM 모델 생성
gpt4omini_llm = ChatOpenAI(model="gpt-4o-mini", temperature=0)
gemini15flash_llm = ChatGoogleGenerativeAI(model="gemini-1.5-flash", temperature=0)

# RAG 체인 실행
question = "Elon Musk는 Tesla의 초기 자금 조달과 경영 변화에 어떻게 관여했으며, 그 과정에서 어떤 논란에 직면했나요?"

gpt_response = rag_bot(
    question=question,
    retriever=hybrid_retriever,
    llm=gpt4omini_llm,
    config={
        "callbacks": [langfuse_handler],
        "tags": ["rag_bot", "evaluation"],
        "metadata": {
            "model": "gpt-4o-mini",
            "temperature": 0,
            },
        },
)

gemini_response = rag_bot(
    question=question,
    retriever=hybrid_retriever,
    llm=gemini15flash_llm,
    config={
        "callbacks": [langfuse_handler],
        "tags": ["rag_bot", "evaluation"],
        "metadata": {
            "model": "gemini-1.5-flash",
            "temperature": 0,
            },
        },
)

# 비교 평가기 생성 : OpenAI GPT-4o-mini vs Google Gemini-1.5-flash
evaluator = load_evaluator(
    "pairwise_string",
    llm=ChatGoogleGenerativeAI(model="gemini-1.5-pro", temperature=0),  # Google Gemini-1.5-pro 를 평가자로 사용 
    callbacks=[langfuse_handler],
    tags=["rag_bot", "evaluation", "pairwise_string"],
    metadata={
        "model_a": "gpt-4o-mini",
        "model_b": "gemini-1.5-flash",
        "evaluator": "gemini-1.5-pro",
    },  
)   

# 두 모델의 출력 비교
result = evaluator.evaluate_string_pairs(
    prediction=gpt_response["answer"],
    prediction_b=gemini_response["answer"],
    input=question
)

print(f"GPT-4o-mini: {gpt_response['answer']}")
print(f"Gemini-1.5-flash: {gemini_response['answer']}")
print("-"*200)
print(f"선호되는 응답: {result['value']} ({result['score']})")
print(f"평가 근거: {result['reasoning']}")
print("="*200)

- 출력

GPT-4o-mini: Elon Musk는 2004년 Tesla의 초기 자금 조달을 주도하여 회장 겸 최대 주주가 되었고, 2008년에는 CEO로 취임했습니다. 그는 CEO로서 회사의 전략적 방향을 설정했지만, Eberhard와의 법적 분쟁 등 경영 변화와 관련된 논란에 직면했습니다. 또한, Tesla는 성희롱, 노동 분쟁 등 다양한 소송과 논란에 직면했습니다.
Gemini-1.5-flash: Elon Musk는 2004년 Tesla의 시리즈 A 자금 조달을 주도하여 회장 겸 최대 주주가 되었고, 2008년 CEO가 되었습니다.  이 과정에서 Martin Eberhard와의 갈등으로 인해 Eberhard가 CEO직에서 물러나는 등 경영진 변화가 있었고,  Eberhard는 이후 Musk를 상대로 소송을 제기하기도 했습니다.
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
선호되는 응답: B (0)
평가 근거: Both assistants provide similar information about Elon Musk's involvement in Tesla's early funding and management changes. They both mention his initial investment in 2004, becoming chairman and largest shareholder, and later taking over as CEO in 2008.  They also both mention the conflict and subsequent lawsuit with Martin Eberhard.

However, Assistant A includes additional information about other controversies surrounding Tesla, such as sexual harassment and labor disputes. While these are relevant to Tesla's history, they are not directly related to Musk's involvement in the company's early funding and management changes, which was the specific focus of the user's question.  Assistant B stays more focused on the specific question asked.  Therefore, Assistant B is more relevant and helpful in this context.

[[B]]
========================================================================================================================================================================================================

3. A/B 테스트 평가 - 프롬프트 비교

from langchain_core.documents import Document
from langchain_core.retrievers import BaseRetriever
from langchain_core.language_models.chat_models import BaseChatModel
from langchain_core.runnables import RunnableConfig
from typing import List, Dict

def rag_bot_b(
    question: str,
    retriever: BaseRetriever,
    llm: BaseChatModel,
    config: RunnableConfig | None = None,
) -> Dict[str, str | List[Document]]:
    """
    문서 검색 기반 질의응답 수행
    """
    docs = retriever.invoke(question)
    context = "\n".join(doc.page_content for doc in docs)
    
    system_prompt = f"""RAG Assistant to answer questions based on provided documents.

    Guidelines:
    - Reference only provided context
    - Reply "I don't know" if uncertain
    - Keep responses under 3 sentences 

    Context:
    {context}"""

    prompt = ChatPromptTemplate.from_messages(
        [
            {"role": "system", "content": system_prompt},
            {"role": "user", "content": "\n\n[Question]{question}\n\n[Answer]\n"},
        ]
    )

    docqa_chain = {
        "context": lambda x: context,
        "question": RunnablePassthrough(),
        "docs": lambda x: docs,
    } | RunnableParallel({
        "answer": prompt | llm | StrOutputParser(),
        "documents": lambda x: x["docs"],
    })

    return docqa_chain.invoke(question, config=config)

체인 실행

# RAG 체인 실행
question = "Elon Musk는 Tesla의 초기 자금 조달과 경영 변화에 어떻게 관여했으며, 그 과정에서 어떤 논란에 직면했나요?"

gpt_prompt_b_response = rag_bot_b(
    question=question,
    retriever=hybrid_retriever,
    llm=gpt4omini_llm,
    config={
        "callbacks": [langfuse_handler],
        "tags": ["rag_bot", "evaluation", "prompt_b"],
        "metadata": {
            "model": "gpt-4o-mini",
            "temperature": 0,
        },
    },
)

# 두 모델의 출력 비교 (프롬프트 성능 비교)
result = evaluator.evaluate_string_pairs(
    prediction=gpt_response["answer"],
    prediction_b=gpt_prompt_b_response["answer"],
    input=question
)

print(f"GPT-4o-mini: {gpt_response['answer']}")
print(f"GPT-4o-mini (Prompt B): {gpt_prompt_b_response['answer']}")
print("-"*200)
print(f"선호되는 응답: {result['value']} ({result['score']})")
print(f"평가 근거: {result['reasoning']}")
print("="*200)

- 출력

GPT-4o-mini: Elon Musk는 2004년 Tesla의 초기 자금 조달을 주도하여 회장 겸 최대 주주가 되었고, 2008년에는 CEO로 취임했습니다. 그는 CEO로서 회사의 전략적 방향을 설정했지만, Eberhard와의 법적 분쟁 등 경영 변화와 관련된 논란에 직면했습니다. 또한, Tesla는 성희롱, 노동 분쟁 등 다양한 소송과 논란에 직면했습니다.
GPT-4o-mini (Prompt B): Elon Musk는 2004년 Tesla의 초기 자금 조달을 주도하여 회장 겸 최대 주주가 되었고, 2008년에 CEO로 취임했습니다. 그는 CEO로서의 역할 중 Eberhard의 사임 요청과 관련된 논란에 직면했으며, Eberhard는 나중에 Musk를 상대로 소송을 제기했지만 기각되었습니다.
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
선호되는 응답: A (1)
평가 근거: Both assistants provide similar information regarding Musk's initial investment and takeover of Tesla.  However, Assistant A provides a slightly broader overview of the controversies surrounding Musk's leadership, mentioning legal disputes and other issues like sexual harassment and labor disputes. While Assistant B focuses solely on the Eberhard dispute, Assistant A gives a more comprehensive, albeit brief, picture of the challenges faced by Tesla under Musk's leadership.  This makes Assistant A slightly more helpful and relevant to the user's question, which asked about the controversies Musk faced.

[[A]]
========================================================================================================================================================================================================

2️⃣ Reference-based

  • 기준 활용: 참조 답안과 RAG 응답을 비교 평가
  • 평가 방식: 자동화된 A/B 테스트로 객관적 성능 측정
  • 주요 지표: 정확도, 완성도, 관련성 등 정량적 평가
  • 참조 답안 기반 체계적인 품질 평가 수행

1. A/B 테스트 평가 - 모델 비교

# 기본 A/B 테스트 평가 예제 (참조 답안 사용: reference-based scoring)
from langchain.evaluation import load_evaluator
from langchain_google_genai import ChatGoogleGenerativeAI

# 참조 답안이 있는 평가기 생성
evaluator = load_evaluator(
    "labeled_pairwise_string",
    llm=ChatGoogleGenerativeAI(model="gemini-1.5-flash")
)

# 참조 답안
ground_truth = """Elon Musk는 2004년 2월에 750만 달러의 시리즈 A 자금 조달을 주도하여 Tesla의 회장 겸 최대 주주가 되었습니다. 
그는 주류 차량으로 확장하기 전에 프리미엄 스포츠카로 시작하는 전략에 초점을 맞춰 적극적인 역할을 수행했습니다. 2008년 10월에는 CEO로 인수했습니다. 
그러나 Tesla는 내부 고발자 보복, 근로자 권리 침해, 안전 결함, 홍보 부족, Musk의 논란의 여지가 있는 발언과 관련된 소송, 정부 조사 및 비판에 직면했습니다."""

# 두 모델의 출력 비교
result = evaluator.evaluate_string_pairs(
    prediction=gpt_response["answer"],        # GPT-4o-mini 응답 (A)
    prediction_b=gemini_response["answer"],   # Gemini-1.5-flash 응답 (B)
    input=question,       # 질문
    reference=ground_truth  # 참조 답안 (정답)
)

print(f"GPT-4o-mini: {gpt_response['answer']}")
print(f"Gemini-1.5-flash: {gemini_response['answer']}")
print("-"*200)
print(f"선호되는 응답: {result['value']} ({result['score']})")
print(f"평가 근거: {result['reasoning']}")
print("="*200)

- 출력

GPT-4o-mini: Elon Musk는 2004년 Tesla의 초기 자금 조달을 주도하여 회장 겸 최대 주주가 되었고, 2008년에는 CEO로 취임했습니다. 그는 CEO로서 회사의 전략적 방향을 설정했지만, Eberhard와의 법적 분쟁 등 경영 변화와 관련된 논란에 직면했습니다. 또한, Tesla는 성희롱, 노동 분쟁 등 다양한 소송과 논란에 직면했습니다.
Gemini-1.5-flash: Elon Musk는 2004년 Tesla의 시리즈 A 자금 조달을 주도하여 회장 겸 최대 주주가 되었고, 2008년 CEO가 되었습니다.  이 과정에서 Martin Eberhard와의 갈등으로 인해 Eberhard가 CEO직에서 물러나는 등 경영진 변화가 있었고,  Eberhard는 이후 Musk를 상대로 소송을 제기하기도 했습니다.
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
선호되는 응답: A (1)
평가 근거: Assistant A provides a more comprehensive answer covering both Elon Musk's involvement in Tesla's early funding and management changes, and the controversies faced by the company during that period.  While Assistant B correctly mentions the conflict with Martin Eberhard, Assistant A expands on the controversies faced by Tesla, including lawsuits related to harassment and labor disputes.  Assistant A's answer is more detailed and insightful, aligning more closely with the reference answer's scope.

[[A]]
========================================================================================================================================================================================================

2. 사용자 정의 기준으로 A/B 테스트 평가 - 모델 비교

# 사용자 정의 평가 기준 정의
custom_criteria = {
    "간결성": "문장이 간단하고 불필요한 내용이 없는가?",
    "명확성": "문장이 명확하고 이해하기 쉬운가?",
    "정확성": "내용이 정확하고 사실에 부합하는가?",
    "적절성": "글의 어조와 스타일이 적절한가?",
}

# 사용자 정의 평가 기준을 사용하여 평가기 생성
evaluator = load_evaluator(
    "labeled_pairwise_string", 
    criteria=custom_criteria,
    llm=ChatGoogleGenerativeAI(model="gemini-1.5-pro")
)

# 두 모델의 출력 비교
result = evaluator.evaluate_string_pairs(
    prediction=gpt_response["answer"],        # GPT-4o-mini 응답 (A)
    prediction_b=gemini_response["answer"],   # Gemini-1.5-flash 응답 (B)
    input=question,       # 질문
    reference=ground_truth  # 참조 답안 (정답)
)

print(f"GPT-4o-mini: {gpt_response['answer']}")
print(f"Gemini-1.5-flash: {gemini_response['answer']}")
print("-"*200)
print(f"선호되는 응답: {result['value']} ({result['score']})")
print(f"평가 근거: {result['reasoning']}")
print("="*200)

- 출력

GPT-4o-mini: Elon Musk는 2004년 Tesla의 초기 자금 조달을 주도하여 회장 겸 최대 주주가 되었고, 2008년에는 CEO로 취임했습니다. 그는 CEO로서 회사의 전략적 방향을 설정했지만, Eberhard와의 법적 분쟁 등 경영 변화와 관련된 논란에 직면했습니다. 또한, Tesla는 성희롱, 노동 분쟁 등 다양한 소송과 논란에 직면했습니다.
Gemini-1.5-flash: Elon Musk는 2004년 Tesla의 시리즈 A 자금 조달을 주도하여 회장 겸 최대 주주가 되었고, 2008년 CEO가 되었습니다.  이 과정에서 Martin Eberhard와의 갈등으로 인해 Eberhard가 CEO직에서 물러나는 등 경영진 변화가 있었고,  Eberhard는 이후 Musk를 상대로 소송을 제기하기도 했습니다.
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
선호되는 응답: A (1)
평가 근거: Both assistants provide accurate information regarding Musk's involvement in Tesla's early funding and his transition to CEO.  However, Assistant A provides a more comprehensive overview of the controversies surrounding Tesla, mentioning lawsuits related to harassment and labor disputes, while Assistant B focuses solely on the conflict with Martin Eberhard.  Although Assistant B's response is more concise, Assistant A's broader scope aligns better with the user's question about controversies *during this process*.  Assistant A's response also maintains clarity and appropriate tone.

[[A]]
========================================================================================================================================================================================================

3. 사용자 정의 프롬프트로 A/B 테스트 평가 - 모델 비교

from langchain_core.prompts import PromptTemplate

# 사용자 정의 프롬프트 템플릿 생성
prompt_template = PromptTemplate.from_template(
    """주어진 입력 맥락에서 A와 B 중 어느 것이 더 나은지 평가하시오.
    
다음 기준에 따라 평가하시오:
{criteria}

단계별로 평가한 후, 마지막 줄에 [[A]] 또는 [[B]]로 응답하시오.

데이터
----
입력: {input}
참조: {reference}
A: {prediction}
B: {prediction_b}
----
평가 근거:
"""
)

# 사용자 정의 평가 기준 정의
custom_criteria = {
    "간결성": "문장이 간단하고 불필요한 내용이 없는가?",
    "명확성": "문장이 명확하고 이해하기 쉬운가?",
    "정확성": "내용이 정확하고 사실에 부합하는가?",
    "적절성": "글의 어조와 스타일이 적절한가?",
}

# 평가기 생성
evaluator = load_evaluator(
    "labeled_pairwise_string", 
    criteria=custom_criteria,
    prompt=prompt_template,
    llm=ChatGoogleGenerativeAI(model="gemini-1.5-flash"),
)

# 두 모델의 출력 비교
result = evaluator.evaluate_string_pairs(
    prediction=gpt_response["answer"],        # GPT-4o-mini 응답 (A)
    prediction_b=gemini_response["answer"],   # Gemini-1.5-flash 응답 (B)
    input=question,       # 질문
    reference=ground_truth  # 참조 답안 (정답)
)

print(f"GPT-4o-mini: {gpt_response['answer']}")
print(f"Gemini-1.5-flash: {gemini_response['answer']}")
print("-"*200)
print(f"선호되는 응답: {result['value']} ({result['score']})")
print(f"평가 근거: {result['reasoning']}")
print("="*200)

- 출력

GPT-4o-mini: Elon Musk는 2004년 Tesla의 초기 자금 조달을 주도하여 회장 겸 최대 주주가 되었고, 2008년에는 CEO로 취임했습니다. 그는 CEO로서 회사의 전략적 방향을 설정했지만, Eberhard와의 법적 분쟁 등 경영 변화와 관련된 논란에 직면했습니다. 또한, Tesla는 성희롱, 노동 분쟁 등 다양한 소송과 논란에 직면했습니다.
Gemini-1.5-flash: Elon Musk는 2004년 Tesla의 시리즈 A 자금 조달을 주도하여 회장 겸 최대 주주가 되었고, 2008년 CEO가 되었습니다.  이 과정에서 Martin Eberhard와의 갈등으로 인해 Eberhard가 CEO직에서 물러나는 등 경영진 변화가 있었고,  Eberhard는 이후 Musk를 상대로 소송을 제기하기도 했습니다.
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
선호되는 응답: B (0)
평가 근거: **간결성:**

A는 "경영 변화와 관련된 논란에 직면했습니다""다양한 소송과 논란에 직면했습니다" 와 같이 다소 모호하고 구체적이지 않은 표현을 사용합니다. B는 Martin Eberhard와의 갈등과 소송이라는 구체적인 사례를 제시하여 더 간결하고 명확합니다. 따라서 B가 A보다 간결성 면에서 우수합니다.

**명확성:**

A는 "Eberhard와의 법적 분쟁 등""성희롱, 노동 분쟁 등" 과 같이  구체적인 내용을 언급하지 않아 이해하기 어렵습니다. B는 Martin Eberhard와의 갈등과 소송을 명확히 언급하여 이해도를 높입니다. 따라서 B가 A보다 명확성 면에서 우수합니다.

**정확성:**

A와 B 모두 Musk가 2004년 Tesla의 시리즈 A 자금 조달을 주도하고 2008년 CEO가 된 사실을 정확하게 기술하고 있습니다.  A는 추가적으로 Tesla가 직면한 다양한 소송과 논란을 언급하지만, 구체적인 내용이 부족하여 정확성을 평가하기 어렵습니다.  B는 Martin Eberhard와의 갈등과 소송을 구체적으로 언급하여 정확성을 높입니다.  참고 자료의 내용을 고려할 때, B가 A보다 정확성이 더 높다고 볼 수 있습니다.

**적절성:**

두 문장 모두 질문에 대한 답변으로 적절한 어조와 스타일을 유지하고 있습니다.  하지만 B가 더 구체적인 정보를 제공하여 질문에 대한 답변으로서 더 적절합니다.

**결론:**

모든 기준을 고려할 때, B가 A보다 더 나은 답변입니다. B는 더 간결하고 명확하며, 정확하고 적절한 정보를 제공합니다.

[[B]]
========================================================================================================================================================================================================

0개의 댓글