반응형

chatgpt에도 openapi가 존재한다.

ChatGPT API사용법은 chatgpt에게 물어보면 잘 대답해준다.
이런 소스인데 기본적으론 python으로 답을 해주고 javascript로 소스 샘플을 짜달라면 node.js로 보내온다.
하지만 쌩 javascript도 가능하니 node.js가 아닌 javascript로만 답을 해달라고 하자.
그럼 이런 답을 얻을 수 있다.

<!DOCTYPE html>
<html>
<head>
  <title>GPT-3.5 Turbo Chat</title>
</head>
<body>
  <div>
    <label for="userInput">질문:</label>
    <input type="text" id="userInput" />
    <button onclick="getChatResponse()">답변 받기</button>
  </div>
  <div>
    <strong>ChatGPT 답변:</strong>
    <p id="response"></p>
  </div>

  <script>
    async function getChatResponse() {
      const userInput = document.getElementById("userInput").value;
      const apiUrl = "https://api.openai.com/v1/completions"; // OpenAI API URL
      const apiKey = "내가 받은 api key"

      const requestBody = {
        model: "gpt-3.5-turbo",
        messages: [
          {
            role: "user",
            content: userInput,
          },
        ],
      };

      try {
        const response = await fetch(apiUrl, {
          method: "POST",
          headers: {
            "Content-Type": "application/json",
            Authorization: `Bearer ${apiKey}`,
          },
          body: JSON.stringify(requestBody),
        });

        const data = await response.json();
        var strResult;

        if (data.hasOwnProperty("error")) { // error 속성이 존재하는 경우
            strResult = data.error.message;
        } else if (data.hasOwnProperty("choices")) { // choices 속성이 존재하는 경우
            strResult = data.choices[0].message.content;
        } else {    // 그 외의 경우
            strResult = "Unknown response format.";
        }

        document.getElementById("response").innerText = `ChatGPT: ${strResult}`;
      } catch (error) {
        console.error("Error:", error.message);
        document.getElementById("response").innerText = "Error occurred.";
      }
    }
  </script>
</body>
</html>

대충 chatgpt API 사이트에 보니 모델을 지정하고 API키만 입력하고 질문입력해서 보내면 답을 주는 매우 간단한 구조다.
API구조는 chat gpt버전에 따라 다르다. 
구조가 저러하다 정도만 이해하고 나머진 규격에 맞게 requestBody를 구성하면 되겠다.


그러면 이제 API KEY를 얻어보자.
API KEY를 얻기 위해선 아래 페이지에 가서 신청하면 받을 수 있다.

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

 

OpenAI Platform

Explore developer resources, tutorials, API docs, and dynamic examples to get the most out of OpenAI's platform.

platform.openai.com

본격적인 개발을 진행하기 전 postman이란 프로그램을 이용하면 미리 테스트가 가능하니 postman을 다운로드 받자.
https://www.postman.com/downloads/

 

Download Postman | Get Started for Free

Try Postman for free! Join 25 million developers who rely on Postman, the collaboration platform for API development. Create better APIs—faster.

www.postman.com

설치까지 다 했다면 실행 후 호출할 주소창에 https://api.openai.com/v1/completions를입력하고 호출 방법은 POST를 선택한다.


CHAT GPT OPEN API는 Bearer 인증방식을 취하고 있는데 
이 설정방법을 소개하려 한다.
Authorization탭으로 이동한다.
그리고 Type에서 BearerToken을 선택하고 Token에 아까 받아온 api key를 입력하면 된다.   

그다음으론 전송할 데이터를 입력해야 하는데 소스를 보면 json형식이니 모델과 메세지를 보내야 하는데 Body로 이동해 raw라디오 버튼을 선택하고 아래처럼 json을 입력하면 된다.

{
    "model""gpt-3.5-turbo",
    "messages": [
        {
            "role""user",
            "content""Hello!"
        }
    ]
}

이제 Send를 눌러 결과를 확인해보자.

API문서에 따르면 이런 규격의 response를 보게 될 것 같다.(정확하진 않다.)
{
   "id":"chatcmpl-abc123",
   "object":"chat.completion",
   "created":1677858242,
   "model":"gpt-3.5-turbo-0301",
   "usage":{
      "prompt_tokens":13,
      "completion_tokens":7,
      "total_tokens":20
   },
   "choices":[
      {
         "message":{
            "role":"assistant",
            "content":"\n\nThis is a test!"
         },
         "finish_reason":"stop",
         "index":0
      }
   ]
}

