Apidog

올인원 협업 API 개발 플랫폼

API 설계

API 문서

API 디버깅

API 모킹

API 자동화 테스트

OpenAI의 Evals API 사용법: 종합 튜토리얼

Young-jae

Young-jae

Updated on April 9, 2025

OpenAI Evals API 프레임워크 소개

2025년 4월 9일에 출시된 OpenAI Evals API는 대규모 언어 모델(LLMs)의 체계적인 평가에서 중요한 발전을 나타냅니다. 평가 기능은 한동안 OpenAI 대시보드를 통해 제공되었지만, 이제 Evals API는 개발자가 프로그램matically 테스트를 정의하고, 평가 실행을 자동화하며, 자체 워크플로 내에서 프롬프트와 모델 구현을 신속하게 반복할 수 있도록 합니다. 이 강력한 인터페이스는 모델 출력에 대한 체계적인 평가를 지원하여 모델을 선택하거나 프롬프트 엔지니어링 전략을 개선할 때 증거 기반 의사 결정을 촉진합니다.

이 튜토리얼은 OpenAI Evals API를 구현하고 활용하는 포괄적인 기술 가이드를 제공합니다. 우리는 기본 아키텍처, 구현 패턴 및 LLM 애플리케이션의 성능을 객관적으로 측정할 수 있는 견고한 평가 파이프라인을 생성하기 위한 고급 기술을 탐구할 것입니다.

OpenAI Evals API: 작동 방식은?

OpenAI Evals API는 두 가지 주요 추상화를 중심으로 구축된 계층 구조를 따릅니다:

  1. Eval 구성 - 다음 사항을 포함한 평가 사양의 컨테이너:
  • 데이터 소스 스키마 정의
  • 테스트 기준 구성
  • 조직 및 검색을 위한 메타데이터

2. Eval 실행 - 다음을 포함하는 개별 평가 실행:

  • 상위 eval 구성에 대한 참조
  • 평가를 위한 특정 데이터 샘플
  • 모델 응답 및 평가 결과

이런 우려의 분리는 여러 테스트 시나리오에서 재사용 가능성을 높이며 평가 기준의 일관성을 유지할 수 있게 합니다.

Evals API 객체 모델

Evals API 내의 핵심 객체는 다음과 같은 관계를 따릅니다:

  • data_source_config (스키마 정의)
  • testing_criteria (평가 방법)
  • metadata (설명, 태그 등)
  • Run 1 (특정 데이터에 대한)
  • Run 2 (대체 구현)
  • ...
  • Run N (버전 비교)

OpenAI Evals API를 위한 환경 설정

OpenAI Evals API를 구현할 때 테스트 및 개발 도구의 선택은 생산성과 결과 품질에 상당한 영향을 미칠 수 있습니다.

Apidog는 여러 주요 측면에서 전통적인 솔루션인 Postman을 능가하는 프리미엄 API 플랫폼으로, Evals API와 같은 기술적으로 복잡한 작업을 수행하는 데 이상적인 동반자입니다.

버튼

평가를 구현하기 전에 개발 환경을 제대로 구성해야 합니다:

import openai
import os
import pydantic
import json
from typing import Dict, List, Any, Optional

# 적절한 권한으로 API 접근 구성
os.environ["OPENAI_API_KEY"] = os.environ.get("OPENAI_API_KEY", "your-api-key")

# 운영 환경에서는 .env 파일에서 로드한 환경 변수와 같은 더 안전한 방법 사용 고려

OpenAI Python 클라이언트 라이브러리는 Evals API와 상호 작용하기 위한 인터페이스를 제공합니다. Evals API 지원이 포함된 최신 버전을 사용하고 있는지 확인하세요:

pip install --upgrade openai>=1.20.0  # Evals API 지원이 포함된 버전

OpenAI Evals API로 첫 평가 만들기

OpenAI Evals API를 사용하여 완전한 평가 워크플로를 구현해 보겠습니다. 우리는 텍스트 요약 작업을 위한 평가 시스템을 생성하고, 평가 설계부터 결과 분석까지의 전체 프로세스를 시연할 것입니다.

OpenAI Evals API를 위한 데이터 모델 정의

먼저 Pydantic 모델을 사용하여 테스트 데이터의 구조를 정의해야 합니다:

