본문 바로가기
Java

[Java] HttpClient 사용해서 OpenAI GPT API 호출하기

by teamnova 2025. 4. 23.
728x90

 

안녕하세요 오늘은 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를 호출하고 응답을 받아보는 과정을 실습해봤습니다. 

 

감사합니다