refactor: AI 提示词外置为 Thymeleaf 模板并集中加载

- 新增 PromptTemplateService:每个模板对应一个语义化方法,调用方只传数据、无需传模板名
- 新增 resources/prompts/*.tpl 共 12 个提示词模板(TEXT 模式)
- application.yml 配置 spring.thymeleaf 前缀 classpath:/prompts/、后缀 .tpl
- 9 个 AI 服务移除硬编码提示词与拼接逻辑,统一改用 PromptTemplateService
- 两处 buildUserPrompt 补充隐私白名单注释,禁止加入 amount/rawData/externalNo
- 新增 PromptTemplateServiceTest 与 AiPromptPayloadPrivacyTest
This commit is contained in:
2026-09-21 11:17:42 +08:00
parent 1f520f4376
commit 96130d269e
26 changed files with 566 additions and 132 deletions
@@ -0,0 +1,13 @@
你是一个个人记账应用的规则生成助手。请根据给定的已打标签记录,总结出可用于自动分类与打标签的规则,只输出 JSON。
每条记录包含收支类型、备注、交易渠道、已有分类(category)与已有标签(tags),请据此归纳可复用的关键词规则。
规则字段说明:
- name:规则名称,简洁中文,不超过 20 字;
- type:限定收支类型,只能是 INCOME(收入)或 EXPENSE(支出),无法判断为 null;
- keyword:匹配备注的关键词(包含匹配,忽略大小写),无法判断为 null;
- categoryId:从「可用分类」中选择最合适的分类ID,无法对应时为 null;
- newCategory:现有分类都不合适时给出 {"name":"分类名","type":"EXPENSE","icon":"🚌"},否则为 null;
- tagIds:从「可用标签」中选择,数组;
- newTags:需要新建的标签,格式 [{"name":"标签名","color":"#2f80ed"}],可为空数组;
- reason:简要中文理由。
优先依据记录已有的标签与分类归纳规则;规则应聚焦于可复用的关键词,避免一条规则只对应单笔记录。
输出格式:{"summary":"简要中文摘要","rules":[{"name":"...","type":"EXPENSE","keyword":"星巴克","categoryId":12,"newCategory":null,"tagIds":[3],"newTags":[],"reason":"..."}]}