

Искусственная интеллектуальная инфраструктура как генератор кода.

aiac - это инструмент библиотеки и командной строки для генерации шаблонов IAC (инфраструктуры как кода), конфигураций, утилит, запросов и многого другого через поставщиков LLM, таких как OpenAI, Amazon Bedrock и Ollama.
CLI позволяет вам попросить модель сгенерировать шаблоны для различных сценариев (например, «Получите Terraform для 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 column Перед установкой/запуском aiac вам может потребоваться настроить поставщиков LLM или собрать некоторую информацию.
Для OpenAI вам понадобится ключ API, чтобы aiac работал. Обратитесь к модели ценообразования Openai для получения дополнительной информации. Если вы не используете API, размещенный OpenAI (например, вы можете использовать Azure OpenAI), вам также необходимо предоставить конечную точку API.
Для Amazon Bedrock вам понадобится учетная запись AWS с включенной коренной породой и доступ к соответствующим моделям. Обратитесь к документации Bedrock для получения дополнительной информации.
Для Ollama вам нужен только URL на локальном сервере API Ollama, включая префикс пути /API. Это по умолчанию 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) как AIAC (который компилируется из источника) и AIAC-бин (который загружает скомпилированный исполняемый файл).
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». Если это что -то еще, это будет просто "api_key".extra_headers . После создания файла конфигурации вы можете начать генерировать код, и вам нужно только обратиться к имени бэкэнда. Вы можете использовать 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 ввела значительное изменение в AIC aiac как в командной строке, так и в библиотечных формах, в соответствии с отзывами сообщества.
Перед 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 " Здесь мы настроим бэкэнд Ollama с именем "my_local_llm". Если вы хотите сгенерировать код с помощью этого бэкэнда, вы будете использовать -b my_local_llm , а не -b ollama , поскольку для одного и того же поставщика LLM могут существовать несколько бэкэндов.
Перед V5 командная строка была разделена на три подкоманды: get , list-models и version . Из -за этого иерархического характера CLI флаги, возможно, не были приняты, если они были предоставлены в «неправильном месте». Например, флаг --model должен был быть предоставлен после слова «получить», в противном случае он не будет принят. В 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
Тем не менее, добавление слова «получить» или «генерировать» не повредит, так как V5 просто удалит его, если предоставлен.
Перед V5 модели для каждого поставщика LLM были жестко кодированы в каждой реализации бэкэнд, и у каждого поставщика была модель жесткой кодировки по умолчанию. Это значительно ограничило удобство использования проекта и требовало обновления aiac всякий раз, когда были добавлены или устарели новые модели. С другой стороны, мы могли бы предоставить дополнительную информацию о каждой модели, такой как ее длины контекста и тип, поскольку мы вручную извлекали их из документации поставщика.
Со времен V5 aiac больше не жестких кодов, в том числе по умолчанию. Он не будет пытаться проверить выбранную вами модель, которая существует. Флаг --list-models теперь напрямую свяжется с выбранным API-API, чтобы получить список поддерживаемых моделей. Настройка модели при генерации кода просто отправляет свое имя в API As-IS. Кроме того, вместо жесткого кодирования модели по умолчанию для каждого бэкэнда пользователи могут определить свои собственные модели по умолчанию в файле конфигурации:
[ backends . my_local_llm ]
type = " ollama "
url = " http://localhost:11434/api "
default_model = " mistral:latest " Перед V5 aiac поддерживал как модели завершения, так и модели чата. Со времени V5 он поддерживает только модели чата. Поскольку ни один из API-интерфейсов поставщика LLM фактически не отмечается, является ли модель моделью завершения или моделью чата (или даже изображение или видео модель), флаг --list-models может перечислять модели, которые на самом деле не могут использовать, и пытается использовать Их приведет к возвращению ошибки из API -поставщика. Причина, по которой мы решили отказаться от поддержки для моделей завершения, заключалась в том, что им требуется настройка максимального количества токенов для генерации API (по крайней мере, в OpenAI), что мы больше не можем делать, не зная длины контекста. Модели чата не только намного более полезны, но и не имеют этого ограничения.
Большинство API -интерфейсов поставщика LLM при возвращении ответа на подсказку будут включать «причину», почему ответ закончился там, где он это сделал. Как правило, ответ должен заканчиваться, потому что модель завершила генерирование ответа, но иногда ответ может быть усечен из -за длины контекста модели или использования токена пользователя. Когда ответ не «остановился», потому что он завершил поколение, ответ, как говорят, «усечен». Перед 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" ]Большинство ошибок, с которыми вы, вероятно, столкнетесь, исходят от API -поставщика LLM, например, Openai или Amazon. Некоторые общие ошибки, с которыми вы можете столкнуться:
«[Недостаточная_Кота] Вы превысили свою текущую квоту, пожалуйста, проверьте свой план и сведения о выставлении счетов»: Как описано в разделе «Инструкции», OpenAI - это платный API с определенной суммой бесплатных кредитов. Эта ошибка означает, что вы превысили свою квоту, будь то бесплатная или оплаченная. Вам нужно будет пополниться, чтобы продолжить использование.
«[Токены] ограниченный предел достигнутого ...»: API OpenAI использует ограничение ставки, как описано здесь. aiac выполняет только отдельные запросы и не может облегчить или предотвратить эти пределы скорости. Если вы используете aiac в программно, вам придется реализовать дроссель. Смотрите здесь для советов.
Этот код опубликован в соответствии с условиями лицензии Apache 2.0.