

人工知能インフラストラクチャジェネレーター。

aiac 、Openai、Amazon Bedrock、OllamaなどのLLMプロバイダーを介して、IAC(コードとしてインフラストラクチャ)テンプレート、構成、ユーティリティ、クエリなどを生成するライブラリおよびコマンドラインツールです。
CLIでは、さまざまなシナリオのテンプレートを生成するようにモデルに依頼することができます(例:「AWS EC2のテラフォームを取得」)。選択したプロバイダーに適切なリクエストを構成し、結果のコードをファイルに保存し、標準出力に印刷します。
ユーザーは、単純な構成ファイルを使用して、さまざまな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 columnaiacをインストール/実行する前に、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によってサポートされていません。
bew 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)でAIAC(ソースからコンパイル)およびAIAC-ビン(コンパイルされた実行可能ファイルをダウンロード)として利用できます。
aiac 、TOML構成ファイルを介して構成されています。特定のパスが提供されない限り、 aiacユーザーのXDG_CONFIG_HOMEディレクトリ、特に${XDG_CONFIG_HOME}/aiac/aiac.tomlで構成ファイルを探します。 UNIXのようなオペレーティングシステムでは、デフォルトで「〜/.config/aiac/aiac.toml」になります。別のパスを使用する場合は、ファイルのパスに--configまたは-cフラグを提供します。
構成ファイルは、1つ以上の名前付きバックエンドを定義します。各バックエンドには、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が発行したすべてのリクエストに追加のヘッダーを追加することをサポートします。構成ファイルが作成されたら、コードの生成を開始でき、バックエンドの名前を参照する必要があります。コマンドラインの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
フラグを使用して、完全なマークダウン出力も保存できます。
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プロバイダーに連絡するために必要なすべての情報を提供する必要があり、ライブラリは1つの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」という名前のオラマバックエンドを構成します。このバックエンドでコードを生成する場合、同じLLMプロバイダーに複数のバックエンドが存在する可能性があるため、 -b ollamaではなく-b my_local_llmを使用します。
V5の前に、コマンドラインは3つのサブコマンドに分割されました: 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以来、「取得」サブコマンドはないため、この単語をプロンプトに追加する必要はなくなりました。
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に送信するだけです。また、各バックエンドのデフォルトモデルをハードコードする代わりに、ユーザーは構成ファイルで独自のデフォルトモデルを定義できます。
[ 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" ]遭遇する可能性が高いほとんどのエラーは、OpenaiまたはAmazon BedrockなどのLLMプロバイダーAPIからのものです。遭遇する可能性のあるいくつかの一般的なエラーは次のとおりです。
「[不十分な_Quota]現在のクォータを超えたので、計画と請求の詳細を確認してください」:手順セクションで説明されているように、Openaiは一定量の無料クレジットが与えられた有料APIです。このエラーは、無料であろうと支払われているかどうかにかかわらず、クォータを超えたことを意味します。使用を継続するには、補充する必要があります。
「[トークン]レート制限に達した...」:Openai APIは、ここで説明するようにレート制限を使用します。 aiac個々のリクエストのみを実行し、これらのレート制限を回避または防止することはできません。プログラムでaiacを使用している場合、自分自身をスロットリングすることを実装する必要があります。ヒントについてはこちらをご覧ください。
このコードは、Apacheライセンス2.0の条件の下で公開されています。