Houston es una herramienta simple de línea de comandos basada en GPT que le permite generar comandos o scripts de shell dando instrucciones simples de lenguaje natural.
Funciona en Linux, Mac y Windows. Puede usarlo para Bash, PowerShell, ZSH, Python o cualquier otro lenguaje o lenguaje de scripting.
cargo install --git https://github.com/npgrosser/Houston.git
El comando predeterminado para interactuar con Houston es hu (abreviatura de Houston). Puede darle a Houston una instrucción en lenguaje natural.
Por ejemplo:
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 Houston, la variable de entorno OpenAI_API_KEY debe establecerse en su tecla API OpenAI. Puede obtener uno en https://platform.openai.com. Si lo prefiere, también puede especificar la clave en su archivo de configuración, consulte la sección de configuración para obtener más información.
Houston no sabe nada sobre su sistema. Entonces, para darle a Houston la mejor oportunidad de completar tareas, puede proporcionar información de contexto. Esto puede incluir detalles sobre el árbol de archivos, el contenido de archivos específicos, paquetes instalados, su historial de bash, etc.
Para este propósito, hay algunas características que lo ayudan a hacer esto.
Un archivo de contexto es un archivo con una extensión '.ctxt' que contiene una lista de información en lenguaje natural.
También puede agregar información generada dinámicamente utilizando variables de comando .
La información que define en el archivo ~/Houston/Default.ctxt siempre se proporciona a Houston. Este es el archivo de contexto que usaría para informar a Houston sobre sus preferencias y requisitos individuales. Por ejemplo, qué administrador de paquetes prefiere, cuál es su idioma favorito, cómo le gusta que lo llame, etc.
El contenido de un archivo de contexto debe escribirse como una lista de puntos de bala.
Ejemplo:
- 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
Los archivos de contexto nombrados son archivos de contexto que puede habilitar por instrucción. Son útiles para proporcionar información de contexto que sea específica para una determinada tarea. Al igual que el archivo de contexto predeterminado, se encuentran en el directorio ~/Houston . Los habilita usando la bandera -c .
hu <instruction> -c <context-file-name>
Ejemplo:
~/Houston/Pretty-Output.ctxt
- when printing to the terminal, use colored output and fancy ASCII art
Uso:
hu print hello world -c pretty-output
Por instrucción puede habilitar múltiples archivos de contexto.
hu <instruction> -c <context-file-name-1> -c <context-file-name-2>
Ejemplo:
hu tell me a joke -c pretty-output -c dark-humor
Los archivos de contexto pueden ser archivos de texto sin formato, pero también pueden contener variables de comando . Puede usarlos usando la sintaxis ${cmd} . Estas variables de comando se evalúan en cada instrucción y se reemplazan con la salida del comando.
Aquí hay un ejemplo de un archivo de contexto utilizando variables de comando:
- The current working directory is ${pwd}.
- The current user is ${whoami}.
- The current time is ${date}.
Cuando se procesa esta plantilla, la salida resultante se vería similar a esto:
- 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.
Al escribir sus propios archivos de contexto, tenga en cuenta que todos los datos se enviarán a OpenAI. Por lo tanto, solo debe usar comandos que no revelen información confidencial.
Cuando usa un contexto con nombre a través del indicador -c, también puede aprobar argumentos. Por ejemplo:
hu tell me a joke -c lang:german
Los argumentos se pasan a la plantilla, donde puede acceder a ella como lo haría con cualquier script de shell normal. Ejemplo:
~/Houston/lang.ctxt:
- When printing to the terminal, always use the ${echo $1} language.
Tenga en cuenta que necesitamos usar el comando Echo aquí porque las variables de comando se reemplazan con la salida del comando
Si desea pasar múltiples argumentos, solo necesita asegurarse de agregar citas sobre la especificación de contexto .
hu tell me a joke -c "langs:german english french"
Tenga en cuenta que el ejemplo anterior supone que Bash se usa como el shell para evaluar las variables de comando.
Al usar un shell diferente, es posible que deba usar una sintaxis diferente para acceder a los argumentos.
Por ejemplo, en PowerShell, usaría la variable $ Args. Además, no necesitaría usar el comando Echo.
- When printing to the terminal, always use the ${$args[0]} language.
Aquí hay algunos ejemplos más de archivos de contexto con nombre para darle una idea de cómo se pueden usar.
Un archivo de contexto que agrega el estado Git actual como información de contexto.
- The current git status is:
```
${git status}
```
Un archivo de contexto que agrega el estado actual de Docker como información de contexto.
- The current docker status is:
```
${docker ps -a}
```
- The current docker images are:
```
${docker images}
```
Un archivo de contexto que agrega los últimos comandos de N (10) de su historial de bash como información de contexto.
- The last ${1:-10} commands I ran were:
```
${tail -n ${1:-10} ~/.bash_history | cut -d ';' -f 2-}
```
Un archivo de contexto que agrega las variables de entorno actual como información de contexto.
- The current environment variables are:
```
${env}
```
Un archivo de contexto que agrega el árbol de archivo actual como información de contexto.
- The current file tree is:
```
${tree -L ${1:-3}}
```
Si desea ver lo que realmente se pasa a la API, puede usar el indicador -v (detallado).
hu <instruction> -v
Esto es especialmente útil si desea ver cómo se evalúan sus archivos de contexto.
Consulte Ejemplo-Config.yml para ver las opciones de configuración disponibles. La configuración se crea automáticamente cuando ejecuta hu por primera vez. Estará en $XDG_CONFIG_HOME/houston/config.yml o ~/.config/houston/config.yml .