빅데이터 전문가 되기

[OpenAI] GPT api 활용하여 나만의 챗봇 만들기 본문

인공지능(AI)

[OpenAI] GPT api 활용하여 나만의 챗봇 만들기

지야소이 2023. 8. 16. 22:10

인공지능하면 제일많이 사용하는 Chat-gpt입니다.

다른 오픈소스 LLM에 비해 한국어 인식을 잘할 뿐아니라 쓰임새도 간편해서 가장 대중화되어 있습니다.

오늘은 이러한 OpenAI의 api key를 발급받아 나만의 챗봇을 간단하게 만들어보도록 하겠습니다.

 

😸 OpenAI API의 key 발급받기

 

OpenAI Platform

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

platform.openai.com

 

- 본인의 계정으로 로그인한 후에 +Create new secret key를 눌러 key를 발급받습니다.

- 이때 key는 처음에 발급을 받은 이후에 생성된 key값은 확인하지 못하니 잘 적어두는 게 좋습니다.

 

 

 

👉 ChatGPT api 가격 및 토큰

- 처음 무료로 이용할 수 있는 크레딧은 18달러라고 합니다.

- 이는 Usage의 게이지에서 사용량을 확인할 수 있습니다.

 

- 일반적으로 많은 모델이 있지만 채팅에 대부분 이용하는 모델은 gpt-3.5-turbo 입니다. 

- 현재 gpt-3.5-turbo는 1000토큰당 2.2원 정도로 1082만 토큰을 사용할 수 있습니다.

 

 

 

 

 


👉 ChatGPT의 프롬프트 작성 방법

import openai

openai.api_key ='본인이 발급받은 key값' 

response = openai.ChatCompletion.create(
			model='gpt-3.5-turbo',
            messages = [{'role':'system', 'content':'content'},
            		{'role':'user', 'content':'content'}])

- 기본적인 채팅을 이용한 프롬프트 작성 방법입니다.

 

1. 메세지의 유형

- system messages : AI 비서의 동작을 설명

- user messages : AI 어시스턴트가 말하길 원하는 내용 설명

- assistant messages : 대화의 이전 응답을 설명

 만약  assistant messages를 포함할 경우 user messages와 번갈아서 나타나야 함.

-> 이 때 어시스턴트의 응답은 response['choices'][0]['message']['content']가 포함되야 함.

 

2. 텍스트 완성 (openai.Completion.create() 메서드 활용 시)

- model : gpt-4 (현재 결제 후 wait list를 작성해야 사용 가능), gpt-3.5-turbo, text-davinci-003 등..

- prompt : 모델이 출력을 생성하도록 안내하는 텍스트

- max_tokens : 텍스트 생성시 소비하는 토큰 수 (프롬프트 포함하여 4096 미만 가능)

- temperature :모델의 창의성 수준을 지정 ( 0~1의 값 중 더 낮은 값을 설정할 경우 정확하고 간결한 답변 생성)

 

 

 

 

👉 ChatGPT 활용 예시

1. User에 원하는 내용을 입력하여 나만의 챗봇 생성

# openai 다운
!pip install openai
import openai

openai.api_key = "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"

messages=[]
while True:
	content = input('User:')
    messages.append({'role':'user','content':content})
    
    completion = openai.ChatCompletion.create(
    			model='gpt-3.5-turbo', messages = messages)
    chat_response = completion.choices[0].message.content
    print(f'ChatGPT: {chat_response}')
    messages.append({'role':'assistant', 'content':chat_response})

- User의 내용에 질문을 했을 경우, 그에 대한 대답을 Chat GPT가 해준다는 것을 알 수 있습니다.

- 단, GPT-3.5는 2021년까지의 데이터를 축적하여 만든 오픈소스로 현재나 실시간의 질문에는 엉뚱하거나 잘못된 지식을 전하기도 합니다. 

 

2. content안의 내용을 입력하여 출력

