실무에 바로 적용하는 Spring AI: Spring 서비스에 챗봇·RAG·MCP 도입하기
understanding-chat-client-responses
우리가 AI에게 질문을 던진 후, AI의 대답을 어떤 형태로 꺼내서 쓰는 것이 좋을까?
이전까지는 .content() 를 통해 단순한 텍스트로 받았지만, 프론트엔드에 바로 내려주기 위해 JSON 형태의 자바 객체로 받아야 하는 상황이 생길 수도 있다.
✅ 1. chatResponse()
- AI의 응답은 단순히 대답 문자열로만 이루어지지는 않음.
- 응답안에는 해당 대답을 만들기 위해 토큰을 몇 개 썼는지, 어떤 모델이 대답했는지 등 중요한 메타데이터가 포함되어 있다.
- 해당 메타데이터를 가지고 있는 것이 바로 ChatResponse라는 객체이다.
ChatController.java
@GetMapping(value = "/cr", produces = MediaType.APPLICATION_JSON_VALUE)
public @Nullable ChatResponse chatResponse(String userPrompt){
return chatClient.prompt()
.user(userPrompt)
.call()
.chatResponse();
}
✅ 2. 자바 객체(엔티티)로 바로 받기
✅ 3. Streaming으로 받기
- 우리가 일반적인 ChatGPT를 사용해보면, 답변이 한 글자씩 타다닥 찍히는 걸 볼 수 있음.
- 백엔드에서 이걸 구현하려면 비동기 스트리밍 기술인 Flux를 사용해야 함.
// 응답이 모이는 대로 하나씩 방출하는 Flux 스트림 객체 반환
Flux<String> output = chatClient.prompt()
.user("재미있는 농담 하나 해줘")
.stream()
.content(); // .chatResponse()로도 스트리밍을 받을 수 있음