feat: 塔罗牌测算添加AI解读功能
- 引入HunYuanAiService调用AI服务 - 添加buildAiPrompt方法构建AI提示词 - 返回结果中添加aiAnalysis字段
This commit is contained in:
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<>();
|
||||
|
||||
Reference in new issue
Block a user