AI & 파이썬

ChatGPT / OpenAI API / OpenAIObject를 파이썬(Python)의 딕셔너리 (dictionary)로 변환하기(Convert OpenAIObject to dictionary) / 아과노트

아과노트 2023. 3. 8. 18:22
728x90
반응형

 

Convert OpenAIObject to dictionary

 

안녕하세요,

아과노트입니다.

 

오늘은 그 유명한 ChatGPT에서 OpenAI의 API를 사용하면 받게 되는 OpenAIObject를 파이썬에서 사용가능한 dictionary로 변경하는 부분을 알아보겠습니다.

 

OpenAI 로고
하나의 특이점. OpenAI

 

 

 

"OpenAIObject를 파이썬(Python)의 딕셔너리 (dictionary)로 변환하기"의 글은 다음의 순서로 진행됩니다.

  1. ChatGPT의 OpenAI API 셋팅하기
  2. OpenAI 실행
  3. ChatGPT의 답변 부분 파싱
  4. OpenAIObject를 파이썬의 딕셔너리(dictionary)로 변환

그럼 진행해 보도록 하겠습니다.

 

1. ChatGPT의 OpenAI API 셋팅하기

먼저 ChatGPT의 OpenAI를 사용하기 위한 셋팅이 필요합니다.

 

이 부분은 다음 문서를 참고해 주세요

 

2023.03.02 - [파이썬] - 파이썬 / ChatGPT API (openai) 기본 사용법 (공식문서 기준) / 아과노트

 

파이썬 / ChatGPT API (openai) 기본 사용법 (공식문서 기준) / 아과노트

안녕하세요, 아과입니다. 드디어 오늘부터 ChatGPT(OpenAI)의 API 서비스가 정식오픈했습니다. 그 기념으로 ChatGPT API를 이용하여 파이썬에서 개발을 시작해 보도록 하겠습니다. 이 글의 내용은 ChatGPT

alphalok.tistory.com

그러면 organization 키와 API키를 발급받으셨을 것입니다.

2. OpenAI 실행

먼저 openai를 import 하고,  사전에 준비한 organization과 api 키를 입력합니다.

 

import openai
openai.organization = "organization 키"
openai.api_key = "API 키"

prompt = "파이썬에서 볼린저밴드 구하는 함수 만들어줘"
response = openai.Completion.create(model="text-davinci-003",prompt=prompt,temperature=1,max_tokens=4000)
print(response)

그러면 다음과 같이 응답을 줍니다.

 

{
  "choices": [
    {
      "finish_reason": "stop",
      "index": 0,
      "logprobs": null,
      "text": "\n\ndef get_bollinger_bands(arr, window=20, std_num=2):\n    \"\"\"Return upper and lower Bollinger Bands.\"\"\"\n    # Calculate rolling mean and standard deviation\n    rm = arr.rolling(window).mean()\n    rstd = arr.rolling(window).std() \n    \n    # Calculate upper and lower bands\n    upper_band = rm + (rstd * std_num) \n    lower_band = rm - (rstd * std_num)\n    \n    return upper_band, lower_band"
    }
  ],
  "created": 16782,
  "id": "cmpl-",
  "model": "text-davinci-003",
  "object": "text_completion",
  "usage": {
    "completion_tokens": 128,
    "prompt_tokens": 56,
    "total_tokens": 184
  }
}

ChatGPT는 단순하게 코딩된 것이 아니라 AI이므로 답변은 달라질 수 있습니다.

하지만 답변의 형태는 동일합니다.

 

그러면 답변을 파싱해 보겠습니다.

3. ChatGPT의 답변 부분 파싱

 

여기서 답변을 뜯어내려면 "choices"를 가져와야 합니다.

 

위의 소스에서는 response.choices[0] 라고 하면 답변을 가져옵니다.

그러면 답변과 답변 자료형이 무엇인지 확인해 보겠습니다.

print(response.choices[0])
print(type(response.choices[0]))

 

결과는 다음과 같습니다.

{
  "finish_reason": "stop",
  "index": 0,
  "logprobs": null,
  "text": "\n\ndef bollinger_bands(data, window, std_factor):\n\n    data_sma = data.rolling(window=window).mean() # \ud3c9\uade0 \uad6c\ud558\uae30\n    data_std = data.rolling(window=window).std() # \ud45c\uc900\ud3b8\ucc28 \uad6c\ud558\uae30\n\n    upper = data_sma + (std_factor * data_std) # \uc0c1\ub2e8 \ubcfc\ub9b0\uc800\ubc34\ub4dc \uad6c\ud558\uae30\n    lower = data_sma - (std_factor * data_std) # \ud558\ub2e8 \ubcfc\ub9b0\uc800\ubc34\ub4dc \uad6c\ud558\uae30\n\n    return upper, lower # \ubcfc\ub9b0\uc800\ubc34\ub4dc \ubc18\ud658"
}
<class 'openai.openai_object.OpenAIObject'>

겉으로 보기에는 딕셔너리처럼 보였지만..

알고 보니까 OpenAIObject 라는 데이터 타입입니다.

 

향후에 ChatGPT를 지속대화형으로 만들려면 choices 부분의 OpenAIObject 를 파이썬의 딕셔너리(dictionary) 형태로 지속적으로 누적을 해야 합니다.

 

그럼 OpenAIObject 를 dictionary로 바꾸는 방법을 알아보도록 하겠습니다.

 

4. OpenAIObject를 파이썬의 딕셔너리(dictionary)로 변환

 

이 부분을 바꾸기 위해서 하나하나 다시 딕셔너리로 만들까, 아니면 JSON 모듈을 이용해서 바꿀까 해봤는데...

 

생각보다 간단합니다.OpenAIObject 는 딕셔너리(dictionary) 변환을 위해 to_dict()라는 함수를 제공해 줍니다.

즉, OpenAIObject 의  to_dict() 함수를 이용하면 됩니다.

다음과 같이 입력해 보세요.

response.choices[0].message.to_dict()

 

그러면 간단하게 딕셔너리(dictionary) 로 변환되는 것을 알 수 있습니다.

 

OpenAIObject를 파이썬의 딕셔너리로 바꾸고 싶을 때는
OpenAIObject의 to_dict()를 이용하세요
-아과노트-

 

간단하지만 모르면 헷갈리는 부분인 것 같습니다.

 

오늘은 OpenAIObject의 딕셔너리(dictionary) 변환에 대해 알아보았습니다.

 

고생하셨습니다.

728x90
반응형