AI & 파이썬

파이썬(Python) / ChatGPT API (OpenAI API) 대화형(Chat) 챗봇 만들기 (자비스 만들기) / 공식문서 기준 / 아과노트

아과노트 2023. 3. 13. 15:07
728x90
반응형

안녕하세요,  아과노트입니다.

 

오늘은 지난시간에 이어 ChatGPT API (OpenAI API) 대화형(Chat)의 챗봇의 실제 코딩을 해보고자 합니다.

 

OpenAI 로고
OpenAI 로고

 

오늘 소스를 잘 이해하면 여러분의 자비스가 만들어 집니다!!

 

 

이 포스팅으로 여러분만의 자비스가 만들어 집니다
-아과노트-

모든 부분 다 상세히 기록했으나 이해 안되는 부분은 댓글 달아 주시면 부가 설명해 드리도록 하겠습니다.

 

지난시간의 개념편을 꼭 이해하고 이번 포스팅을 봐주세요

 

2023.03.09 - [파이썬] - 파이썬(Python) / ChatGPT API (OpenAI API) 대화형(Chat) 기본 개념 (자비스 만들기) / 공식문서 기준 / 아과노트

 

파이썬(Python) / ChatGPT API (OpenAI API) 대화형(Chat) 기본 개념 (자비스 만들기) / 공식문서 기준 / 아과

안녕하세요, 아과노트 입니다. 오늘은 정말 재미있는 것을 만들어 보려고 합니다. 23.03.01 부로 ChatGPT API (OpenAI API)가 공식 서비스 되면서 이제 ChatGPT를 내 프로그램에서 사용할 수 있게 되었습니

alphalok.tistory.com

 

 

그럼 오늘 포스팅의 순서입니다. (이번 편이 두번째 편 입니다.)

 

  1. 개념분석: OpenAI의 대화형 방식 개념 익히기
  2. OpenAI에 키 입력
  3. 주고받을 메세지(message) 선언 및 초기화
  4. ChatGPT 모델 선택
  5. 대화함수 만들기
  6. 메인함수 만들기

 

1. 개념분석: OpenAI의 대화형 방식 개념 익히기

 

이 부분은 이전 포스팅을 참고해 주세요

 

2023.03.09 - [파이썬] - 파이썬(Python) / ChatGPT API (OpenAI API) 대화형(Chat) 기본 개념 (자비스 만들기) / 공식문서 기준 / 아과노트

 

파이썬(Python) / ChatGPT API (OpenAI API) 대화형(Chat) 기본 개념 (자비스 만들기) / 공식문서 기준 / 아과

안녕하세요, 아과노트 입니다. 오늘은 정말 재미있는 것을 만들어 보려고 합니다. 23.03.01 부로 ChatGPT API (OpenAI API)가 공식 서비스 되면서 이제 ChatGPT를 내 프로그램에서 사용할 수 있게 되었습니

alphalok.tistory.com

 

2. OpenAI에 키 입력

 

openai 모듈을 설치합니다. terminal에서 다음과 같이 입력해 설치를 진행해 주세요

pip install openai

그러면 다음과 같이 설치가 진행될 것입니다.

openai를 설치합니다.

Successfully installed openai 가 뜨면 정상 설치된 것입니다.

설치가 성공했습니다.

 

그리고 OpenAI에 우리가 발급 받은 키를 넣어주세요.

import openai
# OpenAI API 인증 정보 설정
openai.organization = "소속코드"
openai.api_key = "API-키"

 

만약 발급받은 키가 없거나 좀 더 상세한 설명을 원하시면 다음 문서를 참고하시면 됩니다.

 

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

 

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

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

alphalok.tistory.com

 

발급 받은 OpenAI API 키로 과금이 되기 때문에 여러분의 키가 노출되지 않도록 주의해주세요. 

 

OpenAI 과금에 대해(무료정책)

ChatGPT는 무료와 유료 버전이 있습니다.

OpenAI의 API의 경우 2023년 5월 1일까지는 18$까지 무료라고 합니다.

 

과금 확인은 여기서 하시면 됩니다.

https://platform.openai.com/account/usage

 

OpenAI API

An API for accessing new AI models developed by OpenAI

platform.openai.com

테스트 하느라 이것저것 질문해 봤는데 아직은 충분히 무료로 사용할 만 합니다.

3. 기억할 이전 메세지(message) 선언 및 초기화

그럼 지난번 대화형 개념을 이용하여 실제 구현할 부분에 대해 설명드리겠습니다.

파이썬 특성상 코드는 간결합니다.

history_message라는 변수를 선언해서 여기에 대화들을 기록하겠습니다.

파이썬의 리스트 자료형으로 누적해 갈 것이며([ ], list)

각 요소는 딕셔너리로 저장할 것입니다({key: value }, dictionary).

 

OpenAI에서 대화를 기억할때는 누구의 기록인지(role)과 내용(content)은 무엇인지로 기억합니다.

 

# 이전 대화 내용을 저장할 리스트
history_message = [
    {"role": "system", "content": "You are a helpful assistant."}
]

이것을 기억해 주세요.

OpenAI에서 대화를 기록할 때는 누구의 대화(Role)인지와 내용은 무엇인지(Content)로 기억합니다.
-아과노트-

 

message에서 role은 3가지가 존재합니다.

 

 

OpenAI의 메세지의 Role은 system, user, asistant가 있습니다.
-아과노트-

 

