Houston é uma ferramenta simples de linha de comando baseada em GPT que permite gerar comandos ou scripts de shell, fornecendo instruções simples e naturais de linguagem.
Funciona no Linux, Mac e Windows. Você pode usá -lo para Bash, PowerShell, ZSH, Python ou qualquer outra shell ou linguagem de script.
cargo install --git https://github.com/npgrosser/Houston.git
O comando padrão para interagir com Houston é hu (abreviação de Houston). Você pode dar a Houston uma instrução em linguagem natural.
Por exemplo:
hu run ubuntu container with interactive bashhu find all pdf files in my home directoryhu delete unused docker images and networkshu tell me a dad jokePara usar o Houston, a variável de ambiente OpenAI_API_KEY deve ser definida como sua chave de API OpenAI. Você pode obter um em https://platform.openai.com. Se preferir, também pode especificar a chave no seu arquivo de configuração, consulte a seção de configuração para obter mais informações.
Houston não sabe nada sobre o seu sistema. Portanto, para dar a Houston a melhor chance de concluir as tarefas, você pode fornecer informações de contexto. Isso pode incluir detalhes sobre a árvore de arquivos, conteúdo de arquivos específicos, pacotes instalados, seu histórico de bash etc.
Para esse fim, existem alguns recursos que ajudam você a fazer isso.
Um arquivo de contexto é um arquivo com uma extensão '.ctxt' que contém uma lista de informações no idioma natural.
Você também pode adicionar informações geradas dinamicamente usando variáveis de comando .
As informações que você definem no arquivo ~/houston/default.ctxt são sempre fornecidas a Houston. Este é o arquivo de contexto que você usaria para informar a Houston sobre suas preferências e requisitos individuais. Por exemplo, qual gerente de pacotes você prefere, qual é o seu idioma favorito, o que você gosta que ele chama de você, etc.
O conteúdo de um arquivo de contexto deve ser escrito como uma lista de pontos de bala.
Exemplo:
- If I want you to install something, use brew if the package is avaiable there
- If the script gets more complex, use comments to explain what you are doing
- When printing to the console, use capital letters. I like it when you shout at me
Os arquivos de contexto nomeados são arquivos de contexto que você pode ativar com base em instrução. Eles são úteis para fornecer informações de contexto específicas para uma determinada tarefa. Como o arquivo de contexto padrão, eles estão localizados no diretório ~/houston . Você os habilita usando o sinalizador -c .
hu <instruction> -c <context-file-name>
Exemplo:
~/houston/bety-output.ctxt
- when printing to the terminal, use colored output and fancy ASCII art
Uso:
hu print hello world -c pretty-output
Por instrução, você pode ativar vários arquivos de contexto.
hu <instruction> -c <context-file-name-1> -c <context-file-name-2>
Exemplo:
hu tell me a joke -c pretty-output -c dark-humor
Os arquivos de contexto podem ser arquivos de texto sem formatação, mas também podem conter variáveis de comando . Você pode usá -los usando a sintaxe ${cmd} . Essas variáveis de comando são avaliadas em cada instrução e substituídas pela saída do comando.
Aqui está um exemplo de um arquivo de contexto usando variáveis de comando:
- The current working directory is ${pwd}.
- The current user is ${whoami}.
- The current time is ${date}.
Quando este modelo é processado, a saída resultante seria semelhante a isso:
- The current working directory is /home/user/my-name/houston.
- The current user is my-name.
- The current time is 2020-10-10 12:00:00.
Ao escrever seus próprios arquivos de contexto, lembre -se de que todos os dados serão enviados para o OpenAI. Portanto, você deve usar apenas comandos que não revelam informações confidenciais.
Ao usar um contexto nomeado através do sinalizador -c, você também pode passar argumentos. Por exemplo:
hu tell me a joke -c lang:german
Os argumentos são passados para o modelo, onde você pode acessá -lo como faria com qualquer script de shell normal. Exemplo:
~/houston/lang.ctxt:
- When printing to the terminal, always use the ${echo $1} language.
Lembre -se de que precisamos usar o comando Echo aqui, porque as variáveis de comando são substituídas pela saída do comando
Se você deseja passar vários argumentos, basta adicionar cotações em torno da especificação de contexto .
hu tell me a joke -c "langs:german english french"
Observe que o exemplo acima assume que o Bash é usado como shell para avaliar as variáveis de comando.
Ao usar um shell diferente, pode ser necessário usar uma sintaxe diferente para acessar os argumentos.
Por exemplo, no PowerShell, você usaria a variável $ args. Além disso, você não precisaria usar o comando echo.
- When printing to the terminal, always use the ${$args[0]} language.
Aqui estão mais alguns exemplos de arquivos de contexto nomeados para dar uma idéia de como eles podem ser usados.
Um arquivo de contexto que adiciona o status Git atual como informações de contexto.
- The current git status is:
```
${git status}
```
Um arquivo de contexto que adiciona o status atual do Docker como informações de contexto.
- The current docker status is:
```
${docker ps -a}
```
- The current docker images are:
```
${docker images}
```
Um arquivo de contexto que adiciona os últimos comandos n (padrão 10) do seu histórico de bash como informações de contexto.
- The last ${1:-10} commands I ran were:
```
${tail -n ${1:-10} ~/.bash_history | cut -d ';' -f 2-}
```
Um arquivo de contexto que adiciona as variáveis de ambiente atual como informações de contexto.
- The current environment variables are:
```
${env}
```
Um arquivo de contexto que adiciona a árvore de arquivos atual como informações de contexto.
- The current file tree is:
```
${tree -L ${1:-3}}
```
Se você quiser ver o que é realmente passado para a API, pode usar o sinalizador -v (verbose).
hu <instruction> -v
Isso é especialmente útil se você quiser ver como seus arquivos de contexto são avaliados.
Consulte o exemplo-config.yml para obter opções de configuração disponíveis. A configuração é criada automaticamente quando você executa hu pela primeira vez. Ele estará em $XDG_CONFIG_HOME/houston/config.yml ou ~/.config/houston/config.yml .