안녕하세요 오늘은 OpenAI 에서 제공하는 API 를 호출해보도록 하겠습니다.
OpenAI의 GPT 시리즈는 대표적인 LLM 중 하나이며,
우리는 OpenAI에서 제공하는 API를 통해 이 모델에 직접 질문을 보내고 응답을 받아보겠습니다.
즉, “프롬프트”라는 입력을 전달하고, 모델이 생성하는 자연어 응답을 받아볼 수 있습니다.
LLM(Large Language Model, 대규모 언어 모델) 이란 말그대로 "엄청 큰 언어 모델" 입니다.
수십억 개 이상의 단어, 문장, 문서를 학습해서 사람처럼 문장을 이해하고 생성하는 인공지능을 의미합니다.
1. 먼저 open ai 홈페이지에서 API 인증 키를 발급 받습니다.
2. Http 통신 (HttpClient) 으로 오픈 AI 의 서버에 요청을 보낼 것이기 때문에 요청 JSON 을 생성할 수 있도록 구글이 제공하는 gson 라이브러리 의존성을 추가합니다 (maven 사용)
<dependencies>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.10.1</version>
</dependency>
</dependencies>
3. Main.java
API 호출 하는 코드를 작성합니다
package org.example;
import java.net.http.*;
import java.net.URI;
import java.net.http.HttpRequest.BodyPublishers;
import com.google.gson.*;
//TIP 코드를 <b>실행</b>하려면 <shortcut actionId="Run"/>을(를) 누르거나
// 에디터 여백에 있는 <icon src="AllIcons.Actions.Execute"/> 아이콘을 클릭하세요.
public class Main {
public static void main(String[] args) {
try {
String apiKey = "sk-*********************************************"; // OpenAI API 키
// 요청 JSON 생성
JsonObject message = new JsonObject();
message.addProperty("role", "user");
message.addProperty("content", "자바와 LLM은 어떻게 연결되나요?");
JsonArray messages = new JsonArray();
messages.add(message);
// 사용하고자 하는 모델 설정, 요청 body에 messages 추가하기
JsonObject requestBody = new JsonObject();
requestBody.addProperty("model", "gpt-3.5-turbo");
requestBody.add("messages", messages);
// HTTP 요청 생성
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.openai.com/v1/chat/completions"))
.header("Content-Type", "application/json")
.header("Authorization", "Bearer " + apiKey)
.POST(BodyPublishers.ofString(requestBody.toString()))
.build();
// HTTP 요청 전송 및 응답 받기
HttpClient client = HttpClient.newHttpClient();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
// 응답 출력
System.out.println("응답:\n" + response.body());
} catch (Exception e) {
e.printStackTrace();
}
}
}
3-1) 요청 json 생성
JsonObject message = new JsonObject();
message.addProperty("role", "user");
message.addProperty("content", "자바와 LLM은 어떻게 연결되나요?");
Chat GPT 는 대화 형식으로 동작하기 때문에 맥락이 필요합니다.
쉽게 말해 "지금까지는 이런 질문, 답을 주고 받았는데 여기에 이어서 뭐라고 말할래?" 이런 방식으로 동작하기 때문에
프롬프트를 입력할 때 이전 대화 내용을 함께 배열에 넣어줘야, 이전 대화와 같은 맥락에서 연속적인 대화가 가능합니다
본 예제에서는 이전 맥락을 고려하지 않는 하나의 메시지만 요청 body 에 추가하도록 하겠습니다.
3-2) 사용할 모델 설정 (유료)
JsonObject requestBody = new JsonObject();
requestBody.addProperty("model", "gpt-3.5-turbo");
requestBody.add("messages", messages);
3-3) HTTP 요청 생성 및 응답 받기
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.openai.com/v1/chat/completions"))
.header("Content-Type", "application/json")
.header("Authorization", "Bearer " + apiKey)
.POST(BodyPublishers.ofString(requestBody.toString()))
.build();
// HTTP 요청 전송 및 응답 받기
HttpClient client = HttpClient.newHttpClient();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
// 응답 출력
System.out.println("응답:\n" + response.body());
응답 내용 예시
{
"id": "chatcmpl-8s8abcd1234",
"object": "chat.completion",
"created": 1713861840,
"model": "gpt-3.5-turbo",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "자바와 LLM은 API를 통해 쉽게 연결할 수 있습니다. 예를 들어 OpenAI API를 자바에서 호출하면..."
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 25,
"completion_tokens": 35,
"total_tokens": 60
}
}
오늘은 OpenAPI 의 대표적인 LLM 인 gpt 의 api 를 활용해 Java 코드로 직접 api를 호출하고 응답을 받아보는 과정을 실습해봤습니다.
감사합니다
'Java' 카테고리의 다른 글
[JAVA] java.nio.file을 사용한 간단한 메모장 만들기 (0) | 2025.04.28 |
---|---|
[JAVA] 사용자 정의 예외 만들기 (0) | 2025.04.24 |
[Java] 옵저버 패턴 활용 예시 구현하기 (0) | 2025.04.19 |
[JAVA] 예외 처리(Exception Handling) (0) | 2025.04.17 |
[Java] Apache POI로 Excel 파일을 .txt로 변환하기 (0) | 2025.04.16 |