class ArticleSummaryData(pydantic.BaseModel):
    """기사 요약 평가를 위한 데이터 구조."""
    article: str
    reference_summary: Optional[str] = None  # 비교를 위한 선택적 참조

    class Config:
        frozen = True  # 일관된 평가를 위한 불변성 보장

이 모델은 Evals API가 입력을 검증하고 테스트 기준에 대한 템플릿 변수를 제공하는 데 사용될 평가 데이터의 스키마를 정의합니다.

Evals API 테스트를 위한 목표 함수 구현

다음으로 우리가 평가하고자 하는 출력을 생성하는 함수를 구현할 것입니다:

def generate_article_summary(article_text: str) -> Dict[str, Any]:
    """
    OpenAI의 모델을 사용하여 기사의 간결한 요약을 생성합니다.

    Args:
        article_text: 요약할 기사 내용

    Returns:
        요약이 포함된 완료 응답 객체
    """
    summarization_prompt = """
    다음 기사를 간결하고 유익한 방식으로 요약하십시오.
    중요한 내용을 포착하되 정확성과 맥락을 유지하십시오.
    요약을 1-2 단락으로 유지하십시오.

    기사:
    {{article}}
    """

    response = openai.chat.completions.create(
        model="gpt-4o",
        messages=[
            {"role": "system", "content": summarization_prompt.replace("{{article}}", article_text)},
        ],
        temperature=0.3,  # 더 일관된 요약을 위한 낮은 온도
        max_tokens=300
    )

    return response.model_dump()  # 직렬화 가능한 사전으로 변환

OpenAI Evals API를 위한 데이터 소스 구성

Evals API는 평가 데이터의 스키마를 지정하는 정의된 데이터 소스 구성이 필요합니다:

data_source_config = {
    "type": "custom",
    "item_schema": ArticleSummaryData.model_json_schema(),
    "include_sample_schema": True,  # 모델 출력 스키마를 자동 포함
}

print("데이터 소스 스키마:")
print(json.dumps(data_source_config, indent=2))

이 구성은 Evals API에 귀하의 평가 데이터에서 예상되는 필드와 이를 처리하는 방법을 알려줍니다.

OpenAI Evals API의 테스트 기준 구현

이제 Evals API가 모델 출력을 평가하는 방법을 정의하겠습니다. 여러 기준으로 포괄적인 평가를 생성합니다:

# 1. 모델 기반 판단을 이용한 정확성 평가
accuracy_grader = {
    "name": "요약 정확도 평가",
    "type": "label_model",
    "model": "gpt-4o",
    "input": [
        {
            "role": "system",
            "content": """
            당신은 기사 요약의 정확성을 평가하는 전문가 평가자입니다.
            요약이 원래 기사의 주요 내용을 정확하게 대표하는지 평가하십시오.
            요약을 다음 중 하나로 레이블 지정하십시오:
            - "정확함": 모든 주요 정보를 포함하며 사실적 오류 없음
            - "부분적으로 정확함": 대부분의 주요 정보를 포함하며 사소한 오류 또는 누락 있음
            - "부정확함": 중요한 정보가 결여되거나 사실과 다른 표현됨

            당신의 평가에 대한 자세한 설명을 제공하십시오.
            """
        },
        {
            "role": "user",
            "content": """
            원본 기사:
            {{item.article}}

            평가할 요약:
            {{sample.choices[0].message.content}}

            평가:
            """
        }
    ],
    "passing_labels": ["정확함", "부분적으로 정확함"],
    "labels": ["정확함", "부분적으로 정확함", "부정확함"],
}

# 2. 간결성 평가
conciseness_grader = {
    "name": "요약 간결성 평가",
    "type": "label_model",
    "model": "gpt-4o",
    "input": [
        {
            "role": "system",
            "content": """
            당신은 기사 요약의 간결성을 평가하는 전문가 평가자입니다.
            요약이 불필요한 세부사항 없이 정보를 효율적으로 표현하는지를 평가하십시오.
            요약을 다음 중 하나로 레이블 지정하십시오:
            - "간결함": 완벽한 길이, 불필요한 정보 없음
            - "허용 가능": 약간 장황하지만 대체로 적절함
            - "장황함": 지나치게 길거나 불필요한 세부사항을 포함함

            당신의 평가에 대한 자세한 설명을 제공하십시오.
            """
        },
        {
            "role": "user",
            "content": """
            평가할 요약:
            {{sample.choices[0].message.content}}

            평가:
            """
        }
    ],
    "passing_labels": ["간결함", "허용 가능"],
    "labels": ["간결함", "허용 가능", "장황함"],
}

