fix(aihr): align practice scoring with BRD five dimensions

This commit is contained in:
2026-07-14 15:12:47 +08:00
parent 3f39be7fee
commit 94d483d334
11 changed files with 391 additions and 74 deletions
+10 -10
View File
@@ -32,6 +32,9 @@ CREATE TABLE IF NOT EXISTS `aihr_practice_session` (
`scenario_name` varchar(100) DEFAULT NULL COMMENT '场景名称',
`mode` varchar(30) DEFAULT 'text' COMMENT '训练模式',
`total_score` int DEFAULT NULL COMMENT '总分',
`dim_task_completion` int DEFAULT NULL COMMENT '任务完成度分',
`dim_response_timeliness` int DEFAULT NULL COMMENT '响应时效分',
`response_latency_ms` int DEFAULT NULL COMMENT '平均陪练响应时长毫秒',
`dim_compliance` int DEFAULT NULL COMMENT '合规分',
`dim_emotion` int DEFAULT NULL COMMENT '情绪分',
`dim_communication` int DEFAULT NULL COMMENT '沟通分',
@@ -354,7 +357,7 @@ SELECT
CONCAT(`scenario_name`, ' Rubric'),
'v1',
1,
'生活顾问试点四维评分标准',
'生活顾问试点五维评分标准',
NOW(),
NOW()
FROM `aihr_practice_scenario`
@@ -373,11 +376,7 @@ SELECT
r.`rubric_code`,
d.`dimension_code`,
d.`dimension_name`,
CASE
WHEN s.`scenario_type` = '催费/停车费' AND d.`dimension_code` = 'compliance' THEN 0.30
WHEN s.`scenario_type` = '催费/停车费' AND d.`dimension_code` = 'marketing' THEN 0.20
ELSE d.`weight`
END,
d.`weight`,
d.`description`,
d.`sort_order`,
NOW(),
@@ -386,10 +385,11 @@ FROM `aihr_practice_rubric` r
JOIN `aihr_practice_scenario` s
ON s.`tenant_id` = r.`tenant_id` AND s.`scenario_code` = r.`scenario_code`
JOIN (
SELECT 'compliance' AS `dimension_code`, '合规' AS `dimension_name`, 0.35 AS `weight`, 'SOP关键点、权限边界、承诺口径' AS `description`, 10 AS `sort_order`
UNION ALL SELECT 'communication', '沟通', 0.25, '诉求确认、信息结构、反馈节点', 20
UNION ALL SELECT 'emotion', '情绪', 0.25, '共情承接、降温、信任恢复', 30
UNION ALL SELECT 'marketing', '营销', 0.15, '收费季转化、政策解释、办理引导', 40
SELECT 'task_completion' AS `dimension_code`, '任务完成度' AS `dimension_name`, 0.40 AS `weight`, '问题解决有效性、工单闭环率、首解率、SOP关键点执行率' AS `description`, 10 AS `sort_order`
UNION ALL SELECT 'standardization', '话术规范性', 0.25, '流程完整性、法规引用准确性、沟通合规、用语专业度', 20
UNION ALL SELECT 'emotion', '情绪管理能力', 0.20, '共情、语速语气控制、业主情绪引导安抚有效性', 30
UNION ALL SELECT 'response_timeliness', '响应时效', 0.10, '首响时长、处理周期、跟进频率', 40
UNION ALL SELECT 'marketing', '增值转化潜力', 0.05, '活动引导、产品推介时机与成功率', 50
) d
WHERE r.`tenant_id` = '000000'
ON DUPLICATE KEY UPDATE
@@ -0,0 +1,100 @@
-- AIHR 对练五维评分迁移(MySQL 8.x)
-- 补齐会话结构与生活顾问试点 Rubric,不写入训练业务数据;可重复执行。
SET @aihr_practice_table_exists := (
SELECT COUNT(*)
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'aihr_practice_session'
);
SET @aihr_task_completion_exists := (
SELECT COUNT(*)
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'aihr_practice_session'
AND COLUMN_NAME = 'dim_task_completion'
);
SET @aihr_task_completion_ddl := IF(
@aihr_practice_table_exists = 1 AND @aihr_task_completion_exists = 0,
'ALTER TABLE aihr_practice_session ADD COLUMN `dim_task_completion` int DEFAULT NULL COMMENT ''任务完成度分'' AFTER `total_score`',
'SELECT 1'
);
PREPARE aihr_task_completion_stmt FROM @aihr_task_completion_ddl;
EXECUTE aihr_task_completion_stmt;
DEALLOCATE PREPARE aihr_task_completion_stmt;
SET @aihr_response_timeliness_exists := (
SELECT COUNT(*)
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'aihr_practice_session'
AND COLUMN_NAME = 'dim_response_timeliness'
);
SET @aihr_response_timeliness_ddl := IF(
@aihr_practice_table_exists = 1 AND @aihr_response_timeliness_exists = 0,
'ALTER TABLE aihr_practice_session ADD COLUMN `dim_response_timeliness` int DEFAULT NULL COMMENT ''响应时效分'' AFTER `dim_task_completion`',
'SELECT 1'
);
PREPARE aihr_response_timeliness_stmt FROM @aihr_response_timeliness_ddl;
EXECUTE aihr_response_timeliness_stmt;
DEALLOCATE PREPARE aihr_response_timeliness_stmt;
SET @aihr_response_latency_exists := (
SELECT COUNT(*)
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'aihr_practice_session'
AND COLUMN_NAME = 'response_latency_ms'
);
SET @aihr_response_latency_ddl := IF(
@aihr_practice_table_exists = 1 AND @aihr_response_latency_exists = 0,
'ALTER TABLE aihr_practice_session ADD COLUMN `response_latency_ms` int DEFAULT NULL COMMENT ''平均陪练响应时长毫秒'' AFTER `dim_response_timeliness`',
'SELECT 1'
);
PREPARE aihr_response_latency_stmt FROM @aihr_response_latency_ddl;
EXECUTE aihr_response_latency_stmt;
DEALLOCATE PREPARE aihr_response_latency_stmt;
CREATE TEMPORARY TABLE IF NOT EXISTS aihr_brd_rubric_codes (
tenant_id varchar(20) NOT NULL,
rubric_code varchar(100) NOT NULL,
PRIMARY KEY (tenant_id, rubric_code)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
DELETE FROM aihr_brd_rubric_codes;
INSERT INTO aihr_brd_rubric_codes (tenant_id, rubric_code)
SELECT r.tenant_id, r.rubric_code
FROM aihr_practice_rubric r
JOIN aihr_practice_scenario s
ON s.tenant_id = r.tenant_id AND s.scenario_code = r.scenario_code
JOIN (
SELECT tenant_id, rubric_code
FROM aihr_practice_rubric_dimension
WHERE dimension_code IN ('compliance', 'communication', 'emotion', 'marketing')
GROUP BY tenant_id, rubric_code
HAVING COUNT(*) = 4
) old_dimensions
ON old_dimensions.tenant_id = r.tenant_id AND old_dimensions.rubric_code = r.rubric_code
WHERE r.tenant_id = '000000'
AND s.position = '生活顾问';
DELETE d
FROM aihr_practice_rubric_dimension d
JOIN aihr_brd_rubric_codes r
ON r.tenant_id = d.tenant_id AND r.rubric_code = d.rubric_code;
INSERT INTO aihr_practice_rubric_dimension
(tenant_id, rubric_code, dimension_code, dimension_name, weight, description, sort_order, create_time, update_time)
SELECT r.tenant_id, r.rubric_code, d.dimension_code, d.dimension_name, d.weight, d.description, d.sort_order, NOW(), NOW()
FROM aihr_brd_rubric_codes r
JOIN (
SELECT 'task_completion' AS dimension_code, '任务完成度' AS dimension_name, 0.40 AS weight, '问题解决有效性、工单闭环率、首解率、SOP关键点执行率' AS description, 10 AS sort_order
UNION ALL SELECT 'standardization', '话术规范性', 0.25, '流程完整性、法规引用准确性、沟通合规、用语专业度', 20
UNION ALL SELECT 'emotion', '情绪管理能力', 0.20, '共情、语速语气控制、业主情绪引导安抚有效性', 30
UNION ALL SELECT 'response_timeliness', '响应时效', 0.10, '首响时长、处理周期、跟进频率', 40
UNION ALL SELECT 'marketing', '增值转化潜力', 0.05, '活动引导、产品推介时机与成功率', 50
) d;
DROP TEMPORARY TABLE IF EXISTS aihr_brd_rubric_codes;