AgentEvalTool/docs/data-models-v1.0.md
sinohqb a77cd83e6a v0.2.0-dev: 文件管理 + 页面布局统一 + 6 个 bug 修复
## 新增功能
- 文件管理模块:分类树 + 文件上传/下载/删除
- 文件上传支持拖拽(Dragger)+ 手动上传(customRequest 模式)

## 页面布局统一(参照评测执行页)
- 仪表盘/评测对象/评测场景/评测报告 全部改为全高 flex 布局
- 统一内联页头样式(h2 + 竖线分隔 + 描述)
- 表格撑满高度、overflow 处理
- 每页添加刷新按钮

## Bug 修复
- 分类树操作按钮 hover 不可见(CSS 规则缺失)
- 文件上传失败(multipart boundary 缺失)
- LLM API 响应 content blocks 数组格式支持(_extract_content_from_api_response)
- response_time_max_ms 被静默忽略(隐式规则传空 params)
- 空 messages 导致 IndexError 崩溃
- poll_reply 异常中止整个 run(缺 try/catch)
- engine finally 未关闭 session
- 3 个页面 UTC 时间戳解析偏差 8 小时

## 后端
- EvalEngine: poll_reply 异常保护、空 dialog 保护、session 关闭
- LLM API 响应解析支持 content-block-array 格式
- 隐式 response_time 规则正确传递 max_ms 参数

## 前端
- api.ts: 移除手动 Content-Type(让浏览器自动添加 boundary)
- Files.tsx: customRequest 替代 beforeUpload、布局优化
- index.css: 分类树 hover 规则
- Targets/Scenarios/Home/Reports: 全高布局改造
- 3 个页面时间戳改用 formatDateTime()(修复 UTC 偏差)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-16 15:25:22 +08:00

158 lines
5.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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` 支持复杂的多轮对话场景