Os aplicativos de nano são pequenos aplicativos que podem ser incorporados em nano bots. Assim como os humanos podem ampliar seus recursos com acesso a ferramentas como uma chave inglesa, uma calculadora, um leitor de tela ou acesso à Internet, um Nano Bot pode aprimorar seus recursos quando equipado com nano aplicativos.
Os aplicativos de nano podem ser escritos em lua, erva -doce ou clojure. Este repositório específico optou por usar o clojure para seus aplicativos Nano.
Instale e configure o Nano Bots Cli e Babashka, então:
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.
?> |
Você pode sair do Repl digitando exit .
Fornece a oitava GNU para matemática aritmética e simbólica, incluindo operações básicas e cálculos complexos, como derivativos e integrais.
Instalando o GNU oitava:
sudo pacman -S octave # Arch / Manjaro
sudo apt-get install octave # Debian / Ubuntu / Raspberry Pi OS
sudo dnf install octave # Fedora / CentOS / RHEL Após a instalação, você precisa instalar o pacote 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>
Exemplos 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).
?> |
Exemplos integrais:
?> 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.
?> |
Fornece acesso básico ao relógio, permitindo que o Nano Bot acesse a data e a hora.
Exemplos:
?> 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.
?> |
Fornece playerctl para controlar players de mídia que implementam a especificação da interface MPRIS D-BUS.
Instalando o PlayerCtl:
sudo pacman -S playerctl # Arch / Manjaro
sudo apt-get install playerctl # Debian / Ubuntu / Raspberry Pi OS
sudo dnf install playerctl # Fedora / CentOS / RHELExemplos:
?> 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"}
?> |
Ele fornece a capacidade de gerar números aleatórios.
Exemplos:
?> 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.
?> |
☠️ Aviso: este aplicativo Nano pode executar operações perigosas e destrutivas em um sistema; Tenha cuidado com isso.
Fornece um meio de interagir com o sistema de computador e os dados executando os comandos do shell, semelhantes aos usados em um terminal Linux. Ele pode enviar comandos para software, extrair informações e executar várias ações.
Exemplos:
?> 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.
?> |
Forneça GNU BC para realizar cálculos aritméticos. Pode lidar com operações de adição, subtração, multiplicação, divisão e módulo, bem como exponenciação e várias funções, todas com precisão arbitrária.
Instalando o GNU BC:
sudo pacman -S bc # Arch / Manjaro
sudo apt-get install bc # Debian / Ubuntu / Raspberry Pi OS
sudo dnf install bc # Fedora / CentOS / RHELExemplos:
?> 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.
?> |
Fornece previsões meteorológicas e condições atuais, incluindo temperatura, velocidade do vento e umidade, do wttr.in. Também oferece dados astronômicos, como os tempos do nascer e do pôr do sol, e detalhes sobre a lua.
Exemplos:
?> 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).
?> |
Basta copiar e colar qualquer pasta dentro /apps que se assemelhem ao que você está tentando fazer. A estrutura é:
app.clj : o código -fonte do Nano App.specification.yml : A especificação do Nano App para o Nano Bot.test.clj : testes para o aplicativo Nano.Adicionalmente:
README.md : Um ReadMe para humanos, não usado em outros lugares, apenas para aprimorar este ReadMe.De um modelo base, gerar um cartucho com todos os aplicativos de nano incluídos:
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.ymlDepois de gerar um cartucho, considerando que você tem Nano Bots CLI, você pode experimentá -lo imediatamente:
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.
?> |
Você pode sair do Repl digitando exit .
Executando todos os testes:
bb tasks/run-tests.cljExecutando testes individuais:
bb apps/simple-calculator/test.cljExecutando todos os testes, excluindo aplicativos privados de nano:
bb tasks/run-tests.clj --no-private Atualize o arquivo template.md e depois:
bb tasks/generate-readme.clj Truque para atualizar automaticamente o README.md quando template.md muda:
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 para Markdown Live Preview:
pip install -U markdown_live_preview
mlp README.md -p 8076bb tasks/cljfmt-fix.clj Você pode criar aplicativos nano privados que não estarão comprometidos com o repositório usando o user@app :
apps/your-name@your-app/app.clj
O mesmo se aplica a modelos de cartucho privado:
cartridges/[email protected]
Você pode excluir seus aplicativos de nano particular da geração de cartucho com:
bb tasks/generate-cartridge.clj cartridges/template.yml cartridge.yml --no-privateExecutando todos os testes, excluindo aplicativos privados de nano:
bb tasks/run-tests.clj --no-private Os aplicativos de nano são projetados como parte do Nano Bots, por isso é importante familiarizar -se com a especificação e os princípios dos nano -bots: especificação de nano bots
Um aplicativo Nano é tão bom quanto a capacidade do provedor de IA de alavancá -lo. Portanto, como princípio central, tudo o que você aprendeu sobre a engenharia imediata deve ser considerada e aplicada ao desenvolvimento de nano aplicativos, especialmente ao escrever suas especificações:
Às vezes, você pode sentir que, "isso é muito complexo" ou "não será útil" ou "Por que isso usaria isso" etc. Você pode se surpreender com as maneiras criativas das maneiras que os aplicativos de nano são usados pelos modelos.
Para um exemplo concreto, o controle do media player possui comandos que você acha que não vale a pena fornecer. Mas, se você gastar algum tempo brincando, terá muitos momentos "uau" sobre como o modelo o usa para alcançar o que está pedindo.
Portanto, dê espaço para ser criativo e explorar, não contenha a funcionalidade apenas porque você se sente inseguro.
Embora os LLMs estejam se tornando cada vez mais capazes de lidar com quantidades substanciais de dados, precisamos considerar o seguinte quando se trata de tokens:
Evite fornecer saídas desnecessariamente longas; Aproveite a oportunidade de tornar suas saídas concisas. Tenha cuidado ao criar nano aplicativos que consultam bancos de dados ou executam comandos, pois eles podem produzir saídas inesperadamente longas.
Ao usar o Nano Apps como proxy para o software popular, verifique se a saída é fiel ao software real. Os modelos raciocinam melhor quando a saída é exatamente o que esperaria do programa.
Por exemplo, se o seu aplicativo Nano for um proxy para o software GNU Octave, a saída esperada para operações seria:
ans = 6
Pode ser tentador reduzi -lo para retornar apenas 6 em vez de ans = 6 . Não faça isso; Mantenha a saída original, pois foi o que o modelo aprendeu a esperar durante seu treinamento.
Mantenha erros concisos (saídas concisas) e útil (engenharia imediata).
Ao usar o Nano Apps como proxy para o software popular, priorize o compartilhamento da saída de erro original do software (saída de saída). Algum software gera rastreamentos de pilha de erros longos. Nesse cenário, é melhor fornecer mensagens curtas personalizadas alternativas ou restringir o tamanho da saída sem sacrificar os detalhes necessários. Fidelidade de saída de equilíbrio com saídas concisas.
Retorning () como a saída de uma função pode fazer com que os modelos OpenAI solicitem que a função funcione novamente, levando potencialmente a um loop infinito.
Este é um projeto experimental e em estágio inicial. Os aplicativos de nano podem ser perigosos; portanto, tenha cuidado com o que você tenta construir; Eles poderiam executar ações destrutivas em seu computador. Além disso, lembre -se do seu orçamento: certifique -se de monitorar e orçar qualquer provedor que você esteja usando. Os aplicativos de nano podem produzir conteúdo inesperadamente demorado ou loops infinitos/muito longos que podem causar disparar seus custos.
Este software é distribuído sob a licença do MIT, que inclui um aviso de garantia. Além disso, os autores não assumem nenhuma responsabilidade por quaisquer danos ou custos que possam surgir do uso desse projeto experimental e em estágio inicial. Use nano aplicativos por sua conta e risco.