Les applications Nano sont de minuscules applications qui peuvent être intégrées dans des nano bots. Tout comme les humains peuvent amplifier leurs capacités avec un accès à des outils tels qu'une clé, une calculatrice, un lecteur d'écran ou un accès Internet, un nano bot peut améliorer ses capacités lorsqu'il est équipé d'applications Nano.
Les applications Nano peuvent être écrites en Lua, au fenouil ou à Clojure. Ce référentiel spécifique a choisi d'utiliser Clojure pour ses applications Nano.
Installez et configurez Nano Bots CLI et Babashka, puis:
git clone https://github.com/gbaptista/nano-apps.git
cd nano-apps
bb tasks/generate-cartridge.clj cartridges/template.yml cartridge.yml
# Cartridge successfully generated at cartridge.yml
nb cartridge.yml - repl ?> What day of the week is it today?
date-and-time {}
{:date-time 2023-12-02T14:19:18-03:00, :timezone America/Sao_Paulo}
Today is Saturday.
?> |
Vous pouvez quitter le REP en tapant exit .
Fournit l'octave GNU pour les mathématiques arithmétiques et symboliques, y compris les opérations de base et les calculs complexes tels que les dérivés et les intégrales.
Installation de l'octave GNU:
sudo pacman -S octave # Arch / Manjaro
sudo apt-get install octave # Debian / Ubuntu / Raspberry Pi OS
sudo dnf install octave # Fedora / CentOS / RHEL Après l'installation, vous devez installer le package symbolic : pkg install -forge symbolic
octave GNU Octave, version 6.4.0
octave:1> pkg install -forge symbolic
For information about changes from previous versions of the symbolic package, run 'news symbolic'.
octave:2>
Exemples dérivés:
?> What is the derivative of the function f(x) = 3x^2 + 5x + 2 with respect to x?
advanced-calculator {"expression":"syms x; diff(3*x^2 + 5*x + 2)"}
Symbolic pkg v3.1.1: Python communication link active, SymPy v1.11.1.
ans = (sym) 6⋅x + 5
The derivative of the function f(x) = 3x^2 + 5x + 2 with respect to x is 6x + 5.
?> Find the derivative of the function g(x) = e^(2x) – cos(x) with respect to x.
advanced-calculator {"expression":"syms x; diff(exp(2*x) - cos(x))"}
Symbolic pkg v3.1.1: Python communication link active, SymPy v1.11.1.
ans = (sym)
2⋅x
2⋅ℯ + sin(x)
The derivative of the function g(x) = e^(2x) – cos(x) with respect to x is 2e^(2x) + sin(x).
?> |
Exemples intégraux:
?> What is the indefinite integral of the function f(x) = 1/(x^2 + 1) with respect to x?
advanced-calculator {"expression":"syms x; int(1/(x^2 + 1))"}
Symbolic pkg v3.1.1: Python communication link active, SymPy v1.11.1.
ans = (sym) atan(x)
The indefinite integral of the function f(x) = 1/(x^2 + 1) with respect to x is atan(x) + C,
where C is the constant of integration.
?> Calculate the definite integral of g(x) from x = 0 to x = pi of g(x) = sin^2(x).
advanced-calculator {"expression":"syms x; int(sin(x)^2, 0, pi)"}
Symbolic pkg v3.1.1: Python communication link active, SymPy v1.11.1.
ans = (sym)
π
─
2
The definite integral of g(x) = sin^2(x) from x = 0 to x = pi is pi/2.
?> |
Fournit un accès de base à l'horloge, permettant au nano bot d'accès à la date et à l'heure.
Exemples:
?> What time is it?
date-and-time {}
{:date-time 2023-12-02T12:22:01-03:00, :timezone America/Sao_Paulo}
The current time is 12:22:01 PM in the timezone America/Sao Paulo.
?> What day of the week is it today?
Today is Saturday.
?> |
Fournit PlayerCTL pour contrôler les lecteurs multimédias qui implémentent la spécification d'interface MPRIS D-BUS.
Installation de PlayerCTL:
sudo pacman -S playerctl # Arch / Manjaro
sudo apt-get install playerctl # Debian / Ubuntu / Raspberry Pi OS
sudo dnf install playerctl # Fedora / CentOS / RHELExemples:
?> which players do i have?
media-player-control {"command":"list"}
chromium.instance12231
plasma-browser-integration
You have two media players available for control:
1. Chromium, with an instance ID of 12231.
2. Plasma Browser Integration.
These players can be controlled with play, pause,
stop, and various other media control commands.
?> what's playing on plasma?
media-player-control {"command":"metadata","player":"plasma-browser-integration"}
plasma-browser-integration kde:mediaSrc blob:https://www.youtube.com/9c1414f1-5ae7-43d3-a7e2-45f519cdb0a9
plasma-browser-integration kde:pid 12231
plasma-browser-integration mpris:artUrl https://i.ytimg.com/vi/1JNmz17gnMw/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLDr0ppBmCZeRzvIfsuDAY7BxKYeBQ
plasma-browser-integration mpris:length 350041000
plasma-browser-integration mpris:trackid '/org/kde/plasma/browser_integration/1337'
plasma-browser-integration xesam:artist Polyphia
plasma-browser-integration xesam:title Polyphia - Ego Death feat. Steve Vai (Official Music Video)
plasma-browser-integration xesam:url https://www.youtube.com/watch?v=1JNmz17gnMw
Currently, on Plasma Browser Integration, the track
"Ego Death" by Polyphia featuring Steve Vai is playing.
This is the official music video on YouTube.
The artwork for the track is available as well, which
you would recognize from the video thumbnail on YouTube.
?> pause the song
media-player-control {"command":"pause","player":"plasma-browser-integration"}
The song has been paused on Plasma Browser Integration.
If you wish to resume playback, just let me know!
?> resume playing
media-player-control {"command":"play","player":"plasma-browser-integration"}
The song is now playing again on Plasma Browser Integration.
Enjoy the music!
?> go back to the beginning of the song
media-player-control {"command":"position","player":"plasma-browser-integration","option":"0"}
I've reset the song to the beginning for you.
?> turn up the volume to the maximum
media-player-control {"command":"volume","player":"plasma-browser-integration","option":"1.0"}
?> |
Il offre la capacité de générer des nombres aléatoires.
Exemples:
?> Choose a random number.
random-number {"from":1,"to":100}
53
The random number chosen is 53.
?> I would like a random number between 350 and 480.
random-number {"from":350,"to":480}
382
The random number chosen between 350 and 480 is 382.
?> |
☠️ AVERTISSEMENT: cette application Nano peut exécuter des opérations dangereuses et destructrices sur un système; Soyez prudent avec ça.
Fournit un moyen d'interagir avec le système informatique et les données en exécutant des commandes de shell, similaires à celles utilisées dans un terminal Linux. Il peut envoyer des commandes aux logiciels, extraire des informations et effectuer diverses actions.
Exemples:
?> How much space do I have on my disk?
sh {"command":["df","-h","--output=avail","/"]}
Avail
478G
You have 478 GB of available space on your disk.
?> How many cores does my CPU have?
sh {"command":["nproc"]}
8
Your CPU has 8 cores.
?> Am I connected to the Internet?
sh {"command":["ping","-c","1","8.8.8.8"]}
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=58 time=16.1 ms
--- 8.8.8.8 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 16.126/16.126/16.126/0.000 ms
Yes, you are connected to the Internet. I successfully pinged the
IP address 8.8.8.8 (Google's DNS server) and received a response.
?> |
Fournir GNU BC pour effectuer des calculs arithmétiques. Il peut gérer les opérations d'addition, de soustraction, de multiplication, de division et de module, ainsi que l'exponentiation et diverses fonctions, toutes avec une précision arbitraire.
Installation de GNU BC:
sudo pacman -S bc # Arch / Manjaro
sudo apt-get install bc # Debian / Ubuntu / Raspberry Pi OS
sudo dnf install bc # Fedora / CentOS / RHELExemples:
?> How much is 10 plus 15?
simple-calculator {"expression":"10+15"}
25
10 plus 15 equals 25.
?> What is the remainder when dividing 28 by 6?
simple-calculator {"expression":"28 % 6"}
4
The remainder when dividing 28 by 6 is 4.
?> Calculate if 3 is less than 4.
simple-calculator {"expression":"3<4"}
1
The calculation confirms that 3 is less than 4.
?> What is 3 divided by 2?
simple-calculator {"expression":"scale=1; 3/2"}
1.5
3 divided by 2 equals 1.5.
?> |
Fournit des prévisions météorologiques et des conditions de courant, y compris la température, la vitesse du vent et l'humidité, de Wttr.in. Il propose également des données astronomiques, telles que le Times of Sunrise et Sunset, et des détails sur la lune.
Exemples:
?> What's the current temperature in New York?
weather {"location":"New York"}
{:current_condition [{:FeelsLikeC 4, :windspeedMiles...
The current temperature in New York is 6°C (43°F).
?> Tell me about the moon in Cairo today.
weather {"location":"Cairo"}
{:current_condition [{:FeelsLikeC 25, :windspeedMiles...
In Cairo today, the moon is in a Waning Gibbous phase with 79% illumination.
Moonrise is at 9:30 PM and moonset is at 10:57 AM (local time).
?> Should I wear sunglasses or carry an umbrella in Rome today?
weather {"location":"Rome"}
{:current_condition [{:FeelsLikeC 12, :windspeedMiles...
You should wear sunglasses in Rome today, as the weather is partly cloudy with
a 0.0 mm precipitation forecast, indicating no need for an umbrella.
?> What's the likelihood of me seeing a rainbow this afternoon in Rio de Janeiro?
weather {"location":"Rio de Janeiro"}
{:current_condition [{:FeelsLikeC 29, :windspeedMiles...
The likelihood of seeing a rainbow this afternoon in Rio de Janeiro is
low as the weather is partly cloudy with no precipitation reported.
Rainbows typically require rain combined with sunshine.
?> Is it a good day for kite flying in Sydney based on wind conditions?
weather {"location":"Sydney"}
{:current_condition [{:FeelsLikeC 18, :windspeedMiles...
Yes, it's a good day for kite flying in Sydney.
The weather is clear with wind speeds of 9 km/h (6 miles per hour).
?> |
Copiez et collez simplement n'importe quel dossier à l'intérieur /apps qui ressemblent à ce que vous essayez de faire. La structure est:
app.clj : le code source de l'application Nano.specification.yml : la spécification de l'application Nano pour le nano bot.test.clj : tests pour l'application Nano.En plus:
README.md : un Readme pour les humains, non utilisé ailleurs, juste pour améliorer cette lecture.À partir d'un modèle de base, générez une cartouche avec toutes les applications Nano incluses:
bb tasks/generate-cartridge.clj [CARTRIDGE-TEMPLATE] [OUTPUT-FILE]
# If you don't want to include your private Nano Apps:
bb tasks/generate-cartridge.clj [CARTRIDGE-TEMPLATE] [OUTPUT-FILE] --no-private
bb tasks/generate-cartridge.clj cartridges/template.yml cartridge.yml
# => cartridge.yml
bb tasks/generate-cartridge.clj cartridges/template.yml cartridge.yml --no-private
# => cartridge.ymlAprès avoir généré une cartouche, étant donné que vous avez Nano Bots CLI, vous pouvez l'essayer immédiatement:
nb cartridge.yml - repl
?> what time is it?
date-and-time {}
{:date-time 2023-12-02T14:10:05Z, :timezone UTC}
The current time in UTC is 14:10:05 on December 2, 2023.
?> |
Vous pouvez quitter le REP en tapant exit .
Exécution de tous les tests:
bb tasks/run-tests.cljExécuter des tests individuels:
bb apps/simple-calculator/test.cljExécuter tous les tests, à l'exclusion des applications nano privées:
bb tasks/run-tests.clj --no-private Mettez à jour le fichier template.md puis:
bb tasks/generate-readme.clj Trick pour mettre à jour automatiquement le README.md lorsque template.md modifie:
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 -e create template.md apps/ * /README.md ; do bb tasks/generate-readme.clj ; doneTrick for Markdown Live Aperçu:
pip install -U markdown_live_preview
mlp README.md -p 8076bb tasks/cljfmt-fix.clj Vous pouvez créer des applications nano privées qui ne seront pas engagées dans le référentiel en utilisant l' user@app :
apps/your-name@your-app/app.clj
Il en va de même pour les modèles de cartouche privés:
cartridges/[email protected]
Vous pouvez exclure vos applications nano privées de la génération de cartouches avec:
bb tasks/generate-cartridge.clj cartridges/template.yml cartridge.yml --no-privateExécuter tous les tests, à l'exclusion des applications nano privées:
bb tasks/run-tests.clj --no-private Les applications Nano sont conçues dans le cadre de Nano Bots, il est donc important de vous familiariser avec les spécifications et les principes des Nano Bots: Nano Bots Spécification
Une application Nano est aussi bonne que la capacité du fournisseur d'IA à en tirer parti. Par conséquent, par principe de base, tout ce que vous avez appris sur l'ingénierie rapide doit être pris en compte et appliqué au développement d'applications Nano, en particulier lors de la rédaction de leurs spécifications:
Parfois, vous pouvez vous sentir comme, «c'est trop complexe» ou «il ne sera pas utile» ou «pourquoi utiliserait-il cela», etc. Vous pouvez être surpris par les façons créatives que les applications Nano sont utilisées par les modèles.
Pour un exemple concret, le contrôle du lecteur multimédia a des commandes que vous pensez peut-être ne vaut pas la peine de fournir. Mais, si vous passez du temps à jouer, vous aurez de nombreux moments "wow" sur la façon dont le modèle l'utilise pour réaliser ce que vous demandez.
Alors, donnez-lui de la place pour être créatif et explorez, ne vous retenez pas des fonctionnalités simplement parce que vous ne vous sentez pas sûr.
Bien que les LLM sont de plus en plus capables de gérer des quantités substantielles de données, nous devons considérer ce qui suit en ce qui concerne les jetons:
Évitez de fournir des sorties inutilement longues; Saisissez l'opportunité de rendre vos sorties concises. Soyez prudent lors de la création d'applications Nano qui interrogent les bases de données ou exécutent des commandes, car elles peuvent produire des sorties de longue durée inattendues.
Lorsque vous utilisez des applications Nano comme proxy pour le logiciel populaire, assurez-vous que la sortie est fidèle au logiciel réel. Les modèles raisonnent mieux lorsque la sortie est exactement ce qu'il attendrait du programme.
Exemple, si votre application Nano est un proxy pour le logiciel GNU Octave, la sortie attendue des opérations serait:
ans = 6
Il peut être tentant de le raccourcir pour retourner 6 au lieu d' ans = 6 . Ne fais pas ça; Gardez la sortie d'origine, car c'était ce que le modèle a appris à s'attendre lors de sa formation.
Gardez les erreurs concises (sorties concises) et utile (ingénierie rapide).
Lorsque vous utilisez des applications Nano comme proxy pour les logiciels populaires, hiérarchisez le partage de la sortie d'erreur d'origine du logiciel (Fidelity de sortie). Certains logiciels génèrent de longues traces de pile d'erreur. Dans ce scénario, il est préférable de fournir des messages courts personnalisés alternatifs ou de restreindre la taille de sortie sans sacrifier les détails nécessaires. Équilibrez la fidélité des sorties avec des sorties concises.
Returning () car la sortie d'une fonction peut faire demander aux modèles OpenAI de demander à nouveau que la fonction s'exécute, conduisant potentiellement à une boucle infinie.
Il s'agit d'un projet expérimental en phase de démarrage. Les applications Nano peuvent être dangereuses, alors soyez prudent avec ce que vous essayez de construire; Ils pourraient exécuter des actions destructrices sur votre ordinateur. Soyez également conscient de votre budget: assurez-vous de surveiller et de budgétiser le fournisseur que vous utilisez. Les applications Nano peuvent produire du contenu inattendu ou des boucles infinies / trop longues qui pourraient entraîner une montée en flèche de vos coûts.
Ce logiciel est distribué sous la licence du MIT, qui comprend un avertissement de garantie. En outre, les auteurs n'assument aucune responsabilité pour tout dommage ou coût qui peut résulter de l'utilisation de ce projet expérimental à un stade précoce. Utilisez des applications Nano à vos propres risques.