# 3. 참조 요약이 있으면 참조 비교 추가
reference_comparison_grader = {
    "name": "참조 비교 평가",
    "type": "label_model",
    "model": "gpt-4o",
    "input": [
        {
            "role": "system",
            "content": """
            생성된 요약과 참조 요약을 비교하십시오.
            생성된 요약이 참조 요약과 동일한 주요 정보를 얼마나 잘 포착하는지를 평가하십시오.
            비교를 다음 중 하나로 레이블 지정하십시오:
            - "우수함": 참조와 동급 또는 더 나은
            - "좋음": 참조에서 가장 중요한 정보를 포착함
            - "부적절함": 참조에 있는 중요한 정보가 결여됨

            당신의 평가에 대한 자세한 설명을 제공하십시오.
            """
        },
        {
            "role": "user",
            "content": """
            참조 요약:
            {{item.reference_summary}}

            생성된 요약:
            {{sample.choices[0].message.content}}

            평가:
            """
        }
    ],
    "passing_labels": ["우수함", "좋음"],
    "labels": ["우수함", "좋음", "부적절함"],
    "condition": "item.reference_summary != null"  # 참조가 있을 때만 적용
}

OpenAI Evals API로 평가 구성 생성하기

데이터 스키마와 테스트 기준을 정의했으므로 이제 평가 구성을 생성할 수 있습니다:

eval_create_result = openai.evals.create(
    name="기사 요약 품질 평가",
    metadata={
        "description": "여러 차원에서 기사 요약 품질에 대한 포괄적인 평가",
        "version": "1.0",
        "created_by": "귀하의 조직",
        "tags": ["요약", "콘텐츠 품질", "정확성"]
    },
    data_source_config=data_source_config,
    testing_criteria=[
        accuracy_grader,
        conciseness_grader,
        reference_comparison_grader
    ],
)

eval_id = eval_create_result.id
print(f"생성된 평가 ID: {eval_id}")
print(f"대시보드에서 보기: {eval_create_result.dashboard_url}")

OpenAI Evals API로 평가 실행 수행하기

평가 데이터 준비하기

이제 평가를 위해 테스트 데이터를 준비하겠습니다:

test_articles = [
    {
        "article": """
        유럽우주국(ESA)는 오늘 새 지구 관측 위성인 Sentinel-6의 성공적인 배치 소식을 전했습니다.
        이 위성은 기후 변화의 영향을 제공하는 데 중요한 데이터를 제공하며, 그 전례 없는 정확도로 해수면을 모니터링하게 됩니다.
        Sentinel-6는 밀리미터 정밀도로 해수면 변화를 측정할 수 있는 고급 레이더 고도 측정 기술을 자랑합니다.
        과학자들은 이 데이터가 기후 모델 및 해안 계획 전략을 크게 개선할 것으로 기대하고 있습니다.
        이 위성은 캘리포니아의 반덴버그 공군 기지에서 발사되었으며, ESA, NASA, NOAA 등 다른 국제 파트너들과의 협력으로 이루어진 코페르니쿠스 프로그램의 일환입니다.
        """,
        "reference_summary": """
        ESA는 고급 레이더 고도 측정을 사용하여 밀리미터 정밀도로 해수면을 모니터링하기 위해 설계된 Sentinel-6 지구 관측 위성을 성공적으로 배치했습니다.
        이 임무는 국제 코페르니쿠스 프로그램의 일환으로 기후 변화 연구 및 해안 계획을 위한 중요한 데이터를 제공할 것입니다.
        """
    },
    # 추가 테스트 기사들이 여기에 추가될 것입니다
]

# 평가를 위한 테스트 데이터를 처리합니다
run_data = []
for item in test_articles:
    # 함수 사용하여 요약 생성
    article_data = ArticleSummaryData(**item)
    result = generate_article_summary(article_data.article)

    # 실행 데이터 항목을 준비합니다
    run_data.append({
        "item": article_data.model_dump(),
        "sample": result
    })

평가 실행 만들기 및 수행하기

