반응형
개요
ChatGPT라는 언어모델의 한계로 인해 장문의 대답이 필요한 질문에도 불구하고 1000자 내외에서 응답이 멈추는 문제가 있습니다.
특히, 저 같은 경우 장문의 문서 요약을 한눈에 알기 쉽게 만들도록 ChatGPT에게 요청하는 경우가 많은데요.
약 5000자가 넘는 장문의 문서를 ChatGPT가 1000자 내외로 요약하다 보니 명확하지 않거나 부연설명 없이 과하게 요약된 내용이 담기는 경우가 많습니다.
이번 글에서는 파이썬으로 ChatGPT API를 활용하는 방법과 1000자가 넘는 문서를 ChatGPT API를 통해 요약하는 방법을 알아보도록 하겠습니다.
파이썬을 통한 ChatGPT API 사용방법
1. OpenAI 로그인
2. API 키 생성
3. 파이썬으로 API 활용
- 구글로그인 또는 회원가입을 진행하고 API 페이지로 넘어갑니다
- 우측 상단의 프로필을 누르면 하위 항목들이 나옵니다.
- 하위 항목에서 View API keys 버튼을 눌러 이동합니다.
- Create new secret key 를 선택하면 API 키 발급이 완료됩니다.
반응형
파이썬 코드 작성
환경설치
pip install openai
- 아나콘다 프롬프트에서 pip install openai를 하면 ChatGPT API를 사용하기 위한 준비가 완료되었습니다.
- 가상환경에 설치하셔도 무방합니다.
API 호출
import pandas as pd
import openai
openai.organization = "Organization 키를 입력하세요."
openai.api_key = "발급받은 API 키를 입력하세요."
- organization 키는 API키를 발급받은 페이지의 좌측 ORGANIZATION - Settings로 들어가면 확인할 수 있습니다.
def get_openai_response(prompt, print_output=False):
completions = openai.Completion.create(
engine='text-davinci-003', # Determines the quality, speed, and cost.
temperature=0.5, # Level of creativity in the response
prompt=prompt, # What the user typed in
max_tokens=3072, # Maximum tokens in the prompt AND response
n=1, # The number of completions to generate
stop=None, # An optional setting to control response generation
)
# Displaying the output can be helpful if things go wrong
if print_output:
print(completions)
# Return the first choice's text
return completions.choices[0].text
- get_openai_response 함수는 ChatGPT API의 응답을 반환하는 함수입니다.
- prompt를 request로 요청하며 completions에 JSON 형태의 response가 API를 통해 반환됩니다.
- completions에서 저희가 원하는 GPT 언어모델의 응답을 추출해서 반환합니다. return completions.choices[0].text
def split_script_1000(script):
split_script = script.split('. ')
# split_script = script.splitlines()
result = []
counter = 0
tmp = ''
for i in split_script:
tmp += i
counter += len(i)
if counter > 1000:
result.append(tmp)
tmp = ''
counter = 0
return result
- 저는 논문요약을 주로 시키므로 1000자씩 끊어서 ChatGPT 언어모델에 입력시킬 필요가 있습니다.
- split_script_1000 함수는 입력된 str 형태의 스크립트를 ". " 기준으로 분할하며, 그냥 "."이 아닌 ". "로 분할하는 이유는 실수(1.1, 2.2, 3.3... etc)는 포함시키지 않기 위해 ". "로 분할합니다.
- result에는 ". "로 분할된 스크립트의 리스트가 반환됩니다.
Main
# Let's get data
df = pd.read_csv('script.csv')
# Let's make prompt
prompt = 'Rewrite this script professionally and add subheadings No Titles No Introduction No Conclusion.'
# Algo to rewrite script
result_list = []
for ind, row in df.iterrows():
eng_result = ''
title = row['TITLE']
script = row['SCRIPT'].strip('\n')
split_script = split_script_1000(script)
for ss in split_script:
request = prompt + ss
response = get_openai_response(request)
eng_result += response
result_list.append({'title': title, 'eng': eng_result})
df_result = pd.DataFrame(result_list)
df_result.to_csv('rewrited_script.csv', mode='a', index=False, encoding='utf-8-sig')
- 여러 개의 논문을 요약시킬 때도 많으므로 판다스를 통해 데이터를 읽어옵니다.
- prompt는 "각각의 문단에 소제목을 달고 제목, 개요 및 결론을 내지 말고 이 글을 다시 써주세요."라는 요청에 1000자 단위로 분할된 스크립트를 추가해서 API를 호출합니다.
- script.csv의 형태는 다음과 같습니다.
- 엑셀로 열어보면 TITLE 칼럼과 SCRIPT칼럼을 가진 일반적인 데이터 프레임입니다.
- TITLE에는 문서의 이름 SCRIPT에는 문서 내용을 써넣으면 됩니다.
- 결과는 rewrited_script.csv에 저장됩니다.
결과
rewrited_script.csv 파일
- 1000자 단위로 끊어서 ChatGPT에게 물어본 결과 엄청나게 긴 문서(6천 자)를 요약(3천 자)해낸 모습입니다.
- prompt를 수정하여 API 결과에 따른 다양한 서비스를 만들 수 있습니다.
주의 : 너무 많이 쓰면 결제해야 합니다.
- organization - usage를 들어가시면 얼마나 API를 썼는지 확인할 수 있습니다.
- 1000 토큰당 0.02$이므로 개인적인 용도로 쓰신다면 Free trial로도 충분합니다.
- 하지만 Free trial은 만료기간이 있으므로 기간이 종료된다면 결제를 하거나 다른 계정을 사용하셔야 합니다.
커스텀 모델을 만들고 싶어요
2023.02.23 - [R&D] - ChatGPT 모델 학습 방법 : 파인튜닝(Fine tuning)을 사용한 MBTI와 에니어그램 별 캐릭터 설정 제조기
ChatGPT를 간지나게 쓰는 방법은?
2023.03.07 - [R&D] - Chat GPT를 간지나게 사용하는 방법 + Notion AI를 활용한 문서 요약기
2023.02.12 - [Technology] - 검색엔진의 종말?? : ChatGPT가 불러온 새로운 물결
2023.02.06 - [Technology] - AI 패권 경쟁의 승자는??(ChatGPT가 쏘아 올린 작은 공)
2022.12.24 - [Technology] - 어떤 문제든 다 풀어주는 챗봇 인공지능이 있다?? - ChatGPT의 등장
'R&D' 카테고리의 다른 글
Bing AI + Notion AI를 활용한 보고서 및 에세이 자동 작성기 : 대학과제를 손쉽게 요리해먹는 방법 (0) | 2023.03.08 |
---|---|
ChatGPT를 간지나게 사용하는 방법 + Notion AI를 활용한 문서 요약기 (0) | 2023.03.07 |
ChatGPT 모델 학습 방법 : 파인튜닝(Fine tuning)을 사용한 MBTI와 에니어그램 별 캐릭터 설정 제조기 (0) | 2023.02.23 |
댓글