

Generator Infrastruktur Kecerdasan Buatan.

aiac adalah alat perpustakaan dan baris perintah untuk menghasilkan templat IAC (infrastruktur sebagai kode), konfigurasi, utilitas, kueri, dan lainnya melalui penyedia LLM seperti OpenAi, Amazon Bedrock dan Ollama.
CLI memungkinkan Anda untuk meminta model untuk menghasilkan templat untuk skenario yang berbeda (misalnya "dapatkan terraform untuk AWS EC2"). Ini menyusun permintaan yang sesuai untuk penyedia yang dipilih, dan menyimpan kode yang dihasilkan ke file, dan/atau mencetaknya ke output standar.
Pengguna dapat mendefinisikan beberapa "backends" yang menargetkan berbagai penyedia dan lingkungan LLM menggunakan file konfigurasi sederhana.
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 Sebelum menginstal/menjalankan aiac , Anda mungkin perlu mengkonfigurasi penyedia LLM Anda atau mengumpulkan beberapa informasi.
Untuk Openai , Anda akan memerlukan kunci API agar aiac bekerja. Lihat Model Harga Openai untuk informasi lebih lanjut. Jika Anda tidak menggunakan API yang di -host oleh OpenAI (misalnya, Anda mungkin menggunakan Azure Openai), Anda juga perlu memberikan titik akhir URL API.
Untuk Amazon Bedrock , Anda akan memerlukan akun AWS dengan Bedrock diaktifkan, dan akses ke model yang relevan. Lihat dokumentasi Bedrock untuk informasi lebih lanjut.
Untuk Ollama , Anda hanya membutuhkan URL ke server API Ollama lokal, termasuk awalan jalur /API. Default ini ke http: // localhost: 11434/API. Ollama tidak memberikan mekanisme otentikasi, tetapi seseorang mungkin ada jika ada server proxy yang digunakan. Skenario ini saat ini tidak didukung oleh aiac .
Via brew :
brew tap gofireflyio/aiac https://github.com/gofireflyio/aiac
brew install aiac
Menggunakan docker :
docker pull ghcr.io/gofireflyio/aiac
Menggunakan go install :
go install github.com/gofireflyio/aiac/v5@latest
Atau, klon repositori dan membangun dari sumber:
git clone https://github.com/gofireflyio/aiac.git
go build
aiac juga tersedia di Arch Linux User Repository (AUR) sebagai AIAC (yang dikompilasi dari sumber) dan AIAC-bin (yang mengunduh yang dapat dieksekusi).
aiac dikonfigurasi melalui file konfigurasi TOML. Kecuali jika jalur tertentu disediakan, aiac mencari file konfigurasi di direktori xdg_config_home pengguna, khususnya ${XDG_CONFIG_HOME}/aiac/aiac.toml . Pada sistem operasi seperti Unix, ini akan default untuk "~/.config/aiac/aiac.toml". Jika Anda ingin menggunakan jalur yang berbeda, berikan --config atau -c bendera dengan jalur file.
File konfigurasi mendefinisikan satu atau lebih backend yang disebutkan. Setiap backend memiliki jenis yang mengidentifikasi penyedia LLM (misalnya "OpenAi", "Bedrock", "Ollama"), dan berbagai pengaturan yang relevan dengan penyedia itu. Beberapa backend dari penyedia LLM yang sama dapat dikonfigurasi, misalnya untuk lingkungan "pementasan" dan "produksi".
Berikut contoh file konfigurasi:
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 defaultCatatan:
default_model ). Jika tidak diberikan, panggilan yang tidak menentukan model akan gagal.auth_header . Ini default untuk "otorisasi", tetapi Azure Openai menggunakan "API-Key" sebagai gantinya. Ketika header adalah "otorisasi" atau "otorisasi proxy", nilai header untuk permintaan adalah "pembawa api_key". Jika hal lain, itu hanya akan menjadi "API_KEY".extra_headers . Setelah file konfigurasi dibuat, Anda dapat mulai menghasilkan kode dan Anda hanya perlu merujuk pada nama backend. Anda dapat menggunakan aiac dari baris perintah, atau sebagai perpustakaan Go.
Sebelum mulai menghasilkan kode, Anda dapat mencantumkan semua model yang tersedia di backend:
aiac -b aws_prod --list-models
Ini akan mengembalikan daftar semua model yang tersedia. Perhatikan bahwa tergantung pada penyedia LLM, ini dapat mencantumkan model yang tidak dapat diakses atau diaktifkan untuk akun tertentu.
Secara default, AIAC mencetak kode yang diekstraksi ke output standar dan membuka shell interaktif yang memungkinkan percakapan dengan model, mencoba lagi permintaan, menyimpan output ke file, menyalin kode ke clipboard, dan banyak lagi:
aiac terraform for AWS EC2
Ini akan menggunakan backend default dalam file konfigurasi dan model default untuk backend itu, dengan asumsi mereka memang didefinisikan. Untuk menggunakan backend tertentu, berikan bendera --backend atau -b :
aiac -b aws_prod terraform for AWS EC2
Untuk menggunakan model tertentu, berikan bendera --model atau -m :
aiac -m gpt-4-turbo terraform for AWS EC2
Anda dapat meminta aiac untuk menyimpan kode yang dihasilkan ke file tertentu:
aiac terraform for eks --output-file=eks.tf
Anda dapat menggunakan bendera untuk menyimpan output penurunan harga lengkap juga:
aiac terraform for eks --output-file=eks.tf --readme-file=eks.md
Jika Anda lebih suka AIAC untuk mencetak output penurunan harga penuh ke output standar daripada kode yang diekstraksi, gunakan bendera -f atau --full :
aiac terraform for eks -f
Anda dapat menggunakan AIAC dalam mode non -interaktif, cukup mencetak kode yang dihasilkan ke output standar, dan secara opsional menyimpannya ke file dengan bendera di atas, dengan menyediakan bendera -q atau --quiet :
aiac terraform for eks -q
Dalam mode tenang, Anda juga dapat mengirim kode yang dihasilkan ke clipboard dengan menyediakan bendera --clipboard :
aiac terraform for eks -q --clipboard
Perhatikan bahwa AIAC tidak akan keluar dalam kasus ini sampai isi clipboard berubah. Ini karena mekanisme clipboard.
Semua instruksi yang sama berlaku, kecuali Anda menjalankan gambar docker :
docker run
-it
-v ~/.config/aiac/aiac.toml:~/.config/aiac/aiac.toml
ghcr.io/gofireflyio/aiac terraform for ec2
Anda dapat menggunakan aiac sebagai perpustakaan 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" )
} Versi 5.0.0 memperkenalkan perubahan signifikan pada aiac API baik dalam bentuk baris perintah dan perpustakaan, sesuai umpan balik dari komunitas.
Sebelum V5, tidak ada konsep file konfigurasi atau backends bernama. Pengguna harus memberikan semua informasi yang diperlukan untuk menghubungi penyedia LLM tertentu melalui bendera baris perintah atau variabel lingkungan, dan perpustakaan memungkinkan membuat objek "klien" yang hanya bisa berbicara dengan satu penyedia LLM.
Backends sekarang dikonfigurasi hanya melalui file konfigurasi. Lihat bagian konfigurasi untuk instruksi. Bendera khusus penyedia seperti --api-key , --aws-profile , dll. (Dan variabel lingkungan masing-masing, jika ada) tidak lagi diterima.
Karena V5, backend juga dinamai. Sebelumnya, bendera --backend dan -b merujuk pada nama penyedia LLM (misalnya "OpenAi", "Bedrock", "Ollama"). Sekarang mereka merujuk pada nama apa pun yang telah Anda tetapkan dalam file konfigurasi:
[ backends . my_local_llm ]
type = " ollama "
url = " http://localhost:11434/api " Di sini kami mengkonfigurasi backend ollama bernama "my_local_llm". Ketika Anda ingin menghasilkan kode dengan backend ini, Anda akan menggunakan -b my_local_llm daripada -b ollama , karena beberapa backend mungkin ada untuk penyedia LLM yang sama.
Sebelum V5, baris perintah dibagi menjadi tiga sub-perintah: get , list-models dan version . Karena sifat hierarkis CLI ini, bendera mungkin belum diterima jika disediakan di "lokasi yang salah". Misalnya, bendera --model harus disediakan setelah kata "dapatkan", jika tidak itu tidak akan diterima. Di V5, tidak ada sub -perintah, sehingga posisi bendera tidak lagi penting.
Sub-perintah list-models diganti dengan bendera --list-models , dan sub-perintah version diganti dengan bendera --version .
Sebelum v5:
aiac -b ollama list-models
Sejak v5:
aiac -b my_local_llm --list-models
Dalam versi sebelumnya, kata "dapatkan" sebenarnya adalah sub -perintah dan tidak benar -benar bagian dari prompt yang dikirim ke penyedia LLM. Karena v5, tidak ada sub -perintah "dapatkan", jadi Anda tidak perlu lagi menambahkan kata ini ke petunjuk Anda.
Sebelum v5:
aiac get terraform for S3 bucket
Sejak v5:
aiac terraform for S3 bucket
Yang mengatakan, menambahkan kata "dapatkan" atau "menghasilkan" tidak akan sakit, karena V5 hanya akan menghapusnya jika disediakan.
Sebelum V5, model untuk setiap penyedia LLM hardcoded dalam setiap implementasi backend, dan setiap penyedia memiliki model default hardcoded. Ini secara signifikan membatasi kegunaan proyek, dan mengharuskan kami untuk memperbarui aiac setiap kali model baru ditambahkan atau sudah usang. Di sisi lain, kami dapat memberikan informasi tambahan tentang setiap model, seperti panjang dan jenis konteksnya, karena kami secara manual mengekstraknya dari dokumentasi penyedia.
Karena V5, aiac tidak lagi mengkodekan model apa pun, termasuk yang default. Ini tidak akan mencoba memverifikasi model yang Anda pilih sebenarnya ada. Bendera --list-models sekarang akan secara langsung menghubungi API backend yang dipilih untuk mendapatkan daftar model yang didukung. Mengatur model saat menghasilkan kode cukup mengirimkan namanya ke API AS-IS. Juga, alih -alih menggunakan model default untuk setiap backend, pengguna dapat menentukan model default mereka sendiri dalam file konfigurasi:
[ backends . my_local_llm ]
type = " ollama "
url = " http://localhost:11434/api "
default_model = " mistral:latest " Sebelum V5, aiac mendukung model penyelesaian dan model obrolan. Sejak V5, itu hanya mendukung model obrolan. Karena tidak ada API penyedia LLM yang benar-benar mencatat apakah model adalah model penyelesaian atau model obrolan (atau bahkan model gambar atau video), bendera --list-models dapat mencantumkan model yang sebenarnya tidak dapat digunakan, dan mencoba menggunakan Mereka akan menghasilkan kesalahan yang dikembalikan dari API penyedia. Alasan kami telah memutuskan untuk memberikan dukungan untuk model penyelesaian adalah karena mereka memerlukan pengaturan jumlah token maksimum untuk dihasilkan API (setidaknya di Openai), yang tidak dapat kami lakukan lagi tanpa mengetahui panjang konteksnya. Model obrolan tidak hanya lebih berguna, tetapi mereka tidak memiliki batasan ini.
Sebagian besar API penyedia LLM, ketika mengembalikan respons ke prompt, akan mencakup "alasan" mengapa respons berakhir di tempat yang dilakukan. Secara umum, respons harus berakhir karena model selesai menghasilkan respons, tetapi kadang -kadang respons dapat dipotong karena panjang konteks model atau pemanfaatan token pengguna. Ketika respons tidak "berhenti" karena generasi selesai, respons dikatakan "terpotong". Sebelum V5, jika API mengembalikan bahwa respons dipotong, aiac mengembalikan kesalahan. Karena V5, kesalahan tidak lagi dikembalikan, karena tampaknya beberapa penyedia tidak mengembalikan alasan berhenti yang akurat. Sebaliknya, perpustakaan mengembalikan alasan berhenti sebagai bagian dari outputnya bagi pengguna untuk memutuskan bagaimana melanjutkan.
Prompt baris perintah:
aiac dockerfile for nodejs with comments
Keluaran:
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" ]Sebagian besar kesalahan yang mungkin Anda temui berasal dari API penyedia LLM, misalnya Openai atau Amazon Bedrock. Beberapa kesalahan umum yang mungkin Anda temui adalah:
"[tidak mencukupi_quota] Anda melebihi kuota Anda saat ini, silakan periksa rencana Anda dan detail penagihan": seperti yang dijelaskan di bagian instruksi, OpenAI adalah API berbayar dengan sejumlah kredit gratis yang diberikan. Kesalahan ini berarti Anda telah melampaui kuota Anda, baik gratis atau dibayar. Anda perlu menambah penggunaan.
"Batas tingkat [token] tercapai ...": API Openai menggunakan batasan tingkat seperti yang dijelaskan di sini. aiac hanya melakukan permintaan individu dan tidak dapat menyelesaikan atau mencegah batas tingkat ini. Jika Anda menggunakan aiac secara terprogram, Anda harus menerapkan pelambatan sendiri. Lihat di sini untuk tips.
Kode ini diterbitkan berdasarkan ketentuan Lisensi Apache 2.0.