Голосовой чат GPT своими руками: пошаговое руководство для начинающих

Представьте: вы открываете Telegram, открываете бот и записывате голосовые сообщения, на которые получаете текстовые ответы из чата GPT. Этот чат-бот будет запоминать ваш разговор, пока вы не сбросите историю сообщений. В этой статье мы делимся подробным руководством по достижению удобного для пользователя опыта.

Использование голосового чата GPT выходит за рамки обычных разговоров. Это особенно полезно для таких задач, как написание статей или составление электронных писем, особенно при работе на неродном языке. Просто сформулируйте сообщение под диктовку, и с помощью нескольких итераций чат GPT поможет вам улучшить и уточнить текст для достижения идеального результата.

Шаг 1. Создайте бота Telegram и настройте Pipedream в качестве источника данных

Чтобы получать ответы от GPT-чата при отправке голосового сообщения в Telegram, нам нужно установить «мозг» для нашего Telegram-бота. Этот «мозг» должен быть способен обрабатывать сообщение, преобразовывать его в текст, отправлять его в чат GPT, включать историю наших разговоров и передавать ответ чата GPT. Pipedream, мощный инструмент для создания автоматизированных рабочих процессов, поможет нам в автоматизации.

Голосовой чат GPT своими руками: пошаговое руководство для начинающих

Наша первая задача — настроить новый источник данных под названием «Источник» в Pipedream. Этот источник будет запускать автоматизацию каждый раз, когда наш бот Telegram получает новое сообщение. Настроив этот источник в Pipedream, я заложил основу для плавной и удобной системы голосового общения в Telegram, используя расширенные возможности технологии чата GPT.

Шаг 2. Настройка рабочего процесса Pipedream для преобразования аудио в текст

На шаге 2 наша цель — автоматизировать преобразование голосовых сообщений в текст. Для этого я создал новый рабочий процесс в Pipedream, запускаемый ранее настроенным источником при получении нового сообщения.

Голосовой чат GPT своими руками: пошаговое руководство для начинающих
// stop_if_not_file_or_command export default defineComponent({ async run({ steps, $ }) { const message = steps.trigger.event.message; if (!message.voice || !message.voice.file_id) { return $.flow.exit("message.voice.file_id does not exist") } else if (typeof message.text === 'string' && message.text.length !== 0 && message.text[0] === "/") { return $.flow.exit("message.text is a comand") } }, })

Изначально нам нужно добавить небольшой фрагмент кода для приостановки триггера, когда он не нужен. Это гарантирует, что наша система работает эффективно и только тогда, когда это необходимо. Далее загружаем аудиофайл, отправленный в Telegram. Поскольку изначально у нас есть только идентификатор файла, нужно получить фактический файл, прежде чем продолжить.

Голосовой чат GPT своими руками: пошаговое руководство для начинающих
// download_the_file import fs from "fs"; import TelegramBot from "node-telegram-bot-api"; export default defineComponent({ props: { telegram_bot_api: { type: "app", app: "telegram_bot_api", } }, async run({ steps, $ }) { // replace the value below with the Telegram token you receive from @BotFather const token = this.telegram_bot_api.$auth.token; const fileId = steps.trigger.event.message.voice.file_id; const bot = new TelegramBot(token); // const stream = bot.getFileStream(fileId); // await fs.createWriteStream(`tmp/${fileId}`); const fileLocalPath = `/tmp/${fileId}.oga`; let fileWriter = fs.createWriteStream(fileLocalPath); //creating stream for writing to file // wrap to promise to use await as streams are not async/await based (they are based on events) const getReadStreamPromise = () => { return new Promise((resolve, reject) => { const stream = bot.getFileStream(fileId); //getting strean to file bytes stream.on('data', (chunk) => { console.log('getting data') fileWriter.write(chunk); //copying to our file chunk by chunk }) stream.on('error', (err) => { console.log('err') reject(err); }) stream.on('end', () => { console.log('end') fileWriter.end(); //Close the write stream once all data has been written resolve(); }) }) } console.log('Start file downloading and saving'); await getReadStreamPromise(); console.log('File saved'); return fileLocalPath }, })

Далее нам нужно преобразовать аудиофайл из формата OGA в MP3, поскольку служба транскрипции OpenAI не поддерживает файлы OGA. Когда файл MP3 готов, последним шагом в этом процессе является отправка преобразованного аудиофайла в OpenAI, который сгенерирует текстовую расшифровку аудиосообщения.

Голосовой чат GPT своими руками: пошаговое руководство для начинающих
// oga_to_mp3 import ffmpeg from "fluent-ffmpeg"; import ffmpegInstaller from "@ffmpeg-installer/ffmpeg"; export default defineComponent({ async run({ steps, $ }) { // Set up ffmpeg with the installed package ffmpeg.setFfmpegPath(ffmpegInstaller.path); const inputPath = steps.download_the_file.$return_value const outputPath = "/tmp/output.mp3"; // Convert the OGA file to MP3 using ffmpeg await new Promise((resolve, reject) => { ffmpeg(inputPath) .output(outputPath) .on("end", resolve) .on("error", reject) .run(); }); // Return the path to the saved MP3 file return outputPath; }, });

