feat: 评测模块新增详情页与创建向导
新增 EvalTaskDetail 与逐样本结果类型,Mock 与适配器补充评测详情接口,路由注册详情页并将维度创建并入向导;EvalCreateView 改为分步向导(任务配置、规则设置、维度表单),新增 EvalDetailView 展示综合得分与样本判定,列表补充详情入口,配套两份回归脚本。
This commit is contained in:
@@ -16,6 +16,7 @@ import {
|
||||
mockFineTuneList,
|
||||
mockCompareList,
|
||||
mockEvalList,
|
||||
mockEvalDetails,
|
||||
mockDimensions,
|
||||
mockLogFiles,
|
||||
mockTrainingLogFiles,
|
||||
@@ -229,6 +230,12 @@ async function handleMock(config: AxiosRequestConfig) {
|
||||
if (url === '/model-eval' && method === 'get') return ok(mockEvalList)
|
||||
if (url === '/model-eval' && method === 'delete') return ok({ deleted: true })
|
||||
if (url === '/model-eval/start' && method === 'post') return ok({ task_id: Math.floor(Math.random() * 1000) + 1 })
|
||||
m = url.match(/^\/model-eval\/([^/]+)$/)
|
||||
const evalTaskId = m?.[1]
|
||||
if (evalTaskId && method === 'get') {
|
||||
const found = mockEvalDetails.find((item) => String(item.id) === evalTaskId)
|
||||
return found ? ok(found) : fail('评测任务不存在', 404)
|
||||
}
|
||||
if (url === '/dimension' && method === 'get') return ok(mockDimensions)
|
||||
if (url === '/dimension' && method === 'post') {
|
||||
return ok({ id: Math.floor(Math.random() * 1000) + 100 })
|
||||
|
||||
@@ -10,6 +10,7 @@ import type {
|
||||
DatasetItem,
|
||||
CompareTask,
|
||||
EvalTask,
|
||||
EvalTaskDetail,
|
||||
Dimension,
|
||||
SystemInfo,
|
||||
HealthMetrics,
|
||||
@@ -254,6 +255,139 @@ export const mockEvalList: EvalTask[] = [
|
||||
{ id: 3, eval_task_name: '基线对比评测', model_name: 'Qwen2.5-7B-Instruct', dataset: '金融评测集', metric: 'accuracy', score: 72.3, status: 'running', create_time: '2026-02-10T09:00:00Z' },
|
||||
]
|
||||
|
||||
export const mockEvalDetails: EvalTaskDetail[] = [
|
||||
{
|
||||
...mockEvalList[0],
|
||||
evaluator_model: 'GPT-4o',
|
||||
sample_count: 3,
|
||||
completed_count: 3,
|
||||
passed_count: 3,
|
||||
completed_time: '2026-02-01T10:18:00Z',
|
||||
overall_score: 87.5,
|
||||
overall_score_max: 100,
|
||||
overall_evaluation: '模型在金融基础知识与常见计算题上表现稳定,答案整体准确、直接。',
|
||||
improvement_suggestions: ['补充期限匹配、再平衡等资产配置知识', '在建议类回答中明确假设与风险边界', '增加复杂金融场景和反事实样本训练'],
|
||||
dimension_summary: [
|
||||
{ name: '核心事实正确性', score: 91, max_score: 100, pass_rate: 100 },
|
||||
{ name: '信息完整性', score: 84, max_score: 100, pass_rate: 100 },
|
||||
{ name: '无幻觉', score: 90, max_score: 100, pass_rate: 100 },
|
||||
{ name: '格式合规性', score: 85, max_score: 100, pass_rate: 100 },
|
||||
],
|
||||
samples: [
|
||||
{
|
||||
id: 'finance-1', index: 1, status: 'completed', score: 1, max_score: 1, passed: true, judgement: '正确',
|
||||
input: '某公司流动资产为 800 万元,流动负债为 500 万元,流动比率是多少?',
|
||||
reference_answer: '流动比率为 1.6。',
|
||||
model_output: '流动比率 = 流动资产 ÷ 流动负债 = 800 ÷ 500 = 1.6。',
|
||||
evaluation_reason: '计算过程与结论均正确,并给出了必要公式。',
|
||||
dimension_scores: [{ name: '准确性', score: 1, max_score: 1 }, { name: '清晰度', score: 1, max_score: 1 }],
|
||||
},
|
||||
{
|
||||
id: 'finance-2', index: 2, status: 'completed', score: 1, max_score: 1, passed: true, judgement: '正确',
|
||||
input: '简述央行提高存款准备金率对市场流动性的影响。',
|
||||
reference_answer: '商业银行可贷资金减少,市场流动性通常收紧。',
|
||||
model_output: '提高存款准备金率会减少银行可用于放贷的资金,通常使市场流动性收紧。',
|
||||
evaluation_reason: '准确覆盖了传导路径,表述简洁。',
|
||||
dimension_scores: [{ name: '准确性', score: 1, max_score: 1 }, { name: '完整性', score: 0.9, max_score: 1 }],
|
||||
},
|
||||
{
|
||||
id: 'finance-3', index: 3, status: 'completed', score: 0.8, max_score: 1, passed: true, judgement: '部分正确',
|
||||
input: '投资者风险承受能力较低时,资产配置应注意什么?',
|
||||
reference_answer: '降低高波动资产比例,重视分散配置、流动性与本金安全。',
|
||||
model_output: '应以低波动资产为主,分散投资并预留流动资金,同时控制权益类资产比例。',
|
||||
evaluation_reason: '建议方向正确,但可进一步说明期限匹配与再平衡机制。',
|
||||
dimension_scores: [{ name: '准确性', score: 0.9, max_score: 1 }, { name: '完整性', score: 0.7, max_score: 1 }],
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
...mockEvalList[1],
|
||||
evaluator_model: 'Claude-3.5-Sonnet',
|
||||
sample_count: 3,
|
||||
completed_count: 3,
|
||||
passed_count: 2,
|
||||
completed_time: '2026-02-05T11:21:00Z',
|
||||
overall_score: 0.82,
|
||||
overall_score_max: 1,
|
||||
overall_evaluation: '模型具备较好的客服语气和基础问题处理能力,但对订单状态约束的识别仍不稳定。',
|
||||
improvement_suggestions: ['增加已发货、已出库等边界状态样本', '要求模型在承诺操作前先核验业务规则', '为每类客服场景补充标准处理步骤'],
|
||||
dimension_summary: [
|
||||
{ name: '核心事实正确性', score: 0.86, max_score: 1, pass_rate: 67 },
|
||||
{ name: '信息完整性', score: 0.78, max_score: 1, pass_rate: 67 },
|
||||
{ name: '无幻觉', score: 0.7, max_score: 1, pass_rate: 67 },
|
||||
{ name: '格式合规性', score: 0.94, max_score: 1, pass_rate: 100 },
|
||||
],
|
||||
samples: [
|
||||
{
|
||||
id: 'service-1', index: 1, status: 'completed', score: 0.91, max_score: 1, passed: true, judgement: '正确',
|
||||
input: '用户反馈收到的商品外包装破损,应如何回复?',
|
||||
reference_answer: '表达歉意,核实订单及破损情况,并提供补发或退款方案。',
|
||||
model_output: '很抱歉给您带来不便。请提供订单号和破损照片,我们核实后可为您安排补发或退款。',
|
||||
evaluation_reason: '关键信息覆盖完整,语气符合客服场景。',
|
||||
dimension_scores: [{ name: '相关性', score: 0.95, max_score: 1 }, { name: '服务语气', score: 0.96, max_score: 1 }],
|
||||
},
|
||||
{
|
||||
id: 'service-2', index: 2, status: 'completed', score: 0.84, max_score: 1, passed: true, judgement: '部分正确',
|
||||
input: '用户询问订单为何仍未发货。',
|
||||
reference_answer: '致歉并核查订单状态,告知预计发货时间和后续查询方式。',
|
||||
model_output: '抱歉让您久等了,我可以帮您核查订单状态,并尽快反馈预计发货时间。',
|
||||
evaluation_reason: '态度友好,但未主动说明后续查询方式。',
|
||||
dimension_scores: [{ name: '服务语气', score: 0.95, max_score: 1 }, { name: '完整性', score: 0.72, max_score: 1 }],
|
||||
},
|
||||
{
|
||||
id: 'service-3', index: 3, status: 'completed', score: 0.69, max_score: 1, passed: false, judgement: '错误', error_type: '其他',
|
||||
input: '用户要求立即取消已出库的订单。',
|
||||
reference_answer: '说明已出库订单可能无法直接取消,协助拦截或引导拒收、退货。',
|
||||
model_output: '好的,我现在为您取消订单,请稍候。',
|
||||
evaluation_reason: '未说明已出库限制,承诺了可能无法完成的操作。',
|
||||
dimension_scores: [{ name: '相关性', score: 0.7, max_score: 1 }, { name: '规则遵循', score: 0.35, max_score: 1 }],
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
...mockEvalList[2],
|
||||
evaluator_model: 'GPT-4o',
|
||||
sample_count: 3,
|
||||
completed_count: 2,
|
||||
passed_count: 1,
|
||||
overall_score: 72.3,
|
||||
overall_score_max: 100,
|
||||
overall_evaluation: '当前为阶段性评价:模型基础计算能力正常,但逻辑推理表现波动,任务仍在运行。',
|
||||
improvement_suggestions: ['补充形式逻辑与多步推理样本', '任务完成后再依据完整结果复核综合结论'],
|
||||
dimension_summary: [
|
||||
{ name: '核心事实正确性', score: 66.7, max_score: 100, pass_rate: 50 },
|
||||
{ name: '信息完整性', score: 58, max_score: 100, pass_rate: 50 },
|
||||
{ name: '无幻觉', score: 88, max_score: 100, pass_rate: 100 },
|
||||
{ name: '格式合规性', score: 76, max_score: 100, pass_rate: 50 },
|
||||
],
|
||||
samples: [
|
||||
{
|
||||
id: 'baseline-1', index: 1, status: 'completed', score: 1, max_score: 1, passed: true, judgement: '正确',
|
||||
input: '计算 15% 的 240。',
|
||||
reference_answer: '36。',
|
||||
model_output: '240 × 15% = 36。',
|
||||
evaluation_reason: '计算与结果均正确。',
|
||||
dimension_scores: [{ name: '准确性', score: 1, max_score: 1 }, { name: '清晰度', score: 1, max_score: 1 }],
|
||||
},
|
||||
{
|
||||
id: 'baseline-2', index: 2, status: 'completed', score: 0, max_score: 1, passed: false, judgement: '错误', error_type: '其他',
|
||||
input: '若所有 A 都是 B,且某个 C 是 A,可以推出什么?',
|
||||
reference_answer: '该 C 是 B。',
|
||||
model_output: '无法确定 C 是否属于 B。',
|
||||
evaluation_reason: '未正确应用包含关系的传递性。',
|
||||
dimension_scores: [{ name: '准确性', score: 0, max_score: 1 }, { name: '逻辑性', score: 0, max_score: 1 }],
|
||||
},
|
||||
{
|
||||
id: 'baseline-3', index: 3, status: 'pending', score: null, max_score: 1,
|
||||
input: '用一句话解释什么是机会成本。',
|
||||
reference_answer: '机会成本是选择某方案时放弃的最佳替代方案的价值。',
|
||||
model_output: '',
|
||||
evaluation_reason: '等待模型生成与评分。',
|
||||
},
|
||||
],
|
||||
},
|
||||
]
|
||||
|
||||
export const mockDimensions: Dimension[] = [
|
||||
{ id: 1, name: '回答准确性', type: 'classification', description: '评估模型回答是否准确', eval_model: 'GPT-4o', eval_method: 'standard', eval_prompt: '# 角色\n你是专业的评估专家...', is_active: true, is_default: true, create_time: '2025-12-01T08:00:00Z' },
|
||||
{ id: 2, name: '综合评分', type: 'metric', description: '0-5 分综合评分', eval_model: 'Claude-3.5-Sonnet', eval_method: 'metric_standard', eval_prompt: '# 角色\n你是专业评分专家...', is_active: true, is_default: false, score_min: 0, score_max: 5, pass_threshold: 3.5, create_time: '2025-12-05T09:00:00Z' },
|
||||
|
||||
Reference in New Issue
Block a user