Convert OpenAIObject to dictionary
안녕하세요,
아과노트입니다.
오늘은 그 유명한 ChatGPT에서 OpenAI의 API를 사용하면 받게 되는 OpenAIObject를 파이썬에서 사용가능한 dictionary로 변경하는 부분을 알아보겠습니다.
"OpenAIObject를 파이썬(Python)의 딕셔너리 (dictionary)로 변환하기"의 글은 다음의 순서로 진행됩니다.
- ChatGPT의 OpenAI API 셋팅하기
- OpenAI 실행
- ChatGPT의 답변 부분 파싱
- 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) 변환에 대해 알아보았습니다.
고생하셨습니다.