日期: 2026-08-28 状态: 已确认 版本: v1.0
关联文档:
项目已有分散的"传统文化镜像"基础设施,各玄学来源各自有配置表和展示:
| 来源 | 配置表 | 先天分字段 | 服务 |
|---|---|---|---|
| 星座 | zodiac_config |
mind_base/wisdom_base |
ZodiacAnnualEnergyService |
| 八字 | bazi_config |
mind_base/wisdom_base |
BaziConfigService |
| 血型 | blood_type_config |
mind_base/wisdom_base |
BloodTypeConfigService |
| 数字能量 | numsoul_config(灵数1-9) |
— | FamilyMemberAttributeService.getNumSoulConfig() |
成员先天属性存于 family_member_attributes 表(八字四柱/五行/生肖/血型/mind_base_score/wisdom_base_score/behavior_modifier含灵数)。
已有接口:/api/mind/traditional/mirror、/family-dashboard、/compatibility、/api/zodiac/energy、/api/tianpan/*。
已有前端:pages/mind-detail/ 下 traditional-mirror.vue、duo-compatibility.vue、family-dashboard.vue、index.vue。
mind_base_score(先天)与 energy_balance(后天)未打通展示成长轨迹bazi_reading_template 模板文案在现有基础上深化/整合,将星座/八字/数字能量统一为"心维度先天画像"体系:
服务于五维能量体系——星座/八字/数字能量作为心维度先天基础分来源,最终汇入五维能量,强调与后天能量打通、成长轨迹。
AI 主导生成——先天画像和解读主要由 AI 生成,后端只提供原始数据。AI 服务不可用时降级为模板文案。
┌─────────────────────────────────────────────────────────────┐
│ 数据源(现有,不动) │
│ zodiac_config / bazi_config / blood_type_config / │
│ numsoul_config / life_number_relationship / │
│ bazi_reading_template │
└──────────────────────────┬──────────────────────────────────┘
│ 读取
┌──────────────────────────▼──────────────────────────────────┐
│ 先天画像聚合层(新增 InnatePortraitService) │
│ · 聚合八字/五行/星座/血型/灵数/天赋数/命运数 │
│ · 复用 calcInnateScore 计算 mind_base_score │
│ · 数字能量补强(天赋数/生日数/命运数计算) │
└──────────────┬───────────────────────────┬─────────────────┘
│ 原始数据 │ 先天画像
┌──────────────▼──────────┐ ┌─────────────▼─────────────────┐
│ LangGraph AI graph │ │ 五维能量体系(现有) │
│ (innate_portrait_graph)│ │ mind_base_score → energy_balance│
│ AI 主导生成解读文案 │ │ 先天+后天成长轨迹 │
└──────────────┬──────────┘ └─────────────┬─────────────────┘
│ AI解读 │ 展示
┌──────────────▼───────────────────────────▼─────────────────┐
│ 小程序心维度页面(增强) │
│ · 先天画像报告(AI解读) │
│ · 先天+后天成长轨迹 │
└─────────────────────────────────────────────────────────────┘
innate_portrait_config(先天画像来源权重配置)管理端可配置各玄学来源对 mind_base_score 的权重、启停开关、AI 解读开关。
与现有硬编码权重的关系:现有
FamilyMemberAttributeService.calcInnateScore()硬编码 zodiac×50% + bazi×30% + blood×20%。本表权重将替换该硬编码逻辑——calcInnateScore改为读取本表权重(详见 §7.5)。数字能量(numsoul)作为第 4 个来源参与加权。
CREATE TABLE IF NOT EXISTS innate_portrait_config (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
source_type VARCHAR(20) NOT NULL COMMENT '来源: zodiac/bazi/blood/numsoul',
source_name VARCHAR(50) NOT NULL COMMENT '来源名称',
weight INT DEFAULT 25 COMMENT '权重(基点,2500=25%)',
enabled TINYINT(1) DEFAULT 1 COMMENT '是否启用',
ai_enabled TINYINT(1) DEFAULT 1 COMMENT '是否启用AI解读',
sort_order INT DEFAULT 0 COMMENT '排序',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
UNIQUE KEY uk_source (source_type)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='先天画像来源权重配置';
innate_portrait_report(先天画像报告缓存)AI 解读结果缓存,避免重复调用 LLM。
职责边界:本表只存
portrait_json(画像数据)+ai_reading(AI解读)。不重复存mind_base_score——先天分从family_member_attributes.mind_base_score读取,避免职责重叠。
CREATE TABLE IF NOT EXISTS innate_portrait_report (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
member_id BIGINT NOT NULL COMMENT '成员ID',
member_type VARCHAR(10) NOT NULL COMMENT '成员类型: child/parent',
family_id BIGINT NOT NULL COMMENT '家庭ID',
portrait_json TEXT COMMENT '先天画像数据JSON',
ai_reading TEXT COMMENT 'AI解读文案',
generated_at DATETIME COMMENT '生成时间',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
UNIQUE KEY uk_member (member_id, member_type)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='先天画像报告缓存';
numsoul_detail_config(数字能量详细配置)覆盖所有数字类型(生命灵数/天赋数/生日数/命运数),每个类型每个数字都有解读文案。
与现有
numsoul_config的关系:numsoul_config(灵数1-9基础配置)保留不动,兼容现有getNumSoulConfig()调用。numsoul_detail_config是扩展,覆盖更细的数字类型(生命灵数/天赋数/生日数/命运数),并新增mind_base字段使数字能量参与mind_base_score加权计算。
CREATE TABLE IF NOT EXISTS numsoul_detail_config (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
number_type VARCHAR(20) NOT NULL COMMENT '类型: life_path/talent/birthday/destiny',
number_value INT NOT NULL COMMENT '数字值 1-9 或主数 11/22/33',
title VARCHAR(50) COMMENT '称号',
keywords VARCHAR(200) COMMENT '性格关键词',
mind_base INT DEFAULT 0 COMMENT '心先天基础分(百分位)',
mind_advice TEXT COMMENT '心维度成长建议',
color_hex VARCHAR(10) COMMENT '代表色',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
UNIQUE KEY uk_type_num (number_type, number_value)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='数字能量详细配置表';
从出生日期推导:
InnatePortraitService(先天画像聚合服务)核心服务,职责:
family_member_attributes + 各配置表聚合出完整先天画像(八字/五行/星座/血型/灵数/天赋数/生日数/命运数)calcInnateScore 计算 mind_base_score:不重复实现加权逻辑,直接调用现有 FamilyMemberAttributeService.calcInnateScore()(该服务已实现 zodiac×50% + bazi×30% + blood×20% 加权并缓存到 mind_base_score)innate_portrait_report关键决策:
mind_base_score的计算逻辑已存在于FamilyMemberAttributeService.calcInnateScore()(zodiac×50% + bazi×30% + blood×20%,已缓存)。InnatePortraitService复用该方法,不重复实现。管理端可配置权重(innate_portrait_config)将替换calcInnateScore中的硬编码权重(详见 §7.5)。
@Service
public class InnatePortraitService {
@Resource
private FamilyMemberAttributeService familyMemberAttributeService;
@Resource
private InnatePortraitConfigMapper innatePortraitConfigMapper;
@Resource
private InnatePortraitReportMapper innatePortraitReportMapper;
@Resource
private NumSoulDetailConfigMapper numSoulDetailConfigMapper;
@Resource
private AiGateway aiGateway;
/**
* 聚合先天画像 + 复用 calcInnateScore 计算 mind_base_score
*/
public InnatePortraitVO getInnatePortrait(Long memberId, String memberType) {
// 1. 读取 family_member_attributes
// 2. 聚合各来源数据(八字/五行/星座/血型/灵数)
// 3. 计算数字能量(生命灵数/天赋数/生日数/命运数)
// 4. 复用 familyMemberAttributeService.calcInnateScore(memberId, memberType, "mind")
// 5. 返回完整画像
}
/**
* 生成 AI 解读(缓存到 innate_portrait_report)
*/
public InnatePortraitReportVO generateAiReading(Long memberId, String memberType) {
// 1. 检查缓存,未过期直接返回
// 2. 聚合先天画像
// 3. 调用 AiGateway 生成 AI 解读
// 4. 缓存结果
}
/**
* 数字能量计算
*/
public NumSoulDetailVO calculateNumSoul(Date birthDatetime) {
// 生命灵数/天赋数/生日数/命运数
}
/**
* 先天+后天成长轨迹
*/
public InnateTrajectoryVO getTrajectory(Long memberId, String memberType, Long familyId) {
// 1. 读取先天画像 + mind_base_score
// 2. 读取 energy_balance(后天当前能量)
// 3. 计算先天 vs 后天的差值/趋势
// 4. 结合 AI 解读生成成长建议
}
}
InnatePortraitVO:完整先天画像(八字/五行/星座/血型/灵数/天赋数/生日数/命运数 + mind_base_score)NumSoulDetailVO:数字能量详情(各类型数字 + 配置解读)InnatePortraitReportVO:AI 解读报告(画像 + AI 文案 + 分数)InnateTrajectoryVO:先天+后天成长轨迹InnatePortraitController(/api/mind/innate):
POST /api/mind/innate/portrait — 获取先天画像POST /api/mind/innate/reading — 生成/获取 AI 解读POST /api/mind/innate/numsoul — 获取数字能量详情POST /api/mind/innate/trajectory — 获取先天+后天成长轨迹InnatePortraitConfigMapperInnatePortraitReportMapperNumSoulDetailConfigMapperinnate_portrait_graph(先天画像解读 graph)在 cfc-langgraph/app/graphs/ 新增 innate_portrait_graph.py,接收先天画像原始数据,AI 主导生成个性化解读。
┌─────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ 收集画像数据 │ → │ 组装解读Prompt│ → │ LLM生成解读 │ → │ 结构化输出 │
│ (portrait) │ │ (prompt) │ │ (解读文案) │ │ (JSON) │
└─────────────┘ └──────────────┘ └──────────────┘ └──────────────┘
graph 节点设计:
输出结构:
{
"mindTraits": "心维度特质描述(基于五行/星座/灵数综合分析)",
"strengths": ["先天优势1", "先天优势2"],
"growthAdvice": "心维度成长建议",
"parentAdvice": "家长互动建议",
"wuxingBalance": "五行平衡提示"
}
在 app/api/adapter.py 或新增 app/api/innate.py:
POST /api/v1/innate/reading — 接收先天画像数据,返回 AI 解读在 AiGateway.java 新增方法:
public Map<String, Object> generateInnateReading(Map<String, Object> portrait) {
// POST baseUrl + "/api/v1/innate/reading"
// 熔断 + fallback(fallback 返回模板文案)
}
Fallback 策略(关键):
bazi_reading_template 模板文案 + numsoul_detail_config 静态文案拼接解读 prompt 需:
现有五维能量体系用 energy_balance(当前能量)+ energy_log(流水)。先天基础分(mind_base_score)需要与后天能量打通,展示成长轨迹。
设计思路:
mind_base_score(0-100)作为心维度的"起点基线"energy_balance(当前能量值)作为心维度的"当前状态"POST /api/mind/innate/trajectory返回某成员的先天画像 + 后天成长轨迹:
{
"innatePortrait": { "mindBaseScore": 72, "zodiac": "狮子座", "lifeNumber": 3, "..." },
"innateDimensionScores": { "body": 65, "mind": 72, "wisdom": 68, "action": 60, "wealth": 55 },
"currentEnergy": { "mindBalance": 120, "mindTotalEarned": 350, "..." },
"trajectory": {
"innateVsCurrent": { "mindInnate": 72, "mindCurrent": 81, "growth": "+9" },
"growthTrend": "先天心能量充沛,后天通过情绪打卡/家庭互动持续成长",
"advice": "保持当前情绪打卡频率,建议增加家庭共处时间..."
}
}
InnatePortraitService.getTrajectory(memberId, memberType, familyId):
mind_base_scoreenergy_balance(后天当前能量)小程序 pages/mind-detail/index.vue 心维度首页,新增"先天画像"卡片:
InnatePortraitConfig.vue在 cfc-web/src/views/admin/ 新增,管理先天画像来源权重配置:
功能:
NumSoulDetailConfig.vue管理数字能量详细配置(numsoul_detail_config):
功能:
InnatePortraitConfigController(/api/admin/innate-portrait-config):list/create/update/deleteNumSoulDetailConfigController(/api/admin/numsoul-detail-config):list/create/update/delete在管理端菜单(SysMenuController / 前端路由)新增入口:
现有逻辑:FamilyMemberAttributeService.calcInnateScore() 硬编码:
Integer result = (zodiacScore * 5000 + baziScore * 3000 + bloodScore * 2000) / 10000;
改造:calcInnateScore() 改为读取 innate_portrait_config 表权重:
// 读取配置(默认 zodiac/bazi/blood/numsoul 各 25%)
// 只累加 enabled=1 的来源
// 权重未配置时回退到现有硬编码 50/30/20
Integer result = (zodiacScore * wZodiac + baziScore * wBazi + bloodScore * wBlood + numsoulScore * wNumsoul) / 10000;
要求:
numsoul_score 从 numsoul_detail_config.life_path.mind_base 读取(按生命灵数匹配)pages/mind-detail/innate-portrait.vue(先天画像报告页)展示 AI 解读报告:
pages/mind-detail/innate-trajectory.vue(先天+后天成长轨迹页)展示成长轨迹:
pages/mind-detail/index.vue在现有首页新增"先天画像"入口卡片:
?.(用 && 替代):key 表达式(用方法调用)new Date(string)(用 parseDate())在 DatabaseInitializer.runMigrations() 新增迁移(编号从 267 开始):
innate_portrait_config 表 + 种子数据(4 来源默认权重 25%)innate_portrait_report 表numsoul_detail_config 表 + 种子数据(4 类型 × 数字 1-9 + 主数,含 mind_base 字段)同步更新 schema.sql 的 CREATE TABLE 定义。
注意:
numsoul_detail_config的mind_base字段是数字能量参与mind_base_score加权计算的关键。种子数据需为每个数字类型(life_path/talent/birthday/destiny)的每个数字(1-9 + 主数 11/22/33)配置mind_base值。
InnatePortraitServiceTest:数字能量计算(生命灵数/天赋数/生日数/命运数)、先天画像聚合NumSoulDetailConfigMapperTest:配置表 CRUDFamilyMemberAttributeServiceTest(扩展):calcInnateScore 权重替换后——配置表权重生效、表空时回退硬编码 50/30/20、numsoul 参与加权、权重归一化InnatePortraitControllerTest:portrait/reading/numsoul/trajectory 接口calcInnateScore 权重替换回归测试(存量数据 mind_base_score 不因权重替换而变化)zodiac_config/bazi_config/blood_type_config 表结构