AI

구글 Gemini API 호출 Java 예제

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

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

 

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

 

https://aistudio.google.com/app/apikey

이곳에서 API 키를 발급 받아야 하는데, 구글 Gemini 는 무료로도 이용가능하니 일단 무료로 테스트 해보자.

 

모델에 따른 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 GeminiApiExample {

    private static final String API_KEY = "YOUR_API_KEY"; // 여기에 API 키를 입력하세요
    private static final String MODEL_NAME = "gemini-pro"; // 사용할 모델을 선택하세요

    // 선택 가능한 Gemini 모델:
    // "gemini-pro": 일반적인 프로 모델 (유료)
    // "gemini-pro-vision": 멀티모달 입력을 지원하는 프로 모델 (유료) - 이미지 검색 및 텍스트 생성 기능 포함
    // "gemini-ultra": 최고 성능을 자랑하는 울트라 모델 (유료) - 대규모 데이터 처리 및 복잡한 작업에 최적
    // "gemini-nano": 경량화된 모델 (무료) - 기본적인 텍스트 생성 및 간단한 작업에 적합
    // 요금 정보: https://ai.google.dev/pricing

    public static void main(String[] args) {
        String prompt = "인공지능(AI)이 어떻게 작동하는지 설명해 주세요\n" +
		                "가급적 전문용어보다는 이해하기 쉽도록 설명해 주세요.\n" +
		                "유익한 예제를 추가해주세요.";

        try {
            String response = callGeminiApi(prompt);
            System.out.println("Response from API: " + response);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private static String callGeminiApi(String prompt) throws Exception {
        String urlString = "https://generativelanguage.googleapis.com/v1beta/models/" + MODEL_NAME + ":generateContent?key=" + API_KEY;
        URL url = new URL(urlString);
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod("POST");
        conn.setRequestProperty("Content-Type", "application/json");
        conn.setDoOutput(true);

        // JSON 형식이 올바른지 확인
        String jsonInputString = String.format(
                "{\"contents\": [{\"parts\": [{\"text\": \"%s\"}]}]}",
                prompt.replace("\n", "\\n")
        );

        try (OutputStream os = conn.getOutputStream()) {
            byte[] input = jsonInputString.getBytes("utf-8");
            os.write(input, 0, input.length);
        }

        int responseCode = conn.getResponseCode();
        if (responseCode == 200) { // 성공적인 응답 코드 200을 체크
            try (BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream(), "utf-8"))) {
                StringBuilder response = new StringBuilder();
                String responseLine;
                while ((responseLine = br.readLine()) != null) {
                    response.append(responseLine.trim());
                }

                // JSON 응답에서 메시지만 추출
                JSONObject jsonResponse = new JSONObject(response.toString());
                if (jsonResponse.has("candidates")) {
                    JSONArray candidates = jsonResponse.getJSONArray("candidates");
                    StringBuilder message = new StringBuilder();
                    for (int i = 0; i < candidates.length(); i++) {
                        JSONObject content = candidates.getJSONObject(i).getJSONObject("content");
                        JSONArray parts = content.getJSONArray("parts");
                        for (int j = 0; j < parts.length(); j++) {
                            message.append(parts.getJSONObject(j).getString("text")).append("\n");
                        }
                    }
                    return message.toString().trim();
                } else {
                    return "No candidates found in the response.";
                }
            }
        } else if (responseCode == 401) {
            throw new RuntimeException("Failed : HTTP error code : 401 Unauthorized. Please check your API key and permissions.");
        } else if (responseCode == 400) {
            try (BufferedReader br = new BufferedReader(new InputStreamReader(conn.getErrorStream(), "utf-8"))) {
                StringBuilder response = new StringBuilder();
                String responseLine;
                while ((responseLine = br.readLine()) != null) {
                    response.append(responseLine.trim());
                }
                throw new RuntimeException("Failed : HTTP error code : 400 Bad Request. Response: " + response.toString());
            }
        } else {
            throw new RuntimeException("Failed : HTTP error code : " + responseCode);
        }
    }
}

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

/*
cURL 호출 예제:
curl -H 'Content-Type: application/json' \
     -d '{"contents":[{"parts":[{"text":"Explain how AI works"}]}]}' \
     -X POST 'https://generativelanguage.googleapis.com/v1beta/models/gemini-pro:generateContent?key=YOUR_API_KEY'
*/

 

결과

Response from API: **인공지능(AI)의 작동 방식**

AI는 인간과 비슷한 방식으로 생각하고 학습하는 컴퓨터 시스템입니다. 인간이 문제를 해결하듯이 AI는 데이터를 분석하고 패턴을 찾고 예측을 합니다. AI는 다음과 같은 방법으로 작동합니다.

**1. 데이터 수집:**
AI 시스템은 관련 데이터를 수집합니다. 예를 들어, 스팸 이메일 필터는 이메일을 학습하여 스팸과 정상 이메일을 구분합니다.

**2. 패턴 인식:**
AI는 데이터에서 패턴을 식별합니다. 스팸 이메일 필터는 특정 단어, 구문 또는 발신자 주소와 같은 스팸 이메일의 특징을 찾습니다.

**3. 학습:**
AI 시스템은 패턴을 기반으로 학습합니다. 새로운 데이터를 접하면 AI는 지식을 업데이트하고 향후 결정을 보다 정확하게 내립니다.

**4. 예측과 의사 결정:**
학습이 완료되면 AI는 새로운 데이터에 대해 예측하고 의사 결정을 내릴 수 있습니다. 스팸 이메일 필터는 이메일이 스팸인지 아닌지를 예측합니다.

**예제:**

* **자동 주행 차량:** AI 시스템은 카메라, 센서, GPS를 사용하여 도로 상황을 인지하고 안전하게 주행합니다.
* **개인화 추천:** AI 시스템은 사용자의 선호도를 학습하여 맞춤형 영화 추천, 음악 재생 목록, 뉴스 피드를 제공합니다.
* **의료 진단:** AI 시스템은 의학 이미지를 분석하고 환자의 증상을 평가하여 질병을 조기에 진단하는 데 도움을 줍니다.
* **스팸 이메일 필터:** 위에서 설명한 것처럼 AI 시스템은 이메일을 분석하고 스팸 메시지를 걸러냅니다.
* **고객 서비스 챗봇:** AI 시스템은 인간과 같은 대화를 하여 고객 질문에 답하고 문제를 해결합니다.

 

 

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

'AI' 카테고리의 다른 글

ChatGPT API 호출 Java 예제  (1) 2024.05.22