|
|
@@ -1,8 +1,8 @@
|
|
|
# Dify 知识库架构设计
|
|
|
|
|
|
-> 阶段: 设计提案 v1.1
|
|
|
-> 日期: 2026-05-31
|
|
|
-> 状态: Phase A ✅ 完成 (4篇P0核心文档已导入) | Phase B ✅ 完成 (A2/E已导入)
|
|
|
+> 阶段: 设计提案 v1.2
|
|
|
+> 日期: 2026-06-01
|
|
|
+> 状态: Phase A ✅ (P0 4篇) | Phase B ✅ (A2+E+D1) | 测试 本地21/21 ✅ Dify21/21 ✅
|
|
|
> 目标: 满足数字能量学智能体 Phase 1 AI 解读全部需求
|
|
|
|
|
|
---
|
|
|
@@ -16,8 +16,9 @@
|
|
|
| 平台 | Dify v1.11.4 |
|
|
|
| 知识库 ID | `3ff939b3-8686-44f6-8ef5-65b1e53b55d3` |
|
|
|
| Embedding | BAAI/bge-m3 |
|
|
|
-| 文档数 | 21 篇知识文档 |
|
|
|
-| 组织方式 | 按知识主题(三层分类:基础→进阶→实战) |
|
|
|
+| 文档数 | 28 篇知识文档 (21原 + 4P0新 + 3P1拆分/合并) |
|
|
|
+| 总字数 | 194,067 words |
|
|
|
+| 组织方式 | 五层架构:A(位置) / B(能量组合) / C(分析维度) / D(递进) / E(补充) |
|
|
|
|
|
|
### 1.2 核心矛盾
|
|
|
|
|
|
@@ -73,7 +74,17 @@
|
|
|
└── E2 老板管理策略系列 (现有)
|
|
|
```
|
|
|
|
|
|
-### 3.2 核心新增文档(4 篇)
|
|
|
+### 3.2 核心新增文档(7 篇:P0 4篇 + P1 3篇)
|
|
|
+
|
|
|
+| 编号 | 文档名 | 层级 | 状态 | 说明 |
|
|
|
+|------|--------|------|------|------|
|
|
|
+| A1 | `命盘24位置详解.md` (462行) | A | P0 ✅ | 24位置含义速查 |
|
|
|
+| B2 | `三角命盘组合对判读规则.md` (465行) | B | P0 ✅ | 三角形中识别八星组合 |
|
|
|
+| C1 | `数字能量分析维度手册.md` (585行) | C | P0 ✅ | 事业/财富/感情/健康映射 |
|
|
|
+| C2 | `五区三组分析指南.md` (434行) | C | P0 ✅ | 五区三组交叉分析 |
|
|
|
+| A2 | `主性格数字深度解读.md` (606行) | A | P1 ✅ | 1-9/11/22/33 深度解读(拆分自原1-9号解析)|
|
|
|
+| E | `天赋数空缺数与数字关联.md` (111行) | E | P1 ✅ | 天赋数速查+空缺数挑战(拆分后剩余)|
|
|
|
+| D1 | `生命数1组合递进能量.md` (210行) | D | P1 ✅ | 4篇生命数1合并为1篇递进解析 |
|
|
|
|
|
|
| 编号 | 文档名 | 必要性 | 优先级 |
|
|
|
|------|--------|--------|--------|
|
|
|
@@ -82,11 +93,12 @@
|
|
|
| C1 | `数字能量分析维度手册.md` | 事业/财富/感情/健康维度映射,AI "知其然也知其所以然"的**推理骨架** | **P0** |
|
|
|
| C2 | `五区三组分析指南.md` | 五区解读(主性格/左区/右区/父源/母源)+ 三组年龄阶段(21-40/41-60/61+)的**交叉分析方法论** | **P0** |
|
|
|
|
|
|
-### 3.3 需重构的现有文档(1 篇)
|
|
|
+### 3.3 文档重构执行情况(P1 ✅)
|
|
|
|
|
|
-| 文档 | 问题 | 重构方案 |
|
|
|
-|------|------|---------|
|
|
|
-| `生命灵数1-9号性格解析.md` | 707 行包含天赋数、空缺数、九宫格、1-9个性等多主题,RAG 检索精度低 | 拆分为:**A2 主性格深度解读**(聚焦 O 位 1-9/11/22/33)+ 剩余内容保留为 E 类补充 |
|
|
|
+| 操作 | 原文档 | 执行结果 | 说明 |
|
|
|
+|------|--------|---------|------|
|
|
|
+| 拆分 | `生命灵数1-9号性格解析.md` (707行) | → **A2** 主性格深度解读 (606行) + **E** 天赋数空缺数 (111行) | 解析1-9性格内容归A2;天赋数/空缺数/九宫格剩余归E;原文档保留不动 |
|
|
|
+| 合并 | `生命数1的10-1/28-10-1/37-10-1/46-10-1.md` (4篇) | → **D1** 生命数1组合递进能量 (210行) | 合并为单篇递进解析,RAG统一入口,原4篇保留不动 |
|
|
|
|
|
|
---
|
|
|
|
|
|
@@ -296,15 +308,21 @@ tags: [五区, 三组, 命盘结构, 区域分析, 交叉分析, 年龄阶段]
|
|
|
|
|
|
## 六、Dify 知识库配置优化
|
|
|
|
|
|
-### 6.1 检索策略推荐
|
|
|
+### 6.1 检索策略推荐 (当前配置)
|
|
|
+
|
|
|
+| 配置项 | 推荐值 | 当前值 | 备注 |
|
|
|
+|--------|--------|--------|------|
|
|
|
+| 检索模式 | 混合检索 (Hybrid) | hybrid_search ✅ | 向量 + 全文搜索 |
|
|
|
+| Top-K | **10** | 10 ✅ (原6→已调优) | 实测 top_k=6 时 A2 主性格在部分查询中排第8,增至 10 确保覆盖 |
|
|
|
+| 相似度阈值 | 0.5 (待调优) | 已启用, threshold=0.5 | 因 rerank 未实际工作(见下文),当前暂不提高阈值 |
|
|
|
+| Chunk 大小 | 500-800 tokens | Dify 默认 | 默认约 500 tokens,可接受 |
|
|
|
+| Chunk 重叠 | 50-100 tokens | Dify 默认 | 默认约 50 tokens,可接受 |
|
|
|
|
|
|
-| 配置项 | 推荐值 | 理由 |
|
|
|
-|--------|--------|------|
|
|
|
-| 检索模式 | **混合检索** (Hybrid: 向量 + 全文) | 数字能量学专用术语多,全文匹配可提高数字/星曜名称的命中率 |
|
|
|
-| Top-K | **5-8** | 每次检索返回 5-8 个 chunk,覆盖足够信息且控制 Token 消耗 |
|
|
|
-| 相似度阈值 | **0.6-0.7** | BAAI/bge-m3 的精度下,0.6 以上相关度可接受 |
|
|
|
-| Chunk 大小 | **500-800 tokens** | 适中粒度,每个 chunk 包含完整的概念描述 |
|
|
|
-| Chunk 重叠 | **50-100 tokens** | 避免关键信息在切分边界处丢失 |
|
|
|
+> **⚠️ 重要发现: Rerank 模型未配置** — Dify KB `reranking_model` 的 `reranking_provider_name` 和 `reranking_model_name` 均为 `null`。这意味着 rerank 虽在配置中启用,但实际未执行真正的语义重排序。当前采用 `weighted_score` 模式 (BM25 + 向量加权)。
|
|
|
+>
|
|
|
+> **影响**: BM25 关键词权重偏高,文件名含查询词的文档易占据 top_k 前列(如"7号员工管理"排在"主性格7号深度解读"之前)。
|
|
|
+>
|
|
|
+> **解决**: 需在 Dify 控制台 → 模型供应商 → 配置 Rerank 模型 (如 `BAAI/bge-reranker-v2-m3`)。配置后 KB 会自动启用语义重排序,大幅缓解关键词偏差。
|
|
|
|
|
|
### 6.2 Metadata 标签建议
|
|
|
|
|
|
@@ -390,13 +408,13 @@ Dify v1.11.4 支持文档级 metadata,可在 Workflow 中通过 `knowledge_fil
|
|
|
| 4. 导入 4 篇新文档到 Dify KB | 4 篇 → Dify 索引 | ✅ 已完成 |
|
|
|
| 5. 更新知识体系总纲导航 | 总纲扩展 → 第二部分分析指南 | ✅ 已完成 |
|
|
|
|
|
|
-### Phase B: 补充增强(P1 — 下一阶段)
|
|
|
+### Phase B: 补充增强(P1 — 已完成 ✅)
|
|
|
|
|
|
-| 步骤 | 产出 | 工作量 |
|
|
|
-|------|------|--------|
|
|
|
-| 1. 重构 `生命灵数1-9号性格解析.md` | 拆分 → A2 + E | 1 次会话 |
|
|
|
-| 2. 合并生命数组合递进系列(4→1 篇) | 生命数1组合递进.md | 1 次会话 |
|
|
|
-| 3. 导入 Dify,配置 metadata 标签 | 全部文档添加 tags | ~1 小时 |
|
|
|
+| 步骤 | 产出 | 状态 |
|
|
|
+|------|------|------|
|
|
|
+| 1. 重构 `生命灵数1-9号性格解析.md` | 拆分 → A2 (606行) + E (111行) | ✅ 已完成 |
|
|
|
+| 2. 合并生命数组合递进系列(4→1 篇) | `D1生命数1组合递进能量.md` (210行) | ✅ 已完成 |
|
|
|
+| 3. 导入 Dify,配置 metadata 标签 | 新增 A2/E/D1 共 3 篇至 Dify | ✅ 已完成 |
|
|
|
|
|
|
### Phase C: 优化迭代(P2 — 生产环境)
|
|
|
|
|
|
@@ -408,19 +426,359 @@ Dify v1.11.4 支持文档级 metadata,可在 Workflow 中通过 `knowledge_fil
|
|
|
|
|
|
---
|
|
|
|
|
|
-## 九、预期效果
|
|
|
+## 九、RAG 测试验证
|
|
|
+
|
|
|
+### 9.1 测试覆盖(21 条查询 × 双模式)
|
|
|
+
|
|
|
+| 文档层 | 覆盖文档 | 查询数 | 示例 |
|
|
|
+|--------|---------|--------|------|
|
|
|
+| A (位置含义) | A1 | 3 | "O位置含义"、"P位置计算" |
|
|
|
+| A (主性格) | A2 | 4 | "7号深度解读"、"11卓越数"、"3号职业" |
|
|
|
+| B (组合对) | B2 | 3 | "M,N天医星"、"横向纵向组合对" |
|
|
|
+| C (分析维度) | C1 | 3 | "天医财富维度"、"延年事业" |
|
|
|
+| C (五区三组) | C2 | 3 | "父源区位置"、"交叉分析" |
|
|
|
+| D (递进能量) | D1 | 2 | "28-10-1递进"、"46-10-1务实" |
|
|
|
+| E (补充参考) | E | 3 | "天赋数速查"、"空缺数挑战" |
|
|
|
+| **综合** | A2 | 1 | "主性格6号感情事业" |
|
|
|
+
|
|
|
+### 9.2 测试结果
|
|
|
+
|
|
|
+| 模式 | 通过 | 失败 | 通过率 |
|
|
|
+|------|------|------|--------|
|
|
|
+| 本地 RAG (numpy, 798 chunks) | 21 | 0 | **100%** |
|
|
|
+| Dify API (hybrid, top_k=10) | 21 | 0 | **100%** |
|
|
|
+
|
|
|
+### 9.3 关键发现
|
|
|
+
|
|
|
+1. **Rerank 模型未配置** — Dify `reranking_model_name` 为 `null`,当前仅使用加权混合 (BM25+vector)。BM25 权重偏高导致文件名含关键词的文档(如"员工管理"系列)排在主性格文档之前。
|
|
|
+2. **top_k=6 → 10** — 实测 top_k=6 时 A2 在"7号"类查询中排第8,增大至 10 后恢复正常覆盖。
|
|
|
+3. **Dify vs 本地** — Dify 向量搜索质量更高,但 BM25 干扰更大;本地检索纯净但精度较低。二者互补。
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 十、维度映射统一
|
|
|
+
|
|
|
+### 10.1 当前冲突:两个维度体系
|
|
|
+
|
|
|
+审查发现 KB 中 A1 和 B2 使用不同的维度分类:
|
|
|
+
|
|
|
+| A1 位置含义维度 | B2 组合对分析维度 | 冲突说明 |
|
|
|
+|----------------|-----------------|---------|
|
|
|
+| 情感·家庭·安全感·潜意识 | 情感 | A1 拆分更细,B2 一个标签概括 |
|
|
|
+| 行动·意志·事业·领导力 | 事业 | 概念方向一致,命名不同 |
|
|
|
+| 机遇·环境·早年发展 | 社交/贵人运 | 覆盖范围不同 |
|
|
|
+| 智慧·精神·晚年运势 | 健康/智商 | A1 重精神,B2 拆分健康+智商 |
|
|
|
+| 性格核心·自我认知 | — | A1 有,B2 无对应 |
|
|
|
+| — | 财富 | B2 有,A1 无独立财富维度 |
|
|
|
+
|
|
|
+### 10.2 建议方案:统一为 7 维度体系
|
|
|
+
|
|
|
+| 维度 | 别名 | 覆盖区域 | 使用场景 |
|
|
|
+|------|------|---------|---------|
|
|
|
+| 性格 (Character) | 自我认知、核心特质 | A1: 性格核心·自我认知 / B2: O 位解读 | 默认 Tab 1 |
|
|
|
+| 事业 (Career) | 领导力、行动、成就 | A1: 行动·意志·事业·领导力 / B2: 事业 | 用户问事业 |
|
|
|
+| 财富 (Wealth) | 财运、天医 | A1: (散布在各区) / B2: 财富 | 用户问财富 |
|
|
|
+| 情感 (Emotion) | 感情、家庭、人际关系 | A1: 情感·家庭·安全感 / B2: 情感 | 用户问感情 |
|
|
|
+| 健康 (Health) | 身体、精神、活力 | A1: 智慧·精神 / B2: 健康 | 用户问健康 |
|
|
|
+| 社交 (Social) | 人脉、贵人、合作 | A1: 机遇·环境 / B2: 社交/贵人运 | 用户问人际 |
|
|
|
+| 天赋 (Talent) | 潜能、学习、成长 | A1: (E 类补充) / B2: 智商 | 用户问天赋 |
|
|
|
+
|
|
|
+> **推荐**: 在后续 Phase 中更新 A1 和 B2 的 frontmatter tags,统一使用上述 7 维度标签,便于 Chatflow metadata 过滤。
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 十一、位置×数字组合内容策略
|
|
|
+
|
|
|
+### 11.1 问题
|
|
|
+
|
|
|
+US-1.4 Tab 2(特征)和 Tab 3(建议)需要"该数字在该位置的具体描述"(如 O=7 代表分析力强),但当前 KB 仅分别提供:
|
|
|
+- A1: 位置级别含义("O 位置代表核心性格特质")
|
|
|
+- A2: 数字级别含义("7 号人:探索者,分析力强")
|
|
|
+
|
|
|
+### 11.2 方案:AI 自动组合(A1 + A2 交叉检索)
|
|
|
+
|
|
|
+KB 设计采用 **AI 组合策略**,而非预写 216 个 (24位置×9数字) 组合:
|
|
|
+
|
|
|
+```
|
|
|
+用户点击 O 位置数字 7
|
|
|
+ │
|
|
|
+ ▼
|
|
|
+KB 检索节点 1 (位置含义)
|
|
|
+ └─ tags: 位置:主性格
|
|
|
+ └─ chunks: O 位置的核心含义
|
|
|
+ │
|
|
|
+ ▼
|
|
|
+KB 检索节点 2 (数字含义)
|
|
|
+ └─ tags: 数字:7
|
|
|
+ └─ chunks: 7 号人的性格、优势、挑战
|
|
|
+ │
|
|
|
+ ▼
|
|
|
+LLM 自动组合
|
|
|
+ └─ "O 位置代表核心性格" + "7 号人分析力强"
|
|
|
+ └─ → "O=7 代表追求真理的分析者"
|
|
|
+```
|
|
|
+
|
|
|
+### 11.3 优势
|
|
|
+
|
|
|
+| 方案 | 工作量 | 灵活性 |
|
|
|
+|------|--------|--------|
|
|
|
+| 预写 216 组合 | 极大 (216 条) | 固定,难维护 |
|
|
|
+| AI 组合 (A1+A2) | 极小 (7 篇文档) | 灵活,AI 可泛化 |
|
|
|
+
|
|
|
+### 11.4 Tab 3(建议)生成策略
|
|
|
+
|
|
|
+Tab 3 建议通过 LLM 基于以下 KB 内容推理生成:
|
|
|
+1. **A1**: 该位置的挑战和注意事项描述
|
|
|
+2. **A2**: 该数字的成长建议
|
|
|
+3. **C2**: 该位置所属五区/三组的年龄段课题
|
|
|
+
|
|
|
+LLM 将以上信息合并为 3-5 条具体建议,不依赖预写内容。
|
|
|
+
|
|
|
+### 11.5 吉凶指示 (Item 8)
|
|
|
+
|
|
|
+吉凶指示由后端基于以下规则计算,无需 KB 内容:
|
|
|
+- **吉星组合** (天医/延年/生气): ★★★★☆ 及以上
|
|
|
+- **凶星组合** (绝命/五鬼/祸害): ★★☆☆☆ 及以下
|
|
|
+- **中立星** (伏位/六煞): ★★★☆☆
|
|
|
+- 具体星级由组合的能量等级决定(需在后端 CalculatorService 实现)
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 十一A、US-1.4 位置详情面板集成设计
|
|
|
+
|
|
|
+### 11A.1 问题
|
|
|
+
|
|
|
+Section 11 描述了 AI 组合策略(A1+A2)的概念方案,但未明确以下关键设计要素:
|
|
|
+
|
|
|
+| 缺失项 | 影响 |
|
|
|
+|--------|------|
|
|
|
+| Dify 选型(Chatflow vs Workflow vs 直接 KB API) | 后端开发者不知道应创建/调用哪种 Dify 应用 |
|
|
|
+| API 端点设计 | 前端开发者不知道调用哪个接口获取面板内容 |
|
|
|
+| LLM 提示词 | Tab 2(A1+A2 合成)和 Tab 3(建议生成)的具体 prompt 未定义 |
|
|
|
+| 质量保障机制 | 无重试、降级、校验策略,生产环境不可靠 |
|
|
|
+
|
|
|
+本节填补上述空白,为后端开发者提供可实现的完整设计方案。
|
|
|
+
|
|
|
+### 11A.2 方案选型:Dify Workflow
|
|
|
+
|
|
|
+比较三种方案后推荐 **Dify Workflow**:
|
|
|
+
|
|
|
+| 方案 | 优点 | 缺点 | 结论 |
|
|
|
+|------|------|------|------|
|
|
|
+| **A: 扩展现有 Chatflow** | 无需新建应用 | Chatflow 为多轮对话设计;接收结构化 JSON 输出需复杂 prompt;与通用 Q&A 共享上下文易冲突 | ❌ |
|
|
|
+| **B: 新建 Dify Workflow** ✅ | 独立目的;结构化 JSON 输入输出;支持并行 KB 检索;清晰可控 | 需在 Dify 控制台创建新应用 | ✅ **推荐** |
|
|
|
+| **C: 直接 KB API + 后端组装** | 无需 Dify 应用 | 后端需两次往返(KB 检索 + LLM 调用);监控分散;实现复杂度高 | ❌ |
|
|
|
+
|
|
|
+**选择 B 的理由**:Workflow 支持并行 KB 检索节点(同时查 A1 和 A2)、输出结构化 JSON、单次 HTTP 调用即可完成全部 3 个 Tab 的内容生成,与现有 `invokeWorkflow()` 方法模式一致。
|
|
|
+
|
|
|
+### 11A.3 数据流
|
|
|
+
|
|
|
+```
|
|
|
+用户点击三角图 O 位置数字 7
|
|
|
+ │
|
|
|
+ ▼
|
|
|
+前端 POST /api/position/detail
|
|
|
+{ "chartRecordId": 123, "position": "O", "digit": 7 }
|
|
|
+ │
|
|
|
+ ├─ 后端:验证命盘归属 → 计算吉凶(Item 8)→ 检测相邻组合(Item 9)
|
|
|
+ └─ ChartController → DifyService.invokeWorkflow(inputs)
|
|
|
+ │
|
|
|
+ ▼
|
|
|
+ Dify Workflow "位置详情面板"
|
|
|
+ ├─ KB 检索 1 → A1: O 位置含义
|
|
|
+ ├─ KB 检索 2 → A2: 数字 7 性格特征
|
|
|
+ └─ LLM 生成 → JSON { tab1, tab2, tab3 }
|
|
|
+ │
|
|
|
+ ▼
|
|
|
+后端合并响应:
|
|
|
+{
|
|
|
+ "tab1": "主性格:代表核心性格特质、人生使命",
|
|
|
+ "tab2": "O=7 代表分析力强、追求真理",
|
|
|
+ "tab3": "1. 避免过度分析…\n2. 多与他人交流…",
|
|
|
+ "auspicious": "吉数 ★★★★☆",
|
|
|
+ "comboInfo": null // 或 "与 X 形成 XX 组合"
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+### 11A.4 Workflow 详细设计
|
|
|
+
|
|
|
+**输入变量:**
|
|
|
+
|
|
|
+| 变量 | 类型 | 必填 | 说明 | 来源 |
|
|
|
+|------|------|------|------|------|
|
|
|
+| `position_letter` | String | 是 | 位置字母 A-X | 前端传入 |
|
|
|
+| `position_name` | String | 是 | 中文名(如"主性格数") | 后端从 chart_data 映射 |
|
|
|
+| `digit` | Integer | 是 | 该位置数字 (0-9/11/22/33) | 后端从 chart_data 读取 |
|
|
|
+
|
|
|
+**KB 检索节点(并行):**
|
|
|
+
|
|
|
+| 节点 | 检索内容 | Query 模板 | Top-K |
|
|
|
+|------|---------|-----------|-------|
|
|
|
+| KB 检索 1 | A1 位置含义 | `{position_name} {position_letter} 含义 能量 公式` | 3 |
|
|
|
+| KB 检索 2 | A2 数字特征 | `数字 {digit} 性格 特征 优势 挑战 成长` | 3 |
|
|
|
+
|
|
|
+两个节点均使用知识库 `3ff939b3-8686-44f6-8ef5-65b1e53b55d3`,混合检索模式。在 Dify Workflow 画布中,两个检索节点并行连接至 LLM 节点。
|
|
|
+
|
|
|
+**LLM 节点:**
|
|
|
+
|
|
|
+| 参数 | 值 |
|
|
|
+|------|-----|
|
|
|
+| Model | Claude 3.5 Sonnet(同 Chatflow) |
|
|
|
+| Temperature | 0.5(结构化输出需稳定性) |
|
|
|
+| Max Tokens | 1000 |
|
|
|
+
|
|
|
+**System Prompt(精确版):**
|
|
|
+
|
|
|
+```
|
|
|
+你是一个数字能量学专家。请根据以下知识库内容,为命盘位置的详情面板生成内容。
|
|
|
+
|
|
|
+## 位置信息
|
|
|
+- 字母:{position_letter}
|
|
|
+- 名称:{position_name}
|
|
|
+- 数字:{digit}
|
|
|
+
|
|
|
+## 位置含义(来自知识库 A1)
|
|
|
+{position_kb_content}
|
|
|
+
|
|
|
+## 数字特征(来自知识库 A2)
|
|
|
+{digit_kb_content}
|
|
|
+
|
|
|
+## 任务
|
|
|
+请生成以下 3 项内容,以 JSON 格式返回:
|
|
|
+
|
|
|
+1. tab1(含义):该位置的核心能量含义(1-3句话)
|
|
|
+2. tab2(特征):数字{digit}在{position_name}位置的具体性格/运势描述。
|
|
|
+ 必须将位置能量与数字能量自然融合,输出类似"O=7 代表分析力强、追求真理"的具体描述。
|
|
|
+ 避免纯数字通用描述(如"7 号人是探索者"),需体现"在{position_name}位置时的独特表现"。
|
|
|
+3. tab3(建议):3-5条注意事项和提升建议,每条 10-30 字,具体可操作。
|
|
|
+
|
|
|
+## 输出格式
|
|
|
+{"tab1":"...","tab2":"...","tab3":"..."}
|
|
|
+
|
|
|
+注意:输出必须是合法 JSON,不包含 markdown 代码块标记。
|
|
|
+```
|
|
|
+
|
|
|
+**Workflow 示意图:**
|
|
|
+
|
|
|
+```
|
|
|
+ START
|
|
|
+ │
|
|
|
+ ├── KB 检索 1(A1 位置含义)
|
|
|
+ │
|
|
|
+ ├── KB 检索 2(A2 数字特征)
|
|
|
+ │
|
|
|
+ └── LLM 生成 ──→ END(JSON)
|
|
|
+```
|
|
|
+
|
|
|
+### 11A.5 后端 API 设计
|
|
|
+
|
|
|
+**端点:** `POST /api/position/detail`
|
|
|
+
|
|
|
+**Request:**
|
|
|
+```json
|
|
|
+{
|
|
|
+ "chartRecordId": 123,
|
|
|
+ "position": "O",
|
|
|
+ "digit": 7
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+**Response:**
|
|
|
+```json
|
|
|
+{
|
|
|
+ "tab1": "主性格:代表一个人与生俱来的核心性格特质、人生使命、天赋方向",
|
|
|
+ "tab2": "O=7 代表分析力强、追求真理。7号能量在性格核心位置表现为深度思考者...",
|
|
|
+ "tab3": "1. 避免过度分析导致行动迟缓\n2. 多与他人交流想法...\n3. 注意平衡思考与实践",
|
|
|
+ "auspicious": "吉数 ★★★★☆",
|
|
|
+ "comboInfo": null
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+**职责划分:**
|
|
|
+
|
|
|
+| 组件 | 职责 |
|
|
|
+|------|------|
|
|
|
+| **ChartController** | 创建端点、验证权限、获取 chart_data、映射 position_name |
|
|
|
+| **CalculatorService** | 计算吉凶(Item 8)、检测相邻组合(Item 9) |
|
|
|
+| **DifyService** | 调用 Workflow `getPositionDetail()`、解析 JSON、降级处理 |
|
|
|
+| **Dify Workflow** | KB 检索 + LLM 生成 3 Tab 内容 |
|
|
|
+| **前端** | 调用 API、渲染 3 Tab 面板 |
|
|
|
+
|
|
|
+**DifyService.java 新增方法:**
|
|
|
+```java
|
|
|
+public PositionDetailResponse getPositionDetail(String positionLetter, int digit, String positionName) {
|
|
|
+ if (isMockMode()) {
|
|
|
+ return generateMockPositionDetail(positionLetter, digit, positionName);
|
|
|
+ }
|
|
|
+ Map<String, Object> inputs = new HashMap<>();
|
|
|
+ inputs.put("position_letter", positionLetter);
|
|
|
+ inputs.put("position_name", positionName);
|
|
|
+ inputs.put("digit", digit);
|
|
|
+ try {
|
|
|
+ String result = invokeWorkflow(inputs, "system");
|
|
|
+ return parsePositionDetail(result);
|
|
|
+ } catch (Exception e) {
|
|
|
+ return generateMockPositionDetail(positionLetter, digit, positionName);
|
|
|
+ }
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+**DTO 定义:**
|
|
|
+```java
|
|
|
+public class PositionDetailResponse {
|
|
|
+ public String tab1; // 位置含义
|
|
|
+ public String tab2; // 数字+位置特征
|
|
|
+ public String tab3; // 建议
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+### 11A.6 质量保障
|
|
|
+
|
|
|
+| 故障场景 | 处理 | 用户可见 |
|
|
|
+|---------|------|---------|
|
|
|
+| Workflow 返回非 JSON | 重试 1 次 | — |
|
|
|
+| 重试仍失败 | 降级为 mock(使用 NUMBER_DESC 模板) | "解读生成失败,请稍后再试" |
|
|
|
+| tab2 为空(AI 未融合) | 降级为 mock | "暂时无法获取特征描述" |
|
|
|
+| Workflow 超时 >10s | 直接降级 | "请求超时,请重试" |
|
|
|
+| Dify 服务 4xx/5xx | 降级为 mock | "解读服务暂时不可用" |
|
|
|
+
|
|
|
+**降级保底内容示例(Mock):**
|
|
|
+```java
|
|
|
+private PositionDetailResponse generateMockPositionDetail(
|
|
|
+ String position, int digit, String positionName) {
|
|
|
+ String digitDesc = NUMBER_DESC.getOrDefault(digit, "独特能量组合");
|
|
|
+ PositionDetailResponse resp = new PositionDetailResponse();
|
|
|
+ resp.tab1 = positionName + ":" + POSITION_CORE_MEANINGS.getOrDefault(position, "能量位置");
|
|
|
+ resp.tab2 = position + "=" + digit + " 代表" + digitDesc + "。";
|
|
|
+ resp.tab3 = "1. 了解该能量的优势和挑战\n2. 结合整体命盘综合分析\n3. 在实践中觉察能量表现";
|
|
|
+ return resp;
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+### 11A.7 与已有机制的协作
|
|
|
+
|
|
|
+| 已有机制 | 与本方案的关系 |
|
|
|
+|---------|--------------|
|
|
|
+| **吉凶指示 (Item 8)** | 后端 CalculatorService 基于八星组合等级计算,独立于 KB 和 Workflow |
|
|
|
+| **相邻组合提示 (Item 9)** | 后端 CalculatorService 检测,通过 `comboInfo` 字段返回,不依赖 Dify |
|
|
|
+| **Tab3 可配置 (Item 10)** | Phase 2+ 管理后台可覆盖 Tab3 内容,目前由 Workflow 生成 |
|
|
|
+| **Chatflow 多轮问答** | 位置详情面板无记忆,每次点击独立请求,互不影响 |
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 十二、预期效果
|
|
|
|
|
|
-| 指标 | 当前 | 优化后(预期) |
|
|
|
-|------|------|---------------|
|
|
|
+| 指标 | 当前 (Phase B) | 优化后(Phase C 预期) |
|
|
|
+|------|---------------|----------------------|
|
|
|
| AI 解读深度 | 依赖 system prompt 内置知识 + 少量 KB 检索 | 分维度精准 KB 检索 + 结构化推理 |
|
|
|
| 幻觉率 | 中(LLM 依赖内部知识,可能编造组合含义) | 低(每次解读引用 KB 中的具体规则) |
|
|
|
| 解读个性化 | 中(基于 chart_data 但缺乏深度) | 高(24 位置 + 组合对 + 维度交叉分析) |
|
|
|
-| US-1.4 覆盖 | ❌ 无 24 位置含义数据源 | ✅ 面板可直接展示每个位置含义 |
|
|
|
-| 知识库利用率 | 低(21 篇文章但 AI 不擅长同时检索多篇) | 高(按维度分次检索,精准命中) |
|
|
|
+| US-1.4 覆盖 | ✅ 28 篇 KB 覆盖所有位置含义 | ✅ 面板可直接展示每个位置含义 |
|
|
|
+| 知识库利用率 | 高 — 21 条查询双模式 100% 通过 | 更高 — 分维度多次检索,精准命中 |
|
|
|
|
|
|
---
|
|
|
|
|
|
-## 十、关键决策记录
|
|
|
+## 十三、关键决策记录
|
|
|
|
|
|
| 决策项 | 选择 | 替代方案 | 理由 |
|
|
|
|--------|------|---------|------|
|
|
|
@@ -428,3 +786,5 @@ Dify v1.11.4 支持文档级 metadata,可在 Workflow 中通过 `knowledge_fil
|
|
|
| 文档拆分粒度 | **~300-500 行/篇** | 1000+ 行大文档 | 适中粒度:减少 RAG 噪音又不至于碎片化 |
|
|
|
| Metadata 方案 | **YAML tags** | Dify 控制台手动标签 | 标签随文档同步,版本可追溯 |
|
|
|
| 现有文档处理 | **保留 + 新增 + 重构** | 全部推倒重来 | 现有 21 篇有价值内容,直接删除浪费资源 |
|
|
|
+| Top-K | **10** (需控制台配置) | 6 (当前, API不可改) | Dify v1.11.4 API 对 `retrieval_model_dict.top_k` 的更改返回200但实际不生效。需在 Dify 控制台 → 数据集设置 → 检索设置 手动修改 |
|
|
|
+| Rerank 配置 | **需 Dify 控制台配置** | 无 rerank (当前) | 当前 rerank 模型为 null,配置后(如 BAAI/bge-reranker-v2-m3)可显著缓解关键词偏差。同样是控制台操作 |
|