

Künstliche Intelligenzinfrastruktur-as-Code-Generator.

aiac ist ein Bibliotheks- und Befehlszeilen -Tool, mit dem IAC (Infrastructure As Code) Vorlagen, Konfigurationen, Dienstprogramme, Abfragen und mehr über LLM -Anbieter wie OpenAI, Amazon Bedrock und Ollama generiert werden.
Mit der CLI können Sie ein Modell bitten, Vorlagen für verschiedene Szenarien zu generieren (z. " Es besteht eine geeignete Anfrage an den ausgewählten Anbieter und speichert den resultierenden Code in eine Datei und/oder druckt ihn in die Standardausgabe aus.
Benutzer können mehrere "Backends" definieren, die auf unterschiedliche LLM -Anbieter und -umgebungen mithilfe einer einfachen Konfigurationsdatei abzielen.
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 Vor dem Installieren/Ausführen von aiac müssen Sie möglicherweise Ihre LLM -Anbieter konfigurieren oder Informationen sammeln.
Für OpenAI benötigen Sie einen API -Schlüssel, damit aiac arbeitet. Weitere Informationen finden Sie im Preismodell von OpenAI. Wenn Sie die von OpenAI gehostete API nicht verwenden (zum Beispiel können Sie Azure OpenAI verwenden), müssen Sie auch den API -URL -Endpunkt bereitstellen.
Für das Amazon -Grundgestein benötigen Sie ein AWS -Konto mit aktiviertem Grundgestein und Zugriff auf relevante Modelle. Weitere Informationen finden Sie in der Grundgesteinsdokumentation.
Für Ollama benötigen Sie die URL nur zum örtlichen Ollama -API -Server, einschließlich des Präfixs /API -Pfad. Dies ist standardmäßig http: // localhost: 11434/api. Ollama liefert keinen Authentifizierungsmechanismus, aber man kann bei Verwendung eines Proxy -Servers vorhanden sein. Dieses Szenario wird derzeit nicht von aiac unterstützt.
Via brew :
brew tap gofireflyio/aiac https://github.com/gofireflyio/aiac
brew install aiac
Verwenden von docker :
docker pull ghcr.io/gofireflyio/aiac
Verwenden Sie go install :
go install github.com/gofireflyio/aiac/v5@latest
Alternativ klonen Sie das Repository und erstellen Sie aus der Quelle:
git clone https://github.com/gofireflyio/aiac.git
go build
aiac ist auch im Arch Linux User Repository (AUR) als AIAC (das aus der Quelle kompiliert) und AIAC-Bin (die eine kompilierte ausführbare Datei heruntergeladen) erhältlich.
aiac wird über eine TOML -Konfigurationsdatei konfiguriert. Sofern ein spezifischer Weg nicht bereitgestellt wird, sucht aiac im Verzeichnis xDG_CONFIG_HOME des Benutzers nach einer Konfigurationsdatei, insbesondere ${XDG_CONFIG_HOME}/aiac/aiac.toml . Bei Unix-ähnlichen Betriebssystemen wird dies standardmäßig "~/.config/aiac/aiac.toml" "standardmäßig). Wenn Sie einen anderen Pfad verwenden möchten, geben Sie das Flag --config oder -c mit dem Pfad der Datei an.
Die Konfigurationsdatei definiert einen oder mehrere benannte Backends. Jedes Backend verfügt über einen Typ, der den LLM -Anbieter (z. B. "Openai", "Bedrock", "Ollama") und verschiedene für diesen Anbieter relevante Einstellungen identifiziert. Mehrere Backends desselben LLM -Anbieters können konfiguriert werden, z. B. für "Inszenierungen" und "Produktion".
Hier ist eine Beispielkonfigurationsdatei:
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 defaultAnmerkungen:
default_model ). Wenn nicht zur Verfügung gestellt, schließen Anrufe, die kein Modell definieren, fehl.auth_header bereitgestellt wird. Dies ist standardmäßig "Autorisierung", aber Azure Openai verwendet stattdessen "Api-Key". Wenn der Header entweder "Autorisierung" oder "Proxy-Authorisierung" ist, lautet der Wert des Headers für Anfragen "Bearer api_key". Wenn es etwas anderes ist, wird es einfach "api_key" sein.extra_headers verwendet wird. Sobald eine Konfigurationsdatei erstellt wurde, können Sie mit dem Generieren von Code beginnen und müssen nur auf den Namen des Backends verweisen. Sie können aiac aus der Befehlszeile oder als Go -Bibliothek verwenden.
Bevor Sie mit dem Generieren von Code beginnen, können Sie alle in einem Backend verfügbaren Modelle auflisten:
aiac -b aws_prod --list-models
Dadurch wird eine Liste aller verfügbaren Modelle zurückgegeben. Beachten Sie, dass je nach LLM -Anbieter Modelle auflisten können, die für das spezifische Konto nicht zugänglich oder aktiviert sind.
Standardmäßig druckt AIAC den extrahierten Code in die Standardausgabe aus und öffnet eine interaktive Shell, mit der das Gespräch mit dem Modell, Wiederholungsanforderungen, Speichern von Ausgaben in Dateien, Kopieren von Code in Zwischenablage und mehr: mehr:
aiac terraform for AWS EC2
Dadurch wird das Standard -Backend in der Konfigurationsdatei und das Standardmodell für dieses Backend verwendet, vorausgesetzt, sie sind tatsächlich definiert. Um ein bestimmtes Backend zu verwenden, geben Sie die --backend oder -b -Flagge an:
aiac -b aws_prod terraform for AWS EC2
Um ein bestimmtes Modell zu verwenden, geben Sie das Flag --model oder -m an:
aiac -m gpt-4-turbo terraform for AWS EC2
Sie können aiac bitten, den resultierenden Code in einer bestimmten Datei zu speichern:
aiac terraform for eks --output-file=eks.tf
Sie können ein Flag verwenden, um auch die vollständige Markdown -Ausgabe zu speichern:
aiac terraform for eks --output-file=eks.tf --readme-file=eks.md
Wenn Sie es vorziehen, dass AIAC den vollständigen Markdown -Ausgang für die Standardausgabe und nicht den extrahierten Code druckt, verwenden Sie das Flag -f oder --full -Flag:
aiac terraform for eks -f
Sie können AIAC im nicht -interaktiven Modus verwenden, den generierten Code einfach in die Standardausgabe drucken und optional in Dateien mit den oben genannten Flags speichern, indem Sie das -q oder --quiet bereitstellen:
aiac terraform for eks -q
Im ruhigen Modus können Sie den resultierenden Code auch in die Zwischenablage senden, indem Sie das Flag --clipboard -Flag:
aiac terraform for eks -q --clipboard
Beachten Sie, dass AIAC in diesem Fall erst beendet wird, wenn sich der Inhalt der Zwischenablage ändert. Dies liegt an der Mechanik der Zwischenablage.
Die gleichen Anweisungen gelten, außer dass Sie ein docker -Bild ausführen:
docker run
-it
-v ~/.config/aiac/aiac.toml:~/.config/aiac/aiac.toml
ghcr.io/gofireflyio/aiac terraform for ec2
Sie können aiac als Go -Bibliothek verwenden:
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" )
} Version 5.0.0 führte eine signifikante Änderung der aiac -API sowohl in der Befehlszeile als auch in der Bibliotheksformen gemäß Feedback der Community ein.
Vor V5 gab es kein Konzept einer Konfigurationsdatei oder benannten Backends. Benutzer mussten alle Informationen zur Verfügung stellen, um einen bestimmten LLM -Anbieter über Befehlszeilenflags oder Umgebungsvariablen zu kontaktieren, und die Bibliothek ermöglichte das Erstellen eines "Client" -Objekts, das nur mit einem LLM -Anbieter sprechen konnte.
Backends werden jetzt nur über die Konfigurationsdatei konfiguriert. Anweisungen finden Sie im Abschnitt Konfiguration. Providerspezifische Flaggen wie --api-key , --aws-profile usw. (und ihre jeweiligen Umgebungsvariablen, falls vorhanden) werden nicht mehr akzeptiert.
Seit V5 werden auch Backends benannt. Zuvor verwies die Flaggen --backend und -b auf den Namen des LLM -Anbieters (zB "Openai", "Bedrock", "Ollama"). Jetzt beziehen sie sich auf den Namen, den Sie in der Konfigurationsdatei definiert haben:
[ backends . my_local_llm ]
type = " ollama "
url = " http://localhost:11434/api " Hier konfigurieren wir ein Ollama -Backend mit dem Namen "my_local_llm". Wenn Sie mit diesem Backend Code generieren möchten, verwenden Sie -b my_local_llm anstelle -b ollama , da für denselben LLM -Anbieter mehrere Backends vorhanden sind.
Vor V5 wurde die Befehlszeile in drei Unterbefehle aufgeteilt: get , list-models und version . Aufgrund dieser hierarchischen Natur der CLI wurden Flaggen möglicherweise nicht akzeptiert, wenn sie an der "falschen Stelle" zur Verfügung gestellt wurden. Zum Beispiel musste die Flagge --model nach dem Wort "Get" bereitgestellt werden, sonst würde es nicht akzeptiert werden. In V5 gibt es keine Unterbefehle, daher ist die Position der Flaggen nicht mehr wichtig.
Der Unterbefehl list-models wird durch die Flag --list-models ersetzt, und der version wird durch das Flag- --version ersetzt.
Vor v5:
aiac -b ollama list-models
Seit v5:
aiac -b my_local_llm --list-models
In früheren Versionen war das Wort "Get" tatsächlich ein Unterbefehl und nicht wirklich Teil der Eingabeaufforderung, die an den LLM -Anbieter gesendet wurde. Da V5, gibt es kein "Get" -Subcomand, sodass Sie dieses Wort nicht mehr zu Ihren Eingabeaufforderungen hinzufügen müssen.
Vor v5:
aiac get terraform for S3 bucket
Seit v5:
aiac terraform for S3 bucket
Das Hinzufügen des Wortes "Get" oder "erzeugen" wird jedoch nicht weh tun, da V5 es einfach entfernen wird, wenn es zur Verfügung gestellt wird.
Vor V5 waren die Modelle für jeden LLM -Anbieter in jeder Backend -Implementierung festcodiert, und jeder Anbieter hatte ein hartgesottenes Standardmodell. Dies begrenzte die Verwendbarkeit des Projekts erheblich und forderte uns auf, aiac zu aktualisieren, wenn neue Modelle hinzugefügt oder veraltet wurden. Andererseits konnten wir zusätzliche Informationen zu jedem Modell liefern, wie z.
Seit V5 härtet aiac keine Modelle mehr, einschließlich Standard. Es wird nicht versucht, das von Ihnen ausgewählte Modell zu überprüfen. Das Flag --list-models wird nun direkt an die ausgewählte Backend-API kontaktiert, um eine Liste unterstützter Modelle zu erhalten. Das Festlegen eines Modells beim Generieren von Code sendet einfach seinen Namen an die API AS-IS. Anstatt ein Standardmodell für jedes Backend zu starten, können Benutzer ihre eigenen Standardmodelle in der Konfigurationsdatei definieren:
[ backends . my_local_llm ]
type = " ollama "
url = " http://localhost:11434/api "
default_model = " mistral:latest " Vor dem V5 unterstützte aiac sowohl Fertigstellungsmodelle als auch Chat -Modelle. Seit V5 unterstützt es nur Chat -Modelle. Da keiner der APIs des LLM-Anbieters --list-models feststellt Sie führen zu einem Fehler, der von der API von Anbietern zurückgegeben wird. Der Grund, warum wir uns entschlossen haben, die Unterstützung für Fertigstellungsmodelle abzugeben, war, dass sie eine maximale Anzahl von Token für die Erzeugung der API (zumindest in OpenAI) festlegen müssen, was wir nicht mehr tun können, ohne die Kontextlänge zu kennen. Chat -Modelle sind nicht nur viel nützlicher, sondern haben diese Einschränkung nicht.
Die meisten APIs von LLM -Anbietern werden bei der Rückgabe einer Antwort auf eine Eingabeaufforderung einen "Grund" enthalten, warum die Antwort dort endete, wo sie sich befindet. Im Allgemeinen sollte die Antwort enden, da das Modell eine Antwort generiert hat, aber manchmal kann die Antwort aufgrund der Kontextlänge des Modells oder der Nutzung des Benutzers abgeschnitten werden. Wenn die Antwort nicht aufgehört hat, weil sie die Generation beendet hat, soll die Antwort "abgeschnitten" werden. Wenn die API vor V5 zurückgab, dass die Antwort abgeschnitten wurde, gab aiac einen Fehler zurück. Da V5 ein Fehler mehr zurückgegeben wird, wird nicht mehr zurückgegeben, da einige Anbieter keinen genauen Stoppgrund zurückgeben. Stattdessen gibt die Bibliothek den Stoppgrund als Teil ihrer Ausgabe zurück, damit die Benutzer entscheiden können, wie sie fortfahren sollen.
Befehlszeile Eingabeaufforderung:
aiac dockerfile for nodejs with comments
Ausgabe:
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" ]Die meisten Fehler, denen Sie wahrscheinlich begegnen werden, stammen von der LLM -Anbieter -API, z. Einige häufige Fehler, denen Sie begegnen können, sind:
"[Unzureichend_quota] Sie haben Ihre aktuelle Quote überschritten. Überprüfen Sie bitte Ihren Plan- und Rechnungsdetails": Wie im Abschnitt "Anweisungen" beschrieben, ist OpenAI eine bezahlte API mit einer bestimmten Menge kostenloser Guthaben. Dieser Fehler bedeutet, dass Sie Ihre Quote, egal ob kostenlos oder bezahlt, überschritten haben. Sie müssen nacharbeiten, um die Nutzung fortzusetzen.
"[Tokens] Ratenlimit erreicht ...": Die OpenAI -API verwendet die hier beschriebene Zinsbegrenzung. aiac führt nur individuelle Anfragen durch und kann diese Ratengrenzen nicht umgehalten oder verhindern. Wenn Sie einen programmgesteuerten Einsatz aiac verwenden, müssen Sie sich selbst drosseln. Hier finden Sie Tipps.
Dieser Code wird unter den Bestimmungen der Apache -Lizenz 2.0 veröffentlicht.