AI

ChatGPT API 호출 Java 예제

Ryan's Tech Note 2024. 5. 22. 00:31

ChatGPT API 호출 Java 예제가 인터넷에 없어서 만들었다.

 

인터넷에 올라온 글들은 무슨 스프링부트를 연동하고 소스가 나눠져 있고 따라하기 복잡했는데, 아래 소스는 1소스로 모두 테스트가 가능한 예제이다. 아래 maven 정보의 lib 를 설정한후 (1) API 키와 (2) 프롬프트만 주고 실행하면 된다.

 

https://platform.openai.com/api-keys

이곳에서 API 키를 발급 받아야 하는데, ChatGPT API 는 유료라서 $2~5 정도 충전해 놓고 쓰시는 걸 추천한다.

 

모델에 따른 API 주소는 다를수도 있으니 실행이 안된다면 확인 바란다.

 

불 필요한 설명은 생략한다.

 

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;

import org.json.JSONArray;
import org.json.JSONObject;

public class ChatGPTExample {

    // OpenAI API 키를 여기에 입력하세요
    private static final String API_KEY = "YOUR_API_KEY";
    private static final int BUFFER_SIZE = 4096;
    private static final int MAX_TOKENS = 4096; // 최대 토큰 수 설정

    public static void main(String[] args) {
        // 사용할 모델을 선택하세요
        String model = "gpt-4"; // 예: gpt-3.5-turbo, gpt-4, gpt-4-32k

        //선택 가능한 ChatGPT 모델:
        //"gpt-3.5-turbo": 고성능 모델 (유료) - 이미지 검색 기능 없음, 최대 토큰 수: 4096
        //"gpt-4": 최신 모델 (유료) - 이미지 검색 기능 없음, 최대 토큰 수: 8192
        //"gpt-4-32k": 확장된 최신 모델 (유료) - 이미지 검색 기능 없음, 최대 토큰 수: 32768
        //요금 정보: https://openai.com/pricing

        try {
            // API URL 설정
            String url = "https://api.openai.com/v1/chat/completions";

            // 멀티라인 입력 프롬프트
            String prompt = "인공지능(AI)이 어떻게 작동하는지 설명해 주세요\n" +
                    "가급적 전문용어보다는 이해하기 쉽도록 설명해 주세요.\n" +
                    "유익한 예제를 추가해주세요.";

            // JSON 요청 본문 생성
            JSONObject requestBody = new JSONObject();
            requestBody.put("model", model);
            requestBody.put("max_tokens", MAX_TOKENS); // 최대 토큰 수 설정
            JSONArray messages = new JSONArray();
            JSONObject message = new JSONObject();
            message.put("role", "user");
            message.put("content", prompt);
            messages.put(message);
            requestBody.put("messages", messages);

            // HTTP 연결 설정
            HttpURLConnection connection = (HttpURLConnection) new URL(url).openConnection();
            connection.setRequestMethod("POST");
            connection.setRequestProperty("Authorization", "Bearer " + API_KEY);
            connection.setRequestProperty("Content-Type", "application/json");
            connection.setDoOutput(true);

            // 요청 본문 전송
            try (OutputStream os = connection.getOutputStream()) {
                byte[] input = requestBody.toString().getBytes("utf-8");
                os.write(input, 0, input.length);
            }

            // 응답 받기
            StringBuilder response = new StringBuilder();
            try (BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream(), "utf-8"))) {
                String responseLine;
                while ((responseLine = br.readLine()) != null) {
                    response.append(responseLine.trim());
                }
            }

            // 응답 파싱 및 출력
            parseAndPrintResponse(response.toString());

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private static void parseAndPrintResponse(String responseBody) {
        JSONObject jsonObject = new JSONObject(responseBody);
        JSONArray choices = jsonObject.getJSONArray("choices");

        for (int i = 0; i < choices.length(); i++) {
            String text = choices.getJSONObject(i).getJSONObject("message").getString("content");
            printInChunks(text, BUFFER_SIZE);

            // Check for continuation token and fetch next response if available
            if (jsonObject.has("next")) {
                fetchNextResponse(jsonObject.getString("next"));
            }
        }
    }

