Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- MVC
- 두수의 합 자바
- 스프링부트 OpenAI API
- 값 타입
- jar빌드
- HttpServletResponse
- 서버 배포
- 페이징 정렬
- Chat GPT
- JDBC
- springboot
- 저장소 이전
- 스프링 이메일 전송
- JPQL
- 우분투
- 자바
- 파이썬
- 비밀번호 재설정 API
- MySQL
- 저장소 복제
- Git
- git 충돌 해결
- Servlet
- 넘파이
- 프로그래머스
- swap 메모리
- api 개발
- Json 객체
- JPA
- github 복제
Archives
- Today
- Total
현의 개발 블로그
스프링부트에서 Open AI API 호출하기(2) 본문
Open AI API를 호출하기 위해 이전 글에서 설정 및 request DTO까지 생성 완료하였다.
스프링부트에서 Open AI API 호출하기(1)
스프링부트에서 Open AI를 활용해 응답을 받아오는 API를 구현할 것이다. build.gradle 설정 아래 라이브러리를 import 해준다. GitHub - TheoKanning/openai-java: OpenAI Api Client in Java OpenAI Api Client in Java. Contribute
hyun-keepdeving.tistory.com
Controller 작성하기
라이브러리로 OpenAiService가 잘 구현되어 있으니 사용하자.
DEFAULT_TIMEOUT이 10으로 되어 있어 긴 답변을 요청할 때 socket timeout에러가 났다.
이를 해결하기 위해 파라미터로 Duration 값을 직접 설정해 주었다.
@PostMapping("/question")
public String sendQuestion(@Valid @RequestBody QuestionRequestDto requestDto) {
OpenAiService service = new OpenAiService(apiKey, Duration.ofSeconds(60));
...}
ChatMessage를 생성하고 role과 content에 각각 "user"와 클라이언트 입력값을 넣는다.
model을 gpt-3.5-turbo를 사용하였다.
gpt-4.0를 써보고 싶었는데 한 번 이상 결제한 내역이 있어야 쓸 수 있다고 한다.
List<ChatMessage> messages = new ArrayList<>();
ChatMessage chatMessage = new ChatMessage("user", requestDto.getQuestion());
messages.add(chatMessage);
ChatCompletionRequest chatCompletionRequest = ChatCompletionRequest
.builder()
.model("gpt-3.5-turbo")
.messages(messages)
.temperature(1.0)
.n(1)
.stream(Boolean.FALSE)
.maxTokens(500)
.presencePenalty(0.0)
.frequencyPenalty(0.0)
.build();
Builder 패턴으로 요청 DTO를 생성하였다. 파라미터를 더 자세히 살펴보자
- temperature
- 0~2 사이로 설정 가능하다. 0에 가까울수록 정형화되고, 2에 가까울수록 무작위 값이 나온다.
- n
- 입력 메시지를 몇 개 생성할 건지 설정한다.
- stream
- true로 설정하면 chatGPT처럼 한 글자씩 값을 내려준다.
- maxTokens
- 응답받는 최대 토큰 수이다. 기본값은 max로 설정되어 잇다.
- presencePenalty
- 값이 클수록 새로운 토픽에 대해 말할 가능성을 낮춰준다.
- frequencyPenalty
- 값이 클수록 동일한 구나 단어를 자주 반복하지 않도록 해준다.
아래와 같이 작성하면 ChatMessage 타입으로 반환할 수 있다.
ChatMessage responseMessage = service.createChatCompletion(chatCompletionRequest).getChoices().get(0).getContent();
return responseMessage;
나는 content만 받고 싶어서 getContent()를 추가했다. 그러면 String 형태로 반환받을 수 있다.
'대외활동 > 한이음' 카테고리의 다른 글
스프링부트에서 Open AI API 호출하기(1) (0) | 2023.07.26 |
---|---|
JPA 페이징 구현하기(2) (0) | 2023.07.20 |
JPA 페이징 구현하기(1) (0) | 2023.07.20 |
비밀번호 재설정 API 설계 (0) | 2023.07.17 |
우분투에서 서버 배포(3) - 빌드 및 실행 (0) | 2023.07.16 |
Comments