diff --git a/src/main/java/com/going/server/domain/chatbot/dto/CreateChatbotResponseDto.java b/src/main/java/com/going/server/domain/chatbot/dto/CreateChatbotResponseDto.java index 9e43ebe..0ec162f 100644 --- a/src/main/java/com/going/server/domain/chatbot/dto/CreateChatbotResponseDto.java +++ b/src/main/java/com/going/server/domain/chatbot/dto/CreateChatbotResponseDto.java @@ -15,9 +15,11 @@ public class CreateChatbotResponseDto { private String graphId; @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm") private LocalDateTime createdAt; - private List retrievedChunks; - private List sourceNodes; - private Map ragMeta; + private List retrievedTriples; //관계 중심의 3요소 표현 ("물 -상태변화→ 응고") + private List sourceNodes; //질의에 사용된 핵심 노드들 ("물", "응고" 등) + private List 증강할때쓴자료; //LLM에 넘긴 context 문장들 (이름은 `augmentedSentences` 등으로 변경 권장) + + private Map ragMeta; //(ex: 사용한 쿼리문 등) public static CreateChatbotResponseDto of( String chatContent, @@ -30,7 +32,7 @@ public static CreateChatbotResponseDto of( .chatContent(chatContent) .graphId(graphId) .createdAt(createdAt) - .retrievedChunks(retrievedChunks) + .retrievedTriples(retrievedChunks) .sourceNodes(sourceNodes) .ragMeta(Map.of("chunkCount", String.valueOf(retrievedChunks.size()))) .build(); diff --git a/src/main/java/com/going/server/domain/chatbot/service/ChatbotServiceImpl.java b/src/main/java/com/going/server/domain/chatbot/service/ChatbotServiceImpl.java index dc91172..4ca7221 100644 --- a/src/main/java/com/going/server/domain/chatbot/service/ChatbotServiceImpl.java +++ b/src/main/java/com/going/server/domain/chatbot/service/ChatbotServiceImpl.java @@ -77,10 +77,12 @@ public CreateChatbotResponseDto createAnswerWithRAG(String graphStrId, CreateCha Long dbId = graphRepository.findDbIdByGraphId(Long.valueOf(graphStrId)); Graph graph = graphRepository.getByGraph(dbId); + // 새로운 채팅인 경우 if (requestDto.isNewChat()) { deletePreviousChat(dbId); } + // 새로운 질문 추가 Chatting userChat = Chatting.builder() .graph(graph) .content(requestDto.getChatContent()) @@ -89,6 +91,7 @@ public CreateChatbotResponseDto createAnswerWithRAG(String graphStrId, CreateCha .build(); chattingRepository.save(userChat); + // 채팅 내역 조회 List chatHistory = chattingRepository.findAllByGraphId(dbId); // RAG 응답 생성 (응답 + 메타 포함) diff --git a/src/main/java/com/going/server/domain/rag/service/GraphRAGService.java b/src/main/java/com/going/server/domain/rag/service/GraphRAGService.java index 61c685a..4537065 100644 --- a/src/main/java/com/going/server/domain/rag/service/GraphRAGService.java +++ b/src/main/java/com/going/server/domain/rag/service/GraphRAGService.java @@ -31,6 +31,12 @@ public class GraphRAGService { /** * 사용자 질문에 대해 Cypher 쿼리 → 그래프 정보 검색 → 프롬프트 생성 → LLM 응답 생성 * 본 메서드는 LangChain 없이 구현한 Spring 기반 GraphRAG의 핵심 흐름입니다. + * + * private LocalDateTime createdAt; + * private List retrievedTriples; //관계 중심의 3요소 표현 ("물 -상태변화→ 응고") + * private List sourceNodes; //질의에 사용된 핵심 노드들 ("물", "응고" 등) + * private List 증강할때쓴자료; //LLM에 넘긴 context 문장들 (이름은 `augmentedSentences` 등으로 변경 권장) + * -> 이렇게 결과 나오도록 정리 */ public CreateChatbotResponseDto createAnswerWithGraphRAG( Long dbId, @@ -74,11 +80,20 @@ public CreateChatbotResponseDto createAnswerWithGraphRAG( chattingRepository.save(answer); log.info("[GraphRAG] Response saved to DB"); + // 임시 retrievedTriples 설정 + List retrievedTriples = List.of( + "(물)-[:RELATED {label: '상태변화'}]->(기화)", + "(기화)-[:RELATED {label: '조건'}]->(높은 온도)", + "(수증기)-[:RELATED {label: '응결'}]->(물방울)", + "(물)-[:RELATED {label: '응고'}]->(얼음)", + "(응고)-[:RELATED {label: '예시'}]->(겨울철 얼어붙은 길)" + ); + return CreateChatbotResponseDto.of( response, dbId.toString(), answer.getCreatedAt(), - contextChunks, + retrievedTriples, sourceNodes ); }