티스토리 뷰
시작 전
정말 단순하게 chat gpt api를 사용하는 것 뿐이니, 이 글이 아니라 공식 document를 보셔도 좋습니다.
여러 방면으로 활용할 수도 있는데, 일단 간단하게만 해 보겠습니다.
그리고 무지막지하게 쓰면 과금이 될 수 있습니다.
근데 뭐 사실 아래 코드에서 돈나오게 쓰는 것도 힘들긴 합니다.
다만 이걸 활용해서 자동 응답과 같은 기능을 만든다고 했을때는 꼭 usage를 확인하시면서 사용해야 할 겁니다.
결과물
- API key 발급받기
openAi로 이동해 api key를 발급받습니다.
-의존성 추가
아래의 의존성을 추가해 줍니다.
implementation 'com.theokanning.openai-gpt3-java:client:0.11.1'
implementation 'com.theokanning.openai-gpt3-java:api:0.11.1'
rf.
아래 링크를 통해 자바에서 손쉽게 커스터마이징 할 수 있는 라이브러리를 사용했습니다.
세부내용은 아래 링크들에서 확인할 수 있습니다.
https://platform.openai.com/docs/libraries/node-js-library
https://github.com/TheoKanning/openai-java
-코드 추가
아래와 같이 코드를 작성합니다.
(지금은 chatCompletion을 사용하는데, 작성된 문자열에서 오탈자를 검사해주는 editRequest도 사용할 수 있었습니다.)
public class RunGPT {
public static void main(String[] args) {
OpenAiService service = new OpenAiService("발급받은 api 키를 입력해 주세요", Duration.ZERO);
final List<ChatMessage> messages = new ArrayList<>();
final ChatMessage systemMessage = new ChatMessage(ChatMessageRole.USER.value(),
"tell me about yourself"
);
messages.add(systemMessage);
ChatCompletionRequest chatCompletionRequest = ChatCompletionRequest
.builder()
.model("gpt-3.5-turbo")
.messages(messages)
.build();
ChatCompletionChoice chatCompletionChoice = service.createChatCompletion(chatCompletionRequest).getChoices().get(0);
System.out.println("here's answer: \n" +chatCompletionChoice.getMessage().getContent());
System.out.println("==============================================");
}
}
설정이 필요한 부분만 보자면,
OpenAiService service = new OpenAiService("발급받은 api 키를 입력해 주세요", Duration.ZERO);
api를 쉽게 사용할 수 있게 해주는 객체입니다. Druration.Zero는 답변 작성이 오래 걸릴 수도 있으니 timeout을 없도록 해 주는 설정입니다.
model("gpt-3.5-turbo")
gpt 모델을 설정합니다. 각 모델에 따라서 성능이나 과금에 영향이 있을 수 있으니, 아래 링크를 참고해서 선택하시면 됩니다.
적용이 되지 않는 것도 있으니 확인이 필요합니다.
https://platform.openai.com/docs/models/gpt-3-5
-여러 메시지 보낼때
현재 질문을 messages라는 list에 담아서 요청하고 있습니다.
해당 리스트에 질문을 여러개를 넣어 답변을 받고자 한다면,
아래 코드를 적당히 수정하면 됩니다.
지금은 질문을 하나만 보내는 것을 생각해 둬서 0번째 답변만을 가져오고, 해당 메시지 content만을 출력하고 있는 상태입니다.
ChatCompletionChoice chatCompletionChoice = service.createChatCompletion(chatCompletionRequest).getChoices().get(0);
위처럼 작성할 수도 있을 것 같습니다. 다만 이러면 답변이 좀 지저분해 지니 for each 찍을때 getMessage.getContent를 추가해 주면 좀 더 깔끔하게 답변만 출력할 수 있습니다.
Reference.
https://platform.openai.com/docs/api-reference/chat/create
https://platform.openai.com/docs/guides/chat
https://platform.openai.com/docs/models/gpt-3-5
https://github.com/TheoKanning/openai-java
'language > java' 카테고리의 다른 글
코딩테스트 문법 정리 (0) | 2023.04.12 |
---|---|
Junit으로 테스트코드를 작성한 과정 (0) | 2023.02.28 |
스프링부트에서 Faker를 활용해 csv파일으로 대규모 더미데이터 만들기 (0) | 2023.02.14 |
예외 처리 - 예외 계층 구조 (0) | 2023.02.03 |
예외 처리 - throw / throws (0) | 2023.02.03 |
- Total
- Today
- Yesterday
- 대규모더미데이터
- jmeter쿠키
- jmeter부하테스트
- Redisson
- Python
- jmeter토큰
- hackerrank
- Redis
- jmeter테스트
- 토큰
- jmeter시나리오
- 부하테스트시나리오
- EC2
- pessimisticlock
- 동적크롤링
- Lock
- bankersRounding
- 프로그래머스
- 자바
- 항해
- index
- jmeter로그인
- 인덱스
- CorrectnessAndTheLoopInvariant
- jwt
- jmeter세션
- CheckedException
- 스프링faker
- Java
- Spring
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |