1. 页面概览

评测管理是 AIP 管理后台面向管理员的 NLQ 离线评测页,路由为 /admin/eval。它用「测试用例 → 评测运行 → 历史与回归」三个 Tab 覆盖完整闭环:先维护黄金测试集(自然语言问题 + 期望 SQL),再触发 NLQ→SQL 生成与执行校验,最后查看指标与回归趋势。

核心指标包括执行准确率(EA)、精确匹配率(EM)、语法有效率(SV)与通过用例数;回归报告按历次运行对比执行准确率,下降时标红告警,便于定位 Prompt/RAG/SQL 逻辑劣化。

一句话总结:评测管理把「用例集维护、评测执行、回归监控」串成一条流水线,让 NLQ 质量可度量、可回归。

2. 访问入口

2.1 路由与菜单

项目
路由 path/admin/eval
路由 nameAdminEval
路由 title评测管理
requiresAuthtrue(父级 /admin 另有 requiresAdmin)
菜单位置AdminLayout 侧边栏菜单项「评测管理」
前端源码action/web/src/views/EvalPage.vue
路由注册action/web/src/router/index.js

2.2 认证与权限

守卫校验 aip_is_admin='1',否则跳 /chat;请求走 action/web/src/api/aipClient.jsaip_token Bearer JWT),401 清 token 跳登录。

2.3 端口与 API 前缀

AIP 后端 18080,前缀 /aip-api(实际 /aip-api/v1/...,Vite 代理重写为 /api/v1)。

3. 界面布局

+------------------------------+
| 评测管理  [刷新]  [alert 提示] |
| Tab:测试用例|评测运行|历史与回归
+------------------------------+
| 测试用例 Tab:[新建测试用例][导出评测集]
|   表格:ID|类别|难度|问题|期望SQL|数据源|操作
| 评测运行 Tab:[运行评测](spinner)
|   指标卡:执行准确率|精确匹配率|语法有效率|
|   通过用例|平均延迟|平均Tokens
|   通过率进度条 + 用例结果表(展开 SQL)
| 历史与回归 Tab:评测历史+运行详情+
|   回归报告(横幅+趋势折线+指标表)
+------------------------------+

各板块职责:测试用例 Tab 维护黄金集;评测运行 Tab 同步执行展示结果;历史与回归 Tab 提供详情与回归检测。

4. 交互元素

控件位置含义与作用
新建测试用例 / 编辑、删除测试用例表弹窗:类别下拉(简单查询/多表连接/聚合统计/子查询/窗口函数,值 simple_select/join/aggregation/subquery/window)、难度(简单/中等/困难,easy/medium/hard)、问题*、期望 SQL*、数据源可选;删除有 confirm
导出评测集测试用例表工具栏GET /evaluation/test-cases/export,下载 eval_test_cases_<日期>.json
运行评测评测运行 TabPOST /evaluation/runs(timeout 放宽 120s),执行中按钮显示「评测运行中...」并禁用,同步返回结果
查看 SQL / 收起 SQL用例结果表展开/收起该用例生成的 SQL(pre 代码块)
查看详情评测历史表打开该次运行详情(指标卡 + 用例结果表)

5. 后端关联

API 端点(/evaluation 前缀,全部 admin 组):

方法路径用途
GET / POST/evaluation/test-cases用例列表(分页 data.items)/ 创建
GET/evaluation/test-cases/export导出完整评测集 DTO(供制品分发/同源复用)
PUT / DELETE/evaluation/test-cases/:id编辑 / 删除用例
POST/evaluation/runs触发评测运行(同步返回结果,已任务化)
GET/evaluation/runs历史运行列表(分页 data.items
GET/evaluation/runs/:id运行详情(data 含 run 与 results)
GET/evaluation/reports历次指标趋势 + regression_alerts

5.1 关键机制

后端实现:action/products/aip/evaluation/handler.goservice.go(RunEval/SeedTestCases)、server/handlers.go(任务化)。

6. 权限与安全

7. 常见问题与排错

问题 1:点「运行评测」很久后提示「评测运行失败」

原因:评测同步执行超过前端 timeout 120s(用例多/LLM 慢),或后端报错。
处理:减少用例数量;看后端日志定位 RunEval 报错;确认 LLM 网关可用。

问题 2:保存测试用例报「category 必须为 simple_select/join/aggregation/subquery/window 之一」

原因:类别下拉值被清空或传了非法值。
处理:从下拉重新选择类别(默认 simple_select)再保存。

问题 3:导出评测集失败或下载文件无内容

原因/evaluation/test-cases/export 未返回 items 数组,或浏览器拦截自动下载。
处理:检查 Network 返回结构;放行自动下载;确认管理员权限。

问题 4:回归报告显示「暂无回归数据」

原因GetReports 只统计 status=completed 的运行记录,历史为空。
处理:先运行一次评测产生 completed 记录;确认 /evaluation/reports 返回非空 items。

8. 已知缺陷与边界

说明
运行同步等待前端按同步执行处理(timeout 120s),超长评测会失败;任务化 202 分支未轮询 GET /tasks/:id
无用例筛选控件用例接口支持 category/difficulty 过滤参数,页面未暴露筛选 UI
平均延迟 / Tokens无耗时数据时显示 '-'
种子用例默认集bootstrap 会写入默认评测集,删除后需手动维护

注:回归检测读错字段(横幅依赖 payload.regression_detected,后端实际返回 regression_alerts,横幅不显示)已于 2026-09-06 修复(改读 regression_alerts,兼容旧字段)。