ChatGPT API 사용 (with Feign Client)

supway·2023년 4월 29일
0

요즘 취준하느라 궁금한게 많아져서 ChatGPT를 많이 애용중이다. 근데 너무 많이 물어봤는지.. 느려졌다. 결제까지 해서 쓰는데.. 취준생한테 2만원이 넘는 거금인데 너무하다!

ChatGPT를 사용하다 문뜩 ChatGPT API가 궁금했고, 사용해보고 싶다는 생각이 들었다. 그래서 바로 Feign Client를 이용해서 사용해봤다!

먼저 ChatGPT API를 사용하기 위해서는


OpenAI API 사이트에 들어가서 로그인을 하고, View API keys로 가서 API Key를 발급 받아야 한다. (한번 발급 받으면 다시 안 알려주니깐 어디에 기록해두도록!)

여기에 https://platform.openai.com/docs/api-reference 들어가면 다양하게 API 설명이 나와있다! 몇 개만 사용해볼 예정


1. Completaions (질의응답)


질의응답을 할 때, text-davinci-003 엔진이라는 것을 사용하는데, 이게 ChatGPT 3.5의 모델 중 하나이다. 엔진 같은 경우 다른걸 지정해도 되는데, 현재 이게 제일 좋아서 이거 쓸 예정

중요한 항목에 대해 간략하게 설명하자면

Max tokens - 이 파라미터는 모델이 생성할 수 있는 최대 단어의 수를 결정하는데, 이 값이 0에 가까울수록 간결한 대답 즉 짧은 대답을 하고, 값이 커질 수록 긴 답변을 해준다.

Temperature - 이 파라미터는 무작위성을 제어하는데, 값이 높을 수록 다양한 답변을 생성하지만, 이상한 답변이 나올 수 있다.

Top p - 이 파라미터는 모델이 다음 단어를 선택할 때, 가능한 단어 중 선택할 확률이 가장 높은 단어들의 상위 p%를 고려한다.

API Request

POST https://api.openai.com/v1/completions
Content-Type: application/json
Authorization: Bearer <인증키>

{
  "model": "text-davinci-003",
  "prompt": "배트맨이 뭐야?",
  "max_tokens": 1000,
  "temperature": 0
}

응답 결과

{
    "id": "cmpl-7AfajSgD1DbbqC7HK6GY0A5qhXy6e",
    "object": "text_completion",
    "created": 1682777513,
    "model": "text-davinci-003",
    "choices": [
        {
            "text": "\n\n배트맨은 DC 코믹스 캐릭터로, 배트맨은 브라이언 크리스티안이라는 어린 소년이 사망한 아버지의 연금술사로 변신하여 만들어진 슈퍼히어로이다. 배트맨은 악의 역량과 범죄를 방지하기 위해 매일 노력하는 슈퍼히어로로 유명하다.",
            "index": 0,
            "logprobs": null,
            "finish_reason": "stop"
        }
    ],
    "usage": {
        "prompt_tokens": 18,
        "completion_tokens": 266,
        "total_tokens": 284
    }
}

나는 model, prompt, temperature, max_tokens 정보를 가지고 API를 호출했다. (model이랑 temperature, max_tokens는 그냥 고정해두고, prompt만 사용하면 미니 챗지피티 탄생)

Controller 코드

DTO 코드

Feign Client 인터페이스 코드 (OpenAI API와 통신하는 부분)

FeignInterceptor 코드 (여기서 header에 토큰 값을 넣어준다!)

Service 코드

Postman으로 만든 API 호출 결과


2. Edits (편집)

API Request

POST https://api.openai.com/v1/edits
Content-Type: application/json
Authorization: Bearer <인증키>

{
  "model": "text-davinci-edit-001",
  "input": "Wha ar ou doing",
  "instruction": "Fix the spelling mistakes"
}

호출 결과

{
    "object": "edit",
    "created": 1682778369,
    "choices": [
        {
            "text": "What are you doing?\n",
            "index": 0
        }
    ],
    "usage": {
        "prompt_tokens": 22,
        "completion_tokens": 22,
        "total_tokens": 44
    }
}

위와 코드가 거의 동일하기 때문에 Controller와 Feign Client 부분만 남기겠다

Controller 코드

Feign Client 인터페이스 코드 (OpenAI API와 통신하는 부분)

Postman으로 만든 API 호출 결과

얘는 뭔가 정확도가 좋아보이진 않는다.


3. Images (이미지 생성)

API Request

POST https://api.openai.com/v1/images/generations
Content-Type: application/json
Authorization: Bearer <인증키>
{
  "prompt": "lion",
  "n": 2,
  "size": "1024x1024"
}

호출 결과

{
    "created": 1682778643,
    "data": [
        {
            "url": "https://oaidalleapiprodscus.blob.core.windows.net/private/org-KKGUhxMMu4aLFT9p6SiXsM30/user-FvFWqU7rxCfnrz5eNKqNU9hL/img-TLW4xHjiwCsBMRJT9BbpaUG7.png?st=2023-04-29T13%3A30%3A43Z&se=2023-04-29T15%3A30%3A43Z&sp=r&sv=2021-08-06&sr=b&rscd=inline&rsct=image/png&skoid=6aaadede-4fb3-4698-a8f6-684d7786b067&sktid=a48cca56-e6da-484e-a814-9c849652bcb3&skt=2023-04-29T00%3A13%3A21Z&ske=2023-04-30T00%3A13%3A21Z&sks=b&skv=2021-08-06&sig=2gR%2BtfKgIsZYilF/Fj9At%2B6nEMbbVt79ybK7SQAdHrc%3D"
        },
        {
            "url": "https://oaidalleapiprodscus.blob.core.windows.net/private/org-KKGUhxMMu4aLFT9p6SiXsM30/user-FvFWqU7rxCfnrz5eNKqNU9hL/img-Db9rgmfvbzF3YGEtBmFKlC4K.png?st=2023-04-29T13%3A30%3A43Z&se=2023-04-29T15%3A30%3A43Z&sp=r&sv=2021-08-06&sr=b&rscd=inline&rsct=image/png&skoid=6aaadede-4fb3-4698-a8f6-684d7786b067&sktid=a48cca56-e6da-484e-a814-9c849652bcb3&skt=2023-04-29T00%3A13%3A21Z&ske=2023-04-30T00%3A13%3A21Z&sks=b&skv=2021-08-06&sig=G8nIKvjeKxMBjxG1HyqTOwdcFYvKdwrSHZIGJvCeRY0%3D"
        }
    ]
}



이런식으로 이미지를 생성해준다! (멋있게 잘 만들어준다)

Controller 코드

Feign Client 인터페이스 코드 (OpenAI API와 통신하는 부분)

Postman으로 만든 API 호출 결과


어딘가 이상한 피카츄ㅋㅋㅋㅋㅋ

OpenAI API를 써보니, json으로 반환을 해줘서 사용하기 편리하게 되어 있어서 금방 현업에서도 적용해서 시장에 나올 것 같다는 생각이 들었다. 나 또한 나중에 실제로 ChatGpt API를 적용해서 한번 만들어보고 싶다!!!

아직 개발자를 희망하는 취준생이지만, ChatGPT를 쓸수록, 과연 몇년 뒤에 얼마나 더 발전될지 기대가 되면서도, 걱정이 된다.. 발전속도가 말도 안되게 빠르다.. 앞으로 코딩 실력보다 효율적으로 어떻게 쓰는지가 주요 쟁점이 될지도!


Reference
https://platform.openai.com/
https://akku-dev.tistory.com/52

profile
개발잘하고싶은사람

0개의 댓글