ChatGPT

Chat GPT API 이용 #1

Chris.Ko 2023. 6. 19. 17:45

내 프로젝트에 Chat GPT API를 넣어보고 싶어서 되는지 기록만 일단 남기기 위해서 작성합니다.

 

JAVA 프로젝트에서 작업할 예정이다.

 

Chat GPT API를 사용하기 위해서는 API Key를 받아야 한다. 받는 방법은 이렇게 받으면 된다.

1, 우측 상단 프로필 클릭!

2. View API Keys 클릭!

3. +Create new secret key 클릭!

4. Create secret key 누르면 keycode 생성된다. 복사 잘해 놓을것!! 다시 볼수 없음!

 

 본격적으로 시작..

Java 프로젝트에서 OpenAI API를 사용하려면 애플리케이션에서 OpenAI API 엔드포인트로 HTTP 요청을 만들어야 합니다.

 

1. 먼저 pom.xml 파일에 Apache HttpClient에 대한 Maven 종속성을 포함합니다.

<dependencies>
    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpclient</artifactId>
        <version>4.5.13</version>
    </dependency>
</dependencies>

<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.8.6</version>
</dependency>

2. 새로운 Servlet을 만든다. 이 서블릿은 게시 요청이 있을때 OpenAI API에 요청을 한다. 참 다양한 오류가 있었지만 아래 코드는 최종 코드로 올리는 것이다. 

 

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import com.google.gson.JsonObject;

public class OpenAiServlet extends HttpServlet {

    private static final long serialVersionUID = 1L;

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String prompt = request.getParameter("prompt");
        String apiKey = "your-key-here"; // replace with your OpenAI API key

        String result = createPostRequest(prompt, apiKey);

        // send the result back as the response
        response.setContentType("text/plain");
        response.setCharacterEncoding("UTF-8");
        response.getWriter().write(result);
    }

    public static String createPostRequest(String prompt, String apiKey) {
        String responseString = "";
        String url = "https://api.openai.com/v1/engines/text-davinci-002/completions"; // Use a valid model

        CloseableHttpClient client = HttpClients.createDefault();
        HttpPost httpPost = new HttpPost(url);

        httpPost.setHeader("Content-Type", "application/json");
        httpPost.setHeader("Authorization", "Bearer " + apiKey);

        // Create request body
        JsonObject requestBody = new JsonObject();
        requestBody.addProperty("prompt", prompt);
        requestBody.addProperty("max_tokens", 60);

        try {
            StringEntity entity = new StringEntity(requestBody.toString());
            httpPost.setEntity(entity);

            HttpResponse response = client.execute(httpPost);
            responseString = EntityUtils.toString(response.getEntity(), "UTF-8");

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

        return responseString;
    }
}

3. 간단한 화면을 만들어준다. 검색하는 부분이있고 버튼이있고 결과를 보여주는 화면이다.

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
    <script>
        $(document).ready(function(){
            $("#submit").click(function(e){
                e.preventDefault();
                $.post("OpenAiServlet", {prompt: $("#prompt").val()}, function(data){
                    $("#result").text(data);
                });
            });
        });
    </script>
</head>
<body>
    <form>
        <label for="prompt">Prompt:</label><br>
        <input type="text" id="prompt" name="prompt"><br>
        <input type="submit" id="submit" value="Submit">
    </form>
    <div id="result"></div>
</body>
</html>

추가적으로 해야할수도 있고 안해도 될수있다.

 

4. Status code : 404 오류로 특정 url을 못 찾아서 생기는 오류... 1)이나 2) 하고 싶은 설정해주면 된다.

 

1) web.xml에 코드 추가

<servlet>
    <servlet-name>OpenAiServlet</servlet-name>
    <servlet-class>com.yourpackage.OpenAiServlet</servlet-class> //요부분에 OpenAiServlet이 있는 package 주소를 써줘야한다.
</servlet>

<servlet-mapping>
    <servlet-name>OpenAiServlet</servlet-name>
    <url-pattern>/OpenAiServlet</url-pattern>
</servlet-mapping>

2) @WebServlet annotation 추가

import javax.servlet.annotation.WebServlet;
// ... other imports ...

@WebServlet("/OpenAiServlet")    <--- 이부분이 추가된것이다.
public class OpenAiServlet extends HttpServlet {
    // ... your servlet code ...
}

 

현재 이 상태에서 실행했더니 

Prompt에 입력했더니 아래와 같은 오류 발생...ㅠㅠ

 

검색해 봤더니 

Free trial usage 가 $0/$0.. 나는 처음 했는데 $20도 아니네.. 무료로 준다는데.. 나는 왜 없는지.. Upgrade를 해야하는건지.. 조금 더 알아봐야겠다.