От «супермозга» до микрокомпьютера: может ли ChatGPT работать с чат-ботом Raspberry Pi Zero W?

May 03 2023
Создание чат-бота может быть захватывающим и полезным занятием, особенно когда вы можете увидеть, как он оживает на Raspberry Pi Zero W! В этом посте я расскажу, как создать чат-бота, используя языковую модель на основе GPT-3.5, ChatGPT, и запустить его на недорогом компьютере размером с кредитную карту.

Создание чат-бота может быть захватывающим и полезным занятием, особенно когда вы можете увидеть, как он оживает на 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 .