语音用户界面,使您能够与 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 的风险由您自行承担。