Do 'Super Cérebro' ao Microcomputador: o ChatGPT pode alimentar um Raspberry Pi Zero W Chatbot?
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 .