語音使用者介面,使您能夠與 Nano Bot 交談,旨在創建對話體驗。
它提供了傳統虛擬助理的現代替代方案。它是高度可自訂的,利用 Picovoice;功能強大,由 Nano Bots 支持,與 OpenAI ChatGPT 和 Google Gemini 等供應商相容;和hackable ,為可以用 Lua、Fennel 或 Clojure 編碼的 Nano Apps 提供支援。
點擊觀看影片
點擊觀看影片
如果您使用的是 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 Bot 與 OpenAI ChatGPT 結合使用,您需要一個 API 金鑰,您可以從 OpenAI 平台取得該金鑰。這是一項付費服務,根據消費情況向您收費。
如果您打算將 Nano Bot 與 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 CLI:
sudo gem install nano-bots
安裝 Ruby 相依性:
sudo bundle install
安裝Python相依性:
如果您使用的是 Raspberry Pi,請檢查其具體的附加說明。
pip install -r requirements.txt
首先透過 REPL 進行測試,確保您的 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 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
您還可以透過他們的平台建立自訂喚醒詞。
目前的 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
您可以使用三個受支援的文字轉語音提供者之一: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語音的定價不同。
谷歌提供了Polyglot Voices的預覽,它可以講多種語言。
Ion 操作基於事件流。要了解此流程以及所有相關事件,您可以檢查以下流程圖:
點擊看大圖
所有可能事件的可訪問描述:
監控引擎:
> 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
我們致力於讓 Ion 變得易於使用。如果您遇到任何可訪問性問題或有改進建議,請隨時填寫問題!
1.1.0
十多年來我一直在嘗試(但失敗了)建造這個,我們終於擁有了難題的所有核心部分,使其達到我設想的水平:
這六個要素使奇蹟發生,除此之外,一切都在於繼續改進底層技術並在此基礎上進行建構。第一章的謎題已經解決,儘管這可能只是我們對未來的初步了解,但我對其中的可能性感到興奮。
話雖這麼說,在我多年來的嘗試中,我要感謝三個主要項目,它們一路走來給了我對未來的希望:
這是一個實驗性的早期項目。 Ion 可能很危險,所以要小心你嘗試建造的東西;它可能會在您的電腦上執行破壞性操作。另外,請注意您的預算:確保您對您使用的任何提供者進行監控並制定預算。 Ion 可能會產生意外冗長的內容或無限/太長的循環,這可能會導致您的成本飆升。
該軟體根據 MIT 許可證分發,其中包含免責聲明。此外,作者對使用此實驗性早期項目可能產生的任何損害或費用不承擔任何責任。使用 Ion 的風險由您自行承擔。