데이터가 준비되었으므로, 평가 실행을 생성할 수 있습니다:

eval_run_result = openai.evals.runs.create(
    eval_id=eval_id,
    name="기본 요약 실행",
    metadata={
        "model": "gpt-4o",
        "temperature": 0.3,
        "max_tokens": 300
    },
    data_source={
        "type": "jsonl",
        "source": {
            "type": "file_content",
            "content": run_data,
        }
    },
)

print(f"생성된 평가 실행: {eval_run_result.id}")
print(f"자세한 결과 보기: {eval_run_result.report_url}")

Evals API에서 평가 결과 검색 및 분석하기

평가 실행이 완료되면, 상세 결과를 검색할 수 있습니다:

def analyze_run_results(run_id: str) -> Dict[str, Any]:
    """
    평가 실행에서 결과를 검색하고 분석합니다.

    Args:
        run_id: 평가 실행의 ID

    Returns:
        분석된 결과를 포함하는 사전
    """
    # 실행 세부 정보 검색
    run_details = openai.evals.runs.retrieve(run_id)

    # 결과 추출
    results = {}

    # 전체 합격률 계산
    if run_details.results and "pass_rate" in run_details.results:
        results["overall_pass_rate"] = run_details.results["pass_rate"]

    # 기준별 메트릭 추출
    if run_details.criteria_results:
        results["criteria_performance"] = {}
        for criterion, data in run_details.criteria_results.items():
            results["criteria_performance"][criterion] = {
                "pass_rate": data.get("pass_rate", 0),
                "sample_count": data.get("total_count", 0)
            }

    # 추가 분석을 위한 실패 항목 추출
    if run_details.raw_results:
        results["failure_analysis"] = [
            {
                "item": item.get("item", {}),
                "result": item.get("result", {}),
                "criteria_results": item.get("criteria_results", {})
            }
            for item in run_details.raw_results
            if not item.get("passed", True)
        ]

    return results

# 우리 실행 분석
results_analysis = analyze_run_results(eval_run_result.id)
print(json.dumps(results_analysis, indent=2))

고급 OpenAI Evals API 기술

Evals API로 A/B 테스트 구현하기

Evals API는 다양한 구현을 비교하는 데 뛰어납니다. 두 모델 구성 간의 A/B 테스트를 설정하는 방법은 다음과 같습니다:

def generate_summary_alternative_model(article_text: str) -> Dict[str, Any]:
    """다른 모델 구성을 사용하는 대체 구현."""
    response = openai.chat.completions.create(
        model="gpt-4o-mini",  # 다른 모델 사용
        messages=[
            {"role": "system", "content": "이 기사를 간결하게 요약하십시오."},
            {"role": "user", "content": article_text},
        ],
        temperature=0.7,  # 비교를 위한 더 높은 온도
        max_tokens=250
    )

    return response.model_dump()

# 대체 모델로 테스트 데이터 처리
alternative_run_data = []
for item in test_articles:
    article_data = ArticleSummaryData(**item)
    result = generate_summary_alternative_model(article_data.article)

    alternative_run_data.append({
        "item": article_data.model_dump(),
        "sample": result
    })

# 대체 평가 실행 생성
alternative_eval_run = openai.evals.runs.create(
    eval_id=eval_id,
    name="대체 모델 실행",
    metadata={
        "model": "gpt-4o-mini",
        "temperature": 0.7,
        "max_tokens": 250
    },
    data_source={
        "type": "jsonl",
        "source": {
            "type": "file_content",
            "content": alternative_run_data,
        }
    },
)

