Une interface utilisateur vocale qui vous permet de parler avec un Nano Bot, dans le but de créer une expérience conversationnelle.
Il offre une alternative moderne aux assistants virtuels traditionnels. Il est hautement personnalisable , tirant parti de Picovoice ; puissant , soutenu par des Nano Bots, compatibles avec des fournisseurs tels que OpenAI ChatGPT et Google Gemini ; et piratable , offrant la prise en charge des applications Nano qui peuvent être codées en Lua, Fennel ou Clojure.
cliquez pour voir la vidéo
cliquez pour voir la vidéo
Si vous utilisez un Raspberry Pi, vérifiez ses instructions supplémentaires spécifiques.
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.
N'oubliez pas que certaines applications Nano peuvent avoir leurs propres dépendances, alors vérifiez si vous les avez installées pour fonctionner correctement.
Pour utiliser Nano Bots avec OpenAI ChatGPT, vous aurez besoin d'une clé API, que vous pouvez obtenir auprès de la plateforme OpenAI. Il s'agit d'un service payant pour lequel vous êtes facturé en fonction de votre consommation.
Si vous envisagez d'utiliser Nano Bots avec Google Gemini, cliquez ici pour savoir comment obtenir vos informations d'identification. C'est aussi un service payant.
Obtenez une clé d'accès pour Picovoice en vous inscrivant sur la console Picovoice. C'est Forever-Free pour "les personnes qui explorent, expérimentent et évaluent" , et il est payant pour d'autres cas d'utilisation.
Pour activer les signaux vocaux et sonores, vous devez être capable de lire des fichiers audio, ce qui nécessite l'installation 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
Clonez les référentiels nécessaires :
git clone https://github.com/gbaptista/ion.git
cd ion
git clone https://github.com/gbaptista/ion-assets.git assets
Obtenez les clés nécessaires dans la section Exigences et configurez votre fichier .env
:
cp .env.example .env
Modifiez le contenu du fichier .env
pour ajouter vos clés, exemple :
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
Alternativement, vous pouvez exporter les variables d'environnement sur votre système :
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
Installez Babashka :
curl -s https://raw.githubusercontent.com/babashka/babashka/master/install | sudo bash
Vous devez avoir Ruby 3 (avec RubyGems) et Python 3 (avec PyPI) installés sur votre système.
Installez Ruby et 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
Installez et configurez la CLI Nano Bots :
sudo gem install nano-bots
Installez les dépendances Ruby :
sudo bundle install
Installez les dépendances Python :
Si vous utilisez un Raspberry Pi, vérifiez ses instructions supplémentaires spécifiques.
pip install -r requirements.txt
Commencez par vous assurer que votre Nano Bot fonctionne correctement en le testant via le 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.
?> |
Vous pouvez quitter le REPL en tapant exit
.
Une fois les Nano Bots fonctionnant correctement, démarrez Ion :
./ion.sh static/personas/default.yml
Vous pouvez utiliser le mot d'éveil Jarvis
pour parler et interagir :
> ? 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.
N'oubliez pas que certaines applications Nano peuvent avoir leurs propres dépendances, alors vérifiez si vous les avez installées pour fonctionner correctement.
Un fichier personnel YAML contient des données lisibles par l'homme qui définissent le son de la voix, les configurations personnalisées pour les fournisseurs de services, les ajustements du moteur vocal, les journaux, les événements et les signaux audio, ainsi que le chemin d'accès à une cartouche Nano Bot qui définit les objectifs attendus. comportements, outils (fonctions) et paramètres d’authentification et d’utilisation du fournisseur.
Le personnage par défaut est disponible sur static/personas/default.yml
. N'hésitez pas à le modifier ou à en créer un nouveau.
Vous pouvez modifier les paramètres pour bénéficier d'une meilleure expérience en fonction de votre scénario, configuration, environnement et matériel spécifiques :
---
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, par défaut, prend en charge les mots d'activation suivants :
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
Vous pouvez utiliser plusieurs mots d'activation si vous le souhaitez :
---
voice-engine :
provider :
settings :
porcupine :
keywords :
- jarvis
- alexa
sensitivities :
- 0.5
- 0.5
Vous pouvez également créer un mot d'activation personnalisé via leur plateforme.
La prise en charge actuelle de Speech to Text est fournie par Whisper d'OpenAI :
---
speech-to-text :
provider :
id : openai
credentials :
address : ENV/OPENAI_API_ADDRESS
access-token : ENV/OPENAI_API_KEY
settings :
model : whisper-1
Permet au système d'effectuer une synthèse vocale sur un contenu partiellement reçu. Au fur et à mesure que les réponses sont générées via le streaming, il tente de déduire les points optimaux où nous avons suffisamment de texte pour créer un discours et de créer progressivement de nouveaux discours à jouer. Cela améliore la vitesse, car nous n'avons pas besoin d'attendre que la réponse complète de Nano Bot soit fournie avant de démarrer le processus de synthèse vocale.
---
text-to-speech :
settings :
fragment-speech : true
Vous pouvez utiliser l'un des trois fournisseurs de synthèse vocale pris en charge : OpenAI, AWS ou 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
Exemples de voix possibles :
alloy, echo, fable, onyx, nova, shimmer
Pour un son de haute qualité, vous pouvez utiliser model: tts-1-hd
, bien qu'il soit plus lent et plus cher.
La synthèse vocale d'OpenAI est indépendante de la langue ; il peut parler plusieurs langues.
Vérifiez toutes les voix disponibles dans la documentation officielle.
---
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
Exemples de voix possibles en portugais brésilien :
Camila, Vitoria, Thiago
Exemples de voix possibles en anglais américain :
Danielle, Matthew, Gregory, Joanna, Kendra, Kimberly, Salli, Joey, Ruth, Stephen
Vérifiez toutes les voix disponibles dans la documentation officielle.
Vous devez ajouter vos informations d'identification AWS à votre environnement.
Notez que les voix Polly sont conçues pour des langues spécifiques (par exemple, pt-BR
, en-US
), et vous devez faire correspondre correctement le voice_id
avec le type de engine
vocal ( neural
ou standard
).
Soyez conscient des coûts, car les voix neural
et standard
sont tarifées différemment.
---
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
Alternativement, si vous utilisez Application Default Credentials , vous pouvez omettre le 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
Exemples de voix possibles en portugais brésilien :
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
Exemples de voix possibles en anglais américain :
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
Vérifiez toutes les voix disponibles dans la documentation officielle.
Vous devrez peut-être ajouter le chemin d'accès à votre fichier google-credentials.json
à votre environnement.
Notez que les voix Google sont conçues pour des langues spécifiques (par exemple, pt-BR
, en-US
) et que vous devez faire correspondre correctement le name
avec ssml_gender
et language_code
.
Soyez conscient des coûts, car les voix Neural , Studio et WaveNet sont facturées différemment.
Google propose un aperçu de Polyglot Voices , qui peut parler plusieurs langues.
Le fonctionnement des ions est basé sur un flux d’événements. Pour comprendre ce flux et tous les événements associés, vous pouvez consulter l'organigramme suivant :
cliquez pour voir en plus grand
Description accessible de tous les événements possibles :
Moteur de surveillance :
> 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
Moteur d'interaction :
> 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
Autres événements :
> error-raised
Chacun des 21 événements distincts possibles qui peuvent être envoyés pendant le fonctionnement d'Ion peut être personnalisable individuellement avec des symboles (emojis Unicode), des signaux audio, du volume et des messages.
Quels événements doivent avoir des signaux audio, à quel volume, etc., seront une décision personnelle basée sur l'expérience que vous essayez de créer pour votre personnage . Voici comment personnaliser un événement :
event :
listening-and-waiting :
symbol :
message : Listening and waiting for a wake word.
audio : assets/audio/clue.wav
volume : 1
Des symboles (emojis Unicode) et des messages sont utilisés dans les journaux d'Ion. Les paramètres audio et de volume sont utilisés pour lire des fichiers audio, qui peuvent être aux formats WAV, OGG ou MP3.
Vous pouvez ajuster les volumes individuels pour chaque événement afin de normaliser les différents niveaux audio. Il est recommandé de ne pas avoir de volumes supérieurs à 1,0, car cela pourrait créer une distorsion du son sur certaines enceintes. Idéalement, réglez votre volume le plus élevé à 1,0 ou en dessous et réduisez les autres en conséquence pour maintenir l'équilibre.
Le welcome-message-booted
peut être utilisé pour lire un message de bienvenue en utilisant la synthèse vocale :
---
events :
welcome-message-booted :
symbol :
message : Welcome to Ion!
speak : true
volume : 1
L'événement speaking-started
peut être utilisé pour définir le volume des audios de réponse de synthèse vocale :
---
events :
speaking-started :
symbol : ?
message : ' Starting to speak: '
volume : 0.8
Ion fonctionne bien avec de simples écouteurs et un microphone. Pour les environnements ouverts, vous voudrez peut-être envisager d'investir dans des haut-parleurs qui offriront l'expérience audio que vous recherchez et, en particulier, un microphone adapté aux espaces ouverts, comme un microphone omnidirectionnel ou ceux conçus pour les salles de conférence.
Avant d'exécuter pip install -r requirements.txt
, vous devez créer un environnement virtuel Python :
python3 -m venv env
source env/bin/activate
Découvrez Python sur Raspberry Pi.
Pour afficher les emojis Unicode dans les terminaux de console sur un Raspberry Pi, vous devez installer une police prenant en charge les emojis Unicode :
sudo apt-get install fonts-noto-color-emoji
Vous devez redémarrer le Raspberry Pi pour voir les résultats.
Si vous connectez un haut-parleur à votre ordinateur à l'aide d'une prise jack, vous risquez de rencontrer des problèmes d'inactivité audio pouvant entraîner l'audition d'un « bruit statique ». Sous Linux, vous pouvez résoudre ce problème en :
/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
Mettez à jour le fichier template.md
puis :
bb tasks/generate-readme.clj
Astuce pour mettre à jour automatiquement le README.md
lorsque template.md
change :
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
Astuce pour l'aperçu en direct de Markdown :
pip install -U markdown_live_preview
mlp README.md -p 8076
Nous nous engageons à rendre Ion accessible. Si vous rencontrez des problèmes d'accessibilité ou avez des recommandations d'amélioration, n'hésitez pas à remplir un problème !
1.1.0
J'ai essayé (et échoué) de construire cela depuis plus d'une décennie, et nous avons enfin toutes les pièces essentielles du puzzle pour rendre cela possible au niveau que j'envisageais :
Ces six ingrédients font que la magie opère, et au-delà de ce point, il s’agit de continuer à améliorer la technologie sous-jacente et de s’appuyer sur elle. L'énigme du premier chapitre a été résolue, et même si ce n'est probablement qu'un premier aperçu de ce que l'avenir nous réserve, je suis enthousiasmé par les possibilités.
Cela étant dit, au fil des années de mes tentatives, je tiens à reconnaître trois projets principaux qui, tout au long de mon parcours, m'ont donné de l'espoir pour l'avenir :
Il s’agit d’un projet expérimental à un stade précoce. Ion peut être dangereux, alors soyez prudent avec ce que vous essayez de construire ; il pourrait exécuter des actions destructrices sur votre ordinateur. Soyez également attentif à votre budget : assurez-vous de surveiller et de budgétiser le fournisseur que vous utilisez. Ion peut produire un contenu d'une longueur inattendue ou des boucles infinies/trop longues qui pourraient faire monter en flèche vos coûts.
Ce logiciel est distribué sous la licence MIT, qui inclut une clause de non-responsabilité. De plus, les auteurs n'assument aucune responsabilité pour tout dommage ou coût pouvant découler de l'utilisation de ce projet expérimental à un stade précoce. Utilisez Ion à vos propres risques.