파이썬 AI 실습/Voice ChatGPT3.5 만들기

파이썬 Voice ChatGPT3.5 만들기 - 2.chatGPT3.5와 음성대화 하기

파기차차 2023. 5. 5. 07:16
728x90
반응형
SMALL

ㅁ 개요

 

O 프로그램 소개

 

 - 이번 글은 이전글( [분류 전체보기] - 파이썬 Voice ChatGPT3.5 만들기 - 1.소개편)에 이은 2번째 마지막 글로 실제로 chatGPT와 음성으로 대화하는 방법에 대하여 알아보겠습니다.

 

 

 

O 완성된 프로그램 실행 화면

 

 

 - 본 포스팅의 최종 완성된 프로그램의 결과화면은 아래와 같습니다.

 

1.프로그램을 실행하면 아래와 같이 동작 합니다.

 

1) chatGPT와 대화시 종료하려면 '굿바이'라고 말하면 됩니다

2) 'say something:' 가 보이면 말씀하시면 됩니다.

3) 내가 말을 하고 나면 'Your speech thinks like:' 뒤에 내가 말한 내용이 텍스트로 나옵니다.

4) 그리고 조금 기다리면 chatGPT의 응답이 텍스트로 먼저 화면에 쓰여지고, 이후 이 쓰여진 글을 읽어 줍니다.

 

1)chatGPT를 종료하려면 '굿바이'라고 말하세요.
2)say something:
3)Your speech thinks like:  너 돈까스 좋아하지
--------------------------------
4)저는 인공지능 챗봇이기 때문에, 음식을 먹을 수 없으므로 돈까스를 좋아하거나 안 좋아하는 개념이 없습니다. 하지만 돈까스를 좋아하는 분들은 많기 때문에 저의 주인인 사용자분이 돈까스를 좋아할 가능성이 높을 것입니다.
--------------------------------

 


 

 

O 사전 준비

 

 1. 우리 프로그램은 chatGPT와 음성으로 대화해야 하므로 음성을 전달할 수 있는 마이크가 있어야 합니다. 저의 경우 그냥 저렴한 이어폰(마이크 기능이 달려있는 이어폰)으로 테스트를 하였으며, 잘 동작하는 것을 확인하였습니다.

 

 

2. 오픈AI의 API 키가 있어야 하므로 먼저 아래 사이트에 가서 가입 후 Payment 등록을 하셔야 합니다.(주의 : 유료임)

https://platform.openai.com/account/billing/overview

 

 

3. 본 포스팅을 읽기 전에 우리 블로그의 아래 이전 포스팅을 미리 보고 오시면 크게 도움이 됩니다. 다만, 보지 않더라도 크게 어렵지는 않으므로 어렵지 않게 따라오실 수 있습니다.

 

1) 파이썬 실시간 번역기

2022.11.14 - [파이썬 실습/음성인식 프로그램 만들기] - 파이썬 실시간 번역기(한국어->영어로 말해주는) 만들기

 

2) 파이썬 음성메모 프로그램 만들기

2023.01.19 - [파이썬 실습/실시간 음성메모 프로그램 만들기] - 파이썬 실시간 음성메모 프로그램 만들기 - 1.소개편

2023.01.26 - [파이썬 실습/실시간 음성메모 프로그램 만들기] - 파이썬 실시간 음성메모 프로그램 만들기 - 2.음성<->텍스트 변환 후 파일로 저장

2023.01.26 - [파이썬 실습/실시간 음성메모 프로그램 만들기] - 파이썬 실시간 음성메모 프로그램 만들기 - 2.음성<->텍스트 변환 후 파일로 저장(계속)

2023.01.26 - [파이썬 실습/실시간 음성메모 프로그램 만들기] - 파이썬 실시간 음성메모 프로그램 만들기 - 3.실시간 음성 메모

 

 


 

 

ㅁ 세부 내용

 

O 완성된 소스

 

 

소스 : 1.py

 

 

 

import openai
from config import *
import time
openai.api_key = OPENAI_API_KEY

# 음성번역관련 구글 모듈
import speech_recognition as sr
from gtts import gTTS
import os
import time
import playsound

# text To Voice
def textToVoice(text):
     tts = gTTS(text=text, lang='ko')
     filename='voice3.mp3'
     tts.save(filename) # 파일을 만들고,
     playsound.playsound(filename) # 해당 음성파일을 실행(즉, 음성을 말함)
     os.remove(filename)


# mike To Speech
def voiceToText():
    r = sr.Recognizer()
    with sr.Microphone() as source:
        print("say something: ")
        audio = r.listen(source)
        said = " "

        try:
            said = r.recognize_google(audio, language="ko-KR")
            print("Your speech thinks like: ", said)
        except:
            pass
            time.sleep(3)
        # except Exception as e:
        #     print("Exception: " + str(e))
    
    return said