# 결과를 프로그램적으로 비교
def compare_evaluation_runs(run_id_1: str, run_id_2: str) -> Dict[str, Any]:
    """
    두 평가 실행의 결과를 비교합니다.

    Args:
        run_id_1: 첫 번째 평가 실행의 ID
        run_id_2: 두 번째 평가 실행의 ID

    Returns:
        비교 분석을 포함하는 사전
    """
    run_1_results = analyze_run_results(run_id_1)
    run_2_results = analyze_run_results(run_id_2)

    comparison = {
        "overall_comparison": {
            "run_1_pass_rate": run_1_results.get("overall_pass_rate", 0),
            "run_2_pass_rate": run_2_results.get("overall_pass_rate", 0),
            "difference": run_1_results.get("overall_pass_rate", 0) - run_2_results.get("overall_pass_rate", 0)
        },
        "criteria_comparison": {}
    }

    # 각 기준 비교
    all_criteria = set(run_1_results.get("criteria_performance", {}).keys()) | set(run_2_results.get("criteria_performance", {}).keys())

    for criterion in all_criteria:
        run_1_criterion = run_1_results.get("criteria_performance", {}).get(criterion, {})
        run_2_criterion = run_2_results.get("criteria_performance", {}).get(criterion, {})

        comparison["criteria_comparison"][criterion] = {
            "run_1_pass_rate": run_1_criterion.get("pass_rate", 0),
            "run_2_pass_rate": run_2_criterion.get("pass_rate", 0),
            "difference": run_1_criterion.get("pass_rate", 0) - run_2_criterion.get("pass_rate", 0)
        }

    return comparison

# 두 실행 비교
comparison_results = compare_evaluation_runs(eval_run_result.id, alternative_eval_run.id)
print(json.dumps(comparison_results, indent=2))

OpenAI Evals API로 회귀 감지하기

Evals API의 가장 가치 있는 애플리케이션 중 하나는 프롬프트 업데이트 시 회귀 감지입니다:

def create_regression_detection_pipeline(eval_id: str, baseline_run_id: str) -> None:
    """
    새 프롬프트를 기준 실행과 비교하는 회귀 감지 파이프라인을 생성합니다.

    Args:
        eval_id: 평가 구성의 ID
        baseline_run_id: 비교할 기준 실행의 ID
    """

    def test_prompt_for_regression(new_prompt: str, threshold: float = 0.95) -> Dict[str, Any]:
        """
        새 프롬프트가 기준에 비해 회귀를 일으키는지 테스트합니다.

        Args:
            new_prompt: 테스트할 새 프롬프트
            threshold: 최소 수용 가능한 성능 비율(새/기준)

        Returns:
            회귀 분석을 포함하는 사전
        """
        # 새 프롬프트로 함수를 정의합니다
        def generate_summary_new_prompt(article_text: str) -> Dict[str, Any]:
            response = openai.chat.completions.create(
                model="gpt-4o",  # 기준과 동일한 모델
                messages=[
                    {"role": "system", "content": new_prompt},
                    {"role": "user", "content": article_text},
                ],
                temperature=0.3,
                max_tokens=300
            )
            return response.model_dump()

        # 새 프롬프트로 테스트 데이터 처리
        new_prompt_run_data = []
        for item in test_articles:
            article_data = ArticleSummaryData(**item)
            result = generate_summary_new_prompt(article_data.article)

            new_prompt_run_data.append({
                "item": article_data.model_dump(),
                "sample": result
            })

        # 새 프롬프트를 위한 평가 실행 생성
        new_prompt_run = openai.evals.runs.create(
            eval_id=eval_id,
            name=f"회귀 테스트-{int(time.time())}",
            metadata={
                "prompt": new_prompt,
                "test_type": "회귀"
            },
            data_source={
                "type": "jsonl",
                "source": {
                    "type": "file_content",
                    "content": new_prompt_run_data,
                }
            },
        )

        # 완료 대기 (운영 시, 비동기 처리를 구현할 수 있음)
        # 이 구현은 단순화된 것입니다
        time.sleep(10)  # 평가 완료 대기

        # 기준과 비교
        comparison = compare_evaluation_runs(baseline_run_id, new_prompt_run.id)

        # 회귀가 감지되었는지 판단
        baseline_pass_rate = comparison["overall_comparison"]["run_1_pass_rate"]
        new_pass_rate = comparison["overall_comparison"]["run_2_pass_rate"]

        regression_detected = (new_pass_rate / baseline_pass_rate if baseline_pass_rate > 0 else 0) < threshold

        return {
            "regression_detected": regression_detected,
            "baseline_pass_rate": baseline_pass_rate,
            "new_pass_rate": new_pass_rate,
            "performance_ratio": new_pass_rate / baseline_pass_rate if baseline_pass_rate > 0 else 0,
            "threshold": threshold,
            "detailed_comparison": comparison,
            "report_url": new_prompt_run.report_url
        }

    return test_prompt_for_regression

# 회귀 감지 파이프라인 생성
regression_detector = create_regression_detection_pipeline(eval_id, eval_run_result.id)