system: 시스템(초기의 역할을 지정해줌. 보통 처음에 한번 지정합니다)

user: 사용자

assistant: 챗봇

 

우리는 초기 system은 공식문서의 예제대로 유용한 조언자(you are a helpful assistant)로 지정해서 사용하겠습니다.

그리고 우리의 대화는 user로, 챗봇의 대화는 asistant로 지정해서 대화들을 기록해 나가겠습니다.

 

4. ChatGPT 모델 선택

모델에 대한 설명은 다음 문서에 있습니다.

https://platform.openai.com/docs/models/overview

 

OpenAI API

An API for accessing new AI models developed by OpenAI

platform.openai.com

 

모델 선택은 gpt-3.5-turbo를 이용하겠습니다.

이 모델은 GPT-3에서 개선되고 자연어 또는 코드를 이해하고 생성할 수 있는 일련의 모델이라고 합니다.

(A set of models that improve on GPT-3 and can understand as well as generate natural language or code)

 

코드는 다음처럼 사용하면 됩니다.

# GPT-3 엔진 선택
model_engine = "gpt-3.5-turbo"

 

 

5. 대화함수 만들기

오늘 코드의 핵심이라 할 수 있을것 같습니다.

지난번 개념처럼 다음의 그림을 만들기 위한 코드입니다.

 

OpenAI Chat의 핵심개념
OpenAI Chat의 핵심개념

우리의 대화는 Role에 user로 지정하고, 챗봇(AI)의 대화는 asistant로 지정해서 대화들을 기록해 나갑니다.

코드로 보면 다음과 같습니다.

# OpenAI API를 호출하여 대화를 생성하는 함수
def generate_chat(question):
    # OpenAI API 호출하여 대화 생성
    history_message.append({"role":"user", "content":question})
    print(history_message)
    completions = openai.ChatCompletion.create(
        model="gpt-3.5-turbo",
        messages=history_message
    )
    message = completions.choices[0].message.to_dict()
    print(message)
    answer = message["content"].strip()

    # 이전 대화 내용에 새로운 답변 추가
    history_message.append(message)
    print(history_message)
    return answer

우리(사용자)의 대화를 question이란 변수로 받고 history_message에 입력합니다.

그리고 OpenAI에 지금까지 누적된 대화 전체(history_message)를 넣고, AI의 답변을 completions 라는 변수로 받습니다.

그리고 AI의 답변만들 골라냅니다.(completions.choices[0].message.to_dict())

마지막으로 다시 대화를 기록하는 부분에 담습니다.(history_message.append())

함수의 리턴으로는 AI가 준 대화 부분만 돌려줍니다.(return answer)

 

위의 그림의 과정을 코드로 나타냈습니다. 

오늘 포스팅의 핵심이기도 하겠네요

 

6. 메인함수 만들기

이제 위의 소스들을 돌릴 메인을 만들어 보겠습니다.

메인은 간단합니다. exit, quit, goodbye가 나올때 까지 질문을 받고, AI에 답변을 받고 다시 질문을 받는 형태입니다.

# 사용자와의 대화 반복
while True:
    # 사용자의 입력 받기
    question = input("User: ")

    # 대화 종료 조건 확인
    if question.lower() in ["exit", "quit", "goodbye"]:
        print("Bot: Goodbye!")
        break

    # OpenAI API 호출하여 답변 생성
    answer = generate_chat(question)

    # 챗봇의 답변 출력
    print("Bot:", answer)

대화형 답게 점점 깊이있는 대화를 AI와 나누게 됩니다.

여기까지 하시면 여러분의 자비스 챗봇이 만들어 지게 됩니다.

설레는 마음으로 사용해 보세요.

자비스 AI봇과의 대화
자비스 AI봇과의 대화

저는 광장시장의 진미평양냉면에 협찬을 받지는 않았습니다

잘 되네요ㅎㅎㅎ

 

전체소스도 올려드립니다.

참고해서 여러분도 개발해 보세요 ㅎㅎ

전체소스

import openai
# OpenAI API 인증 정보 설정
openai.organization = "소속코드"
openai.api_key = "API-키"
#openai.Model.list()

# 이전 대화 내용을 저장할 리스트
history_message = [
    {"role": "system", "content": "You are a helpful assistant."}
]
# GPT-3 엔진 선택
model_engine = "gpt-3.5-turbo"

# OpenAI API를 호출하여 대화를 생성하는 함수
def generate_chat(question):
    # OpenAI API 호출하여 대화 생성
    history_message.append({"role":"user", "content":question})
    print(history_message)
    completions = openai.ChatCompletion.create(
        model="gpt-3.5-turbo",
        messages=history_message
    )
    message = completions.choices[0].message.to_dict()
    print(message)
    answer = message["content"].strip()

    # 이전 대화 내용에 새로운 답변 추가
    history_message.append(message)
    print(history_message)
    return answer

# 사용자와의 대화 반복
while True:
    # 사용자의 입력 받기
    question = input("User: ")

    # 대화 종료 조건 확인
    if question.lower() in ["exit", "quit", "goodbye"]:
        print("Bot: Goodbye!")
        break

    # OpenAI API 호출하여 답변 생성
    answer = generate_chat(question)

    # 챗봇의 답변 출력
    print("Bot:", answer)

오늘은 여기까지 입니다.

고생하셨습니다.

728x90
반응형