

인공 지능 인프라-코드 생성기.

aiac OpenAI, Amazon Bedrock 및 Ollama와 같은 LLM 제공 업체를 통해 IAC (인프라) 템플릿, 구성, 유틸리티, 쿼리 등을 생성하는 라이브러리 및 명령 줄 도구입니다.
CLI를 사용하면 모델을 요청하여 다양한 시나리오에 대한 템플릿을 생성하도록 요청할 수 있습니다 (예 : "AWS EC2를위한 테라 get get get"). 선택한 공급자에게 적절한 요청을 구성하고 결과 코드를 파일에 저장하고/또는 표준 출력에 인쇄합니다.
사용자는 간단한 구성 파일을 사용하여 다른 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 의 경우 aiac 작동하려면 API 키가 필요합니다. 자세한 내용은 OpenAI의 가격 책정 모델을 참조하십시오. OpenAI에서 호스팅 된 API를 사용하지 않는 경우 (예 : Azure OpenAI를 사용하고있을 수 있음) API URL 엔드 포인트도 제공해야합니다.
Amazon Bedrock 의 경우 Bedrock을 활성화 한 AWS 계정과 관련 모델에 대한 액세스가 필요합니다. 자세한 내용은 기반암 문서를 참조하십시오.
Ollama 의 경우 /API 경로 접두사를 포함하여 로컬 Ollama API 서버의 URL 만 있으면됩니다. 이 기본값은 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 (Arch Linux 사용자 저장소)에서 AIAC (소스에서 컴파일하는) 및 AIAC-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 설정을 활용하여 AIAC가 발행 한 모든 요청에 추가 헤더를 추가하는 지원을 지원합니다. 구성 파일이 작성되면 코드를 생성 할 수 있으며 백엔드의 이름 만 참조하면됩니다. 명령 줄에서 또는 GO 라이브러리로 aiac 사용할 수 있습니다.
코드를 생성하기 전에 백엔드에 사용 가능한 모든 모델을 나열 할 수 있습니다.
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
플래그를 사용하여 전체 마크 다운 출력을 저장할 수 있습니다.
aiac terraform for eks --output-file=eks.tf --readme-file=eks.md
AIAC가 추출 된 코드가 아닌 표준 출력에 전체 마크 다운 출력을 인쇄하는 것을 선호하는 경우 -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 백엔드를 구성합니다. 이 백엔드로 코드를 생성하려면 동일한 LLM 제공 업체에 대해 여러 백엔드가 존재할 수 있으므로 -b ollama 대신 -b my_local_llm 사용합니다.
v5 전에 명령 줄은 세 가지 하위 명령으로 분할되었습니다 : get , list-models 및 version . CLI의 이러한 계층 적 특성으로 인해 "잘못된 위치"에 제공된 경우 플래그가 허용되지 않았을 수 있습니다. 예를 들어, --model 플래그는 "get"이라는 단어 후에 제공되어야했습니다. 그렇지 않으면 받아 들여지지 않습니다. v5에는 하위 명령이 없으므로 플래그의 위치는 더 이상 중요하지 않습니다.
list-models 서브 커드 맨은 플래그 --list-models 로 대체되며 version 서브 커드 맨은 플래그 --version 으로 대체됩니다.
v5 전 :
aiac -b ollama list-models
v5 이후 :
aiac -b my_local_llm --list-models
이전 버전에서 "get"이라는 단어는 실제로 하위 명령이었으며 LLM 제공 업체에게 전송 된 프롬프트의 일부가 아닙니다. v5이므로 "get"부하 명령이 없으므로 더 이상이 단어를 프롬프트에 추가 할 필요가 없습니다.
v5 전 :
aiac get terraform for S3 bucket
v5 이후 :
aiac terraform for S3 bucket
즉, "get"또는 "generate"라는 단어를 추가하면 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가 생성하기 위해 최대의 토큰을 설정해야하기 때문입니다. 채팅 모델은 훨씬 더 유용 할뿐만 아니라 이러한 제한 사항이 없습니다.
대부분의 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에서 나옵니다. 당신이 겪을 수있는 몇 가지 일반적인 오류는 다음과 같습니다.
"[InsufficiTure_Quota] 현재 할당량을 초과했습니다. 계획 및 청구 세부 정보를 확인하십시오." 이 오류는 무료이든 지불 여부에 관계없이 할당량을 초과했음을 의미합니다. 사용을 계속하려면 위로 올라 가야합니다.
"[토큰] 요율 제한에 도달했습니다 ...": OpenAI API는 여기에 설명 된대로 요율 제한을 사용합니다. aiac 개별 요청 만 수행하며 해결 방법을 수행하거나 이러한 요금 제한을 방지 할 수 없습니다. 프로그래밍 방식으로 aiac 사용하는 경우 스로틀링을 직접 구현해야합니다. 팁은 여기를 참조하십시오.
이 코드는 Apache 라이센스 2.0의 조건에 따라 게시됩니다.