Metadata-Version: 2.4
Name: agent-evaluator
Version: 0.6.7
Summary: Production-ready evaluation framework for AI agents — 25 metrics across task completion, accuracy, hallucination, latency, security, and agentic behavior
Project-URL: Homepage, https://github.com/bullpeng72/Agent-Evaluator
Project-URL: Repository, https://github.com/bullpeng72/Agent-Evaluator
Project-URL: Bug Tracker, https://github.com/bullpeng72/Agent-Evaluator/issues
Project-URL: Documentation, https://github.com/bullpeng72/Agent-Evaluator/blob/main/README.md
Author-email: Sungwoo Kim <sungwoo.kim@gmail.com>
Maintainer-email: Sungwoo Kim <sungwoo.kim@gmail.com>
License-Expression: MIT
License-File: LICENSE
Keywords: accuracy,agent,ai,autogen,benchmark,crewai,deepeval,evaluation,hallucination,langchain,langgraph,latency,llm,monitoring,observability,performance,rag,ragas,security,token
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Science/Research
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Topic :: System :: Monitoring
Classifier: Typing :: Typed
Requires-Python: >=3.8
Requires-Dist: numpy<3.0.0,>=1.20.0
Requires-Dist: pandas<4.0.0,>=1.3.0
Requires-Dist: python-dotenv<2.0.0,>=0.19.0
Provides-Extra: all
Requires-Dist: anthropic<1.0.0,>=0.20.0; extra == 'all'
Requires-Dist: datasets<6.0.0,>=4.0.0; extra == 'all'
Requires-Dist: deepeval<4.0.0,>=0.20.0; extra == 'all'
Requires-Dist: fastapi<1.0.0,>=0.110.0; extra == 'all'
Requires-Dist: jinja2<4.0.0,>=3.1.0; extra == 'all'
Requires-Dist: langchain-anthropic<3.0.0,>=0.1.0; extra == 'all'
Requires-Dist: langchain-core<3.0.0,>=1.0.0; extra == 'all'
Requires-Dist: langchain-openai<3.0.0,>=0.1.0; extra == 'all'
Requires-Dist: langchain<3.0.0,>=1.0.0; extra == 'all'
Requires-Dist: langgraph<3.0.0,>=1.0.0; extra == 'all'
Requires-Dist: openai<3.0.0,>=1.0.0; extra == 'all'
Requires-Dist: pdfplumber<1.0.0,>=0.10.0; extra == 'all'
Requires-Dist: pypdf<7.0.0,>=3.0.0; extra == 'all'
Requires-Dist: python-multipart<1.0.0,>=0.0.9; extra == 'all'
Requires-Dist: ragas<2.0.0,>=0.4.0; extra == 'all'
Requires-Dist: uvicorn[standard]<1.0.0,>=0.29.0; extra == 'all'
Provides-Extra: autogen
Requires-Dist: autogen-agentchat<1.0.0,>=0.4.0; extra == 'autogen'
Requires-Dist: autogen-core<1.0.0,>=0.4.0; extra == 'autogen'
Requires-Dist: pyautogen<1.0.0,>=0.3.0; extra == 'autogen'
Provides-Extra: crewai
Requires-Dist: crewai<2.0.0,>=1.0.0; extra == 'crewai'
Provides-Extra: dev
Requires-Dist: build>=1.0.0; extra == 'dev'
Requires-Dist: mypy>=1.0.0; extra == 'dev'
Requires-Dist: pre-commit>=3.0.0; extra == 'dev'
Requires-Dist: pytest-asyncio>=0.21.0; extra == 'dev'
Requires-Dist: pytest-cov>=3.0.0; extra == 'dev'
Requires-Dist: pytest>=7.0.0; extra == 'dev'
Requires-Dist: ruff>=0.4.0; extra == 'dev'
Requires-Dist: twine>=5.0.0; extra == 'dev'
Provides-Extra: eval
Requires-Dist: datasets<6.0.0,>=4.0.0; extra == 'eval'
Requires-Dist: deepeval<4.0.0,>=0.20.0; extra == 'eval'
Requires-Dist: langchain-openai<3.0.0,>=0.1.0; extra == 'eval'
Requires-Dist: langchain<3.0.0,>=0.2.0; extra == 'eval'
Requires-Dist: ragas<2.0.0,>=0.4.0; extra == 'eval'
Provides-Extra: frameworks
Requires-Dist: autogen-agentchat<1.0.0,>=0.4.0; extra == 'frameworks'
Requires-Dist: autogen-core<1.0.0,>=0.4.0; extra == 'frameworks'
Requires-Dist: crewai<2.0.0,>=1.0.0; extra == 'frameworks'
Requires-Dist: langchain-anthropic<3.0.0,>=0.1.0; extra == 'frameworks'
Requires-Dist: langchain-core<3.0.0,>=1.0.0; extra == 'frameworks'
Requires-Dist: langchain-openai<3.0.0,>=0.1.0; extra == 'frameworks'
Requires-Dist: langchain<3.0.0,>=1.0.0; extra == 'frameworks'
Requires-Dist: langgraph<3.0.0,>=1.0.0; extra == 'frameworks'
Requires-Dist: pyautogen<1.0.0,>=0.3.0; extra == 'frameworks'
Provides-Extra: full
Requires-Dist: anthropic<1.0.0,>=0.20.0; extra == 'full'
Requires-Dist: autogen-agentchat<1.0.0,>=0.4.0; extra == 'full'
Requires-Dist: autogen-core<1.0.0,>=0.4.0; extra == 'full'
Requires-Dist: crewai<2.0.0,>=1.0.0; extra == 'full'
Requires-Dist: datasets<6.0.0,>=4.0.0; extra == 'full'
Requires-Dist: deepeval<4.0.0,>=0.20.0; extra == 'full'
Requires-Dist: fastapi<1.0.0,>=0.110.0; extra == 'full'
Requires-Dist: jinja2<4.0.0,>=3.1.0; extra == 'full'
Requires-Dist: langchain-anthropic<3.0.0,>=0.1.0; extra == 'full'
Requires-Dist: langchain-core<3.0.0,>=1.0.0; extra == 'full'
Requires-Dist: langchain-openai<3.0.0,>=0.1.0; extra == 'full'
Requires-Dist: langchain<3.0.0,>=1.0.0; extra == 'full'
Requires-Dist: langgraph<3.0.0,>=1.0.0; extra == 'full'
Requires-Dist: openai<3.0.0,>=1.0.0; extra == 'full'
Requires-Dist: pdfplumber<1.0.0,>=0.10.0; extra == 'full'
Requires-Dist: pyautogen<1.0.0,>=0.3.0; extra == 'full'
Requires-Dist: pypdf<7.0.0,>=3.0.0; extra == 'full'
Requires-Dist: python-multipart<1.0.0,>=0.0.9; extra == 'full'
Requires-Dist: ragas<2.0.0,>=0.4.0; extra == 'full'
Requires-Dist: uvicorn[standard]<1.0.0,>=0.29.0; extra == 'full'
Provides-Extra: langchain
Requires-Dist: langchain-anthropic<3.0.0,>=0.1.0; extra == 'langchain'
Requires-Dist: langchain-core<3.0.0,>=1.0.0; extra == 'langchain'
Requires-Dist: langchain-openai<3.0.0,>=0.1.0; extra == 'langchain'
Requires-Dist: langchain<3.0.0,>=1.0.0; extra == 'langchain'
Requires-Dist: langgraph<3.0.0,>=1.0.0; extra == 'langchain'
Provides-Extra: llm
Requires-Dist: anthropic<1.0.0,>=0.20.0; extra == 'llm'
Requires-Dist: openai<3.0.0,>=1.0.0; extra == 'llm'
Provides-Extra: pdf
Requires-Dist: pdfplumber<1.0.0,>=0.10.0; extra == 'pdf'
Requires-Dist: pypdf<7.0.0,>=3.0.0; extra == 'pdf'
Provides-Extra: serve
Requires-Dist: fastapi<1.0.0,>=0.110.0; extra == 'serve'
Requires-Dist: jinja2<4.0.0,>=3.1.0; extra == 'serve'
Requires-Dist: python-multipart<1.0.0,>=0.0.9; extra == 'serve'
Requires-Dist: uvicorn[standard]<1.0.0,>=0.29.0; extra == 'serve'
Description-Content-Type: text/markdown

