Nano Bot と会話できる音声ユーザー インターフェイスで、会話体験の創出を目指しています。
従来の仮想アシスタントに代わる最新の代替手段を提供します。 Picovoice を活用して高度にカスタマイズ可能です。 OpenAI ChatGPT や Google Gemini などのプロバイダーと互換性のある Nano Bot によってサポートされる強力な機能。およびハッキング可能で、Lua、Fennel、または Clojure でコーディングできる Nano アプリのサポートを提供します。
クリックしてビデオを見る
クリックしてビデオを見る
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 アプリには独自の依存関係がある可能性があるため、適切に機能するためにインストールされているかどうかを確認してください。
OpenAI ChatGPT で Nano Bot を使用するには、OpenAI プラットフォームから取得できる API キーが必要です。使用量に応じて課金される有料サービスです。
Google Gemini で Nano Bot を使用する予定がある場合は、ここを確認して認証情報を取得する方法を確認してください。こちらも有料サービスです。
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
Babashka をインストールします。
curl -s https://raw.githubusercontent.com/babashka/babashka/master/install | sudo bash
Ruby 3 (RubyGems を含む) と Python 3 (PyPI を含む) がシステムにインストールされている必要があります。
Ruby とバンドラーをインストールします。
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 CLI をインストールしてセットアップします。
sudo gem install nano-bots
Ruby の依存関係をインストールします。
sudo bundle install
Python の依存関係をインストールします。
Raspberry Pi を実行している場合は、その固有の追加手順を確認してください。
pip install -r requirements.txt
まず、REPL を通じて Nano Bot をテストして、Nano Bot が正しく動作していることを確認します。
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.
?> |
exit
と入力すると、REPL を終了できます。
Nano Bot が適切に動作したら、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
プラットフォームを通じてカスタム ウェイク ワードを作成することもできます。
現在の Speech to Text サポートは、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
サポートされている 3 つの音声合成プロバイダー (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
あるいは、 Application Default Credentials を使用している場合は、 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
Ion の動作中に送信できる 21 の個別のイベントはそれぞれ、シンボル (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
Raspberry Pi での Python を確認してください。
Raspberry Pi のコンソール ターミナルに Unicode 絵文字を表示するには、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
template.md
が変更されたときにREADME.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 ライブ プレビューのコツ:
pip install -U markdown_live_preview
mlp README.md -p 8076
私たちはイオンを利用しやすいものにすることに全力で取り組んでいます。アクセシビリティの問題に直面している場合、または改善のための推奨事項がある場合は、お気軽に問題を記入してください。
1.1.0
私は 10 年以上これを構築しようと試み (そして失敗し) てきましたが、ついに、私が思い描いていたレベルでそれを可能にするパズルの核となるピースがすべて揃いました。
これら 6 つの要素が魔法を実現します。この時点以降は、基礎となるテクノロジーを継続的に改善し、その上に構築することがすべてです。第 1 章のパズルはすでに解決されており、これはおそらく今後の展開についてのほんの一端にすぎませんが、私はその可能性に興奮しています。
そうは言っても、長年にわたる私の試みの中で、私に将来への希望を与えてくれた 3 つの主要なプロジェクトを認めたいと思います。
これは実験的な初期段階のプロジェクトです。イオンは危険な可能性があるため、構築しようとするものには注意してください。コンピュータ上で破壊的なアクションを実行する可能性があります。また、予算にも注意してください。使用しているプロバイダーを監視し、予算を立ててください。 Ion は、予想外に長いコンテンツや無限/長すぎるループを生成する可能性があり、コストが高騰する可能性があります。
このソフトウェアは、保証の免責事項を含む MIT ライセンスに基づいて配布されます。さらに、著者は、この実験的な初期段階のプロジェクトの使用によって生じる可能性のある損害や費用については一切の責任を負いません。 Ion はご自身の責任でご使用ください。