

โครงสร้างพื้นฐานด้านปัญญาประดิษฐ์

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) คุณจะต้องให้จุดสิ้นสุด URL API ด้วย
สำหรับ Bedrock Amazon คุณจะต้องมีบัญชี AWS ที่เปิดใช้งาน BETROCK และการเข้าถึงรุ่นที่เกี่ยวข้อง อ้างถึงเอกสารเกี่ยวกับข้อเท็จจริงสำหรับข้อมูลเพิ่มเติม
สำหรับ Ollama คุณต้องการ URL ไปยังเซิร์ฟเวอร์ Ollama API ในเครื่องเท่านั้นรวมถึงคำนำหน้า /API Path Path ค่าเริ่มต้นนี้เป็น 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-BIN (ซึ่งดาวน์โหลดการดำเนินการที่รวบรวมได้)
aiac ได้รับการกำหนดค่าผ่านไฟล์การกำหนดค่า TOML aiac มองหาไฟล์การกำหนดค่าในไดเรกทอรี XDG_CONFIG_HOME ของผู้ใช้โดยเฉพาะ ${XDG_CONFIG_HOME}/aiac/aiac.toml ในระบบปฏิบัติการที่มีลักษณะคล้าย UNIX สิ่งนี้จะเริ่มต้นเป็น "~/.Config/AIAC/AIAC.TOML" หากคุณต้องการใช้เส้นทางที่แตกต่างให้จัดทำ --config หรือ -c flag กับเส้นทางของไฟล์
ไฟล์การกำหนดค่ากำหนดแบ็กเอนด์หนึ่งชื่อขึ้นไป แบ็กเอนด์แต่ละชนิดมีประเภทที่ระบุผู้ให้บริการ 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" ถ้าเป็นอย่างอื่นมันจะเป็น "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
คุณสามารถใช้ธงเพื่อบันทึกเอาต์พุต markdown เต็มได้เช่นกัน:
aiac terraform for eks --output-file=eks.tf --readme-file=eks.md
หากคุณต้องการให้ AIAC พิมพ์เอาต์พุต markdown แบบเต็มไปยังเอาต์พุตมาตรฐานมากกว่ารหัสที่แยกออกให้ใช้ -f หรือ --full Flag:
aiac terraform for eks -f
คุณสามารถใช้ AIAC ในโหมดที่ไม่โต้ตอบเพียงแค่พิมพ์รหัสที่สร้างขึ้นเพื่อเอาต์พุตมาตรฐานและเลือกบันทึกไปยังไฟล์ที่มีธงด้านบนโดยการจัดทำ -q หรือ --quiet FLAG:
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 " ที่นี่เรากำหนดค่าแบ็กเอนด์ 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 จะไม่ใช้ Hardcodes รุ่นใด ๆ รวมถึงรุ่นเริ่มต้นอีกต่อไป มันจะไม่พยายามตรวจสอบรูปแบบที่คุณเลือกมีอยู่จริง ตอนนี้ธง --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 APIs จริง ๆ แล้วบันทึกว่าโมเดลเป็นโมเดลที่เสร็จสมบูรณ์หรือโมเดลแชท (หรือแม้แต่รูปแบบรูปภาพหรือวิดีโอ),-รูป --list-models อาจแสดงรายการโมเดลที่ไม่สามารถใช้งานได้จริงและพยายามใช้งานจริง พวกเขาจะส่งผลให้เกิดข้อผิดพลาดที่ถูกส่งคืนจากผู้ให้บริการ API เหตุผลที่เราตัดสินใจลดการสนับสนุนสำหรับแบบจำลองที่เสร็จสมบูรณ์คือพวกเขาต้องการการตั้งค่าโทเค็นจำนวนสูงสุดสำหรับ API เพื่อสร้าง (อย่างน้อยใน OpenAI) ซึ่งเราไม่สามารถทำได้อีกต่อไปโดยไม่ทราบความยาวบริบท โมเดลแชทไม่เพียง แต่มีประโยชน์มากขึ้นเท่านั้น แต่ยังไม่มีข้อ จำกัด นี้
APIs ผู้ให้บริการ 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" ]ข้อผิดพลาดส่วนใหญ่ที่คุณมีแนวโน้มที่จะพบนั้นมาจากผู้ให้บริการ LLM API เช่น Openai หรือ Amazon Bedrock ข้อผิดพลาดทั่วไปบางประการที่คุณอาจพบคือ:
"[ไม่เพียงพอ _quota] คุณเกินโควต้าปัจจุบันของคุณโปรดตรวจสอบแผนและรายละเอียดการเรียกเก็บเงินของคุณ": ตามที่อธิบายไว้ในส่วนคำแนะนำ OpenAI เป็น API แบบชำระเงินที่มีเครดิตฟรีจำนวนหนึ่ง ข้อผิดพลาดนี้หมายความว่าคุณเกินโควต้าของคุณไม่ว่าจะฟรีหรือชำระเงิน คุณจะต้องเติมเงินเพื่อดำเนินการต่อ
"[โทเค็น] ขีด จำกัด อัตราถึง ... ": OpenAI API ใช้อัตราการ จำกัด ตามที่อธิบายไว้ที่นี่ aiac ดำเนินการตามคำขอส่วนบุคคลเท่านั้นและไม่สามารถแก้ไขปัญหาหรือป้องกันการ จำกัด อัตราเหล่านี้ได้ หากคุณใช้ aiac ในทางโปรแกรมคุณจะต้องใช้การควบคุมปริมาณตัวเอง ดูที่นี่เพื่อหาเคล็ดลับ
รหัสนี้เผยแพร่ภายใต้ข้อกำหนดของ Apache License 2.0