하지만 아래 같은 결과를 확인할 수 있다.

{
    "error": {
        "message""You exceeded your current quota, please check your plan and billing details.",
        "type""insufficient_quota",
        "param"null,
        "code""insufficient_quota"
    }
}

돈 내란다. -_-

이상하다.
chat gpt 사이트에는 분명 이렇게 5딸라까지 호출 여유가 있는데 쿼터를 오버했다니....

자세히보니 Expires가 2023년 7월 1일까지라 그런것 같다.
오늘은 8월이다.

오호라 아이디를 그럼 새로 파서 API KEY를 신청하면 5딸라 받아 테스트 가능하겠네?
신나게 아이디를 새로 파보니 그새 또 뭔가 달라졌나보다 -_-

예전에 생성했던 계정은 만료 5딸라가 보이지만 오늘 새로 생성한 chatgpt 계정은 그른그 읎다.
그냥 set up a paid account 답정이다.
역시 m$인가?

검색해보니 예전엔 18딸라까지 무료 지원을 했었는데 그마저도 5딸라로 개악된듯하고
이젠 그마저도 지원 안하나보다.

카드 정보 입력하기 껄끄러워 여기까지만 진행해야겠다.

반응형
Posted by Hippalus
,

반응형

클라우드 서비스들 중 ms의 azure db는 spt_values를 지원하지 않는다.
이것말고도 별 뭐같은 경우들이 다 생겨난다.
짜증나지만 짜증나고 짜증이 날 뿐이다.

아래처럼 시작일 구간과 종료일 구간을 설정하여 UNION으로 묶어서 돌리면 날짜 데이터를 얻어낼 수 있다.
3년 정도로 (2013-01-01 ~ 2016-12-31) 여러개 만들면 됨

    SELECT  
    DATEADD(DAY, NUMBER, CONVERT(DATETIME, '2013-01-01', 120)) AS DATE  
    FROM  
    MASTER..SPT_VALUES  
    WHERE  
    TYPE = 'P'  
    AND DATEADD(DAY, NUMBER, CONVERT(DATETIME, '2013-01-01', 120)) <= CONVERT(DATETIME, '2016-12-31', 120)
UNION ALL
    SELECT  
  ...

그렇게 나온 데이터들을 테이블을 만든 후 엑셀로 옮겨서 아래처럼 쿼리를 만들어 저장시키면 뭐같은 azure mssql db에서 미지원하는 MASTER..SPT_VALUES를 이용할 수 있다.

INSERT INTO CALEN (DATE) VALUES ('2013-01-01 00:00:00.000')
INSERT INTO CALEN (DATE) VALUES ('2013-01-02 00:00:00.000')
INSERT INTO CALEN (DATE) VALUES ('2013-01-03 00:00:00.000')
INSERT INTO CALEN (DATE) VALUES ('2013-01-04 00:00:00.000')
INSERT INTO CALEN (DATE) VALUES ('2013-01-05 00:00:00.000')
INSERT INTO CALEN (DATE) VALUES ('2013-01-06 00:00:00.000')
INSERT INTO CALEN (DATE) VALUES ('2013-01-07 00:00:00.000')

...

반응형
Posted by Hippalus
,

반응형

ANN (Artifical Neural Network) : 인공신경망

인간의 뉴런처럼 자극이 임계값을 넘어서면 결과 신호를 전달하는 과정에서 착안.

자극은 Input Data, 임계값은 가중치(Weight)

결과 신호는 Output Data

입력층 은닉층(레이어) 출력층으로 구성

은닉층에서 활성화함수를 사용하여 최적의 W(Weight)와 B(Bias)를 찾아내는 역할을 함

 

학습과정에서 파라미터의 최적값을 찾기 어려고 OverFitting문제와 학습시간이 너무 느리다란 문제점이 존재하나 HW의 발전으로 학습시간이 감당할 수 있는 수준이며 오버피팅 문제 역시 사전훈련을 통해 방지할 수 있게 되었음

 

DNN (Deep Neural Network)

