

Gerador de infraestrutura de inteligência artificial como código.

aiac é uma ferramenta de biblioteca e linha de comando para gerar modelos de IAC (infraestrutura como código), configurações, serviços públicos, consultas e muito mais através de fornecedores de LLM como Openai, Amazon Bedrock e Ollama.
A CLI permite pedir a um modelo para gerar modelos para diferentes cenários (por exemplo, "Obtenha o Terraform para a AWS EC2"). Ele compõe uma solicitação apropriada ao provedor selecionado e armazena o código resultante em um arquivo e/ou imprime -o na saída padrão.
Os usuários podem definir vários "back -ends" direcionados a diferentes provedores e ambientes de LLM usando um arquivo de configuração simples.
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/executar aiac , pode ser necessário configurar seus provedores de LLM ou coletar algumas informações.
Para o OpenAI , você precisará de uma chave da API para que aiac funcione. Consulte o modelo de preços da OpenAI para obter mais informações. Se você não estiver usando a API hospedada pelo OpenAI (por exemplo, você pode estar usando o Azure OpenAI), também precisará fornecer o terminal API URL.
Para a Amazon Bedrock , você precisará de uma conta da AWS com rochas ativadas e acesso a modelos relevantes. Consulte a documentação do Bedrock para obter mais informações.
Para o Ollama , você só precisa do URL para o servidor API local da Ollama, incluindo o prefixo do caminho /API. Isso padrão é http: // localhost: 11434/api. Ollama não fornece um mecanismo de autenticação, mas pode -se estar em vigor no caso de um servidor proxy sendo usado. Atualmente, esse cenário não é apoiado pela aiac .
Via brew :
brew tap gofireflyio/aiac https://github.com/gofireflyio/aiac
brew install aiac
Usando docker :
docker pull ghcr.io/gofireflyio/aiac
Usando go install :
go install github.com/gofireflyio/aiac/v5@latest
Como alternativa, clone o repositório e construa a partir da fonte:
git clone https://github.com/gofireflyio/aiac.git
go build
aiac também está disponível no Arch Linux User Repository (AUR) como AIAC (que compila da fonte) e aiac-bin (que baixam um executável compilado).
aiac é configurado por meio de um arquivo de configuração do TOML. A menos que um caminho específico seja fornecido, aiac procura um arquivo de configuração no diretório XDG_CONFIG_HOME do usuário, especificamente ${XDG_CONFIG_HOME}/aiac/aiac.toml . Em sistemas operacionais do tipo UNIX, isso padrão é "~/.config/aiac/aiac.toml". Se você deseja usar um caminho diferente, forneça o sinalizador --config ou -c com o caminho do arquivo.
O arquivo de configuração define um ou mais back -ends nomeados. Cada back -end possui um tipo de identificação do provedor LLM (por exemplo, "OpenAI", "Bedrock", "Ollama") e várias configurações relevantes para esse provedor. Vários back -ends do mesmo provedor LLM podem ser configurados, por exemplo, para ambientes de "estadiamento" e "produção".
Aqui está um exemplo de arquivo de configuração:
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 ). Se não for fornecido, as chamadas que não definem um modelo falharão.auth_header . Isso padrão é "autorização", mas o Azure Openai usa "API-Key". Quando o cabeçalho é "autorização" ou "autorização de proxy", o valor do cabeçalho para solicitações será "portador API_KEY". Se for mais alguma coisa, será simplesmente "api_key".extra_headers . Depois que um arquivo de configuração é criado, você pode começar a gerar código e só precisará consultar o nome do back -end. Você pode usar aiac na linha de comando ou como uma biblioteca GO.
Antes de começar a gerar código, você pode listar todos os modelos disponíveis em um back -end:
aiac -b aws_prod --list-models
Isso retornará uma lista de todos os modelos disponíveis. Observe que, dependendo do provedor LLM, isso pode listar modelos que não são acessíveis ou ativados para a conta específica.
Por padrão, a AIAC imprime o código extraído para a saída padrão e abre um shell interativo que permite conversar com o modelo, repetir solicitações, salvar a saída em arquivos, copiar o código para a área de transferência e muito mais:
aiac terraform for AWS EC2
Isso usará o back -end padrão no arquivo de configuração e no modelo padrão para esse back -end, assumindo que eles sejam realmente definidos. Para usar um back -end específico, forneça o sinalizador --backend ou -b :
aiac -b aws_prod terraform for AWS EC2
Para usar um modelo específico, forneça o sinalizador --model ou -m :
aiac -m gpt-4-turbo terraform for AWS EC2
Você pode pedir aiac que salve o código resultante em um arquivo específico:
aiac terraform for eks --output-file=eks.tf
Você também pode usar um sinalizador para salvar a saída total do Markdown:
aiac terraform for eks --output-file=eks.tf --readme-file=eks.md
Se você preferir a AIAC para imprimir a saída completa da saída da saída padrão em vez do código extraído, use o sinalizador -f ou --full :
aiac terraform for eks -f
Você pode usar -q AIAC no --quiet não interativo, simplesmente imprimir o código gerado para saída padrão e, opcionalmente
aiac terraform for eks -q
No modo silencioso, você também pode enviar o código resultante para a área de transferência, fornecendo o sinalizador --clipboard :
aiac terraform for eks -q --clipboard
Observe que o AIAC não sairá neste caso até que o conteúdo da área de transferência mude. Isso se deve à mecânica da área de transferência.
Todas as mesmas instruções se aplicam, exceto que você executa uma imagem docker :
docker run
-it
-v ~/.config/aiac/aiac.toml:~/.config/aiac/aiac.toml
ghcr.io/gofireflyio/aiac terraform for ec2
Você pode usar aiac como uma 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" )
} A versão 5.0.0 introduziu uma alteração significativa na API aiac nos formulários de linha de comando e biblioteca, conforme feedback da comunidade.
Antes da V5, não havia conceito de arquivo de configuração ou back -ends nomeado. Os usuários tiveram que fornecer todas as informações necessárias para entrar em contato com um provedor LLM específico por meio de sinalizadores de linha de comando ou variáveis de ambiente, e a biblioteca permitiu criar um objeto "cliente" que só pudesse conversar com um provedor LLM.
Os back -ends agora estão configurados apenas através do arquivo de configuração. Consulte a seção de configuração para obter instruções. Sinalizadores específicos do fornecedor, como --api-key , --aws-profile , etc. (e suas respectivas variáveis de ambiente, se houver) não são mais aceitas.
Desde V5, os backnds também são nomeados. Anteriormente, os sinalizadores --backend e -b se referiam ao nome do provedor LLM (por exemplo, "Openai", "Bedrock", "Ollama"). Agora eles se referem a qualquer nome que você definiu no arquivo de configuração:
[ backends . my_local_llm ]
type = " ollama "
url = " http://localhost:11434/api " Aqui, configuramos um back -end de ollama chamado "my_local_llm". Quando você deseja gerar código com esse back -end, você usará -b my_local_llm em vez de -b ollama , pois vários backnds podem existir para o mesmo provedor LLM.
Antes da V5, a linha de comando foi dividida em três subcomandos: get , list-models e version . Devido a essa natureza hierárquica da CLI, as bandeiras podem não ter sido aceitas se fossem fornecidas no "local errado". Por exemplo, o sinalizador --model teve que ser fornecido após a palavra "Get", caso contrário, não seria aceito. Em V5, não há subcomando, portanto, a posição das bandeiras não importa mais.
O subcomando list-models é substituído pelo --list-models da lista, e o subcomando version é substituído pela bandeira --version .
Antes da V5:
aiac -b ollama list-models
Desde V5:
aiac -b my_local_llm --list-models
Nas versões anteriores, a palavra "Get" era na verdade um subcomando e não fazia parte do prompt enviado ao provedor LLM. Desde V5, não há subcomando "Get", portanto você não precisa mais adicionar essa palavra aos seus prompts.
Antes da V5:
aiac get terraform for S3 bucket
Desde V5:
aiac terraform for S3 bucket
Dito isto, adicionar a palavra "Get" ou "Gerate" não prejudicará, pois o V5 simplesmente a removerá se fornecido.
Antes da V5, os modelos para cada provedor LLM eram codificados em cada implementação de back -end e cada provedor tinha um modelo padrão codificado. Isso limitou significativamente a usabilidade do projeto e exigia que atualizassemos aiac sempre que novos modelos fossem adicionados ou depreciados. Por outro lado, poderíamos fornecer informações extras sobre cada modelo, como comprimentos e tipo de contexto, à medida que os extraímos manualmente da documentação do provedor.
Desde a V5, aiac não pode mais códigos de hectare, incluindo os padrão. Ele não tentará verificar o modelo que você selecionar realmente existe. O sinalizador --list-models agora entrará em contato diretamente com a API de back-end escolhida para obter uma lista de modelos suportados. Definir um modelo ao gerar código simplesmente envia seu nome para a API AS-IS. Além disso, em vez de codificar um modelo padrão para cada back -end, os usuários podem definir seus próprios modelos padrão no arquivo de configuração:
[ backends . my_local_llm ]
type = " ollama "
url = " http://localhost:11434/api "
default_model = " mistral:latest " Antes da V5, aiac apoiou os modelos de conclusão e os modelos de bate -papo. Desde V5, ele suporta apenas modelos de bate -papo. Como nenhuma das APIs do provedor de LLM realmente observa se um modelo é um modelo de conclusão ou um modelo de bate-papo (ou mesmo uma imagem ou modelo de vídeo), o sinalizador --list-models pode listar modelos que não são realmente utilizáveis e tentando usar Eles resultarão em um erro retornado da API do provedor. O motivo pelo qual decidimos descartar o suporte para os modelos de conclusão foi que eles exigem definir uma quantidade máxima de tokens para a API gerar (pelo menos no OpenAI), o que não podemos mais fazer sem saber o comprimento do contexto. Os modelos de bate -papo não são apenas muito mais úteis, mas não têm essa limitação.
A maioria das APIs do provedor de LLM, ao retornar uma resposta a um prompt, incluirá uma "razão" para o motivo pelo qual a resposta terminou onde chegou. Geralmente, a resposta deve terminar porque o modelo terminou de gerar uma resposta, mas às vezes a resposta pode ser truncada devido ao comprimento do contexto do modelo ou à utilização do token do usuário. Quando a resposta não "parou" porque terminou a geração, diz -se que a resposta é "truncada". Antes da V5, se a API retornaria que a resposta foi truncada, aiac retornou um erro. Como V5, um erro não é mais retornado, pois parece que alguns provedores não retornam um motivo de parada preciso. Em vez disso, a biblioteca retorna o motivo de parada como parte de sua saída para os usuários decidirem como proceder.
Prompt de linha de comando:
aiac dockerfile for nodejs with comments
Saída:
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" ]A maioria dos erros que você provavelmente encontrará vem da API do provedor LLM, por exemplo, Openai ou Amazon Bedrock. Alguns erros comuns que você pode encontrar são:
"[insuficiente_quota] Você excedeu sua cota atual, verifique seu plano e detalhes de cobrança": conforme descrito na seção de instruções, o OpenAI é uma API paga com uma certa quantia de créditos gratuitos fornecidos. Este erro significa que você superou sua cota, seja gratuita ou paga. Você precisará estar no topo para continuar o uso.
"[Tokens] Limite de taxa atingido ...": A API OpenAI emprega a limitação da taxa, conforme descrito aqui. aiac executa apenas solicitações individuais e não pode alternar ou impedir esses limites de taxa. Se você estiver usando aiac em programaticamente, terá que implementar a aprimoramento de si mesmo. Veja aqui para obter dicas.
Este código é publicado nos termos da licença Apache 2.0.