[Spring AI] Spring AI 로 나라의 수도 물어보기 (Spring boot 에서 Chat GPT 사용하기)

JO Yeongmu·2024년 5월 16일
2

Spring-AI

목록 보기
1/2
post-thumbnail

spring AI 🤖

spring AI가 지원하는 곳이 많이 지고 있고 AI 시대에 맞게 해외에서는 최대 관심사가 Spring AI 이지 않을 까 싶습니다. (개인적인 생각..)

https://spring.io/projects/spring-ai

Spring AI 덕분에 Chat GPT 같은 Open AI 연동이 매우 간단해 진 것 같아서 좋습니다. ㅎㅎ

API key 발급 🔑

https://wikidocs.net/196075

위의 글에 발급 방법이 상세히 나와있습니다. 저도 위에 글을 참고하여 발급 받았습니다.

의존성 📗

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-web'
	implementation 'org.springframework.ai:spring-ai-openai-spring-boot-starter'
	testImplementation 'org.springframework.boot:spring-boot-starter-test'
	testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
}

Application.properties 📗

spring.ai.openai.api-key=${OPENAI_API_KEY}

model ⚙️

수도 질문 용

package com.example.springai.model;

public record GetCapitalRequest(String stateOrCountry) {
}

응답 용

package com.example.springai.model;

public record Answer(String answer) {
}

테스트 프롬프트 작성 📗

{stateOrCountry} 의 수도의 이름만 말해줘

service ⚙️

인터페이스

package com.example.springai.service;


import com.example.springai.model.GetCapitalRequest;

public interface OpenAIService {

    Answer getCapital(GetCapitalRequest getCapitalRequest);
}

구현

@Service
public class OpenAIServiceImpl implements OpenAIService{

    private final ChatClient chatClient;

    public OpenAIServiceImpl(ChatClient chatClient) {
        this.chatClient = chatClient;
    }

    @Value("classpath:templates/get-capital-prompt.st")
    private Resource getCapitalPrompt;

    @Override
    public Answer getCapital(GetCapitalRequest getCapitalRequest) {
        PromptTemplate promptTemplate = new PromptTemplate(getCapitalPrompt);
        Prompt prompt = promptTemplate.create(Map.of("stateOrCountry", getCapitalRequest.stateOrCountry()));
        ChatResponse response = chatClient.call(prompt);

        return new Answer(response.getResult().getOutput().getContent());
    }
}

controller ⚙️

@RestController
public class QuestionController {

    private final OpenAIService openAIService;

    public QuestionController(OpenAIService openAIService) {
        this.openAIService = openAIService;
    }

    /**
     * 나라의 수도 질문
     */
    @PostMapping("/capital")
    public Answer getCapital(@RequestBody GetCapitalRequest getCapitalRequest) {
        return this.openAIService.getCapital(getCapitalRequest);
    }
}

결과

번외) 아재개그

재밌다 ㅎ

함께 보면 좋은 글

https://www.baeldung.com/spring-ai

profile
도전해 보는 것이 성장의 첫걸음입니다 :)

0개의 댓글

관련 채용 정보