print("chatGPT를 종료하려면 '굿바이'라고 말하세요.")
textToVoice("chatGPT를 종료하려면 '굿바이'라고 말하세요.\n")

content = ''

while True:

    prompt = voiceToText() #<----------------- 이 녀석을 적극 활용할것
    # print(prompt)

    # prompt = input("명령을 내려 주세요: ")
    try:
        messages = [
                {'role': 'system', 'content': 'You are a helpful assistant.'},
                # {'role': 'system', 'content': content},
                {'role': 'user', 'content': content},
            ]
        messages.append({'role': 'assistant', 'content': 'You are a helpful assistant.' })
        # messages.append({'role': 'assistant', 'content': msg })

        messages.append({'role': 'user', 'content': prompt })
    except:
        messages = [
                {'role': 'system', 'content': 'You are a helpful assistant.'},
                {'role': 'user', 'content': prompt},
            ]

    # if prompt == 'bye':
    #     print("chatGPT를 종료합니다.")
    #     break
    if '굿바이' in prompt:
        textToVoice("chatGPT를 종료합니다.")
        print("chatGPT를 종료합니다.")
        break

    response = openai.ChatCompletion.create(
        model='gpt-3.5-turbo',
        messages=messages
    )

    # print(response)
    print("--------------------------------")
    print(str(response['choices'][0]['message']['content']).strip())
    msg = str(response['choices'][0]['message']['content']).strip()
    print("--------------------------------")


    textToVoice(msg)

    time.sleep(0.1)

    content = content + msg

 

 

 

 

 - 소스파일을 cmd, 파워쉘 또는 vscode 등에서 아래와 같이 실행하시기 바랍니다.
 

 

 > python 1.py

 

 


 

O 주요 내용

 

1.소스코드에 대해 간략히 설명 드리겠습니다.

 

 

 

관련 모듈을 임포트 해줍니다.

 

 

 

 

2. 아래 음성 변환 관련 내용은 이전 글(아래)에서 아주 자세한 설명을 보실 수 있으니, 참고하여 주시기 바랍니다.

2023.01.26 - [파이썬 실습/실시간 음성메모 프로그램 만들기] - 파이썬 실시간 음성메모 프로그램 만들기 - 2.음성<->텍스트 변환 후 파일로 저장

 

 

 

3. while문으로 chatGPT와 계속해서 대화할 수 있게 합니다.(line 47)

 

voiceToText()함수를 호출하고, 화면에 'say something:' 이 나오면 말을 합니다. (line 23 ~ 39)

 

말한 내용(텍스트)이 prompt변수에 저장됩니다. (line 49)

 

chatGPT에게 API 요청을 위해 역할을 설정하고, try~except 구문에서 처음에는 messages가 없으므로(거짓) except 구문이 실행 됩니다. (line 53 ~67)

 

 

 

 

 

4.내가 말한 내용 중 '굿바이'라는 텍스트가 있으면 break에 의해 루프를 종료합니다.(line 72~75)

 

그리고 나서 chatGPT에게 API요청(messages를 던짐)을 하고, 응답값을 response변수에 저장합니다.(line 77~80)

 

response변수에 저장된 응답값 중 필요한 부분(content)만 필터링 후 msg변수에 넣습니다.(line 85)

 

msg변수 담긴 내용(텍스트, chatGPT의 답변)를 textToVoice(msg)함수를 이용하여 음성으로 읽어 줍니다.(line 89)

 

아래와 같이 chatGPT가 이전 대화내용을 이해하고 스마트한 답변할 수 있도록 content에 msg(chatGPT의 답변)를 누적해서 담아둡니다.(매우 중요, line 93)

content = content + msg

 

 

 

 

 


 

ㅁ 정리

 

O 우리가 배운 내용

 
 - 오늘은 실제로 chatGPT와 음성으로 대화하는 방법에 대하여 알아보았습니다.
 

 - 오늘 우리가 배운 내용을 간략히 정리해 보면 아래와 같습니다.
 
 > 1.텍스트를 음성으로(textToVoice() ), 음성을 텍스트로(voiceToText() ) 바꿔주는 함수를 만듭니다.

 > 2.while루프로 chatGPT와 계속해서 대화할 수 있게 하고,

 > 3.chatGPT3.5 형식에 맞게 역할을 정의 후 API 요청/응답을 받아 필요한 부분만 가져와서 텍스트를 음성을 변환해 줍니다.

 

 

이것으로 간단하게  '파이썬 Voice ChatGPT3.5 만들기' 편을 마칩니다.

 

댓글하트는 제가 이글을 지속할 수 있게 해주는 힘이 됩니다.

위의 내용이 유익하셨다면, 댓글과 하트 부탁드립니다.

 

 

 

감사합니다.

 

 

※ 추가적인 정보는 아래 유튜브 영상에서 해당 내용을 더욱 자세히 보실 수 있습니다.

 

 

728x90
반응형
LIST