From 804bc62de7da12ecd4453aba112b8929d3b3b578 Mon Sep 17 00:00:00 2001 From: let5sne Date: Tue, 14 Jul 2026 23:22:34 +0800 Subject: [PATCH] fix(aihr): seed production prompt templates --- ...r_20260714_prompt_template_seed_mysql8.sql | 40 +++++++++++++++++++ docs/BRD_IMPLEMENTATION_AUDIT.md | 1 + scripts/demo-check.sh | 1 + scripts/tests/aihr-schema-migrations.test.sh | 25 ++++++++++++ 4 files changed, 67 insertions(+) create mode 100644 backend/script/sql/update/aihr_20260714_prompt_template_seed_mysql8.sql diff --git a/backend/script/sql/update/aihr_20260714_prompt_template_seed_mysql8.sql b/backend/script/sql/update/aihr_20260714_prompt_template_seed_mysql8.sql new file mode 100644 index 00000000..b4959f01 --- /dev/null +++ b/backend/script/sql/update/aihr_20260714_prompt_template_seed_mysql8.sql @@ -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(); diff --git a/docs/BRD_IMPLEMENTATION_AUDIT.md b/docs/BRD_IMPLEMENTATION_AUDIT.md index 98993df0..3daea3d8 100644 --- a/docs/BRD_IMPLEMENTATION_AUDIT.md +++ b/docs/BRD_IMPLEMENTATION_AUDIT.md @@ -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 diff --git a/scripts/demo-check.sh b/scripts/demo-check.sh index 918da6cd..a18bfdc6 100755 --- a/scripts/demo-check.sh +++ b/scripts/demo-check.sh @@ -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 "训练前预习卡" diff --git a/scripts/tests/aihr-schema-migrations.test.sh b/scripts/tests/aihr-schema-migrations.test.sh index 7b676a36..02675cee 100755 --- a/scripts/tests/aihr-schema-migrations.test.sh +++ b/scripts/tests/aihr-schema-migrations.test.sh @@ -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');")"