# 잠재적으로 문제를 일으킬 수 있는 프롬프트 테스트
problematic_prompt = """
이 기사를 과도한 세부 사항으로 요약하여 모든 작은 점을 포함해야 합니다.
요약은 포괄적이어야 하며 아무것도 생략하지 않아야 합니다.
"""

regression_analysis = regression_detector(problematic_prompt)
print(json.dumps(regression_analysis, indent=2))

OpenAI Evals API에서 사용자 정의 메트릭 작업하기

특화된 평가 필요에 따라 사용자 정의 메트릭을 구현할 수 있습니다:

# 사용자 정의 숫자 점수 평가의 예
numeric_score_grader = {
    "name": "요약 품질 점수",
    "type": "score_model",
    "model": "gpt-4o",
    "input": [
        {
            "role": "system",
            "content": """
            당신은 기사 요약의 품질을 평가하는 전문가 평가자입니다.
            요약의 전반적인 품질을 1.0에서 10.0까지 점수로 평가하십시오. 여기서:
            - 1.0-3.9: 품질 불량, 상당한 문제
            - 4.0-6.9: 개선 여지가 있는 수용 가능한 품질
            - 7.0-8.9: 기대에 부합하는 좋은 품질
            - 9.0-10.0: 기대를 초과하는 우수한 품질

            구체적인 숫자 점수와 자세한 정당성을 제공하십시오.
            """
        },
        {
            "role": "user",
            "content": """
            원본 기사:
            {{item.article}}

            평가할 요약:
            {{sample.choices[0].message.content}}

            점수 (1.0-10.0):
            """
        }
    ],
    "passing_threshold": 7.0,  # 합격을 위한 최소 점수
    "min_score": 1.0,
    "max_score": 10.0
}

# 이것을 평가를 생성할 때 테스트 기준에 추가하십시오.

OpenAI Evals API를 개발 워크플로에 통합하기

Evals API와 CI/CD 통합

Evals API를 CI/CD 파이프라인에 통합하면 일관된 품질을 보장합니다:

def ci_cd_evaluation_workflow(
    prompt_file_path: str,
    baseline_eval_id: str,
    baseline_run_id: str,
    threshold: float = 0.95
) -> bool:
    """
    배포 전에 모델 프롬프트를 평가하는 CI/CD 통합.

    Args:
        prompt_file_path: 업데이트되는 프롬프트 파일의 경로
        baseline_eval_id: 기준 평가 구성의 ID
        baseline_run_id: 비교할 기준 실행의 ID
        threshold: 최소 수용 가능한 성능 비율

    Returns:
        새 프롬프트가 평가를 통과했는지 여부를 나타내는 부울 값
    """
    # 버전 관리를 통해 새로운 프롬프트 로드
    with open(prompt_file_path, 'r') as f:
        new_prompt = f.read()

    # 기준을 사용하여 회귀 감지기 생성
    regression_detector = create_regression_detection_pipeline(baseline_eval_id, baseline_run_id)

    # 새 프롬프트 테스트
    regression_analysis = regression_detector(new_prompt)

    # 프롬프트가 배포에 안전한지 결정
    is_approved = not regression_analysis["regression_detected"]

    # 평가 결과 기록
    print(f"{prompt_file_path}에 대한 평가 결과")
    print(f"기준 통과율: {regression_analysis['baseline_pass_rate']:.2f}")
    print(f"새 프롬프트 통과율: {regression_analysis['new_pass_rate']:.2f}")
    print(f"성능 비율: {regression_analysis['performance_ratio']:.2f}")
    print(f"배포 결정: {'승인됨' if is_approved else '거부됨'}")
    print(f"상세 보고서: {regression_analysis['report_url']}")

    return is_approved

OpenAI Evals API로 정기 모니터링하기

정기적인 평가는 모델의 드리프트 또는 저하를 감지하는 데 도움이 됩니다:

