Una interfaz de usuario de voz que le permite hablar con un Nano Bot, con el objetivo de crear una experiencia conversacional.
Proporciona una alternativa moderna a los asistentes virtuales tradicionales. Es altamente personalizable y aprovecha Picovoice; potente , respaldado por Nano Bots, que son compatibles con proveedores como OpenAI ChatGPT y Google Gemini; y pirateable , que ofrece soporte para Nano Apps que se pueden codificar en Lua, Fennel o Clojure.
haz clic para ver el vídeo
haz clic para ver el vídeo
Si está ejecutando una Raspberry Pi, consulte sus instrucciones adicionales específicas.
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.
Recuerda que algunas Nano Apps pueden tener sus propias dependencias, así que verifica si las tienes instaladas para su correcto funcionamiento.
Para utilizar Nano Bots con OpenAI ChatGPT, necesitará una clave API, que puede obtener de la plataforma OpenAI. Es un servicio de pago por el que se cobra en función del consumo.
Si planea utilizar Nano Bots con Google Gemini, consulte aquí para saber cómo obtener sus credenciales. También es un servicio pago.
Obtenga una clave de acceso para Picovoice registrándose en la consola de Picovoice. Es siempre gratuito para "individuos que exploran, experimentan y evalúan" y es de pago para otros casos de uso.
Para habilitar las señales de voz y sonido, debe poder reproducir archivos de audio, lo que requiere la instalación de mpv:
sudo pacman -S mpv # Arch / Manjaro
sudo apt-get install mpv # Debian / Ubuntu / Raspberry Pi OS
sudo dnf install mpv # Fedora / CentOS / RHEL
Clona los repositorios necesarios:
git clone https://github.com/gbaptista/ion.git
cd ion
git clone https://github.com/gbaptista/ion-assets.git assets
Obtenga las claves necesarias en la sección Requisitos y configure su archivo .env
:
cp .env.example .env
Edite el contenido del archivo .env
para agregar sus claves, ejemplo:
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
Alternativamente, puede exportar las variables de entorno en su sistema:
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
Instalar Babashka:
curl -s https://raw.githubusercontent.com/babashka/babashka/master/install | sudo bash
Debe tener Ruby 3 (con RubyGems) y Python 3 (con PyPI) instalados en su sistema.
Instale Ruby y 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
Instale y configure la CLI de Nano Bots:
sudo gem install nano-bots
Instalar dependencias de Ruby:
sudo bundle install
Instale las dependencias de Python:
Si está ejecutando una Raspberry Pi, consulte sus instrucciones adicionales específicas.
pip install -r requirements.txt
Comience por asegurarse de que su Nano Bot esté funcionando correctamente probándolo a través del 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.
?> |
Puede salir de REPL escribiendo exit
.
Con Nano Bots funcionando correctamente, inicie Ion:
./ion.sh static/personas/default.yml
Puedes utilizar la palabra de activación Jarvis
para hablar e interactuar:
> ? 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.
Recuerda que algunas Nano Apps pueden tener sus propias dependencias, así que verifica si las tienes instaladas para su correcto funcionamiento.
Un archivo YAML de persona contiene datos legibles por humanos que definen cómo sonará la voz, configuraciones personalizadas para proveedores de servicios, ajustes del motor de voz, registros, eventos y señales de audio, así como la ruta para un cartucho Nano Bot que define los objetivos esperados. comportamientos, herramientas (funciones) y configuraciones para la autenticación y la utilización del proveedor.
La persona predeterminada está disponible en static/personas/default.yml
. No dudes en modificarlo o crear uno nuevo.
Puede modificar la configuración para tener una mejor experiencia para su escenario, configuración, entorno y hardware específicos:
---
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, de forma predeterminada, admite las siguientes palabras de activación:
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
Puede utilizar varias palabras de activación si lo desea:
---
voice-engine :
provider :
settings :
porcupine :
keywords :
- jarvis
- alexa
sensitivities :
- 0.5
- 0.5
También puedes crear una palabra de activación personalizada a través de su plataforma.
El soporte actual de voz a texto lo proporciona Whisper de OpenAI:
---
speech-to-text :
provider :
id : openai
credentials :
address : ENV/OPENAI_API_ADDRESS
access-token : ENV/OPENAI_API_KEY
settings :
model : whisper-1
Permite que el sistema realice conversión de texto a voz en contenido parcialmente recibido. A medida que se generan respuestas a través del streaming, se intenta inferir puntos óptimos en los que tenemos suficiente texto para crear discursos y crear gradualmente nuevos discursos para reproducir. Esto mejora la velocidad, ya que no necesitamos esperar a que Nano Bot proporcione la respuesta completa antes de iniciar el proceso de conversión de texto a voz.
---
text-to-speech :
settings :
fragment-speech : true
Puede utilizar uno de los tres proveedores de conversión de texto a voz compatibles: OpenAI, AWS o 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
Ejemplos de posibles voces:
alloy, echo, fable, onyx, nova, shimmer
Para audio de alta calidad, puede utilizar model: tts-1-hd
, aunque es más lento y más caro.
La conversión de texto a voz de OpenAI es independiente del idioma; puede hablar varios idiomas.
Consulta todas las voces disponibles en la documentación oficial.
---
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
Ejemplos de posibles voces portuguesas brasileñas:
Camila, Vitoria, Thiago
Ejemplos de posibles voces en inglés americano:
Danielle, Matthew, Gregory, Joanna, Kendra, Kimberly, Salli, Joey, Ruth, Stephen
Consulta todas las voces disponibles en la documentación oficial.
Debe agregar sus credenciales de AWS a su entorno.
Tenga en cuenta que las voces de Polly están diseñadas para idiomas específicos (p. ej., pt-BR
, en-US
) y debe hacer coincidir correctamente voice_id
con el tipo de engine
de voz ( neural
o standard
).
Tenga en cuenta los costos, ya que las voces neural
y standard
tienen precios diferentes.
---
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
Alternativamente, si está utilizando las Credenciales predeterminadas de la aplicación , puede omitir la 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
Ejemplos de posibles voces portuguesas brasileñas:
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
Ejemplos de posibles voces en inglés americano:
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
Consulta todas las voces disponibles en la documentación oficial.
Es posible que deba agregar la ruta a su archivo google-credentials.json
a su entorno.
Tenga en cuenta que las voces de Google están diseñadas para idiomas específicos (por ejemplo, pt-BR
, en-US
) y debe hacer coincidir correctamente el name
con ssml_gender
y language_code
.
Tenga en cuenta los costos, ya que las voces Neural , Studio y WaveNet tienen precios diferentes.
Google ofrece una vista previa de Polyglot Voices , que puede hablar varios idiomas.
El funcionamiento de los iones se basa en un flujo de eventos. Para comprender este flujo y todos los eventos asociados, puede inspeccionar el siguiente diagrama de flujo:
haga clic para ver en un tamaño más grande
Descripción accesible de todos los eventos posibles:
Monitorear el motor:
> 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
Motor de interacción:
> 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
Otros eventos:
> error-raised
Cada uno de los 21 posibles eventos distintos que se pueden enviar durante el funcionamiento de Ion se puede personalizar individualmente con símbolos (emojis Unicode), señales de audio, volumen y mensajes.
Qué eventos deben tener señales de audio, a qué volumen, etc., será una decisión personal basada en la experiencia que intentas crear para tu personaje . Así es como puedes personalizar un evento:
event :
listening-and-waiting :
symbol :
message : Listening and waiting for a wake word.
audio : assets/audio/clue.wav
volume : 1
En los registros de Ion se utilizan símbolos (emojis Unicode) y mensajes. La configuración de audio y volumen se utiliza para reproducir archivos de audio, que pueden estar en formatos WAV, OGG o MP3.
Puede ajustar los volúmenes individuales de cada evento para normalizar los distintos niveles de audio. La recomendación es no tener volúmenes superiores a 1.0, ya que esto puede crear distorsión en el audio en algunos parlantes. Lo ideal es establecer el volumen más alto en 1,0 o menos y reducir los demás en consecuencia para mantener el equilibrio.
El welcome-message-booted
se puede utilizar para reproducir un mensaje de bienvenida mediante texto a voz:
---
events :
welcome-message-booted :
symbol :
message : Welcome to Ion!
speak : true
volume : 1
El evento speaking-started
se puede utilizar para configurar el volumen de los audios de respuesta de texto a voz:
---
events :
speaking-started :
symbol : ?
message : ' Starting to speak: '
volume : 0.8
Ion funciona bien con auriculares sencillos y un micrófono. Para entornos abiertos, quizás quieras considerar invertir en parlantes que brinden la experiencia de audio que buscas y, específicamente, un micrófono apropiado para espacios abiertos, como uno omnidireccional o los diseñados para salas de conferencias.
Antes de ejecutar pip install -r requirements.txt
, debe crear un entorno virtual de Python:
python3 -m venv env
source env/bin/activate
Consulte Python en Raspberry Pi.
Para mostrar emojis Unicode en terminales de consola en una Raspberry Pi, debe instalar una fuente que admita emojis Unicode:
sudo apt-get install fonts-noto-color-emoji
Debe reiniciar la Raspberry Pi para ver los resultados.
Si conecta un altavoz a su computadora mediante un conector jack, es posible que experimente problemas con la inactividad del audio, lo que puede provocar que escuche "ruido estático". En Linux, puedes solucionar este problema de la siguiente manera:
/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
Actualice el archivo template.md
y luego:
bb tasks/generate-readme.clj
Truco para actualizar automáticamente README.md
cuando cambia 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
Truco para la vista previa en vivo de Markdown:
pip install -U markdown_live_preview
mlp README.md -p 8076
Estamos comprometidos a hacer que Ion sea accesible. Si tiene algún problema de accesibilidad o tiene recomendaciones para mejorar, ¡no dude en completar un problema!
1.1.0
He estado intentando (y fracasando) construir esto durante más de una década, y finalmente tenemos todas las piezas centrales del rompecabezas para hacerlo posible al nivel que imaginé:
Estos seis ingredientes hacen que la magia suceda y, más allá de este punto, se trata de seguir mejorando la tecnología subyacente y aprovecharla. El enigma del primer capítulo ha sido resuelto y, aunque probablemente esto sea sólo un vistazo temprano de lo que nos depara el futuro, estoy entusiasmado con las posibilidades.
Dicho esto, a lo largo de los años de mis intentos, quiero reconocer tres proyectos principales que a lo largo del camino me dieron esperanza para el futuro:
Este es un proyecto experimental en etapa inicial. Los iones pueden ser peligrosos, así que ten cuidado con lo que intentas construir; podría ejecutar acciones destructivas en su computadora. Además, tenga en cuenta su presupuesto: asegúrese de monitorear y presupuestar cualquier proveedor que esté utilizando. Ion puede producir contenido inesperadamente largo o bucles infinitos/demasiado largos que podrían hacer que sus costos se disparen.
Este software se distribuye bajo la licencia MIT, que incluye una exención de responsabilidad de garantía. Además, los autores no asumen ninguna responsabilidad por ningún daño o costo que pueda surgir del uso de este proyecto experimental en etapa inicial. Utilice Ion bajo su propia responsabilidad.