ANN기법의 문제가 해결되면서 은닉층을 많이 늘려 학습의 결과를 향상시키는 방법인 DNN이 등장

은닉층을 2개 이상 지닌 학습방법을 뜻함.

컴퓨터가 스스로 분류 레이블을 만들어 내고 공간을 왜곡하고 데이터를 구분짓는 과정을 반복하여 최적의 구번선을 도출.

 

CNN (Convolution Neural Network) : 합성곱신경망

DNN을 응용한 알고리즘

데이터의 특징을 추출하여 패턴을 파악하는 구조로 Convolution -> Pooling(Convolution Layer의 데이터 사이즈를 줄이고 노이즈를 상쇄시키고 미세한 부분에서 일관적인 특징을 제공)과정을 통해 진행되며 각각의 Convolution Layer(특징 파악, 한장으로 도출), Pooling Layer를 복합적으로 구성하여 알고리즘을 생성

 

RNN (Recurrent Neural Network) : 순환신경망

DNN을 응용한 알고리즘

순환구조가 들어가 있어 이를 이용하여 과거의 학습을 Weight를 통해 현재 학습에 반영하여, 데이터학습의 한계를 해결하는 알고리즘

현재의 학습과 과거의 학습을 연결을 가능케 하고 시간에 종속된다란 특징을 소유함.

음성 웨이브, 텍스트의 앞 뒤 성분 파악할 때 사용

반응형
Posted by Hippalus
,

반응형

파이썬에서 확인하는 방법

import tensorflow as tf
print(tf.__version__)

 

도스창에서 확인하는 방법

pip freeze

C:\>pip freeze
absl-py==0.10.0
argon2-cffi==20.1.0
astunparse==1.6.3
async-generator==1.10
attrs==20.2.0
backcall==0.2.0
bleach==3.2.1
cachetools==4.1.1
certifi==2020.6.20
cffi==1.14.3
chardet==3.0.4
colorama==0.4.4
cycler==0.10.0
decorator==4.4.2
defusedxml==0.6.0
entrypoints==0.3
gast==0.3.3
google-auth==1.22.1
google-auth-oauthlib==0.4.1
google-pasta==0.2.0
grpcio==1.33.1
h5py==2.10.0
idna==2.10
importlib-metadata==2.0.0
ipykernel==5.3.4
ipython==7.16.1
ipython-genutils==0.2.0
ipywidgets==7.5.1
jedi==0.17.2
Jinja2==2.11.2
jsonschema==3.2.0
jupyter==1.0.0
jupyter-client==6.1.7
jupyter-console==6.2.0
jupyter-core==4.6.3
jupyterlab-pygments==0.1.2
Keras-Preprocessing==1.1.2
kiwisolver==1.2.0
Markdown==3.3.2
MarkupSafe==1.1.1
matplotlib==3.3.2
mistune==0.8.4
nbclient==0.5.1
nbconvert==6.0.7
nbformat==5.0.8
nest-asyncio==1.4.1
notebook==6.1.4
numpy==1.18.5
oauthlib==3.1.0
opt-einsum==3.3.0
packaging==20.4
pandocfilters==1.4.2
parso==0.7.1
pickleshare==0.7.5
Pillow==8.0.1
prometheus-client==0.8.0
prompt-toolkit==3.0.8
protobuf==3.13.0
pyasn1==0.4.8
pyasn1-modules==0.2.8
pycparser==2.20
Pygments==2.7.1
pyparsing==2.4.7
pyrsistent==0.17.3
python-dateutil==2.8.1
pywin32==228
pywinpty==0.5.7
pyzmq==19.0.2
qtconsole==4.7.7
QtPy==1.9.0
requests==2.24.0
requests-oauthlib==1.3.0
rsa==4.6
Send2Trash==1.5.0
six==1.15.0
tensorboard==2.3.0
tensorboard-plugin-wit==1.7.0
tensorflow==2.3.1
tensorflow-estimator==2.3.0
termcolor==1.1.0
terminado==0.9.1
testpath==0.4.4
tornado==6.0.4
traitlets==4.3.3
urllib3==1.25.11
wcwidth==0.2.5
webencodings==0.5.1
Werkzeug==1.0.1
widgetsnbextension==3.5.1
wrapt==1.12.1
zipp==3.3.1

반응형
Posted by Hippalus
,