

人工智能基礎架構 - 代碼生成器。

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的條款發布。