Голосовой пользовательский интерфейс, который позволяет вам разговаривать с нано-ботом, стремясь создать диалог.
Он представляет собой современную альтернативу традиционным виртуальным помощникам. Он обладает широкими возможностями настройки и использует Picovoice; мощный , поддерживаемый Nano Bots, совместимый с такими поставщиками, как OpenAI ChatGPT и Google Gemini; и взломанный , предлагающий поддержку Nano Apps, которые можно закодировать на Lua, Fennel или Clojure.
нажмите, чтобы посмотреть видео
нажмите, чтобы посмотреть видео
Если вы используете Raspberry Pi, ознакомьтесь с дополнительными инструкциями.
git clone https://github.com/gbaptista/ion.git
cd ion
git clone https://github.com/gbaptista/ion-assets.git assets
cp .env.example .env # Fill the environment variables.
sudo pacman -S mpv # Arch / Manjaro
sudo apt-get install mpv # Debian / Ubuntu / Raspberry Pi OS
sudo dnf install mpv # Fedora / CentOS / RHEL
curl -s https://raw.githubusercontent.com/babashka/babashka/master/install | sudo bash
sudo pacman -S ruby # Arch / Manjaro
sudo apt-get install ruby-full # Debian / Ubuntu / Raspberry Pi OS
sudo dnf install ruby # Fedora / CentOS / RHEL
sudo gem install bundler
sudo gem install nano-bots
sudo bundle install
pip install -r requirements.txt
# https://github.com/icebaker/ruby-nano-bots#setup
# Nano Bots CLI need to be installed and configured:
nb static/cartridges/default.yml - repl
# ?> Hi!
#
# Hello! How can I assist you today?
#
# ?> exit
./ion.sh static/personas/default.yml
# > ? Monitor Engine started.
# > Welcome to Ion!
# > Listening and waiting for a wake word.
Помните, что некоторые приложения Nano могут иметь свои собственные зависимости, поэтому проверьте, установлены ли они у вас для правильной работы.
Чтобы использовать Nano Bots с OpenAI ChatGPT, вам понадобится ключ API, который вы можете получить на платформе OpenAI. Это платная услуга, за которую взимается плата в зависимости от потребления.
Если вы планируете использовать Nano Bots с Google Gemini, проверьте здесь, чтобы узнать, как получить свои учетные данные. Это тоже платная услуга.
Получите ключ доступа к Picovoice, зарегистрировавшись в консоли Picovoice. Это навсегда бесплатно для «индивидуалов, исследующих, экспериментирующих и оценивающих» и платное для других случаев использования.
Чтобы включить речевые и звуковые сигналы, вам необходимо иметь возможность воспроизводить аудиофайлы, для чего требуется установка mpv:
sudo pacman -S mpv # Arch / Manjaro
sudo apt-get install mpv # Debian / Ubuntu / Raspberry Pi OS
sudo dnf install mpv # Fedora / CentOS / RHEL
Клонируйте необходимые репозитории:
git clone https://github.com/gbaptista/ion.git
cd ion
git clone https://github.com/gbaptista/ion-assets.git assets
Получите необходимые ключи из раздела «Требования» и настройте свой .env
файл:
cp .env.example .env
Отредактируйте содержимое файла .env
, чтобы добавить свои ключи, пример:
PICOVOICE_ACCESS_KEY=your-key
OPENAI_API_ADDRESS=https://api.openai.com
OPENAI_API_KEY=your-access-token
NANO_BOTS_ENCRYPTION_PASSWORD=UNSAFE
NANO_BOTS_END_USER=your-user
Альтернативно вы можете экспортировать переменные среды в вашей системе:
export PICOVOICE_ACCESS_KEY=your-key
export OPENAI_API_ADDRESS=https://api.openai.com
export OPENAI_API_KEY=your-access-token
export NANO_BOTS_ENCRYPTION_PASSWORD=UNSAFE
export NANO_BOTS_END_USER=your-user
Установите Бабашку:
curl -s https://raw.githubusercontent.com/babashka/babashka/master/install | sudo bash
В вашей системе должны быть установлены Ruby 3 (с RubyGems) и Python 3 (с PyPI).
Установите Ruby и Bundler:
sudo pacman -S ruby # Arch / Manjaro
sudo apt-get install ruby-full # Debian / Ubuntu / Raspberry Pi OS
sudo dnf install ruby # Fedora / CentOS / RHEL
sudo gem install bundler
Установите и настройте интерфейс командной строки Nano Bots:
sudo gem install nano-bots
Установите зависимости Ruby:
sudo bundle install
Установите зависимости Python:
Если вы используете Raspberry Pi, ознакомьтесь с дополнительными инструкциями к нему.
pip install -r requirements.txt
Начните с проверки правильности работы вашего Nano Bot, протестировав его с помощью REPL:
nb static/cartridges/default.yml - repl
?> Hi!
Hello! How can I assist you today?
?> What time is it?
date-and-time {}
{:date-time 2023-12-08T07:42:54-03:00, :timezone America/Sao_Paulo}
Right now it's 7:42 a.m.
?> |
Вы можете выйти из REPL, набрав команду exit
.
Когда Nano Bots заработают правильно, запустите Ion:
./ion.sh static/personas/default.yml
Вы можете использовать слово пробуждения Jarvis
чтобы говорить и взаимодействовать:
> ? Monitor Engine started.
> Welcome to Ion!
> Listening and waiting for a wake word.
> ?️ Awake and recording your speech.
> ? Audio successfully recorded.
> ? Recorded audio temporarily saved to disk.
> ? Interaction Engine started.
> ✍️ Converting speech to text.
> Speech converted to text: What time is it?
> Nano Bot is executing a tool: date-and-time {}
> ? Nano Bot received a response from a tool: date-and-time {} {:date-time 2023-12-09T17...
> Nano Bot answer received: The current time is 17:34, or 5:34 PM.
> ? Starting to speak: The current time is 17:34, or 5:34 PM.
> Interaction completed.
> ?️ Recording a possible follow-up.
> ? Audio successfully recorded.
> ?️ No follow-up detected.
Помните, что некоторые приложения Nano могут иметь свои собственные зависимости, поэтому проверьте, установлены ли они у вас для правильной работы.
Файл YAML персонажа содержит удобочитаемые данные, которые определяют, как будет звучать голос, пользовательские конфигурации для поставщиков услуг, настройки голосового механизма, журналы, события и звуковые сигналы, а также путь к картриджу Nano Bot, который определяет ожидаемые цели. поведение, инструменты (функции) и настройки для аутентификации и использования провайдера.
Персона по умолчанию доступна по адресу static/personas/default.yml
. Не стесняйтесь изменять его или создавать новый.
Вы можете настроить параметры, чтобы обеспечить лучшее взаимодействие с вашим конкретным сценарием, настройкой, средой и оборудованием:
---
voice-engine :
settings :
maximum-recording-duration :
seconds : 30
duration-of-silence-to-stop-recording :
seconds : 2
minimum-recording-duration-to-be-a-valid-input :
seconds : 3
voice-probability-threshold : 0.5
Picovoice по умолчанию поддерживает следующие слова пробуждения:
alexa, americano, blueberry, bumblebee, computer,
grapefruit, grasshopper, hey barista, hey google,
hey siri, jarvis, ok google, pico clock, picovoice,
porcupine, smart mirror, snowboy, terminator, view glass
Вы можете использовать несколько слов для пробуждения, если хотите:
---
voice-engine :
provider :
settings :
porcupine :
keywords :
- jarvis
- alexa
sensitivities :
- 0.5
- 0.5
Вы также можете создать собственное слово пробуждения через их платформу.
Текущая поддержка преобразования речи в текст обеспечивается OpenAI Whisper:
---
speech-to-text :
provider :
id : openai
credentials :
address : ENV/OPENAI_API_ADDRESS
access-token : ENV/OPENAI_API_KEY
settings :
model : whisper-1
Позволяет системе выполнять преобразование текста в речь для частично полученного контента. Поскольку ответы генерируются посредством потоковой передачи, он пытается определить оптимальные точки, в которых у нас достаточно текста для создания речи, и постепенно создавать новые речи для воспроизведения. Это повышает скорость, поскольку нам не нужно ждать получения полного ответа от Nano Bot, прежде чем начинать процесс преобразования текста в речь.
---
text-to-speech :
settings :
fragment-speech : true
Вы можете использовать одного из трех поддерживаемых поставщиков преобразования текста в речь: OpenAI, AWS или Google.
---
text-to-speech :
provider :
id : openai
credentials :
address : ENV/OPENAI_API_ADDRESS
access-token : ENV/OPENAI_API_KEY
settings :
model : tts-1
voice : onyx
Примеры возможных голосов:
alloy, echo, fable, onyx, nova, shimmer
Для высококачественного звука вы можете использовать model: tts-1-hd
, хотя она медленнее и дороже.
Преобразование текста в речь OpenAI не зависит от языка; он может говорить на нескольких языках.
Проверьте все доступные голоса в официальной документации.
---
text-to-speech :
provider :
id : aws
credentials :
access-key : ENV/AWS_ACCESS_KEY
secret-key : ENV/AWS_SECRET_KEY
region : ENV/AWS_REGION
settings :
voice_id : Danielle
engine : neural
Примеры возможных бразильских португальских голосов:
Camila, Vitoria, Thiago
Примеры возможных голосов американского английского:
Danielle, Matthew, Gregory, Joanna, Kendra, Kimberly, Salli, Joey, Ruth, Stephen
Проверьте все доступные голоса в официальной документации.
Вам необходимо добавить свои учетные данные AWS в свою среду.
Обратите внимание, что голоса Polly предназначены для конкретных языков (например, pt-BR
, en-US
), и вам необходимо правильно сопоставить voice_id
с типом голосового engine
( neural
или standard
).
Помните о затратах, поскольку neural
и standard
голоса оцениваются по-разному.
---
text-to-speech :
provider :
id : google
credentials :
service : cloud-text-to-speech-api
file-path : ENV/GOOGLE_CREDENTIALS_FILE_PATH
settings :
name : pt-BR-Neural2-A
ssml_gender : FEMALE
language_code : pt-BR
Альтернативно, если вы используете учетные данные приложения по умолчанию , вы можете опустить file-path
:
---
text-to-speech :
provider :
id : google
credentials :
service : cloud-text-to-speech-api
settings :
name : pt-BR-Neural2-A
ssml_gender : FEMALE
language_code : pt-BR
Примеры возможных бразильских португальских голосов:
pt-BR | FEMALE:
pt-BR-Neural2-A, pt-BR-Neural2-C, pt-BR-Wavenet-A, pt-BR-Wavenet-C
pt-BR | MALE:
pt-BR-Neural2-B, pt-BR-Wavenet-B
Примеры возможных голосов американского английского:
en-US | FEMALE:
en-US-Neural2-C, en-US-Neural2-E, en-US-Neural2-F, en-US-Neural2-G, en-US-Neural2-H,
en-US-News-K, en-US-News-L, en-US-Studio-O, en-US-Wavenet-C, en-US-Wavenet-E,
en-US-Wavenet-F, en-US-Wavenet-G, en-US-Wavenet-H
en-US | MALE:
en-US-Neural2-A, en-US-Neural2-D, en-US-Neural2-I, en-US-Neural2-J, en-US-News-N,
en-US-Studio-Q, en-US-Wavenet-A, en-US-Wavenet-B, en-US-Wavenet-D, en-US-Wavenet-I,
en-US-Wavenet-J
Проверьте все доступные голоса в официальной документации.
Возможно, вам придется добавить путь к файлу google-credentials.json
в свою среду.
Обратите внимание, что голоса Google предназначены для определенных языков (например, pt-BR
, en-US
), и вам необходимо правильно сопоставить name
с ssml_gender
и language_code
.
Помните о затратах, поскольку голоса Neural , Studio и WaveNet оцениваются по-разному.
Google предлагает предварительную версию Polyglot Voices , которая может говорить на нескольких языках.
Работа иона основана на потоке событий. Чтобы понять этот процесс и все связанные с ним события, вы можете просмотреть следующую блок-схему:
нажмите, чтобы посмотреть в большем размере
Доступное описание всех возможных событий:
Механизм монитора:
> monitor-engine-started
> welcome-message-booted
> listening-and-waiting
> awake-and-recording
> recording-follow-up
> audio-recorded
> audio-discarded
> no-follow-up-received
> audio-stored
> interaction-interrupted
Механизм взаимодействия:
> interaction-engine-started
> speech-to-text-started
> speech-to-text-completed
> nano-bot-tool-confirming
> nano-bot-tool-executing
> nano-bot-tool-responding
> nano-bot-answer-received
> speaking-started
> interaction-completed
> interruption-requested
Другие события:
> error-raised
Каждое из 21 возможного отдельного события, которое может быть отправлено во время работы Ion, можно индивидуально настроить с помощью символов (смайликов Unicode), звуковых сигналов, громкости и сообщений.
Какие события должны иметь звуковые сигналы, на какой громкости и т. д. — это ваше личное решение, основанное на опыте, который вы пытаетесь создать для своего персонажа . Вот как вы можете настроить событие:
event :
listening-and-waiting :
symbol :
message : Listening and waiting for a wake word.
audio : assets/audio/clue.wav
volume : 1
В журналах Ion используются символы (смайлики Unicode) и сообщения. Настройки звука и громкости используются для воспроизведения аудиофайлов, которые могут быть в форматах WAV, OGG или MP3.
Вы можете настроить индивидуальную громкость для каждого события, чтобы нормализовать различные уровни звука. Рекомендуется не устанавливать громкость выше 1,0, так как это может привести к искажению звука на некоторых динамиках. В идеале установите максимальную громкость на уровне 1,0 или ниже и соответственно уменьшите остальные, чтобы сохранить баланс.
welcome-message-booted
можно использовать для воспроизведения приветственного сообщения с использованием преобразования текста в речь:
---
events :
welcome-message-booted :
symbol :
message : Welcome to Ion!
speak : true
volume : 1
Событие speaking-started
можно использовать для установки громкости звуковых сигналов преобразования текста в речь:
---
events :
speaking-started :
symbol : ?
message : ' Starting to speak: '
volume : 0.8
Ion хорошо работает с простыми наушниками и микрофоном. В открытых средах вы можете рассмотреть возможность приобретения динамиков, которые обеспечат желаемое качество звука, и, в частности, микрофон, подходящий для открытых пространств, например всенаправленный или предназначенный для конференц-залов.
Перед запуском pip install -r requirements.txt
вам необходимо создать виртуальную среду Python:
python3 -m venv env
source env/bin/activate
Проверьте Python на Raspberry Pi.
Чтобы отображать смайлы Unicode в консольных терминалах на Raspberry Pi, вам необходимо установить шрифт, поддерживающий смайлы Unicode:
sudo apt-get install fonts-noto-color-emoji
Вам необходимо перезагрузить Raspberry Pi, чтобы увидеть результаты.
Если вы подключаете динамик к компьютеру с помощью разъема, у вас могут возникнуть проблемы с бездействием звука, что может привести к слышимому «статическому шуму». В Linux вы можете исправить это:
/etc/modprobe.d/alsa-base.conf
options snd_hda_intel power_save=0 power_save_controller=N
/etc/pulse/daemon.conf
exit-idle-time = -1
Обновите файл template.md
, а затем:
bb tasks/generate-readme.clj
Трюк для автоматического обновления README.md
при изменении template.md
:
sudo pacman -S inotify-tools # Arch / Manjaro
sudo apt-get install inotify-tools # Debian / Ubuntu / Raspberry Pi OS
sudo dnf install inotify-tools # Fedora / CentOS / RHEL
while inotifywait -e modify template.md ; do bb tasks/generate-readme.clj ; done
Трюк для предварительного просмотра Markdown Live:
pip install -U markdown_live_preview
mlp README.md -p 8076
Мы стремимся сделать Ion доступным. Если у вас возникли какие-либо проблемы с доступностью или у вас есть рекомендации по улучшению, пожалуйста, оставьте заявку!
1.1.0
Я пытался (и безуспешно) построить это более десяти лет, и, наконец, у нас есть все основные части головоломки, чтобы сделать это возможным на том уровне, который я себе представлял:
Эти шесть ингредиентов делают волшебство возможным, и, помимо этого, все дело в дальнейшем совершенствовании базовой технологии и ее развитии. Загадка первой главы решена, и хотя это, вероятно, лишь проблеск того, что нас ждет в будущем, я в восторге от этих возможностей.
При этом за годы моих попыток я хочу отметить три основных проекта, которые вселили в меня надежду на будущее:
Это экспериментальный проект на ранней стадии. Ион может быть опасен, поэтому будьте осторожны с тем, что вы пытаетесь построить; он может выполнить разрушительные действия на вашем компьютере. Кроме того, помните о своем бюджете: убедитесь, что вы отслеживаете и составляете бюджет для любого поставщика, которого вы используете. Ion может создавать неожиданно длинный контент или бесконечные/слишком длинные циклы, что может привести к резкому увеличению ваших затрат.
Это программное обеспечение распространяется по лицензии MIT, которая включает отказ от гарантий. Кроме того, авторы не несут ответственности за любой ущерб или затраты, которые могут возникнуть в результате использования этого экспериментального проекта на ранней стадии. Используйте Ion на свой страх и риск.