Do 'Super Cérebro' ao Microcomputador: o ChatGPT pode alimentar um Raspberry Pi Zero W Chatbot?

May 03 2023
Construir um chatbot pode ser uma experiência emocionante e gratificante, especialmente quando você pode vê-lo ganhar vida em um Raspberry Pi Zero W! Nesta postagem, explorarei como criar um chatbot usando o modelo de linguagem baseado em GPT-3.5, ChatGPT, e executá-lo em um computador de baixo custo do tamanho de um cartão de crédito.

Construir um chatbot pode ser uma experiência emocionante e gratificante, especialmente quando você pode vê-lo ganhar vida em um Raspberry Pi Zero W! Nesta postagem, explorarei como criar um chatbot usando o modelo de linguagem baseado em GPT-3.5, ChatGPT, e executá-lo em um computador de baixo custo do tamanho de um cartão de crédito.

O Raspberry Pi Zero W é uma plataforma ideal para construir chatbots, fornecendo uma solução de computação versátil, acessível e de baixo consumo de energia. Além disso, com a capacidade de se conectar a redes Wi-Fi, o Raspberry Pi Zero W também pode atuar como um assistente inteligente que pode responder a perguntas, fornecer conselhos úteis e até mesmo controlar seus dispositivos de automação residencial.

O ChatGPT é um modelo de processamento de linguagem natural de última geração desenvolvido pela OpenAI, que pode gerar respostas semelhantes às humanas para uma ampla gama de prompts. Usando o ChatGPT, podemos treinar um chatbot para entender e responder às perguntas do usuário de forma conversacional, fazendo com que pareça que você está falando com uma pessoa natural. Você pode ver o chatbot que construí no vídeo abaixo:

Em geral, existem quatro etapas para construir o chatbot em destaque:

1- Conversão de áudio para texto
2- Envie o texto convertido para a API do ChatGPT
3- Pegue o texto da resposta da API do ChatGPT
4- Conversão de texto para áudio

Nesta postagem, mostrarei as etapas de criação de um chatbot usando o ChatGPT em um Raspberry Pi Zero W, desde a configuração do hardware até o treinamento e a implantação do modelo. Também abordarei como melhorar o desempenho do seu chatbot e torná-lo mais responsivo às entradas do usuário.

É importante dizer de antemão que a ideia do post não é detalhar o código construído e sim fazer uma apresentação geral de como configurar seu chatbot em um Raspberry Pi Zero W. Qualquer dúvida sobre o código, por favor, pergunte nos comentários. Você também pode acessar o código completo no meu GitHub .

Ao final deste post, você terá um chatbot totalmente funcional que poderá usar para impressionar seus amigos e familiares e talvez até resolver alguns problemas do mundo real, como os que precisamos resolver com urgência: as chamadas mudanças climáticas! Então vamos começar!

O que você precisa:

  • Um mouse/teclado USB/Bluetooth
  • Um cabo HDMI
  • Um adaptador de 5v
  • Uma tela
  • Um alto-falante/microfone Bluetooth/USB
  • Um Raspberry Pi Zero W com Raspberry Pi OS instalado

import openai
import speech_recognition as sr
import os
from gtts import gTTS
from playsound import playsound
import sys

# Set up the OpenAI API
openai.api_key = "Your API Key"

# Set up the speech recognition object
r = sr.Recognizer()

# Record audio from microphone
while True:
    
    try:
        
        with sr.Microphone() as source:
            tts("Who do you want me to be?")
            audio1 = r.listen(source)
            print("Who do you want me to be?")
            break
    
    except sr.UnknownValueError:
            # If speech recognition fails, prompt the user to repeat their question
            tts("Sorry, I didn't understand. I will ask you again:")
            print("Sorry, I didn't understand. I will ask you again:")
    
    except:
            sys.exit()

# Use Google's speech recognition API to transcribe audio to text
profile = r.recognize_google(audio1)
tts(f'I am a: {profile}')
print('I am a:', profile)

#List of the questions/messages (chat)
messages = []
chat = 0

