fix(aihr): seed production prompt templates

This commit is contained in:
2026-07-14 23:22:34 +08:00
parent 258cc95696
commit 804bc62de7
4 changed files with 67 additions and 0 deletions
@@ -0,0 +1,40 @@
-- AIHR 内置提示词模板补充迁移(MySQL 8.x)
-- 仅补齐内置模板,不删除或覆盖同 code/output_format/version 的自定义模板;可重复执行。
-- 执行前要求 aihr_prompt_template 已由基础 schema 创建。
INSERT INTO `aihr_prompt_template`
(`tenant_id`, `code`, `name`, `category`, `output_format`, `system_prompt`, `template`, `variables`, `version`, `enabled`, `description`, `create_time`, `update_time`)
VALUES
('000000', 'summary_card', 'SOP总结卡', 'knowledge', 'json_card',
'你是物业一线员工的SOP总结卡助手。只返回JSON,不要markdown。固定输出title、steps、objections、scripts、reminders。steps必须且只包含问题、建议、标准三项。',
'员工问题:{{queryText}}。知识片段:{{context}}。请生成可拆分展示的总结卡,问题写员工当前要处理的核心问题,建议写下一步动作,标准写SOP依据和红线。',
'queryText,context', 'v1', 1, '总结卡固定问题/建议/标准三段式', NOW(), NOW()),
('000000', 'sop_answer', 'SOP问答直给', 'knowledge', 'json_answer',
'你是物业一线员工的SOP助手。只返回 JSON,不要 markdown。字段固定为 answer, keyPoints, cautions。answer 必须结论先行,60字内直接告诉员工现在怎么做;keyPoints 必须是3到5条可执行步骤,每条以「一、」「二、」「三、」「四、」「五、」开头,包含责任人、动作、时限或留痕要求;cautions 是0到3条注意事项或红线。引用片段由系统后置展示,不要在 answer 中堆大段原文。硬约束:只能基于给定片段内容作答,片段中没有的信息不得编造;若片段无法回答问题,answer 固定为「未在已入库 SOP 中找到明确依据」且 keyPoints 为空数组。',
'员工的问题:{{queryText}}\n\n检索命中的 SOP 片段:\n{{context}}',
'queryText,context', 'v1', 1, 'SOP问答结论先行+编号步骤+引用后置', NOW(), NOW()),
('000000', 'mentor_rewrite', '导师改写', 'practice', 'text',
'你是物业管家带教师傅。只基于本场对话给出一段更稳妥的话术,不评价人格。',
'场景:{{scenarioName}}。目标:{{goal}}。员工原话:{{traineeText}}。请改写成可直接说出口的版本,80字以内。',
'scenarioName,goal,traineeText', 'v1', 1, '训练后标杆话术生成', NOW(), NOW()),
('000000', 'review_annotation', '逐句标注', 'practice', 'json_annotation',
'你是物业AI陪练复盘教练。只返回JSON数组,每项包含quote、problem、rewrite、sopPoint。',
'场景:{{scenarioName}}。Rubric:{{rubric}}。对话:{{dialogue}}。请只标注员工关键句,指出问题、推荐改写和命中或漏掉的SOP点。',
'scenarioName,rubric,dialogue', 'v1', 1, 'finish后逐句标注', NOW(), NOW()),
('000000', 'prep_card', '训练前预习卡', 'practice', 'json_prep',
'你是物业培训教练。只返回JSON,字段固定为keyPoints、redLines、scripts。',
'场景:{{scenarioName}}。SOP引用:{{sopRefs}}。成功条件:{{successCriteria}}。请生成训练前预习卡:要点3条、红线3条、可说话术2条。',
'scenarioName,sopRefs,successCriteria', 'v1', 1, '训练前卡固定三栏结构', NOW(), NOW()),
('000000', 'supervision_image_analysis_maintenance', '图片督导分析', 'supervision', 'json_card',
'你是物业现场督导助手。只返回JSON,字段固定为problem、suggestion、standard。',
'图片/视频描述:{{visualText}}。相关标准:{{standard}}。请按问题、建议、标准三段输出,不要扩写无依据内容。',
'visualText,standard', 'v1', 1, '督导图片分析三段式', NOW(), NOW())
ON DUPLICATE KEY UPDATE
`name` = VALUES(`name`),
`category` = VALUES(`category`),
`system_prompt` = VALUES(`system_prompt`),
`template` = VALUES(`template`),
`variables` = VALUES(`variables`),
`enabled` = VALUES(`enabled`),
`description` = VALUES(`description`),
`update_time` = NOW();
+1
View File
@@ -12,6 +12,7 @@
- 2026-07-14 BRD 4.6 案例媒体严格门禁:正式预检现在同时检查 `aihr_case_record.media_oss_id` 与 `media_url` 两列,避免案例音频回放依赖首次请求触发运行时懒迁移;该检查只判断 schema,不把已有音频或案例数量误判为正式案例学习资产。
- 2026-07-14 23:14 生产 schema 只读复核:生产 `aihr_case_record` 已存在,但 `media_oss_id/media_url` 为 `0/2`;本地提交 `94f48f4c` 的版本化迁移尚未在线上执行。当前只记录差异,不在没有发布窗口确认时直接修改生产数据库。
- 2026-07-14 23:16 生产训练 schema 只读复核:生产缺少 `aihr_practice_session` 的 `dim_task_completion/dim_response_timeliness/response_latency_ms`、`aihr_practice_assignment` 的 `score/score_mode`、SOP 评审的 `prompt_version/requester_ext_party_id` 和组织快照 `hire_date`;对应版本化迁移已存在,但尚未在线上执行。严格门禁现增加会话与每日题字段计数,避免发布后依赖运行时懒迁移。
- 2026-07-14 23:18 生产 Prompt 内容只读复核:生产 `aihr_prompt_template` 表存在但内置模板数量为 `0`;现新增 `aihr_20260714_prompt_template_seed_mysql8.sql`,按唯一键幂等补齐 6 个内置模板,不覆盖同 code/output_format/version 的自定义模板。未写入生产数据。
更新时间:2026-07-14
+1
View File
@@ -542,6 +542,7 @@ contains backend/script/sql/update/aihr_20260714_practice_brd_scenarios_mysql8.s
contains backend/script/sql/update/aihr_20260714_practice_brd_scenarios_mysql8.sql "daily-service-followup"
contains backend/script/sql/update/aihr_20260714_brd_sop_seed_mysql8.sql "sop_service_promotion_v1"
contains backend/script/sql/update/aihr_20260714_brd_sop_seed_mysql8.sql "sop_daily_service_v1"
contains backend/script/sql/update/aihr_20260714_prompt_template_seed_mysql8.sql "summary_card"
contains backend/script/sql/aihr_practice_mysql8.sql "aihr_prompt_template"
contains backend/script/sql/aihr_practice_mysql8.sql "summary_card"
contains frontend/src/views/train/practice.vue "训练前预习卡"
@@ -37,6 +37,31 @@ mysql "$DB" < "$ROOT_DIR/backend/script/sql/update/aihr_20260714_case_media_mysq
case_media_columns="$(mysql "$DB" -N -B -e "SELECT GROUP_CONCAT(column_name ORDER BY ordinal_position) FROM information_schema.columns WHERE table_schema='$DB' AND table_name='aihr_case_record' AND column_name IN ('media_oss_id','media_url');")"
test "$case_media_columns" = 'media_oss_id,media_url'
mysql "$DB" <<'SQL'
CREATE TABLE aihr_prompt_template (
id bigint NOT NULL AUTO_INCREMENT,
tenant_id varchar(20) DEFAULT '000000',
code varchar(80) NOT NULL,
name varchar(100) NOT NULL,
category varchar(50) NOT NULL,
output_format varchar(50) NOT NULL,
system_prompt text,
template text NOT NULL,
variables varchar(1000),
version varchar(30) DEFAULT 'v1',
enabled tinyint DEFAULT 1,
description varchar(500),
create_time datetime,
update_time datetime,
PRIMARY KEY (id),
UNIQUE KEY uk_aihr_prompt_template (tenant_id, code, output_format, version)
) ENGINE=InnoDB;
SQL
mysql "$DB" < "$ROOT_DIR/backend/script/sql/update/aihr_20260714_prompt_template_seed_mysql8.sql"
mysql "$DB" < "$ROOT_DIR/backend/script/sql/update/aihr_20260714_prompt_template_seed_mysql8.sql"
prompt_template_count="$(mysql "$DB" -N -B -e "SELECT COUNT(*) FROM aihr_prompt_template WHERE tenant_id='000000';")"
test "$prompt_template_count" = '6'
mysql "$DB" < "$ROOT_DIR/backend/script/sql/update/aihr_20260714_practice_evidence_mysql8.sql"
mysql "$DB" < "$ROOT_DIR/backend/script/sql/update/aihr_20260714_practice_evidence_mysql8.sql"
evidence_tables="$(mysql "$DB" -N -B -e "SELECT GROUP_CONCAT(table_name ORDER BY table_name) FROM information_schema.tables WHERE table_schema='$DB' AND table_name IN ('aihr_practice_audio','aihr_practice_audio_upload','aihr_practice_calibration');")"