К концу шага 2 наш рабочий процесс Pipedream легко преобразует голосовое сообщение в текст, закладывая основу для дальнейшей интеграции чата GPT на последующих этапах.

Голосовой чат GPT своими руками: пошаговое руководство для начинающих

Шаг 3. Улучшение рабочего процесса для интеграции чата GPT и хранения данных

Голосовой чат GPT своими руками: пошаговое руководство для начинающих

Шаг 3 посвящен интеграции чата GPT в наш рабочий процесс и извлечению истории разговоров для генерации ответов. Начнем с доступа к нашей истории разговоров, хранящейся в хранилищах данных Pipedream, чтобы убедиться, что наш чат GPT имеет необходимый контекст для предоставления содержательных ответов.

Затем добавляем скрытую подсказку в наш диалог, чтобы улучшить ход разговора. Если разговор станет слишком длинным и превысит лимит памяти чата GPT, нам потребуется уменьшить количество сообщений, следующих за подсказкой, чтобы поддерживать оптимальную производительность.

Голосовой чат GPT своими руками: пошаговое руководство для начинающих
/ add_hidden_start_of_conversation const prompt = ( `Act as assistant Your name is Donna You are female You should be friendly You should not use official tone Your answers should be simple, and laconic but informative Before providing an answer check information above one more time Try to solve tasks step by step I will send you questions or topics to discuss and you will answer me `); export default defineComponent({ async run({ steps, $ }) { const messages = steps.get_history.$return_value; // Define new messages const newMessages = [ { role: 'user', content: prompt, }, ]; // Prepend new messages to the existing messages array return [...newMessages, ...messages]; }, })

Как только разговор правильно отформатирован, нужно отправить информацию в чат GPT, который генерирует ответ на основе ввода и истории беседы. Наконец, получаем ответ чата GPT и отправляем его обратно в Telegram, завершая бесшовную интеграцию голосового чата GPT.

Голосовой чат GPT своими руками: пошаговое руководство для начинающих
// decrease_history_tokens const maxCharsForDialog = 15000; const charsForDialog = (messages) => { let result_string = 0; for (let i = 0; i < messages.length; i++) { result_string += messages[i]["content"] + ' '; } return result_string.length; }; export default defineComponent({ async run({ steps, $ }) { const messages = steps.add_hidden_start_of_conversation.$return_value; let messagesLen = charsForDialog(messages); console.log("texts from raw messages length: ", messagesLen); while (messagesLen > maxCharsForDialog) { // Remove 1 message messages.splice(2, 1); messagesLen = charsForDialog(messages); } console.log("texts from cleaned messages length: ", charsForDialog(messages)); return messages; }, })

Этот шаг гарантирует, что наш чат GPT будет предоставлять релевантные и контекстно-подходящие ответы, улучшая общее взаимодействие с пользователем.

Голосовой чат GPT своими руками: пошаговое руководство для начинающих

Шаг 4: Сохранение новых сообщений в хранилищах данных Pipedream для будущих разговоров

На последнем этапе нашего рабочего процесса сосредоточимся на сохранении последних сообщений в истории разговоров. Для этого сохраняем как сообщение пользователя, так и ответ чата GPT.

Сначала я преобразую каждое сообщение в строку, используя специальные функции. Этот процесс гарантирует, что данные наших разговоров находятся в подходящем формате для хранения и использования в будущем.

Голосовой чат GPT своими руками: пошаговое руководство для начинающих
// user_message_to_str export default defineComponent({ async run({ steps, $ }) { return JSON.stringify(steps.create_transcription.$return_value.transcription) }, })

Затем добавляем преобразованные сообщения в соответствующую историю разговоров в хранилищах данных Pipedream. Так, вы позволяете чату GPT ссылаться на эти сообщения при создании новых ответов, что приводит к более точным ответам с точки зрения контекста.

После выполнения этих шагов наш голосовой рабочий процесс чата GPT теперь полностью функционален и готов к использованию.

Голосовой чат GPT своими руками: пошаговое руководство для начинающих
// assistant_message_to_str export default defineComponent({ async run({ steps, $ }) { return JSON.stringify(steps.chat.$return_value.generated_message.content) }, })

Шаг 5. Наслаждайтесь результатами голосового чата GPT

Итак, вы узнали, как создать эффективную интеграцию чата GPT с голосовым управлением в Telegram, используя Pipedream для автоматизации всего процесса. Этот мощный инструмент может помочь нам по-разному, от написания статей до составления электронных писем.

Примеры использования нашего голосового чата GPT в реальной жизни включают в себя написание статей и создание электронных писем с помощью итеративного процесса. Предоставляя первоначальный ввод, можно легко и эффективно создавать хорошо продуманные сообщения. Хотя попытки проведения стратегических маркетинговых сессий с использованием этого бота еще не дали значительных результатов, потенциал для простого голосового общения очевиден.

Я рекомендую вам настроить свой собственный голосовой чат GPT, используя это руководство. Если возникнут какие-то вопросы, пишите в комментариях.

55
Начать дискуссию