feat: 塔罗牌测算添加AI解读功能

- 引入HunYuanAiService调用AI服务
- 添加buildAiPrompt方法构建AI提示词
- 返回结果中添加aiAnalysis字段
This commit is contained in:
H1d3rOne committed 2026-03-10 20:29:21 +08:00
1 parent 5b885652ac
commit cd2a47e00b
1 file changed
+36 -1
@@ -1,12 +1,15 @@
package xuan.controller;
import org.springframework.web.bind.annotation.*;
import xuan.service.HunYuanAiService;
import java.util.*;
@RestController
@RequestMapping("/api/taluo")
public class TaLuoController {
private final HunYuanAiService aiService = new HunYuanAiService();
private static final List<Map<String, Object>> MAJOR_ARCANA = Arrays.asList(
createCard(0, "愚者", "The Fool", "新的开始、冒险、天真、自由", "鲁莽、冲动、不负责任", "代表新的旅程和无限可能"),
createCard(1, "魔术师", "The Magician", "创造力、技能、意志力、自信", "欺骗、操纵、缺乏计划", "代表运用技能实现目标"),
@@ -142,12 +145,16 @@ public class TaLuoController {
selectedCards.add(card);
}
String interpretation = generateInterpretation(selectedCards, spreadType, request.getQuestion());
String aiAnalysis = aiService.chat(buildAiPrompt(selectedCards, spreadType, request.getQuestion()));
Map<String, Object> data = new HashMap<>();
data.put("spreadType", spreadType);
data.put("spreadName", getSpreadName(spreadType));
data.put("question", request.getQuestion());
data.put("cards", selectedCards);
data.put("interpretation", generateInterpretation(selectedCards, spreadType, request.getQuestion()));
data.put("interpretation", interpretation);
data.put("aiAnalysis", aiAnalysis);
data.put("timestamp", new Date());
result.put("success", true);
@@ -269,6 +276,34 @@ public class TaLuoController {
return interpretation.toString();
}
private String buildAiPrompt(List<Map<String, Object>> cards, String spreadType, String question) {
StringBuilder prompt = new StringBuilder();
prompt.append("你是一位专业的塔罗牌占卜师,请根据以下牌面和用户的问题,提供详细的塔罗牌解读分析。\n\n");
if (question != null && !question.isEmpty()) {
prompt.append("用户的问题:").append(question).append("\n\n");
}
prompt.append("牌面信息:\n");
for (Map<String, Object> card : cards) {
String name = (String) card.get("name");
boolean isReversed = (Boolean) card.get("isReversed");
String positionMeaning = (String) card.get("positionMeaning");
String meaning = isReversed ? (String) card.get("reversedMeaning") : (String) card.get("uprightMeaning");
prompt.append("【").append(positionMeaning).append("】");
prompt.append(name).append(isReversed ? "(逆位)" : "(正位)").append("\n");
prompt.append("牌义:").append(meaning).append("\n\n");
}
prompt.append("请提供详细的塔罗牌解读分析,包括:\n");
prompt.append("1. 每张牌的详细解读\n");
prompt.append("2. 牌面之间的关联分析\n");
prompt.append("3. 综合建议和指引\n");
return prompt.toString();
}
@GetMapping("/cards")
public Map<String, Object> getAllCards() {
Map<String, Object> result = new HashMap<>();