Las aplicaciones nano son aplicaciones pequeñas que pueden integrarse en nano bots. Así como los humanos pueden amplificar sus capacidades con el acceso a herramientas como una llave llave, una calculadora, un lector de pantalla o acceso a Internet, un Nano Bot puede mejorar sus capacidades cuando está equipado con aplicaciones nano.
Las aplicaciones nano se pueden escribir en lua, hinojo o clojure. Este repositorio específico ha optado por usar Clojure para sus aplicaciones nano.
Instale y configure Nano Bots CLI y Babashka, luego:
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.
?> |
Puede salir del replica escribiendo exit .
Proporciona Octave GNU para matemáticas aritméticas y simbólicas, incluidas operaciones básicas y cálculos complejos, como derivados e integrales.
Instalación de la octava GNU:
sudo pacman -S octave # Arch / Manjaro
sudo apt-get install octave # Debian / Ubuntu / Raspberry Pi OS
sudo dnf install octave # Fedora / CentOS / RHEL Después de la instalación, debe instalar el paquete 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>
Ejemplos derivados:
?> 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).
?> |
Ejemplos integrales:
?> 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.
?> |
Proporciona acceso básico al reloj, lo que permite que el Nano Bot acceda a la fecha y la hora.
Ejemplos:
?> 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.
?> |
Proporciona PlayerCTL para controlar reproductores multimedia que implementan la especificación de la interfaz MPRIS D-BUS.
Instalación de PlayerCtl:
sudo pacman -S playerctl # Arch / Manjaro
sudo apt-get install playerctl # Debian / Ubuntu / Raspberry Pi OS
sudo dnf install playerctl # Fedora / CentOS / RHELEjemplos:
?> 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"}
?> |
Proporciona la capacidad de generar números aleatorios.
Ejemplos:
?> 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.
?> |
☠️ ADVERTENCIA: Esta aplicación Nano puede ejecutar operaciones peligrosas y destructivas en un sistema; Tenga cuidado con eso.
Proporciona un medio para interactuar con el sistema informático y los datos ejecutando comandos de shell, similares a los utilizados en un terminal de Linux. Puede enviar comandos al software, extraer información y realizar varias acciones.
Ejemplos:
?> 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.
?> |
Proporcione GNU BC para realizar cálculos aritméticos. Puede manejar operaciones de adición, resta, multiplicación, división y módulo, así como exponenciación y diversas funciones, todas con precisión arbitraria.
Instalación 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 / RHELEjemplos:
?> 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.
?> |
Proporciona pronósticos meteorológicos y condiciones actuales, incluida la temperatura, la velocidad del viento y la humedad, de WTTR.IN. También ofrece datos astronómicos, como los tiempos del amanecer y el atardecer, y los detalles sobre la luna.
Ejemplos:
?> 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).
?> |
Simplemente copie y pegue cualquier carpeta adentro /apps que se asemeja a lo que está tratando de hacer. La estructura es:
app.clj : el código fuente de la aplicación Nano.specification.yml : la especificación de la aplicación nano para el nano bot.test.clj : Pruebas para la aplicación Nano.Además:
README.md : un readMe para humanos, no usados en otro lugar, solo para mejorar este lectura.Desde una plantilla base, genere un cartucho con todas las aplicaciones nano incluidas:
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.ymlDespués de generar un cartucho, teniendo en cuenta que tiene Nano Bots CLI, puede probarlo de inmediato:
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.
?> |
Puede salir del replica escribiendo exit .
Ejecutando todas las pruebas:
bb tasks/run-tests.cljEjecución de pruebas individuales:
bb apps/simple-calculator/test.cljEjecutando todas las pruebas, excluyendo aplicaciones privadas de Nano:
bb tasks/run-tests.clj --no-private Actualice el archivo template.md y luego:
bb tasks/generate-readme.clj Truco para actualizar automáticamente el README.md cuando template.md cambia:
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 ; doneTruco para Markdown Live Vista previa:
pip install -U markdown_live_preview
mlp README.md -p 8076bb tasks/cljfmt-fix.clj Puede crear aplicaciones NANO privadas que no se comprometerán con el repositorio utilizando el patrón user@app :
apps/your-name@your-app/app.clj
Lo mismo se aplica a las plantillas de cartucho privado:
cartridges/[email protected]
Puede excluir sus aplicaciones privadas de Nano de la generación de cartuchos con:
bb tasks/generate-cartridge.clj cartridges/template.yml cartridge.yml --no-privateEjecutando todas las pruebas, excluyendo aplicaciones privadas de Nano:
bb tasks/run-tests.clj --no-private Las aplicaciones nano están diseñadas como parte de Nano Bots, por lo que es importante familiarizarse con las especificaciones y principios de los Nano Bots: especificación de Nano Bots
Una aplicación Nano es tan buena como la capacidad del proveedor de IA para aprovecharla. Por lo tanto, como principio central, todo lo que ha aprendido sobre ingeniería rápida debe considerarse y aplicarse al desarrollo de aplicaciones nano, especialmente cuando escribe sus especificaciones:
A veces puede sentir que "esto es demasiado complejo" o "no será útil" o "por qué usaría esto", etc., puede sorprenderse por las formas creativas en que los modelos utilizan las aplicaciones nano.
Para un ejemplo concreto, el control del reproductor multimedia tiene comandos que puede pensar que no vale la pena proporcionar. Pero, si pasas algún tiempo jugando, tendrás muchos momentos "wow" sobre cómo el modelo lo usa para lograr lo que estás pidiendo.
Por lo tanto, dale espacio para ser creativo y explorar, no te detengas la funcionalidad solo porque te sientes inseguro.
Aunque los LLM se están volviendo cada vez más capaces de manejar cantidades sustanciales de datos, debemos considerar lo siguiente cuando se trata de tokens:
Evite proporcionar salidas innecesariamente largas; Aproveche la oportunidad de hacer que sus resultados sean concisos. Tenga cuidado al construir aplicaciones nano que consulten bases de datos o ejecuten comandos, ya que pueden producir salidas inesperadamente largas.
Cuando use Nano Apps como un proxy para el software popular, asegúrese de que la salida sea fiel al software real. Los modelos razonan mejor cuando la salida es exactamente lo que esperaría del programa.
Ejemplo, si su aplicación Nano es un proxy para el software GNU Octave, la salida esperada para las operaciones sería:
ans = 6
Puede ser tentador acortarlo para devolver solo 6 en lugar de ans = 6 . No hagas eso; Mantenga la salida original, ya que era lo que el modelo aprendió a esperar durante su entrenamiento.
Mantenga los errores concisos (salidas concisas) y útiles (ingeniería rápida).
Cuando se use Nano Apps como un proxy para el software popular, priorice el intercambio de la salida de error original del software (Fidelity de salida). Algunos software genera largas trazas de pila de errores. En este escenario, es mejor proporcionar mensajes cortos personalizados alternativos o restringir el tamaño de salida sin sacrificar los detalles necesarios. Balance de la fidelidad de salida de salida con salidas concisas.
Devolver () ya que la salida de una función puede hacer que los modelos Operai soliciten que la función se ejecute nuevamente, lo que puede conducir a un bucle infinito.
Este es un proyecto experimental de etapa temprana. Las aplicaciones nano pueden ser peligrosas, así que tenga cuidado con lo que intenta construir; Podrían ejecutar acciones destructivas en su computadora. Además, tenga en cuenta su presupuesto: asegúrese de monitorear y presupuestar cualquier proveedor que esté utilizando. Las aplicaciones Nano pueden 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 un descargo 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 de etapa temprana. Use aplicaciones nano bajo su propio riesgo.