def schedule_periodic_evaluation(
    eval_id: str,
    baseline_run_id: str,
    interval_hours: int = 24
) -> None:
    """
    성능 변화를 모니터링하기 위해 정기 평가를 예약합니다.

    Args:
        eval_id: 평가 구성의 ID
        baseline_run_id: 비교할 기준 실행의 ID
        interval_hours: 평가 빈도(시간 단위)
    """
    # 운영 시스템에서는 Airflow나 Celery와 같은 작업 스케줄러를 사용합니다.
    # 클라우드 네이티브 솔루션도 있습니다. 이 예시는 단순화된 것입니다.

    def perform_periodic_evaluation():
        while True:
            try:
                # 현재 운영 구성으로 평가 실행
                print(f"{datetime.now()}에 예정된 평가 실행")

                # 회귀 테스트와 유사한 평가 논리 구현

                # 다음 예정된 실행까지 대기
                time.sleep(interval_hours * 60 * 60)
            except Exception as e:
                print(f"예정된 평가의 오류: {e}")
                # 오류 처리 및 경고 구현

    # 실제 구현에서는 이 스레드를 적절하게 관리하거나 전용 스케줄링 시스템을 사용해야 합니다.
    import threading
    evaluation_thread = threading.Thread(target=perform_periodic_evaluation)
    evaluation_thread.daemon = True
    evaluation_thread.start()

고급 OpenAI Evals API 사용 패턴

다단계 평가 파이프라인

복잡한 애플리케이션을 위해 다단계 평가 파이프라인을 구현합니다:

def create_multi_stage_evaluation_pipeline(
    article_data: List[Dict[str, str]]
) -> Dict[str, Any]:
    """
    콘텐츠 생성을 위한 다단계 평가 파이프라인을 생성합니다.

    Args:
        article_data: 평가할 기사 목록

    Returns:
        각 단계에서 평가 결과를 포함하는 사전
    """
    # 1단계: 콘텐츠 생성 평가
    generation_eval_id = create_content_generation_eval()
    generation_run_id = run_content_generation_eval(generation_eval_id, article_data)

    # 2단계: 사실 정확성 평가
    accuracy_eval_id = create_factual_accuracy_eval()
    accuracy_run_id = run_factual_accuracy_eval(accuracy_eval_id, article_data)

    # 3단계: 톤 및 스타일 평가
    tone_eval_id = create_tone_style_eval()
    tone_run_id = run_tone_style_eval(tone_eval_id, article_data)

    # 모든 단계의 결과 집계
    results = {
        "generation": analyze_run_results(generation_run_id),
        "accuracy": analyze_run_results(accuracy_run_id),
        "tone": analyze_run_results(tone_run_id)
    }

    # 복합 점수 계산
    composite_score = (
        results["generation"].get("overall_pass_rate", 0) * 0.4 +
        results["accuracy"].get("overall_pass_rate", 0) * 0.4 +
        results["tone"].get("overall_pass_rate", 0) * 0.2
    )

    results["composite_score"] = composite_score

    return results

결론: OpenAI Evals API 마스터하기

OpenAI Evals API는 체계적인 LLM 평가에서 중요한 발전을 나타내며, 개발자에게 모델 성능을 객관적으로 평가하고 데이터 기반 결정을 내릴 수 있는 강력한 도구를 제공합니다.

LLM이 중요한 애플리케이션에 점점 더 통합됨에 따라 체계적인 평가의 중요성도 함께 증가합니다. OpenAI Evals API는 이러한 평가 관행을 대규모로 구현하는 데 필요한 인프라를 제공하여 귀하의 AI 시스템이 시간이 지나도 견고하고 신뢰할 수 있으며 귀하의 기대에 부합하도록 보장합니다.

하지만 여기에서 끝나지 않습니다. OpenAI Evals API 워크플로에 Apidog를 통합하면 다음과 같은 상당한 이점이 있습니다:

  1. 테스트 간소화: Apidog의 요청 템플릿과 자동화된 테스트 기능은 평가 파이프라인 구현에 필요한 개발 시간을 단축합니다.
  2. 향상된 문서화: 자동 API 문서 생성은 평가 기준 및 구현이 잘 문서화되도록 보장합니다.
  3. 팀 협업: 공유 작업 공간은 개발 팀 간에 일관된 평가 기준을 촉진합니다.
  4. CI/CD 통합: CLI 기능은 기존 CI/CD 파이프라인과의 통합을 가능하게 하여 자동 테스트를 수행합니다.
  5. 비주얼 분석: 내장된 시각화 도구가 복잡한 평가 결과를 신속하게 해석하는 데 도움을 줍니다.
버튼
버튼