    private static void fetchNextResponse(String nextToken) {
        // Implementation for fetching next response using the continuation token
        try {
            // API URL 설정
            String url = "https://api.openai.com/v1/chat/completions";

            // JSON 요청 본문 생성
            JSONObject requestBody = new JSONObject();
            requestBody.put("next", nextToken);

            // HTTP 연결 설정
            HttpURLConnection connection = (HttpURLConnection) new URL(url).openConnection();
            connection.setRequestMethod("POST");
            connection.setRequestProperty("Authorization", "Bearer " + API_KEY);
            connection.setRequestProperty("Content-Type", "application/json");
            connection.setDoOutput(true);

            // 요청 본문 전송
            try (OutputStream os = connection.getOutputStream()) {
                byte[] input = requestBody.toString().getBytes("utf-8");
                os.write(input, 0, input.length);
            }

            // 응답 받기
            StringBuilder response = new StringBuilder();
            try (BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream(), "utf-8"))) {
                String responseLine;
                while ((responseLine = br.readLine()) != null) {
                    response.append(responseLine.trim());
                }
            }

            // 응답 파싱 및 출력
            parseAndPrintResponse(response.toString());

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private static void printInChunks(String text, int bufferSize) {
        int length = text.length();
        int start = 0;

        while (start < length) {
            int end = Math.min(length, start + bufferSize);
            System.out.println(text.substring(start, end));
            start = end;
        }
    }
}

/*
필요한 라이브러리의 Maven 정보:
<dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>20210307</version>
</dependency>
*/

/*
cURL 호출 예제:
curl -H 'Content-Type: application/json' \
     -d '{"model": "gpt-4", "messages": [{"role": "user", "content": "Explain how AI works"}], "max_tokens": 1000}' \
     -X POST 'https://api.openai.com/v1/chat/completions' \
     -H 'Authorization: Bearer YOUR_API_KEY'
*/

 

결과

인공지능(AI)은 기계가 사람처럼 학습하고 문제를 해결하는 능력을 가지게 하는 기술입니다. 이것은 컴퓨터 프로그램이 우리가 일상적으로 하는 일들을 수행할 수 있도록합니다. 인공지능이 어떻게 작동하는지 이해하기 위해서는 '기계 학습'이라는 중요한 개념을 이해해야 합니다. 기계 학습은 컴퓨터에게 데이터를 제공하고, 그 데이터에서 패턴을 찾아 학습하도록하는 방법입니다. 즉, 인공지능은 데이터를 통해 지식을 얻고 그 지식을 기반으로 새로운 상황을 해결하거나 예측하는 데 사용합니다. 간단한 예를 알아보겠습니다. 인공지능을 사용하는 이메일 필터링 시스템을 생각해보세요. 처음에는 어떤 이메일이 스팸인지에 대해 모릅니다. 그러나 이메일 사용자가 스팸 메일을 지속적으로 표시하면, 시간이 지날수록 AI는 어떤 유형의 이메일을 스팸으로 분류해야 하는지 학습합니다. 이를 통해 AI는 미래의 이메일을 분류하고 스팸을 필터링하는 데 도움을 줍니다. 이렇게 인공지능은 엄청난 양의 데이터와 사람들의 도움을 통해 학습하고, 학습한 내용을 새로운 상황에 적용하여 우리 생활을 돕습니다. 이 인공지능 기술은 이메일 필터링뿐만 아니라 음성 인식, 이미지 분석, 자율 주행 차량 등 다양한 분야에서 활용되고 있습니다.

 

사용량 확인

https://platform.openai.com/usage

 

 

*. 이 글이 유용했다면 추천 댓글 한번씩 부탁드립니다.

 

'AI' 카테고리의 다른 글

구글 Gemini API 호출 Java 예제  (0) 2024.05.22