

Infraestructura de inteligencia artificial como generador de código.

aiac es una herramienta de biblioteca y línea de comandos para generar plantillas de IAC (infraestructura como código), configuraciones, utilidades, consultas y más a través de proveedores de LLM como OpenAi, Amazon Bedrock y Ollama.
La CLI le permite pedirle a un modelo que genere plantillas para diferentes escenarios (por ejemplo, "Obtenga Terraform para AWS EC2"). Compone una solicitud apropiada al proveedor seleccionado y almacena el código resultante en un archivo y/o la imprime en la salida estándar.
Los usuarios pueden definir múltiples "backends" dirigidos a diferentes proveedores y entornos de LLM utilizando un archivo de configuración simple.
aiac terraform for a highly available eksaiac pulumi golang for an s3 with sns notificationaiac cloudformation for a neptundbaiac dockerfile for a secured nginxaiac k8s manifest for a mongodb deploymentaiac jenkins pipeline for building nodejsaiac github action that plans and applies terraform and sends a slack notificationaiac opa policy that enforces readiness probe at k8s deploymentsaiac python code that scans all open ports in my networkaiac bash script that kills all active terminal sessionsaiac kubectl that gets ExternalIPs of all nodesaiac awscli that lists instances with public IP address and Nameaiac mongo query that aggregates all documents by created dateaiac elastic query that applies a condition on a value greater than some value in aggregationaiac sql query that counts the appearances of each row in one table in another table based on an id column Antes de instalar/ejecutar aiac , es posible que deba configurar sus proveedores de LLM o recopilar información.
Para OpenAI , necesitará una clave API para que aiac funcione. Consulte el modelo de precios de OpenAI para obtener más información. Si no está utilizando la API alojada por OpenAI (por ejemplo, puede estar usando Azure OpenAI), también deberá proporcionar el punto final de URL API.
Para Amazon Bedrock , necesitará una cuenta de AWS con Bedrock habilitado y el acceso a modelos relevantes. Consulte la documentación de Bedrock para obtener más información.
Para Ollama , solo necesita la URL al servidor API Ollama local, incluido el prefijo de ruta /API. Este valor predeterminado es http: // localhost: 11434/API. Ollama no proporciona un mecanismo de autenticación, pero uno puede estar en su lugar en el caso de que se utilice un servidor proxy. Este escenario no es compatible actualmente por aiac .
Via brew :
brew tap gofireflyio/aiac https://github.com/gofireflyio/aiac
brew install aiac
Usando docker :
docker pull ghcr.io/gofireflyio/aiac
Uso de go install :
go install github.com/gofireflyio/aiac/v5@latest
Alternativamente, clona el repositorio y construya desde la fuente:
git clone https://github.com/gofireflyio/aiac.git
go build
aiac también está disponible en el repositorio de usuarios de Arch Linux (AUR) como AIAC (que compila desde la fuente) y AIAC-bin (que descarga un ejecutable compilado).
aiac está configurado a través de un archivo de configuración TomL. A menos que se proporcione una ruta específica, aiac busca un archivo de configuración en el directorio xdg_config_home del usuario, específicamente ${XDG_CONFIG_HOME}/aiac/aiac.toml . En los sistemas operativos similares a UNIX, esto será predeterminado a "~/.config/aiac/aiac.toml". Si desea utilizar una ruta diferente, proporcione el indicador --config o -c con la ruta del archivo.
El archivo de configuración define uno o más backends con nombre. Cada backend tiene un tipo que identifica al proveedor de LLM (por ejemplo, "OpenAi", "Bedrock", "Ollama") y varias configuraciones relevantes para ese proveedor. Se pueden configurar múltiples backends del mismo proveedor de LLM, por ejemplo, para entornos de "puesta en escena" y "producción".
Aquí hay un archivo de configuración de ejemplo:
default_backend = " official_openai " # Default backend when one is not selected
[ backends . official_openai ]
type = " openai "
api_key = " API KEY "
# Or
# api_key = "$OPENAI_API_KEY"
default_model = " gpt-4o " # Default model to use for this backend
[ backends . azure_openai ]
type = " openai "
url = " https://tenant.openai.azure.com/openai/deployments/test "
api_key = " API KEY "
api_version = " 2023-05-15 " # Optional
auth_header = " api-key " # Default is "Authorization"
extra_headers = { X-Header-1 = " one " , X-Header-2 = " two " }
[ backends . aws_staging ]
type = " bedrock "
aws_profile = " staging "
aws_region = " eu-west-2 "
[ backends . aws_prod ]
type = " bedrock "
aws_profile = " production "
aws_region = " us-east-1 "
default_model = " amazon.titan-text-express-v1 "
[ backends . localhost ]
type = " ollama "
url = " http://localhost:11434/api " # This is the defaultNotas:
default_model ). Si no se proporciona, las llamadas que no definen un modelo fallarán.auth_header . Este valor predeterminado es "autorización", pero Azure OpenAi usa "API-Key" en su lugar. Cuando el encabezado es "autorización" o "autorización proxy", el valor del encabezado para las solicitudes será "portador API_KEY". Si es algo más, simplemente será "API_KEY".extra_headers . Una vez que se crea un archivo de configuración, puede comenzar a generar código y solo debe consultar el nombre del backend. Puede usar aiac desde la línea de comandos o como una biblioteca GO.
Antes de comenzar a generar código, puede enumerar todos los modelos disponibles en un backend:
aiac -b aws_prod --list-models
Esto devolverá una lista de todos los modelos disponibles. Tenga en cuenta que, dependiendo del proveedor de LLM, esto puede enumerar modelos que no son accesibles o habilitados para la cuenta específica.
De manera predeterminada, AIAC imprime el código extraído en la salida estándar y abre un shell interactivo que permite conversar con el modelo, volver a intentar las solicitudes, guardar la salida a los archivos, copiar el código en el portapapeles y más:
aiac terraform for AWS EC2
Esto utilizará el backend predeterminado en el archivo de configuración y el modelo predeterminado para ese backend, suponiendo que realmente estén definidos. Para usar un backend específico, proporcione la bandera --backend o -b :
aiac -b aws_prod terraform for AWS EC2
Para usar un modelo específico, proporcione la bandera --model o -m :
aiac -m gpt-4-turbo terraform for AWS EC2
Puede pedirle aiac que guarde el código resultante en un archivo específico:
aiac terraform for eks --output-file=eks.tf
Puede usar un indicador para guardar la salida completa de Markdown también:
aiac terraform for eks --output-file=eks.tf --readme-file=eks.md
Si prefiere que AIAC imprima la salida de Markdown completa en la salida estándar en lugar del código extraído, use el indicador -f o --full :
aiac terraform for eks -f
Puede usar AIAC en modo no interactivo, simplemente imprimir el código generado en la salida estándar y guardarlo opcionalmente en archivos con los indicadores anteriores, proporcionando el indicador -q o --quiet :
aiac terraform for eks -q
En modo tranquilo, también puede enviar el código resultante al portapapeles proporcionando el indicador --clipboard :
aiac terraform for eks -q --clipboard
Tenga en cuenta que AIAC no saldrá en este caso hasta que cambie el contenido del portapapeles. Esto se debe a la mecánica del portapapeles.
Se aplican las mismas instrucciones, excepto que ejecuta una imagen docker :
docker run
-it
-v ~/.config/aiac/aiac.toml:~/.config/aiac/aiac.toml
ghcr.io/gofireflyio/aiac terraform for ec2
Puedes usar aiac como una biblioteca GO:
package main
import (
"context"
"log"
"os"
"github.com/gofireflyio/aiac/v5/libaiac"
)
func main () {
aiac , err := libaiac . New () // Will load default configuration path.
// You can also do libaiac.New("/path/to/aiac.toml")
if err != nil {
log . Fatalf ( "Failed creating aiac object: %s" , err )
}
ctx := context . TODO ()
models , err := aiac . ListModels ( ctx , "backend name" )
if err != nil {
log . Fatalf ( "Failed listing models: %s" , err )
}
chat , err := aiac . Chat ( ctx , "backend name" , "model name" )
if err != nil {
log . Fatalf ( "Failed starting chat: %s" , err )
}
res , err = chat . Send ( ctx , "generate terraform for eks" )
res , err = chat . Send ( ctx , "region must be eu-central-1" )
} La versión 5.0.0 introdujo un cambio significativo en la API aiac tanto en la línea de comandos como en los formularios de la biblioteca, según los comentarios de la comunidad.
Antes de V5, no había concepto de un archivo de configuración o backends con nombre. Los usuarios tuvieron que proporcionar toda la información necesaria para contactar a un proveedor de LLM específico a través de banderas de línea de comandos o variables de entorno, y la biblioteca permitió crear un objeto "cliente" que solo podía hablar con un proveedor de LLM.
Los backends ahora se configuran solo a través del archivo de configuración. Consulte la sección de configuración para obtener instrucciones. Los indicadores específicos del proveedor como --api-key , --aws-profile , etc. (y sus respectivas variables de entorno, si las hay) ya no se aceptan.
Desde V5, también se nombran backends. Anteriormente, las banderas --backend y -b se referían al nombre del proveedor de LLM (por ejemplo, "OpenAi", "Bedrock", "Ollama"). Ahora se refieren a cualquier nombre que haya definido en el archivo de configuración:
[ backends . my_local_llm ]
type = " ollama "
url = " http://localhost:11434/api " Aquí configuramos un backend ollama llamado "my_local_llm". Cuando desee generar código con este backend, usará -b my_local_llm en lugar de -b ollama , ya que pueden existir múltiples backends para el mismo proveedor de LLM.
Antes de V5, la línea de comando se dividió en tres subcomandos: get , list-models y version . Debido a esta naturaleza jerárquica de la CLI, las banderas pueden no haber sido aceptadas si se proporcionaron en la "ubicación incorrecta". Por ejemplo, la bandera --model tenía que ser proporcionada después de la palabra "obtener", de lo contrario no sería aceptado. En V5, no hay subcomandos, por lo que la posición de las banderas ya no importa.
El subcomando list-models se reemplaza con la bandera --list-models , y el subcomando version se reemplaza con el flag --version .
Antes de V5:
aiac -b ollama list-models
Desde V5:
aiac -b my_local_llm --list-models
En versiones anteriores, la palabra "Get" era en realidad un subcomando y no realmente parte del aviso enviado al proveedor de LLM. Desde V5, no hay un subcomando de "obtener", por lo que ya no necesita agregar esta palabra a sus indicaciones.
Antes de V5:
aiac get terraform for S3 bucket
Desde V5:
aiac terraform for S3 bucket
Dicho esto, agregar la palabra "obtener" o "generar" no dolerá, ya que V5 simplemente la eliminará si se proporciona.
Antes de V5, los modelos para cada proveedor de LLM estaban codificados en cada implementación de backend, y cada proveedor tenía un modelo predeterminado codificado. Esto limitó significativamente la usabilidad del proyecto y nos exigió actualizar aiac cada vez que se agregaran o se desappre nuevos modelos. Por otro lado, podríamos proporcionar información adicional sobre cada modelo, como sus longitudes de contexto y tipo, como los extraíamos manualmente de la documentación del proveedor.
Desde V5, aiac ya no codifica los modelos, incluidos los predeterminados. No intentará verificar el modelo que seleccione realmente existe. La bandera --list-models ahora se pondrá en contacto directamente con la API de backend elegida para obtener una lista de modelos compatibles. Establecer un modelo al generar código simplemente envía su nombre al API As-IS. Además, en lugar de codificar un modelo predeterminado para cada backend, los usuarios pueden definir sus propios modelos predeterminados en el archivo de configuración:
[ backends . my_local_llm ]
type = " ollama "
url = " http://localhost:11434/api "
default_model = " mistral:latest " Antes de V5, aiac admitía tanto modelos de finalización como modelos de chat. Desde V5, solo admite modelos de chat. Dado que ninguna de las API del proveedor de LLM realmente nota si un modelo es un modelo de finalización o un modelo de chat (o incluso un modelo de imagen o video), la bandera --list-models puede enumerar modelos que realmente no se pueden usar e intentando usar ellos darán como resultado un error que se devuelva de la API del proveedor. La razón por la que hemos decidido dejar soporte para los modelos de finalización fue que requieren establecer una cantidad máxima de tokens para que la API genere (al menos en OpenAI), que ya no podemos hacer sin conocer la longitud del contexto. Los modelos de chat no solo son mucho más útiles, sino que no tienen esta limitación.
La mayoría de las API del proveedor de LLM, al devolver una respuesta a un aviso, incluirán una "razón" por la que la respuesta terminó donde lo hizo. En general, la respuesta debe terminar porque el modelo terminó de generar una respuesta, pero a veces la respuesta puede truncarse debido a la longitud del contexto del modelo o la utilización del token del usuario. Cuando la respuesta no "se detuvo" porque terminó la generación, se dice que la respuesta está "truncada". Antes de V5, si la API devolvía que la respuesta se truncara, aiac devolvió un error. Desde V5, ya no se devuelve un error, ya que parece que algunos proveedores no devuelven una razón de parada precisa. En cambio, la biblioteca devuelve la razón de parada como parte de su salida para que los usuarios decidan cómo proceder.
Solicitud de línea de comando:
aiac dockerfile for nodejs with comments
Producción:
FROM node:latest
# Create app directory
WORKDIR /usr/src/app
# Install app dependencies
# A wildcard is used to ensure both package.json AND package-lock.json are copied
# where available (npm@5+)
COPY package*.json ./
RUN npm install
# If you are building your code for production
# RUN npm ci --only=production
# Bundle app source
COPY . .
EXPOSE 8080
CMD [ "node" , "index.js" ]La mayoría de los errores que es probable que encuentre proviene de la API del proveedor de LLM, por ejemplo, OpenAi o Amazon Bedrock. Algunos errores comunes que pueden encontrar son:
"[Insuficiente_quota] Excendió su cuota actual, consulte su plan y detalles de facturación": Como se describe en la sección Instrucciones, OpenAI es una API pagada con una cierta cantidad de créditos gratuitos otorgados. Este error significa que ha excedido su cuota, ya sea gratuita o pagada. Deberá recargar para continuar el uso.
"El límite de tasa [tokens] alcanzado ...": La API de OpenAI emplea la limitación de la tasa como se describe aquí. aiac solo realiza solicitudes individuales y no puede solucionar ni evitar estos límites de tasa. Si está utilizando aiac en programación, tendrá que implementar estrangularse usted mismo. Vea aquí para obtener consejos.
Este código se publica bajo los términos de la licencia Apache 2.0.