# AgentEvalTool 数据模型文档

**版本**: v1.0  
**日期**: 2026-07-09  
**状态**: 已发布  
**作者**: AgentEval Team

---

## 一、概述

本文档描述 AgentEvalTool V1 版本的核心数据模型。所有模型均使用 Pydantic/SQLModel 定义，支持数据验证和持久化。

## 二、核心模型

### 2.1 EvalTarget（评测对象）

评测对象代表被评估的智能体服务。

```python
class EvalTarget:
    id: str                          # 唯一标识符（UUID）
    name: str                        # 对象名称
    description: str                 # 对象描述
    platform: str                    # 平台类型："ai_digital_employee" | "ai_assistant"
    channel_type: str                # 通道类型："tutu-api"
    channel_config: dict             # 通道配置参数
    status: str                      # 状态："active" | "inactive" | "error"
    created_at: datetime             # 创建时间
    updated_at: datetime             # 更新时间
```

**channel_config 字段说明**（tutu-api）：
- `base_url`: API 基础地址
- `token`: JWT 认证令牌
- `tenant`: 租户标识
- `chat_channel_id`: 聊天通道 ID
- `chat_contact_id`: 聊天联系人 ID

### 2.2 Scenario（评测场景）

评测场景定义一组测试用例和评估规则。

```python
class Scenario:
    id: str                          # 唯一标识符（UUID）
    name: str                        # 场景名称
    description: str                 # 场景描述
    tags: List[str]                  # 标签列表
    cases: List[Case]                # 用例列表
    created_at: datetime             # 创建时间
    updated_at: datetime             # 更新时间
```

### 2.3 Case（评测用例）

评测用例定义具体的测试对话和期望结果。

```python
class Case:
    id: str                          # 用例标识符
    type: str                        # 用例类型："single" | "multi_turn"
    messages: List[str]              # 消息列表（单轮或多轮）
    expectations: Expectation        # 期望结果
    eval_rules: List[EvalRuleConfig] # 评估规则配置
```

### 2.4 EvalRun（评测执行记录）

评测执行记录跟踪一次完整的评测任务。

```python
class EvalRun:
    id: str                          # 唯一标识符（UUID）
    target_id: str                   # 评测对象 ID
    scenario_id: str                 # 评测场景 ID
    status: str                      # 状态："pending" | "running" | "completed" | "failed"
    started_at: datetime             # 开始时间
    completed_at: Optional[datetime] # 完成时间
    summary: Optional[dict]          # 执行摘要
```

### 2.5 Turn（对话轮次）

对话轮次记录单次消息发送和回复。

```python
class Turn:
    id: str                          # 唯一标识符（UUID）
    run_id: str                      # 所属执行记录 ID
    case_id: str                     # 所属用例 ID
    round_index: int                 # 轮次序号（从 1 开始）
    sent_message: dict               # 发送的消息内容
    sent_at: datetime                # 发送时间
    question_msg_id: Optional[str]   # 问题消息 ID（用于配对回复）
    reply: Optional[dict]            # 回复内容
    received_at: Optional[datetime]  # 接收时间
    latency_ms: Optional[int]        # 响应延迟（毫秒）
```

### 2.6 EvalResult（评估结果）

评估结果记录单条规则的评估结果。

```python
class EvalResult:
    id: str                          # 唯一标识符（UUID）
    run_id: str                      # 所属执行记录 ID
    case_id: str                     # 所属用例 ID
    turn_id: str                     # 所属轮次 ID
    rule_type: str                   # 规则类型："keyword_match" | "response_time" | "llm_score"
    passed: bool                     # 是否通过
    score: Optional[float]           # 得分（0.0-1.0）
    reason: str                      # 评估原因说明
```

## 三、数据库表结构

所有模型均持久化到 SQLite 数据库（`data/agenteval.db`）。

### 3.1 表名映射

| 模型 | 表名 |
|------|------|
| EvalTarget | `eval_targets` |
| Scenario | `scenarios` |
| EvalRun | `eval_runs` |
| Turn | `turns` |
| EvalResult | `eval_results` |

### 3.2 关系图

```
EvalTarget (1) ──< (N) EvalRun
Scenario (1) ──< (N) EvalRun
EvalRun (1) ──< (N) Turn
EvalRun (1) ──< (N) EvalResult
Turn (1) ──< (N) EvalResult
```

## 四、数据持久化

- **数据库**: SQLite（本地文件存储）
- **ORM**: SQLModel（基于 Pydantic + SQLAlchemy）
- **数据目录**: `data/`
  - `agenteval.db`: 主数据库
  - `scenarios/`: 场景 YAML 文件
  - `reports/`: 生成的报告文件

## 五、扩展性

当前数据模型设计预留了扩展点：

1. **多通道支持**: `EvalTarget.channel_type` 支持不同通道类型
2. **多规则支持**: `EvalResult.rule_type` 支持不同评估规则
3. **多平台支持**: `EvalTarget.platform` 支持不同平台类型
4. **场景扩展**: `Scenario.cases` 支持复杂的多轮对话场景