while len(messages) < 1000:
    
    try:
        
        #First talk
        if chat == 0:
            
            while True:
                
                try:
                    # Record audio from microphone
                    with sr.Microphone() as source:
                        tts("What is your question?")
                        audio2 = r.listen(source)
                        print("What is your question?")

                    # Use Google's speech recognition API to transcribe audio to text
                    text = r.recognize_google(audio2)
                    print('Your question:', text)

                    #Chatbot settings
                    messages = [{"role": "system", "content": profile}, {"role": "user", "content": text}]

                    #Stop the conversation if asked
                    if text.lower() == 'stop':
                        tts('Thank you for talking')
                        print('Thank you for talking')
                        sys.exit()

                    # Call the OpenAI API to generate a response
                    response = openai.ChatCompletion.create(
                        model="gpt-3.5-turbo",
                        messages=messages,
                        temperature=0,
                        max_tokens=50
                        )

                    # Print the response text
                    output = response.choices[0].message.content
                    tts(output)
                    print('Here is my answer:', output)

                    # Append to the list of messages to continue the chat
                    messages.append({"role": "assistant", "content": output})

                    #Continue the chat
                    chat += 1
                    break

                except sr.UnknownValueError:
                    # If speech recognition fails, prompt the user to repeat their question
                    tts("Sorry, I didn't understand. I will ask you again:")
                    print("Sorry, I didn't understand. I will ask you again:")
    
                except:
                    sys.exit()
        
        # Continue the chat
        else:
            
            while True:
                
                try:
                    # Record audio from microphone to continue the chat
                    with sr.Microphone() as source:
                        tts("Any other question?")
                        audio3 = r.listen(source)
                        print("Any other question?")
          
                    # Use Google's speech recognition API to transcribe audio to text
                    text = r.recognize_google(audio3)
                    print('Your question:', text)
          
                    #Append to the list to continue the chat
                    messages.append({"role": "user", "content": text})

                    #Stop the conversation if asked
                    if text.lower() == 'stop':
                        tts('Thank you for talking')
                        print('Thank you for talking')
                        sys.exit()

                    # Call the OpenAI API to generate a response
                    response = openai.ChatCompletion.create(
                        model="gpt-3.5-turbo",
                        messages=messages,
                        temperature=0,
                        max_tokens=50
                        )

                    # Print the response text
                    output = response.choices[0].message.content
                    tts(output)
                    print('Here is my answer:', output)

                    # Append to the list of messages to continue the chat
                    messages.append({"role": "assistant", "content": output})
                    break
                
                except sr.UnknownValueError:
                    # If speech recognition fails, prompt the user to repeat their question
                    tts("Sorry, I didn't understand. I will ask you again:")
                    print("Sorry, I didn't understand. I will ask you again:")
    
                except:
                    sys.exit()

    #Maximum tokens achieved in OpenAI
    except openai.error.InvalidRequestError:
        print("Error: Message length exceeds maximum context length")
        sys.exit()
    
    except:
        sys.exit()

Se o usuário disser “pare”, a conversa é encerrada e o programa é encerrado. Se ocorrer um erro, o programa sai com uma mensagem de erro. Além disso, uma mensagem de erro é impressa se o número máximo de tokens for excedido na API OpenAI e o programa for encerrado.

Por fim, vale ressaltar que a função tts() utilizada no código acima é baseada na biblioteca gTTS (Google Text-to-Speech), com o objetivo de converter o texto dado em fala. Possui um único parâmetro text, que é o texto que precisa ser convertido em fala. Portanto, é importante adicionar esta função logo após importar as bibliotecas no início. Caso contrário, o código não funcionará.

#Function text-to-speech
def tts(text):
    # Create a gTTS object with the given text and language
    tts = gTTS(text=text, lang='en')

    # Save the audio file
    tts.save('output.mp3')

    # Play the audio file using the playsound library
    playsound('output.mp3')

    # Remove the audio file
    os.remove('output.mp3')

python <name of the archive.py>

Por fim, é importante lembrar que, à medida que continuamos a integrar a IA em nossas vidas diárias, é essencial considerarmos as implicações éticas dessas tecnologias. Como desenvolvedores, somos responsáveis ​​por priorizar a transparência, responsabilidade e justiça em nossos projetos, especialmente ao criar sistemas baseados em IA que podem impactar indivíduos e comunidades. Ao priorizar esses valores, podemos ajudar a garantir que as tecnologias de IA sirvam a sociedade de forma positiva e igualitária. Então, vamos trabalhar juntos para construir um futuro onde a IA seja usada de forma ética e responsável.

Qualquer dúvida sobre o código, por favor, pergunte nos comentários. Todos os códigos estão disponíveis no meu GitHub .