

人工智能基础架构 - 代码生成器。

aiac是通过LLM提供商,例如OpenAI,Amazon Bedrock和Ollama等LLM提供商生成IAC(基础架构)模板,配置,实用程序,查询等的库和命令行工具。
CLI允许您要求模型生成不同场景的模板(例如“为AWS EC2获取Terraform”)。它向选定的提供商编写了适当的请求,并将结果代码存储到文件中,并将其打印到标准输出中。
用户可以使用简单的配置文件定义针对不同的LLM提供程序和环境的多个“后端”。
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在安装/运行aiac之前,您可能需要配置LLM提供商或收集一些信息。
对于OpenAI ,您将需要一个API键才能使aiac工作。有关更多信息,请参阅OpenAI的定价模型。如果您不使用OpenAI托管的API(例如,您可能使用Azure OpenAI),则还需要提供API URL端点。
对于亚马逊基岩,您将需要一个启用基岩的AWS帐户,并需要使用相关型号。有关更多信息,请参阅基础文档。
对于Ollama ,您只需要到本地Ollama API服务器的URL,包括 /API PATH前缀。这默认为http:// localhost:11434/api。 Ollama不提供身份验证机制,但是在使用代理服务器的情况下可能会有一个。目前,这种情况尚未得到aiac的支持。
通过brew :
brew tap gofireflyio/aiac https://github.com/gofireflyio/aiac
brew install aiac
使用docker :
docker pull ghcr.io/gofireflyio/aiac
使用go install :
go install github.com/gofireflyio/aiac/v5@latest
或者,克隆存储库并从来源构建:
git clone https://github.com/gofireflyio/aiac.git
go build
aiac也可以在Arch Linux用户存储库(AUR)中作为AIAIA(从源中编译)和AIAIA-BIN(下载可执行文件)。
aiac通过TOML配置文件配置。除非提供特定的路径,否则aiac在用户的XDG_Config_home目录中寻找配置文件,特别是${XDG_CONFIG_HOME}/aiac/aiac.toml 。在类似于Unix的操作系统上,这将默认为“〜/.config/aiac/aiac.toml”。如果要使用其他路径,请在文件的路径上提供--config或-c标志。
配置文件定义一个或多个命名后端。每个后端都有一种识别LLM提供商(例如“ OpenAi”,“ Bedrock”,“ Ollama”)的类型,以及与该提供商相关的各种设置。可以配置同一LLM提供商的多个后端,例如用于“分期”和“生产”环境。
这是一个示例配置文件:
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 default笔记:
default_model )。如果未提供,未定义模型的呼叫将失败。auth_header设置来更改用于授权的标题。这默认为“授权”,但是Azure Openai使用“ API-KEY”。当标题是“授权”或“代理授权”时,请求的标题值将为“ bearer api_key”。如果其他任何东西,它将简单地为“ api_key”。extra_headers设置为AIAS发出的每个请求增加额外的标题。创建配置文件后,您可以开始生成代码,只需要参考后端的名称即可。您可以使用命令行中的aiac ,也可以用作GO库。
在开始生成代码之前,您可以列出后端中可用的所有模型:
aiac -b aws_prod --list-models
这将返回所有可用模型的列表。请注意,根据LLM提供商,这可能会列出无法访问或启用特定帐户的模型。
默认情况下,AIAC将提取的代码打印到标准输出中,并打开一个交互式外壳,允许与模型对话,重试请求,将输出保存到文件,将代码复制到剪贴板等等:
aiac terraform for AWS EC2
假设确实定义了该后端,则将使用配置文件中的默认后端和该后端的默认模型。要使用特定的后端,请提供--backend或-b标志:
aiac -b aws_prod terraform for AWS EC2
要使用特定模型,请提供--model或-m标志:
aiac -m gpt-4-turbo terraform for AWS EC2
您可以要求aiac将结果代码保存到特定文件:
aiac terraform for eks --output-file=eks.tf
您也可以使用标志来保存完整的Markdown输出:
aiac terraform for eks --output-file=eks.tf --readme-file=eks.md
如果您希望AIAC将完整的Markdown输出打印为标准输出而不是提取的代码,请使用-f或--full标志:
aiac terraform for eks -f
您可以在非交互模式下使用AIAC,只需通过提供-q或--quiet标志:
aiac terraform for eks -q
在安静模式下,您还可以通过提供--clipboard标志来将结果代码发送到剪贴板:
aiac terraform for eks -q --clipboard
请注意,在这种情况下,AIAC不会退出,直到剪贴板的内容更改。这是由于剪贴板的机制。
所有相同的说明都适用,除了您执行docker映像:
docker run
-it
-v ~/.config/aiac/aiac.toml:~/.config/aiac/aiac.toml
ghcr.io/gofireflyio/aiac terraform for ec2
您可以将aiac用作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" )
}版本5.0.0根据社区的反馈,在命令行和库表格中对aiac API进行了重大更改。
在V5之前,没有配置文件或命名后端的概念。用户必须提供通过命令线标志或环境变量与特定LLM提供商联系的所有必要信息,并且该库允许创建一个只能与一个LLM提供商交谈的“客户端”对象。
现在仅通过配置文件配置后端。有关说明,请参阅“配置”部分。提供者特定的标志,例如--api-key , --aws-profile等(及其各自的环境变量(如果有))不再接受。
自V5以来,还命名了后端。以前, --backend和-b标志提到了LLM提供商的名称(例如“ Openai”,“ Bedrock”,“ Ollama”)。现在,他们参考您在配置文件中定义的任何名称:
[ backends . my_local_llm ]
type = " ollama "
url = " http://localhost:11434/api "在这里,我们配置了一个名为“ my_local_llm”的Ollama后端。当您想使用此后端生成代码时,您将使用-b my_local_llm而不是-b ollama ,因为同一LLM提供商可能存在多个后端。
在V5之前,命令行分为三个子命令: get , list-models和version 。由于CLI的这种层次结构性质,如果在“错误的位置”中提供了标志,则可能不会接受旗帜。例如,必须在“ get”一词之后提供--model标志,否则就不会接受。在V5中,没有子命令,因此标志的位置不再重要。
list-models命令被替换为标志--list-models ,并且version子命令替换为flag --version 。
V5之前:
aiac -b ollama list-models
自V5以来:
aiac -b my_local_llm --list-models
在早期版本中,“ Get”一词实际上是一个子命令,也不是发送给LLM提供商提示的一部分。由于v5,因此没有“获取”子命令,因此您不再需要将此词添加到提示中。
V5之前:
aiac get terraform for S3 bucket
自V5以来:
aiac terraform for S3 bucket
也就是说,添加“ get”或“生成”一词不会受到伤害,因为V5只需将其删除即可。
在V5之前,每个LLM提供商的模型都在每个后端实现中进行了硬编码,并且每个提供商都有一个硬编码的默认模型。这大大限制了该项目的可用性,并要求我们在添加或弃用新模型时更新aiac 。另一方面,我们可以提供有关每个模型的额外信息,例如其上下文长度和类型,因为我们从提供商文档中手动提取它们。
自V5以来, aiac不再使用任何模型,包括默认模型。它不会尝试验证您选择的模型实际上存在。现在, --list-models标志将直接联系所选的后端API,以获取支持的模型列表。生成代码时设置模型只需将其名称发送到API AS-IS即可。另外,用户可以在配置文件中定义自己的默认模型,而不是为每个后端的默认模型进行硬编码:
[ backends . my_local_llm ]
type = " ollama "
url = " http://localhost:11434/api "
default_model = " mistral:latest "在V5之前, aiac支持完成模型和聊天模型。自V5以来,它仅支持聊天模型。由于没有LLM提供商API实际上注意到模型是完成模型还是聊天模型(甚至是图像或视频模型), --list-models标志可能会列出实际上不可用的模型,并尝试使用它们将导致从提供商API返回的错误。我们之所以决定放弃对完成模型的支持的原因是,他们需要为API设置最大量的令牌(至少在OpenAI中),而我们不再不知道上下文长度了。聊天模型不仅更有用,而且没有这种限制。
大多数LLM提供商API在返回提示的响应时,都将包括一个“原因”,以便为什么响应结束在哪里。通常,响应应该结束,因为模型完成了响应的完成,但是有时由于模型的上下文长度或用户的令牌利用率,响应可能会被截断。当响应没有“停止”,因为它结束了生成,响应被称为“截断”。在V5之前,如果API返回响应被截断, aiac返回了错误。由于V5,因此不再返回错误,因为某些提供商似乎没有返回准确的停止原因。相反,库将停止原因作为其输出的一部分返回,以供用户决定如何进行。
命令行提示符:
aiac dockerfile for nodejs with comments
输出:
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" ]您可能遇到的大多数错误来自LLM提供商API,例如OpenAI或Amazon Bedrock。您可能遇到的一些常见错误是:
“ [不足的_quota]您超过了当前的配额,请检查您的计划和计费详细信息”:如说明部分所述,OpenAI是付费API,并具有一定的免费信用额。此错误意味着您已超过配额,无论是免费的还是付费的。您将需要充值才能继续使用。
“达到[代币]速率限制...”:如下所述,OpenAI API采用速率限制。 aiac仅执行单个请求,无法解决或防止这些费率限制。如果您在程序上使用aiac ,则必须实施自己的限制。请参阅此处的提示。
该代码按照Apache许可证2.0的条款发布。