- 사전에 user message를 활용하여 출력할 수도 있습니다.

import openai 
openai.api_key ="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"

response = openai.ChatCompletion.create(
		model= 'gpt-3.5-turbo',
        messages = [{'role':'user', 'content':'챗 GPT가 뭔지 설명해줘'}])
                    
print(response.choices[0].message.content)

 

 

3. 프롬프트를 좀 더 상세히 작성하여 출력

- 이번에는 GPT에게 역할을 부여하여 예시를 생성해보도록 하겠습니다.

import openai

openai.api_key="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"

system_msg = "너는 데이터 과학을 이해하는데 유용한 조력자야"
user_msg = "작년 판매액에 대하여 작은 예시로 데이터셋을 만들어줘"

response = openai.ChatCompletion.create(
		model='gpt-3.5-turbo',
        messages = [{'role':'system', 'content':system_msg},
        	{'role':'user', 'content':user_msg}])
                    
print(response['choices'][0]['message']['content'])

 

 

4. 함수를 생성하여 출력

import openai

openai.api_key="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"

def chat(system, user_assistant):
	# assert문을 사용하여 system을 문자열, user_assistant는 list로 지정
    assert isinstance(system, str), "'system'은 문자열입니다"
    assert isinstance(user_assistant, list), "'user_assistant'는 리스트입니다"
    system_msg = [{'role':'system', 'content':system}]
    user_assistant_msgs = [{'role':'assistant', 'content':user_assistant[i]}
    if i % 2 else {'role':'user', 'content':user_assistant[i]}
    for i in range(len(user_assistant))]
    
    msgs = system_msg + user_assistant_msgs
    response = openai.ChatCompletion.create(model='gpt-3.5-turbo',
                                            messages=msgs)
    return response['choices'][0]['message']['content']
    
response_fn_test = chat('너는 머신러닝 전문가야',['인공 신경망에 대해서 설명해줘'])
print(response_fn_test)

-> 인공 신경망에 대해서 설명해준다는 것을 알 수 있습니다.

 

 

 

5. AI Assistant의 응답을 재사용하여 출력

- 3번에서 만들었던 작년 판매액에 대한 내용을 활용하여 샘플 데이터 세트를 분석해보도록 하겠습니다.

import openai 

openai.api_key ="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"

system_msg = "너는 데이터 과학을 이해하는데 유용한 조력자야"
user_msg = "작년 판매액에 대하여 작은 예시로 데이터셋을 만들어줘"

response = openai.ChatCompletion.create(
		model='gpt-3.5-turbo',
        messages = [{'role':'system', 'content':system_msg},
         	{'role':'user', 'content':user_msg}])
                    
assistant_msg = response['choices'][0]['message']['content']
user_msg2= "방금 만든 데이터 집합을 이용하여 평균을 계산하는 컬럼을 '전체_판매평균' 이름으로 추가하고, 계산 결과를 포함해줘"


def chat(system, user_assistant):
	# assert문을 사용하여 system을 문자열, user_assistant는 list로 지정
    assert isinstance(system, str), "'system'은 문자열입니다"
    assert isinstance(user_assistant, list), "'user_assistant'는 리스트입니다"
    system_msg = [{'role':'system', 'content':system}]
    user_assistant_msgs = [{'role':'assistant', 'content':user_assistant[i]}
    if i % 2 else {'role':'user', 'content':user_assistant[i]}
    for i in range(len(user_assistant))]
    
    msgs = system_msg + user_assistant_msgs
    response = openai.ChatCompletion.create(model='gpt-3.5-turbo',
                                            messages=msgs)
    return response['choices'][0]['message']['content']
    
user_assistant_msgs = [user_msg, assistant_msg, user_msg2]
response_calc = chat(system_msg, user_assistant_msgs)
  
print(response_calc)

-> 함수를 이용하여 이전의 만들었던 내용을 불러와서 추가로 원하는 내용을 적용시킬 수 있었습니다. 

Comments