От «супермозга» до микрокомпьютера: может ли ChatGPT работать с чат-ботом Raspberry Pi Zero W?
Создание чат-бота может быть захватывающим и полезным занятием, особенно когда вы можете увидеть, как он оживает на Raspberry Pi Zero W! В этом посте я расскажу, как создать чат-бота, используя языковую модель на основе GPT-3.5, ChatGPT, и запустить его на недорогом компьютере размером с кредитную карту.
Raspberry Pi Zero W — идеальная платформа для создания чат-ботов, обеспечивающая маломощное, доступное и универсальное вычислительное решение. Кроме того, благодаря возможности подключения к сетям Wi-Fi Raspberry Pi Zero W также может выступать в качестве интеллектуального помощника, который может отвечать на вопросы, давать полезные советы и даже управлять устройствами домашней автоматизации.
ChatGPT — это современная модель обработки естественного языка, разработанная OpenAI, которая может генерировать человеческие ответы на широкий спектр запросов. Используя ChatGPT, мы можем обучить чат-бота понимать запросы пользователей и отвечать на них в диалоговом режиме, создавая ощущение, что вы разговариваете с реальным человеком. Вы можете увидеть чат-бота, который я создал в видео ниже:
Как правило, для создания рекомендуемого чат-бота нужно выполнить четыре шага:
1- Преобразование аудио в текст
2- Отправить преобразованный текст в API ChatGPT
3- Взять текст из ответа API ChatGPT
4- Преобразование текста в аудио
В этом посте я расскажу вам об этапах создания чат-бота с использованием ChatGPT на Raspberry Pi Zero W, от настройки оборудования до обучения и развертывания модели. Я также расскажу, как улучшить производительность вашего чат-бота и сделать его более чувствительным к пользовательскому вводу.
Важно заранее сказать, что идея поста не в том, чтобы подробно описать построенный код, а в том, чтобы дать общее представление о том, как настроить чат-бот на Raspberry Pi Zero W. Любые вопросы по коду, пожалуйста, задавайте в комментариях. Вы также можете получить доступ к полному коду на моем GitHub .
К концу этого поста у вас будет полнофункциональный чат-бот, который вы сможете использовать, чтобы произвести впечатление на своих друзей и семью и, возможно, даже решить некоторые реальные проблемы, например те, которые нам срочно нужно решить: названное изменение климата! Итак, приступим!
Что вам нужно:

- Одна USB/Bluetooth мышь/клавиатура
- Один кабель HDMI
- Адаптер 5В
- Экран
- Один Bluetooth/USB-динамик/микрофон
- Raspberry Pi Zero W с установленной ОС Raspberry Pi
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()
Если пользователь говорит «стоп», разговор завершается и программа закрывается. При возникновении ошибки программа завершает работу с сообщением об ошибке. Кроме того, сообщение об ошибке выводится, если превышено максимальное количество токенов в OpenAI API и программа завершает работу.
Наконец, стоит отметить, что функция tts(), используемая в приведенном выше коде, основана на библиотеке gTTS (Google Text-to-Speech), предназначенной для преобразования заданного текста в речь. Он имеет единственный параметр text, который представляет собой текст, который необходимо преобразовать в речь. Поэтому важно добавить эту функцию сразу после импорта библиотек в самом начале. В противном случае код не будет работать.
#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>
Наконец, важно помнить, что по мере того, как мы продолжаем интегрировать ИИ в нашу повседневную жизнь, важно учитывать этические последствия этих технологий. Как разработчики, мы несем ответственность за приоритетность прозрачности, подотчетности и справедливости в наших проектах, особенно при создании систем на основе ИИ, которые могут влиять на отдельных лиц и сообщества. Расставляя приоритеты в этих ценностях, мы можем гарантировать, что технологии искусственного интеллекта будут служить обществу позитивно и справедливо. Итак, давайте работать вместе, чтобы построить будущее, в котором ИИ будет использоваться этично и ответственно.
Любые вопросы по коду, пожалуйста, задавайте в комментариях. Все коды доступны на моем GitHub .