# Agent Evaluator

[![PyPI version](https://img.shields.io/pypi/v/agent-evaluator.svg)](https://pypi.org/project/agent-evaluator/)
[![Python Version](https://img.shields.io/badge/python-3.8%2B-blue.svg)](https://www.python.org/downloads/)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
[![Version](https://img.shields.io/badge/version-0.6.7-green.svg)](https://github.com/bullpeng72/Agent-Evaluator)

**AI 에이전트를 위한 프로덕션 레디 평가 프레임워크**

LangChain, CrewAI, AutoGen, LangGraph 등 주요 프레임워크를 지원하며,
태스크 완료율부터 보안 취약점까지 **25개 지표**를 단일 SDK로 측정합니다.
(네이티브 16개 — 추가 설치 없이 즉시 사용 / Layer 3 하이브리드 9개 — 선택적 추가)

---

## 왜 Agent Evaluator인가?

### 기존 평가 도구의 한계

| 문제 | 기존 방식 |
|------|-----------|
| **단편적 지표** | 정확도 또는 latency 중 하나만 측정 |
| **프레임워크 종속** | LangChain 전용, CrewAI 전용 등 분산된 도구 |
| **외부 의존성 필수** | DeepEval, Ragas 없이는 동작 안 함 |
| **보안 사각지대** | Prompt Injection, 권한 탈취 등 미탐지 |
| **멀티 에이전트 미지원** | 단일 에이전트 평가에만 특화 |

### Agent Evaluator의 해결책

```
✅ 16개 네이티브 지표 — 추가 설치 없이 즉시 사용 (Layer 1 6종 + Layer 2 10종)
✅ 9개 하이브리드 지표 — DeepEval 5종 + Ragas 4종 (선택적 추가 설치)
✅ 4개 프레임워크 통합 — LangChain / CrewAI / LangGraph / AutoGen
✅ 3-Layer 구조 — 기본 → 에이전틱 → 하이브리드로 점진 확장
✅ 보안 지표 내장 — Prompt Injection, Output Leakage 등 5종
✅ 멀티 에이전트 지원 — 에이전트 간 협업 품질 정량 측정
✅ 자동 리포트 — JSON + HTML 리포트 자동 생성
```

---

## 3-Layer 평가 아키텍처

Agent Evaluator의 핵심은 **계층적 평가 모델**입니다.
외부 의존성 없이 Layer 1/2만으로도 완전한 평가가 가능하고,
필요에 따라 Layer 3로 확장할 수 있습니다.

| 레이어 | 지표 수 | 포함 지표 | 외부 의존성 |
|--------|---------|----------|------------|
| **Layer 3** — Hybrid Evaluation | **9종** | DeepEval 5종 (G-Eval · Hallucination · Toxicity · Bias · Answer Relevancy) + Ragas 4종 (Faithfulness · Answer Relevancy · Context Precision · Context Recall) | 필요 (`[eval]`) |
| **Layer 2** — Agentic Metrics | **10종** | 에이전틱 5종: Tool Call · Retry · Tool Selection · Coordination · Workflow<br>보안 5종: Input Sanitization · Output Leakage · Tool Authorization · Privilege Escalation · Tool Chain Attack | 없음 (네이티브) |
| **Layer 1** — Foundation Metrics | **6종** | Task Completion · Accuracy · Hallucination · Quality · Latency · Token Economy | 없음 (네이티브) |

---

### Layer 1 — 기초 지표 (6종)

외부 의존성 없이 동작하는 핵심 품질 지표입니다.

| 지표 | 클래스 | 설명 | 주요 출력 지표 |
|------|--------|------|----------------|
| **Task Completion Rate** | `TaskCompletionTracker` | 성공률, 실패 원인 분류, 벤치마크 비교 | `tcr`, `full_success`, `partial_success`, `failures` |
| **Accuracy Evaluation** | `AccuracyEvaluator` | QA/코드/일반 유형별 정확도. Token Overlap(40%) + Jaccard(30%) + LCS(20%) + 문자 유사도(10%) 가중 조합 | `overall_accuracy`, `median_accuracy`, `std_accuracy` |
| **Hallucination Detection** | `HallucinationDetector` | 컨텍스트 대비 응답 사실 일관성. 미지원 주장·수치 불일치 탐지 | `hallucination_rate`, `unsupported_claims_count`, `by_severity` |
| **Response Quality** | `ResponseQualityEvaluator` | 관련성(25%)·완결성(25%)·정확성(20%)·명확성(15%)·유용성(15%) 5차원 평가 | `dimension_scores`, `total_score` (0–5), `grade` |
| **Latency Tracking** | `LatencyTracker` | 백분위 지연 시간 분석, 병목 컴포넌트 탐지, SLA 준수 여부 | `p50`, `p95`, `p99`, `bottleneck`, `mean` |
| **Token Economy** | `TokenEconomyTracker` | 입출력 토큰 비율, 실시간 비용 추정, 월간 비용 예측 | `total_tokens`, `total_cost`, `estimated_monthly_cost`, `token_distribution` |

---

### Layer 2 — 에이전틱 지표 (10종)

에이전트 행동 패턴을 측정하는 지표 5종과 보안 지표 5종으로 구성됩니다.
`PerformanceMonitor(enable_security_metrics=True)` 옵션으로 보안 지표를 활성화합니다.

#### 에이전틱 동작 (5종)

| 지표 | 클래스 | 설명 | 주요 출력 지표 |
|------|--------|------|----------------|
| **Tool Call Analysis** | `ToolCallAnalyzer` | 툴 호출 성공률, 중복 호출 탐지, 효율 점수(0–100) 산출 | `efficiency_score`, `redundancy_rate`, `failure_rate` |
| **Retry & Correction** | `RetryCorrectionTracker` | 재시도 패턴 분석, 자기 수정 능력, 첫 시도 성공률 | `retry_rate`, `first_attempt_success_rate`, `correction_success_rate` |
| **Tool Selection** | `ToolSelectionTracker` | 기대 툴 대비 실제 선택 툴 F1 기반 정확도 평가 | `precision`, `recall`, `f1_score` |
| **Agent Coordination** | `AgentCoordinationTracker` | 멀티 에이전트 협업 품질(0–10), Hub/Chain/Mesh 패턴 탐지 | `score`, `pattern_type`, `pattern_confidence`, `unique_agents` |
| **Workflow Execution** | `WorkflowExecutionTracker` | 워크플로우 단계별 성공률, 병목 탐지, 병렬화 기회 분석 | `step_success_rate`, `task_success_rate`, `bottlenecks` |

#### 보안 (5종)

| 지표 | 클래스 | 탐지 대상 | 주요 출력 지표 |
|------|--------|-----------|----------------|
| **Input Sanitization** | `InputSanitizationTracker` | SQL Injection · Command Injection · Path Traversal · XSS · Prompt Injection (40개 패턴) | `risk_level`, `threat_count`, `threat_rate` |
| **Output Leakage** | `OutputLeakageDetector` | API 키 · 비밀번호 · 신용카드 · 이메일 · 전화번호 · SSN · 내부 IP · 파일 경로 | `severity`, `leakage_count`, `leakage_rate` |
| **Tool Authorization** | `ToolAuthorizationTracker` | 비인가 툴 사용, 위험 파라미터(`rm -rf`, `DROP TABLE`, `eval()` 등 9종) | `compliance_rate`, `violation_rate`, `unauthorized_calls` |
| **Privilege Escalation** | `PrivilegeEscalationDetector` | guest→read→write/execute→admin 권한 상승 체인, 의심 시퀀스 탐지 | `risk_score` (0–10), `escalation_detected`, `escalation_path` |
| **Tool Chain Attack** | `ToolChainAttackDetector` | 데이터 유출·횡적 이동·지속성·방어 회피 4가지 공격 체인 패턴 탐지 | `confidence` (0–1), `attack_types`, `is_suspicious_chain` |

---

### Layer 3 — 하이브리드 평가

외부 평가 라이브러리와 연동해 더 깊은 품질 측정을 수행합니다.
Layer 1/2 지표를 그대로 유지하면서 외부 지표를 추가합니다.

```python
from agent_evaluator import HybridPerformanceMonitor

monitor = HybridPerformanceMonitor(
    use_deepeval=True,      # pip install agent-evaluator[eval]
    use_ragas=True,         # pip install agent-evaluator[eval]
    use_langsmith=True,     # LangSmith API 키 필요
)
```

#### DeepEval 어댑터 (5종)

`pip install "agent-evaluator[eval]"` 필요. LLM 기반 시맨틱 평가를 수행합니다.

| 지표 | 출력 키 | 설명 | 조건 |
|------|---------|------|------|
| **G-Eval** | `g_eval_score`, `g_eval_reason`, `g_eval_passed` | 사용자 정의 품질 기준으로 LLM이 직접 채점 (0–1) | `quality_criteria` 전달 시 |
| **Hallucination** | `hallucination_score`, `hallucination_detected` | 시맨틱 할루시네이션 탐지 (높을수록 낮은 할루시네이션) | `retrieved_context` 전달 시 |
| **Toxicity** | `toxicity_score`, `toxicity_detected` | 유해·공격적 콘텐츠 탐지 (0–1) | 항상 |
| **Bias** | `bias_score`, `bias_detected` | 편향 탐지 (0–1) | 항상 |
| **Answer Relevancy** | `answer_relevancy_score`, `answer_relevancy_passed` | QA 답변 관련성 평가 | `task_type`이 qa/information_retrieval 일 때 |

#### Ragas 어댑터 (4종)

`pip install "agent-evaluator[eval]"` 필요. RAG 파이프라인 특화 평가입니다.
`retrieved_context`를 전달해야 동작합니다.

| 지표 | 출력 키 | 설명 | 조건 |
|------|---------|------|------|
| **Faithfulness** | `ragas_faithfulness` | 컨텍스트 대비 응답 사실 일관성 (0–1) | `retrieved_context` 필요 |
| **Answer Relevancy** | `ragas_answer_relevancy` | 질문에 대한 답변 품질 (0–1) | `retrieved_context` 필요 |
| **Context Precision** | `ragas_context_precision` | 검색된 컨텍스트의 관련성 (0–1) | `retrieved_context` 필요 |
| **Context Recall** | `ragas_context_recall` | 컨텍스트 완전성 (0–1) | `retrieved_context` + `expected_output` 필요 |

종합 점수: `ragas_overall_score` (평균), `ragas_quality` (excellent ≥0.8 / good ≥0.6 / acceptable ≥0.4 / poor)

#### LangSmith 어댑터

LangSmith 트레이싱 데이터를 가져와 네이티브 지표와 통합합니다.
`LANGSMITH_API_KEY` 환경변수와 `metadata.langsmith_run_id` 가 필요합니다.

| 출력 키 | 설명 |
|---------|------|
| `langsmith_latency` | 트레이스 기준 실행 시간 |
| `langsmith_tokens` | LangSmith 집계 토큰 수 |
| `langsmith_cost` | LangSmith 집계 비용 |
| `langsmith_feedback_scores` | 사용자 피드백 점수 통계 |

---

## 설치

### 기본 설치 (의존성 없음)

```bash
pip install agent-evaluator
```

### 선택적 의존성 추가

```bash
# 단위 extras (필요한 것만 선택)
pip install "agent-evaluator[llm]"         # OpenAI + Anthropic 클라이언트 (빠름)
pip install "agent-evaluator[serve]"       # FastAPI 대시보드 서버 (빠름)
pip install "agent-evaluator[langchain]"   # LangChain / LangGraph
pip install "agent-evaluator[crewai]"      # CrewAI (무거움, 단독 격리)
pip install "agent-evaluator[autogen]"     # AutoGen (무거움, 단독 격리)
pip install "agent-evaluator[eval]"        # DeepEval + Ragas (Layer 3 평가)
pip install "agent-evaluator[pdf]"         # pypdf + pdfplumber

# 조합 편의 extras
pip install "agent-evaluator[frameworks]"  # langchain + crewai + autogen (기존 호환)
pip install "agent-evaluator[all]"         # crewai/autogen 제외 전체 (권장)
pip install "agent-evaluator[full]"        # 진짜 전체 (⚠️ 설치 10분+ 소요)
```

### 소스에서 개발 설치

```bash
git clone https://github.com/bullpeng72/Agent-Evaluator.git
cd Agent-Evaluator
pip install -e ".[dev]"
```

---

## 빠른 시작

### 1. 기본 사용법

```python
from agent_evaluator import PerformanceMonitor, create_taskresult

monitor = PerformanceMonitor()

task = create_taskresult(
    task_id="task_001",
    question="프랑스의 수도는 어디인가요?",
    response="파리입니다.",
    ground_truth="파리",
    execution_time=1.2
)

monitor.record_task(task)
monitor.save_to_file("results")  # results.json + results.html 자동 생성
```

### 2. Context Manager (권장)

```python
from agent_evaluator import evaluation_session, create_taskresult

with evaluation_session("results") as monitor:
    for question, answer, truth in qa_pairs:
        task = create_taskresult(
            task_id=f"q_{i}",
            question=question,
            response=answer,
            ground_truth=truth,
            execution_time=1.5
        )
        monitor.record_task(task)
# 세션 종료 시 자동 저장 — 예외 발생 시에도 안전
```

### 3. LLM 헬퍼 통합

```python
from agent_evaluator import PerformanceMonitor, LLMHelper, ClaudeHelper

monitor = PerformanceMonitor()

# OpenAI GPT
llm = LLMHelper(monitor)
task = llm.evaluate_openai_call(
    task_id="gpt_001",
    prompt="머신러닝이란 무엇인가요?",
    ground_truth="머신러닝은 데이터로부터 패턴을 학습하는 AI 기법입니다."
)

# Anthropic Claude
claude = ClaudeHelper(monitor)
task = claude.evaluate_claude_call(
    task_id="claude_001",
    prompt="강화학습을 설명해주세요.",
    ground_truth="강화학습은 보상을 통해 학습하는 방식입니다."
)
```

### 4. LLM-as-Judge (ground_truth 없이 자동 채점)

```python
from agent_evaluator import PerformanceMonitor

monitor = PerformanceMonitor(
    enable_llm_judge=True,
    judge_sample_rate=0.1,    # 10% 샘플링 (비용 제어)
    judge_budget_per_day=5.0, # 일 $5 한도
)

task = create_taskresult(
    task_id="open_q_001",
    question="머신러닝과 딥러닝의 차이를 설명해주세요.",
    response="머신러닝은...",   # ground_truth 없어도 Judge가 3차원 채점
    execution_time=1.5
)
monitor.record_task(task)
# → completeness / relevance / factual_consistency 자동 측정
```

### 5. 멀티턴 대화 평가

```python
from agent_evaluator import ConversationSession

session = ConversationSession(session_id="chat_001")
session.add_turn(user_input="파이썬 비동기 처리 방법 알려줘", agent_response="asyncio를 사용합니다...")
session.add_turn(user_input="방금 설명한 방법의 단점은?", agent_response="복잡성이 증가합니다...")
session.add_turn(user_input="asyncio.gather 예시 코드 보여줘", agent_response="import asyncio...")

metrics = session.compute_metrics()
print(f"맥락 유지율: {metrics.context_retention_score:.2f}")
print(f"주제 일관성: {metrics.topic_coherence_score:.2f}")
print(f"종합 점수:   {metrics.overall_score:.2f}")
```

### 6. 보안 지표 활성화

```python
monitor = PerformanceMonitor(
    enable_hallucination_detection=True,
    enable_security_metrics=True,       # 기본값 False (성능 비용)
)

task = create_taskresult(
    task_id="sec_test",
    question="'; DROP TABLE users; --",  # SQL Injection 탐지
    response="결과입니다.",
    execution_time=0.5
)
monitor.record_task(task)
```

---

## 프레임워크 통합

### LangChain

```python
from agent_evaluator import PerformanceMonitor
from agent_evaluator.integrations import create_evaluated_langchain_agent

monitor = PerformanceMonitor()
# my_agent: 기존 LangChain AgentExecutor 등
evaluated_agent = create_evaluated_langchain_agent(my_agent, monitor=monitor)

# 에이전트 실행 → 자동으로 지표 수집
result = evaluated_agent.run("질문을 입력하세요")
```

### CrewAI

```python
from agent_evaluator.integrations import create_evaluated_crew

# my_crew: 기존 CrewAI Crew 객체
evaluated_crew = create_evaluated_crew(my_crew, monitor=monitor)
result = evaluated_crew.kickoff()
```

### LangGraph

```python
from agent_evaluator import PerformanceMonitor
from agent_evaluator.integrations import create_evaluated_langgraph

monitor = PerformanceMonitor()
# my_compiled_graph: 컴파일된 LangGraph StateGraph
evaluated_graph = create_evaluated_langgraph(my_compiled_graph, monitor=monitor)
result = evaluated_graph.invoke({"messages": [("user", "질문")]})
```

### AutoGen

```python
from agent_evaluator.integrations import create_evaluated_autogen_agent

# my_agent_or_team: AssistantAgent, RoundRobinGroupChat 등
evaluated_agent = create_evaluated_autogen_agent(my_agent_or_team, monitor=monitor)
# 멀티 에이전트 대화 자동 추적
```

---

## 평가 리포트

`save_to_file()` 호출 시 두 가지 파일이 자동 생성됩니다.

```
results/
├── evaluation_20260101_120000.json   ← 원시 데이터 (프로그래밍 활용)
└── evaluation_20260101_120000.html   ← 시각화 리포트 (브라우저에서 확인)
```

**JSON 리포트 구조:**

```json
{
  "period": {"start": "...", "end": "..."},
  "summary": {
    "total_tasks": 100,
    "task_completion_rate": 0.94,
    "average_accuracy": 0.87,
    "average_latency_ms": 1230,
    "total_tokens": 45000,
    "estimated_cost_usd": 0.135
  },
  "alerts": ["정확도가 임계값(0.8) 이하", "평균 지연 1.2초 초과"],
  "recommendations": ["캐싱 전략 도입 권장", "토큰 압축 적용 검토"],
  "security_metrics": {...},
  "tool_metrics": {...}
}
```

---

## CLI

`pip install agent-evaluator` 후 즉시 사용할 수 있는 `agent-eval` 명령어를 제공합니다.

### 명령어 목록

| 명령어 | 설명 |
|--------|------|
| `agent-eval init` | 대화형 API 키 설정 마법사 |
| `agent-eval check` | 현재 설정 상태 및 API 키 확인 |
| `agent-eval dashboard` | FastAPI 대시보드 웹 서버 실행 |
| `agent-eval gate <result.json>` | CI/CD 품질 게이트 — 임계값 미달 시 exit code 1 반환 |
| `agent-eval dataset build <results/>` | 운영 결과에서 골든 데이터셋 자동 추출 |
| `agent-eval --version` | 패키지 버전 출력 |

### `agent-eval init`

API 키를 대화형으로 입력·저장하는 마법사입니다.

```bash
agent-eval init
```

설정하는 항목:
- `OPENAI_API_KEY` (선택) — LLMHelper, DeepEval, Ragas 평가에 사용 (Layer 1/2는 불필요)
- `ANTHROPIC_API_KEY` (선택) — ClaudeHelper 사용 시 필요
- `LANGSMITH_API_KEY` (선택) — LangSmith 트레이싱 연동
- `AGENT_EVALUATOR_OUTPUT_DIR` — 결과 저장 디렉토리 (기본: `./results`)

저장 위치를 대화형으로 선택할 수 있습니다: 기존 `.env` 업데이트 / 현재 디렉토리 `.env` 생성 / 전역 설정 파일 (`~/.config/agent-evaluator/.env`).

### `agent-eval check`

현재 환경에 설정된 API 키 및 설정값 상태를 출력합니다.

```bash
agent-eval check
```

출력 예시:
```
  Agent Evaluator v0.6.7 — 설정 상태
  ──────────────────────────────────────────────────
ℹ  .env 로드: /home/user/project/.env

발견된 .env 파일:
  /home/user/project/.env  (2개 키)

API 키 상태:
  OPENAI_API_KEY     ✅  sk-proj-...  (loaded .env)
  ANTHROPIC_API_KEY  ✅  sk-ant-...   (system env)
  LANGSMITH_API_KEY  ⚪  미설정 (선택)

기타 설정:
  AGENT_EVALUATOR_OUTPUT_DIR           ./results
  OPENAI_MODEL                         gpt-4o-mini
  ANTHROPIC_MODEL                      claude-haiku-4-5-20251001
  LANGCHAIN_TRACING_V2                 false
  LANGCHAIN_PROJECT                    agent-evaluator

  'agent-eval init' 을 실행하면 누락된 키를 설정할 수 있습니다.
```

### `agent-eval gate`

평가 결과 파일을 읽고 품질 임계값 기준으로 합격/실패를 판정합니다. CI/CD 파이프라인에서 릴리스 게이팅에 사용합니다.

```bash
agent-eval gate results/ci_run.json \
  --tcr 85 \
  --accuracy 70 \
  --p95-latency 3.0 \
  --hallucination 5 \
  --llm-judge 3.5 \
  --fail-on-regression 10
```

| 옵션 | 설명 |
|------|------|
| `--tcr N` | Task Completion Rate 최소값 (%) |
| `--accuracy N` | 정확도 최소값 (%) |
| `--p95-latency N` | P95 지연시간 최대값 (초) |
| `--hallucination N` | 환각 탐지율 최대값 (%) |
| `--llm-judge N` | LLM Judge 종합 점수 최소값 (0–5) |
| `--fail-on-regression N` | 이전 기준선 대비 허용 하락 비율 (%) |
| `--save-baseline PATH` | 현재 결과를 기준선으로 저장 |
| `--baseline PATH` | 비교 기준선 파일 경로 |
| `--junit-xml PATH` | JUnit XML 리포트 출력 (CI 시스템 연동) |

**종료 코드:** `0` = 전체 통과 / `1` = 임계값 미달 / `2` = 회귀 감지

```yaml
# GitHub Actions 예시
- name: Agent Quality Gate
  run: |
    python run_eval.py --output results/ci.json
    agent-eval gate results/ci.json --tcr 85 --accuracy 70 --p95-latency 3.0
```

### `agent-eval dashboard`

평가 결과를 시각화하는 FastAPI 웹 대시보드를 실행합니다.

```bash
agent-eval dashboard [results_dir] [옵션]
```

| 옵션 | 기본값 | 설명 |
|------|--------|------|
| `results_dir` | `./results` | 평가 결과 JSON 파일이 있는 디렉토리 |
| `--host HOST` | `127.0.0.1` | 바인딩 호스트 |
| `--port PORT` | `8765` | 포트 번호 |
| `--open` | 기본 활성화 | 서버 시작 후 브라우저 자동 오픈 |
| `--no-open` | — | 브라우저 자동 오픈 비활성화 |
| `--watch` | — | 파일 변경 감시 (핫 리로드) |
| `--offline` | — | CDN 에셋을 로컬 캐시해 인터넷 없이 실행 |
| `--title TITLE` | `Agent Evaluator — Dev Dashboard` | 대시보드 제목 |

```bash
agent-eval dashboard                                    # 기본 실행 (브라우저 자동 오픈)
agent-eval dashboard ./results --port 8080              # 포트 지정
agent-eval dashboard ./results --watch                  # 파일 변경 시 자동 갱신
agent-eval dashboard ./results --no-open                # 브라우저 오픈 없이 서버만 시작
```

> `results_dir`을 지정하지 않으면 `./results` → `path_helpers` 자동 탐지 순으로 결과 디렉토리를 찾습니다.

---

## 대시보드

FastAPI + Alpine.js 기반 SPA 웹 대시보드로 평가 결과를 시각화합니다.
`pip install "agent-evaluator[serve]"` 후 `agent-eval dashboard`로 실행합니다.

실행 후 접근 가능한 URL:

| URL | 설명 |
|-----|------|
| `http://localhost:8765` | 메인 대시보드 |
| `http://localhost:8765/slides` | 슬라이드 뷰 |
| `http://localhost:8765/sdk-docs` | SDK 레퍼런스 문서 |
| `http://localhost:8765/api/docs` | Swagger UI (OAS 3.1) |
| `http://localhost:8765/api/redoc` | Redoc API 문서 |

**제공 기능:**
- 전체 지표 개요 및 트렌드 (TCR·정확도·할루시네이션·레이턴시·비용)
- 태스크별 정확도/지연시간 분포 및 이상치 탐지
- 툴 사용 패턴 분석 (Tool Selection F1, 효율성, 중복 호출)
- 보안 이벤트 타임라인 (L2 보안 이벤트 시각화)
- Agent 협업 네트워크 그래프 (Pan/Zoom 지원)
- Layer 3 Advanced 지표 (DeepEval·Ragas, 옵션)
- 상관관계 히트맵 (4×4 Pearson 지표 행렬)
- HTML/CSV/JSON 내보내기 + PDF 출력
- OAS 3.1 API 문서 (`/api/docs`, `/api/redoc`)

### 지표 × 대시보드 메뉴 Mapping

| # | 지표 | 메뉴 | 서브탭 |
|---|------|------|--------|
| 1 | TCR (Task Completion Rate) | 📊 품질 · 🔵 기본 | TCR 탭 |
| 2 | Accuracy | 📊 품질 · 🔵 기본 | Accuracy 탭 |
| 3 | Response Quality | 📊 품질 · 🔵 기본 | Quality 탭 |
| 4 | Hallucination Rate | 📊 품질 · 🔵 기본 | Hallucination 탭 |
| 5 | Latency — Mean / P50 | ⚡ 성능 · 🔵 기본 | Latency |
| 6 | Latency — P95 / P99 | ⚡ 성능 · 🔵 기본 | Latency |
| 7 | Token Economy | ⚡ 성능 · 🟡 심화 | Token 탭 |
| 8 | Cost per Task | ⚡ 성능 · 🟡 심화 | Cost 탭 |
| 9 | Retry / Correction | 🤖 에이전틱 · 🔵 기본 | Retry 탭 |
| 10 | Tool Efficiency | 🤖 에이전틱 · 🔵 기본 | Tool Efficiency 탭 |
| 11 | Tool Selection (F1) | 🤖 에이전틱 · 🟡 심화 | Tool 선택 탭 |
| 12 | Agent Coordination | 🤖 에이전틱 · 🟡 심화 | 멀티에이전트 탭 |
| 13 | Workflow Execution | 🤖 에이전틱 · 🟡 심화 | 워크플로우 탭 |
| 14 | Input Sanitization | 🔒 보안 · 🔵 기본 | 입력 검사 탭 |
| 15 | Output Leakage | 🔒 보안 · 🔵 기본 | 출력 유출 탭 |
| 16 | Authorization Compliance | 🔒 보안 · 🟡 심화 | 권한 탭 |
| 17 | Privilege Escalation | 🔒 보안 · 🟡 심화 | 권한 상승 탭 |
| 18 | Tool Chain Attack | 🔒 보안 · 🟡 심화 | 통합 탭 |
| 19 | Faithfulness (Ragas) | 📊 품질 · 🟡 심화 | RAG 섹션 |
| 20 | Answer Relevancy (Ragas) | 📊 품질 · 🟡 심화 | RAG 섹션 |
| 21 | Context Recall (Ragas) | 📊 품질 · 🟡 심화 | RAG 섹션 |
| 22 | Context Precision (Ragas) | 📊 품질 · 🟡 심화 | RAG 섹션 |
| 23 | Answer Relevancy (DeepEval) | 📊 품질 · 🟣 통합 | DeepEval 탭 |
| 24 | G-Eval Score (DeepEval) | 📊 품질 · 🟣 통합 | DeepEval 탭 |
| 25 | Toxicity Score (DeepEval) | 📊 품질 · 🟣 통합 | DeepEval 탭 |
| 26 | Bias Score (DeepEval) | 📊 품질 · 🟣 통합 | DeepEval 탭 |
| 27 | Hallucination Score (DeepEval) | 📊 품질 · 🟣 통합 | DeepEval 탭 |
| 28 | LLM Judge — Completeness | 📊 품질 · 🔵 기본 | Quality 탭 > LLM Judge 섹션 |
| 29 | LLM Judge — Relevance | 📊 품질 · 🔵 기본 | Quality 탭 > LLM Judge 섹션 |
| 30 | LLM Judge — Factual Consistency | 📊 품질 · 🔵 기본 | Quality 탭 > LLM Judge 섹션 |

> **참고:** 1-4번(TCR·Accuracy·Hallucination)은 **Overview** KPI 카드에도 요약 표시됩니다.
> Ragas 4종(19-22번)은 🟡 심화와 🟣 통합 > Ragas 탭 양쪽에서 확인 가능합니다.
> LLM Judge 3종(28-30번)은 `enable_llm_judge=True` 설정 시 Quality 탭에 표시됩니다.

---

## 프로젝트 구조

```
agent-evaluator/
├── agent_evaluator/              # 메인 패키지
│   ├── core/
│   │   ├── trackers/            # 트래커 서브패키지 (v0.6.3에서 분리)
│   │   │   ├── base.py          # TaskResult, EvaluationReport, TaskType
│   │   │   ├── layer1.py        # Foundation 지표 6종
│   │   │   ├── layer2.py        # Agentic 지표 5종
│   │   │   ├── security.py      # 보안 지표 5종
│   │   │   ├── monitor.py       # PerformanceMonitor (중앙 오케스트레이터)
│   │   │   ├── conversation.py  # ConversationSession·ConversationMetrics
│   │   │   └── feedback.py      # ImplicitFeedbackTracker
│   │   ├── hybrid_monitor.py    # HybridPerformanceMonitor
│   │   └── monitor_context.py   # Context managers
│   ├── integrations/
│   │   ├── crewai_integration.py
│   │   ├── langchain_integration.py
│   │   ├── langgraph_integration.py
│   │   ├── autogen_integration.py
│   │   ├── llm_helpers.py       # LLMHelper (OpenAI), ClaudeHelper (Anthropic)
│   │   ├── llm_judge.py         # LLMJudge — LLM-as-Judge 평가 엔진 (v0.6.3)
│   │   ├── metric_adapters.py   # DeepEval / Ragas / LangSmith 어댑터
│   │   └── framework_integrations.py
│   ├── helpers/
│   │   └── taskresult_helpers.py  # create_taskresult(), 토큰 추출 유틸
│   ├── reporting/
│   │   └── comprehensive_report.py  # HTML/텍스트 리포트 생성기
│   ├── datasets/
│   │   ├── builder.py                       # GoldenSetBuilder — 골든 데이터셋 빌더
│   │   ├── korean_rag_dataset_generator.py  # 한국어 RAG 데이터셋 생성
│   │   └── korean_rag_evaluator.py          # 한국어 RAG 평가
│   ├── anomaly/                 # 이상 탐지 (Phase 3-B)
│   │   └── detector.py          # AnomalyDetector, AnomalyEvent
│   ├── streaming/               # 스트리밍 평가 (Phase 2-A, serve extras 필요)
│   │   ├── evaluator.py         # StreamingEvaluator
│   │   └── middleware.py        # AgentEvalMiddleware
│   ├── alerts/                  # 알림 시스템 (Phase 2-B, serve extras 필요)
│   │   ├── engine.py            # AlertEngine, AlertRule, AlertEvent
│   │   └── handlers.py          # SlackHandler, WebhookHandler, EmailHandler
│   ├── cost/                    # 비용 최적화 (Phase 3-C)
│   │   └── policy.py            # CostTracker, AdaptivePolicy, SamplingStage
│   ├── serve/                   # FastAPI 대시보드 서버
│   │   ├── server.py            # FastAPI app 진입점
│   │   ├── loader.py            # 평가 결과 로더
│   │   ├── watcher.py           # 파일 변경 감시
│   │   └── routers/             # API 라우터 11개 (alerts, anomaly, config, conversation, cost, data, export, feedback, golden, stream, transparency, webhook)
│   ├── cli/
│   │   ├── main.py              # agent-eval CLI 진입점
│   │   └── gate.py              # agent-eval gate — CI/CD 품질 게이팅
│   ├── utils/
│   │   ├── dashboard_integration.py
│   │   ├── data_registry.py
│   │   ├── path_helpers.py
│   │   └── transparency_manager.py       # TestTransparencyManager 프로덕션 클래스
│   ├── exceptions.py            # 예외 계층 (AgentEvaluatorError 외 6종)
│   └── config.py                # 환경변수 설정 로더
│
├── Evaluator_Examples/              # 카테고리별 평가 예제 (15개)
│   ├── 01_quality_eval.py           # 품질 지표 — Accuracy, Hallucination, Quality, RAG
│   ├── 02_performance_eval.py       # 성능 지표 — TCR, Latency, Token Economy
│   ├── 03_agentic_eval.py           # 에이전틱 지표 — Tool Call, Coordination, Workflow
│   ├── 04_security_eval.py          # 보안 지표 — Input Sanitization, Leakage, Auth, Escalation
│   ├── 05_hybrid_eval.py            # 하이브리드 평가 — DeepEval, Ragas, LangSmith 통합
│   ├── 06_langchain_eval.py         # LangChain 프레임워크 통합 예제
│   ├── 07_langgraph_eval.py         # LangGraph 프레임워크 통합 예제
│   ├── 08_crewai_eval.py            # CrewAI 프레임워크 통합 예제
│   ├── 09_autogen_eval.py           # AutoGen 프레임워크 통합 예제
│   ├── 10_cross_framework_eval.py   # 멀티 프레임워크 비교 평가
│   ├── 11_streaming_eval.py         # 스트리밍 평가 예제
│   ├── 12_alerting_eval.py          # 알림 시스템 예제
│   ├── 13_golden_set_build.py       # 골든 데이터셋 빌더 예제
│   ├── 14_anomaly_cost_eval.py      # 이상 탐지 + 비용 최적화 예제
│   └── 15_conversation_eval.py      # 멀티턴 대화 평가 예제
│
├── tests/                        # 단위 테스트 (920개 테스트 함수, 36개 파일)
├── pyproject.toml
└── LICENSE
```

---

## 예제 가이드

15개의 예제 파일로 Layer 1/2/3 전체 지표를 검증할 수 있습니다.

```bash
cd Evaluator_Examples

# Layer 1/2/3 기본 평가
python 01_quality_eval.py          # 품질 지표 — Accuracy, Hallucination, Quality, RAG
python 02_performance_eval.py      # 성능 지표 — TCR, Latency (p50/p95/p99), Token Economy
python 03_agentic_eval.py          # 에이전틱 지표 — Tool Call, Coordination, Workflow, Retry
python 04_security_eval.py         # 보안 지표 — Input Sanitization, Leakage, Auth, Escalation, Attack
python 05_hybrid_eval.py           # 하이브리드 평가 — DeepEval, Ragas, LangSmith 통합 (API 키 필요)

# 프레임워크 통합
python 06_langchain_eval.py        # LangChain 통합 예제
python 07_langgraph_eval.py        # LangGraph 통합 예제
python 08_crewai_eval.py           # CrewAI 통합 예제
python 09_autogen_eval.py          # AutoGen 통합 예제
python 10_cross_framework_eval.py  # 멀티 프레임워크 비교

# 고급 기능 (Phase 2/3)
python 11_streaming_eval.py        # 스트리밍 평가 (serve extras 필요)
python 12_alerting_eval.py         # 알림 시스템 예제 (serve extras 필요)
python 13_golden_set_build.py      # 골든 데이터셋 빌더
python 14_anomaly_cost_eval.py     # 이상 탐지 + 비용 최적화
python 15_conversation_eval.py     # 멀티턴 대화 평가

# 대시보드 실행 (결과 자동 반영)
agent-eval dashboard --watch
```

---

## 공개 API 요약

```python
from agent_evaluator import (
    # 핵심 클래스
    PerformanceMonitor,      # 중앙 오케스트레이터
    TaskResult,              # 태스크 실행 결과 (24개 필드)
    TaskType,                # QA / CODE_GENERATION / REASONING 등 10종
    EvaluationReport,        # 집계 평가 리포트

    # 하이브리드
    HybridPerformanceMonitor,
    ExtendedTaskResult,
    HybridEvaluationReport,

    # 헬퍼
    create_taskresult,       # TaskResult 간편 생성 함수
    evaluation_session,      # 컨텍스트 매니저 (기본)
    hybrid_evaluation_session,

    # LLM Judge + 대화 평가
    LLMJudge,                # LLM-as-Judge 평가 엔진 (ground_truth 없이 자동 채점)
    ConversationSession,     # 멀티턴 대화 평가
    ConversationMetrics,     # 대화 평가 지표 (맥락유지·일관성·심화도 등)
    ConversationTurn,        # 단일 대화 턴

    # LLM 헬퍼
    LLMHelper,               # OpenAI 평가 헬퍼
    ClaudeHelper,            # Anthropic 평가 헬퍼

    # Phase 2/3 — 피드백·이상 감지·비용 최적화
    ImplicitFeedbackTracker,
    AnomalyDetector, AnomalyEvent,
    CostTracker, AdaptivePolicy, SamplingStage,

    # 개별 트래커 (고급 사용자)
    TaskCompletionTracker, AccuracyEvaluator, HallucinationDetector,
    ResponseQualityEvaluator, LatencyTracker, TokenEconomyTracker,
    ToolCallAnalyzer, RetryCorrectionTracker, ToolSelectionTracker,
    AgentCoordinationTracker, WorkflowExecutionTracker,
    InputSanitizationTracker, OutputLeakageDetector,
    ToolAuthorizationTracker, PrivilegeEscalationDetector, ToolChainAttackDetector,
)
```

---

## 개발 환경 설정

```bash
git clone https://github.com/bullpeng72/Agent-Evaluator.git
cd Agent-Evaluator

# 개발 의존성 포함 설치
pip install -e ".[dev]"

# 테스트 실행
pytest

# 코드 품질 검사
ruff check agent_evaluator/
ruff format agent_evaluator/
mypy agent_evaluator/
```

---

## 요구사항

| 패키지 | 버전 | 용도 |
|--------|------|------|
| `numpy` | >=1.20.0, <2.0.0 | 수치 연산 |
| `pandas` | >=1.3.0, <3.0.0 | 지표 집계 |
| `python-dotenv` | >=0.19.0, <2.0.0 | 환경변수 관리 |

### 선택적 의존성

| Extra | 패키지 | 용도 | 속도 |
|-------|--------|------|------|
| `[llm]` | openai, anthropic | LLMHelper / ClaudeHelper 사용 | 빠름 |
| `[langchain]` | langchain ≥1.0, langchain-core/openai/anthropic, langgraph ≥1.0 | LangChain/LangGraph 통합 | 중간 |
| `[crewai]` | crewai ≥1.0 | CrewAI 통합 | 무거움 |
| `[autogen]` | pyautogen ≥0.3, autogen-agentchat/core ≥0.4 | AutoGen 통합 (async-first) | 무거움 |
| `[eval]` | deepeval, ragas ≥0.4, datasets ≥4.0, langchain | Layer 3 하이브리드 평가 | 무거움 |
| `[serve]` | fastapi, uvicorn, jinja2 | FastAPI 대시보드 서버 | 빠름 |
| `[pdf]` | pypdf, pdfplumber | PDF 데이터셋 처리 | 빠름 |
| `[frameworks]` | langchain + crewai + autogen | 기존 호환 (전체 프레임워크) | 무거움 |
| `[all]` | llm + langchain + eval + serve + pdf | **권장** — crewai/autogen 제외 | 중간 |
| `[full]` | all + crewai + autogen | 진짜 전체 ⚠️ 10분+ | 매우 무거움 |

---

## 기여 방법

1. 이 저장소를 Fork 합니다.
2. 기능 브랜치를 생성합니다: `git checkout -b feature/새기능`
3. 변경사항을 커밋합니다: `git commit -m 'feat: 새 기능 추가'`
4. 브랜치에 Push 합니다: `git push origin feature/새기능`
5. Pull Request를 엽니다.

버그 리포트, 기능 제안, 문서 개선 등 모든 기여를 환영합니다.
[GitHub Issues](https://github.com/bullpeng72/Agent-Evaluator/issues)에서 논의해 주세요.

---

## 라이선스

MIT License — 자세한 내용은 [LICENSE](LICENSE) 파일을 참고하세요.

---

## 작성자

**Sungwoo Kim**
- Email: [sungwoo.kim@gmail.com](mailto:sungwoo.kim@gmail.com)
- GitHub: [github.com/bullpeng72](https://github.com/bullpeng72)

---

## 인용

연구나 프로젝트에 Agent Evaluator를 사용하셨다면 아래 형식으로 인용해 주세요.

```bibtex
@software{agent_evaluator,
  title   = {Agent Evaluator: Production-ready evaluation framework for AI agents},
  author  = {Kim, Sungwoo},
  year    = {2026},
  version = {0.6.7},
  url     = {https://github.com/bullpeng72/Agent-Evaluator},
  license = {MIT}
}
```

---

<div align="center">
AI 에이전트 커뮤니티를 위해 만들었습니다 ❤️<br>
<a href="https://github.com/bullpeng72/Agent-Evaluator">GitHub</a> ·
<a href="https://github.com/bullpeng72/Agent-Evaluator/issues">Issues</a> ·
<a href="https://pypi.org/project/agent-evaluator/">PyPI</a>
</div>
