openAI 키를 발급 받으세요.
-> 참고 블로그 https://wikidocs.net/196075
spring ai 의존성을 추가해주세요.
implementation 'org.springframework.ai:spring-ai-openai-spring-boot-starter'
application.properties를 작성해주세요.
spring.ai.openai.api-key=${OPENAI_API_KEY}
{stateOrCountry} 의 수도의 이름만 말해줄래? {format}
format 은
ChatClient
에 넘길 때 사용 할 것 입니다.
public record GetCapitalRequest(String stateOrCountry) {
}
import com.fasterxml.jackson.annotation.JsonPropertyDescription;
public record GetCapitalWithInfoResponse(@JsonPropertyDescription("수도의 이름") String city,
@JsonPropertyDescription("수도의 인구") Integer population,
@JsonPropertyDescription("수도의 위치") String region,
@JsonPropertyDescription("수도의 언어") String language,
@JsonPropertyDescription("수도의 통화") String currency) {
}
package com.example.springai.service;
import com.example.springai.model.*;
public interface OpenAIService {
GetCapitalWithInfoResponse getCapitalWithInfo(GetCapitalRequest getCapitalRequest);
}
@Service
public class OpenAIServiceImpl implements OpenAIService{
private final ChatClient chatClient;
public OpenAIServiceImpl(ChatClient chatClient) {
this.chatClient = chatClient;
}
@Value("classpath:templates/get-capital-with-info.st")
private Resource getCapitalPromptWithInfo;
@Override
public GetCapitalWithInfoResponse getCapitalWithInfo(GetCapitalRequest getCapitalRequest) {
BeanOutputParser<GetCapitalWithInfoResponse> parser = new BeanOutputParser<>(GetCapitalWithInfoResponse.class);
String format = parser.getFormat();
PromptTemplate promptTemplate = new PromptTemplate(getCapitalPromptWithInfo);
Prompt prompt = promptTemplate.create(Map.of("stateOrCountry", getCapitalRequest.stateOrCountry(),
"format", format));
ChatResponse response = chatClient.call(prompt);
return parser.parse(response.getResult().getOutput().getContent());
}
@RestController
public class QuestionController {
private final OpenAIService openAIService;
public QuestionController(OpenAIService openAIService) {
this.openAIService = openAIService;
}
/**
* 나라 수도 정보
*/
@PostMapping("/capital-with-info")
public GetCapitalWithInfoResponse getCapitalWithInfo(@RequestBody GetCapitalRequest getCapitalRequest) {
return this.openAIService.getCapitalWithInfo(getCapitalRequest);
}
}
성공적으로 JSON
으로 응답 되었습니다 ㅎㅎ