aia
เป็นโปรแกรมอรรถประโยชน์บรรทัดคำสั่งที่อำนวยความสะดวกในการโต้ตอบกับโมเดล AI โดยจะจัดการพรอมต์ก่อนการจัดองค์ประกอบโดยอัตโนมัติและดำเนินการคำสั่ง generative AI (Gen-AI) บนพรอมต์เหล่านั้นโดยใช้ประโยชน์จาก LLM สมัยใหม่ขนาดหน้าต่างบริบทที่เพิ่มขึ้น
มันใช้ประโยชน์จาก prompt_manager
gem เพื่อจัดการพร้อมท์สำหรับยูทิลิตี้ mods
และ sgpt
CLI มันใช้ "ripgrep" เพื่อค้นหาไฟล์พร้อมท์ โดยจะใช้ fzf
สำหรับการเลือกพร้อมท์โดยอิงตามคำค้นหาและการจับคู่แบบคลุมเครือ
การเปลี่ยนแปลงล่าสุด : อ้างถึงบันทึกการเปลี่ยนแปลง
ขอแจ้งให้ทราบ ... ฉันกำลังทำงานในสาขา
develop
เพื่อ ยกเลิกการพึ่งพาโปรเซสเซอร์ LLM แบ็กเอนด์ เช่น mods และ llm ฉันกำลังสร้าง aia ใหม่เพื่อใช้ Universal Client Gem ของฉันเองที่ชื่อ ai_client ซึ่งให้สิทธิ์เข้าถึงทุกรุ่นและผู้ให้บริการทั้งหมด
aia
llm
sgpt
plz
ติดตั้งอัญมณีโดยดำเนินการ:
gem install aia
ติดตั้งยูทิลิตี้บรรทัดคำสั่งโดยดำเนินการ:
brew install mods fzf ripgrep
คุณจะต้องสร้างไดเร็กทอรีในระบบไฟล์ของคุณเพื่อเก็บไฟล์ข้อความแจ้ง พารามิเตอร์ที่ใช้ล่าสุด และไฟล์บันทึกการใช้งาน
ตั้งค่าตัวแปรสภาพแวดล้อมระบบ (envar) ชื่อ "AIA_PROMPTS_DIR" ที่ชี้ไปยังไดเร็กทอรีพร้อมท์ของคุณ ค่าเริ่มต้นอยู่ในไดเร็กทอรี HOME ของคุณชื่อ ".prompts" envar "AIA_ROLES_DIR" ชี้ไปที่ไดเร็กทอรีบทบาทของคุณซึ่งคุณจะได้รับพร้อมท์ซึ่งกำหนดบทบาทต่างๆ ที่คุณต้องการให้ LLM ถือว่าเมื่อกำลังทำงาน ไดเร็กทอรีบทบาทเริ่มต้นอยู่ภายในไดเร็กทอรี prompts ชื่อของมันคือ "บทบาท"
คุณอาจต้องการติดตั้งสคริปต์การเสร็จสิ้นสำหรับเชลล์ของคุณ หากต้องการรับสำเนาสคริปต์การเสร็จสิ้น ให้ทำดังนี้
aia --completion bash
fish
และ zsh
ก็มีให้เช่นกัน
รายงานการใช้งานที่ได้รับโดยใช้ -h
หรือ --help
ถูกนำมาใช้เป็นหน้า man
มาตรฐาน คุณสามารถใช้ทั้งสอง --help --verbose
ของ -h -v
ร่วมกันเพื่อไม่เพียงแต่รับ aia
man page เท่านั้น แต่ยังรวมถึงรายงานการใช้งานจากเครื่องมือประมวลผล LLM backend
ด้วย
$ aia --help
ค่าเริ่มต้นของการกำหนดค่า aia
สามารถแทนที่ได้ด้วยตัวแปรสภาพแวดล้อมของระบบ (envars) ด้วยคำนำหน้า "AIA_" ตามด้วยชื่อรายการกำหนดค่าที่เป็นตัวพิมพ์ใหญ่เช่นกัน รายการการกำหนดค่าทั้งหมดสามารถแทนที่ได้ด้วยวิธีนี้โดย envar ตารางต่อไปนี้แสดงตัวอย่างบางส่วน
กำหนดค่ารายการ | ค่าเริ่มต้น | คีย์เอนวาร์ |
---|---|---|
แบ็กเอนด์ | ม็อด | AIA_BACKEND |
config_file | ไม่มี | AIA_CONFIG_FILE |
แก้ปัญหา | เท็จ | AIA_DEBUG |
แก้ไข | เท็จ | เอไอเอ_แก้ไข |
พิเศษ | - | เอไอเอ_เอ็กซ์ตร้า |
คลุมเครือ | เท็จ | AIA_FUZZY |
log_file | ~/.prompts/_prompts.log | AIA_LOG_FILE |
มาร์กดาวน์ | จริง | AIA_MARKDOWN |
แบบอย่าง | gpt-4-1106-ตัวอย่าง | AIA_MODEL |
out_file | STDOUT | AIA_OUT_FILE |
prompts_dir | ~/.พร้อมท์ | AIA_PROMPTS_DIR |
คำพูด_แบบจำลอง | ทีทีเอส-1 | AIA_SPEECH_MODEL |
รายละเอียด | เท็จ | AIA_VERBOSE |
เสียง | โลหะผสม | เอไอเอ_เสียง |
ดูแฮช @options
ในไฟล์ cli.rb
เพื่อดูรายการทั้งหมด มีรายการกำหนดค่าบางอย่างที่ไม่สมเหตุสมผลสำหรับใช้เป็น envar over-ride ตัวอย่างเช่น หากคุณตั้งค่า export AIA_DUMP_FILE=config.yaml
aia
จะดัมพ์การกำหนดค่าปัจจุบัน config.yaml และออกทุกครั้งที่มีการรันจนกว่าคุณจะ unset AIA_DUMP_FILE
ในที่สุด
นอกเหนือจากรายการกำหนดค่าเหล่านี้สำหรับ aia
พารามิเตอร์บรรทัดคำสั่งเสริมสำหรับยูทิลิตีการประมวลผลพรอมต์แบ็กเอนด์ (mods และ sgpt) ยังสามารถตั้งค่าได้โดยใช้ envars ที่นำหน้าด้วย "AIA_" ตัวอย่างเช่น "export AIA_TOPP=1.0" จะตั้งค่าตัวเลือกบรรทัดคำสั่ง "--topp 1.0" สำหรับยูทิลิตี้ mods
เมื่อใช้เป็นตัวประมวลผลแบ็กเอนด์
การใช้ตัวเลือก --shell
ช่วยให้ aia
เข้าถึงสภาพแวดล้อมเชลล์ของเทอร์มินัลจากภายในข้อความแจ้ง
aia
สามารถแทนที่การอ้างอิงตัวแปรสภาพแวดล้อมระบบ (envar) ใดๆ ในข้อความพร้อมต์ด้วยค่าของ envar รูปแบบเหมือน
สามารถแทรกเนื้อหาไดนามิกลงในพรอมต์ได้โดยใช้รูปแบบ
พิจารณาถึงพลังในการปรับแต่งพร้อมท์ให้เหมาะกับระบบปฏิบัติการเฉพาะของคุณ:
As a system administration on a $(uname -v) platform what is the best way to [DO_SOMETHING]
หรือแทรกเนื้อหาจากไฟล์ในโฮมไดเร็กตอรี่ของคุณ:
Given the following constraints $(cat ~/3_laws_of_robotics.txt) determine the best way to instruct my roomba to clean my kids room.
เมื่อคุณใช้ตัวเลือก --shell
เพื่อเริ่มเซสชันการแชท การรวมเชลล์จะพร้อมใช้งานในพร้อมท์ติดตามผลของคุณ สมมติว่าคุณเริ่มต้นเซสชันการแชทโดยใช้ "Ruby Expert" โดยคาดหวังที่จะพูดคุยเกี่ยวกับการเปลี่ยนแปลงที่อาจเกิดขึ้นกับคลาสเฉพาะ แต่คุณลืมรวมไฟล์ต้นฉบับของคลาสเป็นส่วนหนึ่งของบริบทเมื่อคุณเริ่มต้น คุณสามารถป้อนสิ่งนี้เป็นข้อความแจ้งติดตามผลเพื่อดำเนินการต่อ:
The class I want to chat about refactoring is this one: $(cat my_class.rb)
ซึ่งจะแทรกไฟล์ต้นฉบับของชั้นเรียนทั้งหมดลงในพร้อมท์ติดตามผลของคุณ คุณสามารถสนทนากับผู้ช่วย AI ต่อไปได้ โดยไม่เปลี่ยนแปลงชั้นเรียน
การรวมเนื้อหาแบบไดนามิกผ่านการบูรณาการเชลล์ที่จัดทำโดยตัวเลือก --shell
มีความสำคัญ aia
ยังมอบพลังเต็มรูปแบบของการประมวลผลโค้ด Ruby แบบฝังภายในข้อความพร้อมท์
ตัวเลือก --erb
จะเปลี่ยนไฟล์ข้อความแจ้งให้เป็นเทมเพลต ERB ที่ทำงานได้อย่างสมบูรณ์ ไวยากรณ์เทมเพลต Embedded Ruby (ERB) (2024) ให้ภาพรวมที่ดีของไวยากรณ์และประสิทธิภาพของ ERB
เว็บไซต์ส่วนใหญ่ที่มีข้อมูลเกี่ยวกับ ERB จะให้ตัวอย่างวิธีใช้ ERB เพื่อสร้างเนื้อหา HTML แบบไดนามิกสำหรับแอปพลิเคชันบนเว็บ นั่นเป็นกรณีการใช้งานทั่วไปสำหรับ ERB ในทางกลับกัน aia
ใช้ ERB เพื่อสร้างข้อความพร้อมท์แบบไดนามิก
ในเซสชันการแชทไม่ว่าจะเริ่มต้นโดยตัวเลือก --chat
หรือเทียบเท่ากับคำสั่งภายในไฟล์ข้อความพร้อมท์จะมีพฤติกรรมแตกต่างออกไปเล็กน้อยโดยมีการผูกและกำหนดตัวแปรท้องถิ่น เนื่องจากเซสชันการแชทตามคำจำกัดความมีหลายพร้อมต์ การตั้งค่าตัวแปรภายในเครื่องในหนึ่งพร้อมท์และการคาดหวังว่าตัวแปรนั้นจะพร้อมใช้งานในพร้อมท์ถัดไปจึงไม่ทำงาน คุณต้องใช้ตัวแปรอินสแตนซ์เพื่อดำเนินการพร้อมท์นี้ให้สำเร็จเพื่อแจ้งการส่งต่อข้อมูล
นอกจากนี้ เนื่องจากข้อความแจ้งการติดตามผลคาดว่าจะเป็นสิ่งเดียว - ประโยคหรือย่อหน้า - สิ้นสุดด้วยการส่งคืนครั้งเดียว จึงมีแนวโน้มว่าการปรับปรุง ERB จะเป็นประโยชน์ แต่คุณอาจพบว่ามีประโยชน์
คำสั่งการประมวลผลดาวน์สตรีมถูกเพิ่มให้กับ prompt_manager
gem ที่ใช้โดย au
ในเวอร์ชัน 0.4.1 คำสั่งเหล่านี้เป็นบรรทัดในไฟล์ข้อความแจ้งที่ขึ้นต้นด้วย "//" โดยมีรูปแบบดังนี้:
//command parameters
ไม่มีช่องว่างระหว่าง "//" และคำสั่ง
เมื่อคุณรวมคำสั่งพร้อมต์เข้ากับพารามิเตอร์พร้อมต์และการทดแทนเชลล์ envar คุณจะได้รับพร้อมต์การเรียบเรียงที่มีประสิทธิภาพ
นี่คือตัวอย่างของคำสั่งทั่วไปที่บริสุทธิ์
//[DIRECTIVE_NAME] [DIRECTIVE_PARAMS]
เมื่อพรอมต์ทำงาน คุณจะถูกขอให้ระบุค่าสำหรับพารามิเตอร์แต่ละตัว คุณสามารถตอบ "shell" สำหรับชื่อคำสั่งและ "calc 22/7" หากคุณต้องการค่าประมาณ PI ที่ไม่ดี
ลองใช้ไฟล์พร้อมท์นี้:
//shell calc [FORMULA]
What does that number mean to you?
aia
ในเวลานี้ aia
มีเพียงแนวทางบางส่วนเท่านั้นซึ่งมีรายละเอียดด้านล่าง
คำสั่ง //config
ภายในไฟล์ข้อความพร้อมท์ใช้เพื่อปรับแต่งสภาพแวดล้อมการกำหนดค่าเฉพาะสำหรับพร้อมท์ รายการการกำหนดค่าทั้งหมดพร้อมให้เปลี่ยนแปลงค่าได้ ลำดับการกำหนดค่าสำหรับรายการการกำหนดค่าเริ่มต้นด้วยค่าเริ่มต้นซึ่งถูกแทนที่ด้วยค่า envar ซึ่งถูกแทนที่ด้วยค่าตัวเลือกบรรทัดคำสั่งซึ่งถูกแทนที่ด้วยค่าจากไฟล์กำหนดค่า
//config
เป็นวิธีสุดท้ายและวิธีสุดท้ายในการเปลี่ยนค่าสำหรับรายการการกำหนดค่าสำหรับพรอมต์เฉพาะ
ตัวเลือกสวิตช์ได้รับการปฏิบัติเหมือนบูลีน พวกเขาเป็น true
หรือ false
ชื่อของพวกเขาในบริบทของคำสั่ง //config
จะลงท้ายด้วย "?" เสมอ ตัวละคร - เครื่องหมายคำถาม
วิธีตั้งค่าสวิตช์โดยใช้ ``//config for example
--terse` หรือ `--chat` เป็นดังนี้:
//config chat? = true
//config terse? = true
รายการคอนฟิกูเรชัน เช่น --out_file
หรือ --model
มีค่าเชื่อมโยงกันบนบรรทัดคำสั่ง หากต้องการตั้งค่านั้นด้วยคำสั่ง //config
ให้ทำดังนี้:
//config model = gpt-3.5-turbo
//config out_file = temp.md
//config backend = mods
BTW: "=" เป็นตัวเลือกที่สมบูรณ์ จริงๆ แล้วมันถูกละเว้นตามที่เป็น ":=" หากคุณต้องเลือกสิ่งนั้นให้เป็นผู้ดำเนินการมอบหมายของคุณ จำนวนช่องว่างระหว่างรายการและค่าก็สมบูรณ์โดยพลการ ฉันชอบจัดเรียงสิ่งต่าง ๆ ดังนั้นไวยากรณ์นี้จึงเหมือนกับ Valie:
//config model gpt-3.5-turbo
//config out_file temp.md
//config backend mods
//config chat? true
//config terse? true
//config model gpt-4
หมายเหตุ: หากคุณระบุชื่อรายการกำหนดค่าเดียวกันมากกว่าหนึ่งครั้งภายในไฟล์พร้อมท์ ไฟล์ดังกล่าวจะเป็นชื่อสุดท้ายซึ่งจะถูกตั้งค่าเมื่อพร้อมท์ได้รับการประมวลผลผ่าน LLM ในที่สุด เช่นในตัวอย่างข้างต้น gpt-4
จะเป็นโมเดลที่ใช้ การเป็นคนแรกไม่นับในกรณีนี้
ตัวอย่าง:
//include path_to_file
path_to_file
อาจเป็นแบบสัมบูรณ์หรือแบบสัมพัทธ์ก็ได้ ถ้าเป็นญาติก็จะจอดอยู่ที่ ส.ส. หาก path_to_file
มี envars ต้องใช้ตัวเลือก --shell
CLI เพื่อแทนที่ envar ในคำสั่งด้วยค่าจริง
ไฟล์ที่รวมไว้จะมีการยกเว้นความคิดเห็นหรือคำสั่งใดๆ คาดว่าไฟล์ดังกล่าวจะเป็นไฟล์ข้อความเพื่อให้สามารถเตรียมเนื้อหาไว้ล่วงหน้าในพรอมต์ที่มีอยู่ได้ อย่างไรก็ตาม หากไฟล์นั้นเป็นไฟล์ซอร์สโค้ด (เช่น file.rb) ซอร์สโค้ดจะถูกรวมไว้ด้วย อย่างไรก็ตาม หากบรรทัดความคิดเห็นหรือบรรทัดที่ขึ้นต้นด้วย "//" จะถูกแยกออก
สิ่งที่ต้องทำ: ลองเพิ่มตัวเลือกบรรทัดคำสั่ง --include_dir
เพื่อระบุตำแหน่งที่จะมาของไฟล์ที่เกี่ยวข้อง
ตัวอย่าง:
//ruby any_code_that_returns_an_instance_of_String
คำสั่งนี้เป็นส่วนเพิ่มเติมจาก ERB ณ จุดนี้คำสั่ง //ruby
ถูกจำกัดโดยการเชื่อมโยงปัจจุบันซึ่งอยู่ภายในเมธอด AIA::Directives#ruby
ดังนั้นจึงไม่น่าจะเห็นประโยชน์มากนัก
อย่างไรก็ตาม เนื่องจากมันถูกนำไปใช้เป็น eval(code)
อย่างง่าย จึงมีความเป็นไปได้ที่จะใช้ดังนี้:
//ruby load(some_ruby_file); execute_some_method
การดำเนินการคำสั่ง //ruby
แต่ละครั้งจะเป็นการดำเนินการใหม่ของเมธอด AIA::Directives#ruby
ดังนั้นคุณจึงไม่สามารถพกพาตัวแปรท้องถิ่นจากการเรียกใช้หนึ่งไปยังอีกรายการหนึ่งได้ อย่างไรก็ตาม คุณสามารถทำอะไรบางอย่างกับตัวแปรอินสแตนซ์หรือตัวแปรโกลบอลได้ คุณยังอาจเพิ่มบางสิ่งลงในออบเจ็กต์ AIA.config
ที่จะวางในการเรียกใช้คำสั่งถัดไปภายในบริบทของพร้อมท์เดียวกัน
ตัวอย่าง:
//shell some_shell_command
คาดว่าคำสั่งเชลล์จะส่งคืนข้อความบางส่วนไปที่ STDOUT ซึ่งจะรอดำเนินการล่วงหน้ากับข้อความพร้อมต์ที่มีอยู่ภายในไฟล์พร้อมต์
ไม่มีข้อจำกัดเกี่ยวกับสิ่งที่คำสั่งเชลล์สามารถทำได้ ตัวอย่างเช่น หากคุณต้องการหลีกเลี่ยงการแยกความคิดเห็นและคำสั่งออกจากไฟล์ คุณสามารถดำเนินการดังนี้:
//shell cat path_to_file
ซึ่งโดยพื้นฐานแล้วจะเหมือนกับคำสั่ง //include
ยกเว้นว่าจะใช้เนื้อหาทั้งหมดของไฟล์ สำหรับเส้นทางไฟล์สัมพัทธ์จะใช้สิ่งเดียวกัน เส้นทางของไฟล์จะสัมพันธ์กับ PWD
ดูซอร์สโค้ดสำหรับคำสั่งที่รองรับโดยแบ็กเอนด์ซึ่งขณะนี้เป็นแบบอิงการกำหนดค่าเช่นกัน
ตัวอย่างเช่น mods
มีรายการการกำหนดค่า topp
ซึ่งสามารถตั้งค่าได้โดยคำสั่งในไฟล์ข้อความแจ้งโดยตรง
//topp 1.5
หาก mods
ไม่ใช่แบ็กเอนด์ //topp
direcive จะถูกละเว้น
เมื่อคุณอยู่ในเซสชั่นการแชท คุณอาจใช้คำสั่งเป็นพรอมต์การติดตามผล ตัวอย่างเช่น หากคุณเริ่มเซสชันการแชทด้วยตัวเลือก --terse
คาดหวังว่าจะได้รับคำตอบสั้นๆ จากแบ็กเอนด์ แต่แล้วคุณตัดสินใจว่าคุณต้องการคำตอบที่ครอบคลุมมากขึ้น คุณสามารถทำได้:
//config terse? false
คำสั่งถูกดำเนินการและสามารถป้อนพรอมต์ติดตามผลใหม่พร้อมการตอบสนองที่ยาวยิ่งขึ้นซึ่งสร้างจากแบ็กเอนด์
เหตุใดคุณจึงต้องการ/ต้องการใช้ลำดับของพร้อมท์ในสถานการณ์แบบแบตช์ บางทีคุณอาจมีข้อความแจ้งที่ซับซ้อนซึ่งเกินขีดจำกัดโทเค็นของโมเดลของคุณสำหรับการป้อนข้อมูล ดังนั้นคุณจึงต้องแบ่งออกเป็นหลายส่วน หรือสมมติว่ามันเป็นพรอมต์ง่ายๆ แต่จำนวนโทเค็นในเอาต์พุตมีจำกัด และคุณไม่ได้รับการตอบสนองแบบเต็มอย่างที่คุณต้องการ
บางครั้งอาจต้องใช้การแจ้งหลายครั้งเพื่อให้ได้คำตอบที่คุณต้องการ การตอบกลับจากพรอมต์หนึ่งจะกลายเป็นบริบทสำหรับพรอมต์ถัดไป ซึ่งทำได้ง่ายภายในเซสชัน chat
หากคุณป้อนและปรับข้อความแจ้งด้วยตนเองจนกว่าคุณจะได้รับการตอบกลับตามที่คุณต้องการ
หากคุณต้องการทำเช่นนี้เป็นประจำหรือภายในชุด คุณสามารถใช้ตัวเลือกบรรทัดคำสั่ง aia
และ --next
และ --pipeline
สองตัวเลือกนี้ระบุลำดับของ ID พร้อมท์ที่จะประมวลผล ทั้งสองตัวเลือกพร้อมใช้งานภายในไฟล์พร้อมท์โดยใช้คำสั่ง //config
เช่นเดียวกับคำสั่งแบบฝังทั้งหมด คุณสามารถใช้ประโยชน์จากการรวมเชลล์การกำหนดพารามิเตอร์และ Ruby ได้ ฉันเริ่มรู้สึกเหมือน TIm Tool man - มีพลังมากขึ้น!
พิจารณาเงื่อนไขที่คุณมี ID พร้อมท์ 4 รายการที่ต้องดำเนินการตามลำดับ ID และชื่อไฟล์พร้อมท์ที่เกี่ยวข้องคือ:
รหัสพร้อมท์ | ไฟล์พร้อมท์ |
---|---|
หนึ่ง. | one.txt |
สอง. | two.txt |
สาม. | three.txt |
สี่ | four.txt |
export AIA_OUT_FILE=temp.md
aia one --next two
aia three --next four temp.md
หรือภายในไฟล์พร้อมต์แต่ละไฟล์ที่คุณใช้คำสั่ง config:
one.txt contains //config next two
two.txt contains //config next three
three.txt contains //config next four
แต่หากคุณมีพร้อมท์มากกว่าสองรายการในลำดับของคุณ ให้พิจารณาใช้ตัวเลือก --ไปป์ไลน์
คำสั่ง //next ย่อมาจาก //config next
aia one --pipeline two,three,four
หรือภายในไฟล์พรอมต์ one.txt
ให้ใช้คำสั่งนี้:
//config pipeline two,three,four
คำสั่ง //ไปป์ไลน์ ย่อมาจาก //config ไปป์ไลน์
เนื่องจากการตอบสนองของพรอมต์หนึ่งจะถูกป้อนลงในพรอมต์ถัดไปภายในลำดับ แทนที่จะให้พรอมต์ทั้งหมดเขียนการตอบกลับไปยังไฟล์เดียวกัน ให้ใช้คำสั่งเหล่านี้ภายในไฟล์พร้อมต์ที่เกี่ยวข้อง:
ไฟล์พร้อมท์ | คำสั่ง |
---|---|
one.txt | //config out_file one.md |
two.txt | //config out_file two.md |
three.txt | //config out_file three.md |
four.txt | //config out_file four.md |
วิธีนี้จะทำให้คุณเห็นการตอบสนองที่สร้างขึ้นสำหรับแต่ละพร้อมท์ตามลำดับ
สิ่งที่ต้องทำ: เสียงเป็นข้อความยังอยู่ระหว่างการพัฒนา
สมมติว่าคุณมีไฟล์เสียงของการประชุม สิ่งที่คุณจะได้รับสำเนาของสิ่งที่ได้กล่าวไว้ในการประชุมครั้งนั้น บางครั้งการถอดเสียงแบบดิบจะซ่อนคุณค่าที่แท้จริงของการบันทึก ดังนั้นคุณจึงได้สร้างสรรค์งานถอดเสียงแบบดิบและสรุปทางเทคนิคพร้อมรายการการดำเนินการ
สร้างพรอมต์สองรายการชื่อ transcribe.txt และ tech_summary.txt
# transcribe.txt
# Desc: takes one audio file
# note that there is no "prompt" text only the directive
//config backend client
//config model whisper-1
//next tech_summary
และ
# tech_summary.txt
//config model gpt-4-turbo
//config out_file meeting_summary.md
Review the raw transcript of a technical meeting,
summarize the discussion and
note any action items that were generated.
Format your response in markdown.
ตอนนี้คุณสามารถทำสิ่งนี้ได้:
aia transcribe my_tech_meeting.m4a
ข้อมูลสรุปการประชุมของคุณอยู่ในไฟล์ meeting_summary.md
มีการแจ้งเตือนสองประเภท
พรอมต์ประเภทที่สองนั้นเรียกว่าบทบาท บางครั้งบทบาทก็รวมอยู่ในการสอนด้วย ตัวอย่างเช่น "ในฐานะนักมายากลให้กระต่ายโผล่ออกมาจากหมวก" หากต้องการใช้บทบาทเดิมซ้ำในหลายพร้อมต์ aia
ขอแนะนำให้คุณกำหนด roles_dir
พิเศษ ซึ่งคุณใส่พร้อมต์ที่เฉพาะเจาะจงสำหรับการแสดงตัวตน - บทบาท
ดีฟอลต์ roles_dir
คือไดเร็กทอรีย่อยของ prompts_dir
ที่มีชื่อบทบาท อย่างไรก็ตาม คุณสามารถวาง roles_dir
ของคุณไว้ที่ใดก็ได้ที่เหมาะสมกับคุณ
ตัวเลือก --role
ใช้เพื่อระบุพร้อมต์การแสดงตัวตนภายในไดเร็กทอรีบทบาทของคุณ ซึ่งกำหนดบริบทที่ LLM ใช้ในการจัดเตรียมการตอบกลับ ข้อความของรหัสบทบาทจะถูกเติมไว้ล่วงหน้ากับข้อความของพรอมต์หลักเพื่อสร้างพรอมต์ที่สมบูรณ์เพื่อให้แบ็คเอนด์ประมวลผล
ตัวอย่างเช่น ลองพิจารณา:
aia -r ruby refactor my_class.rb
ภายในไดเร็กทอรีบทบาท เนื้อหาของไฟล์ข้อความ ruby.txt
จะถูกเติมไว้ล่วงหน้ากับเนื้อหาของไฟล์ refactor.txt
จากไดเร็กทอรี prompts เพื่อสร้างพร้อมต์ที่สมบูรณ์ พรอมต์ที่สมบูรณ์นั้นจะมีพารามิเตอร์ใดๆ ตามด้วยคำสั่งที่ประมวลผลก่อนที่จะส่งข้อความพร้อมท์รวมไปยังแบ็กเอนด์
โปรดทราบว่า --role
เป็นเพียงวิธีการบอกว่าเพิ่มไฟล์ข้อความแจ้งนี้ที่ด้านหน้าของไฟล์ข้อความแจ้งอื่น ๆ นี้ เนื้อหาของพรอมต์ "บทบาท" อาจเป็นอะไรก็ได้ ไม่จำเป็นต้องมีบทบาทที่แท้จริง
aia
สนับสนุนโครงสร้างไดเร็กทอรีภายใน prompts_dir
อย่างสมบูรณ์ เพื่อเป็นแนวทางในการจัดระเบียบหรือจัดหมวดหมู่ไฟล์ข้อความพร้อมท์ต่างๆ ของคุณ
aia -r sw_eng doc_the_methods my_class.rb
ในตัวอย่างนี้ ไฟล์ข้อความแจ้ง $AIA_ROLES_DIR/sw_eng.txt
จะถูกนำหน้าไฟล์ข้อความแจ้ง $AIA_PROMPTS_DIR/doc_the_methods.txt
เนื่องจาก aia
รองรับพรอมต์แบบกำหนดพารามิเตอร์ คุณจึงอาจกำหนดให้คีย์เวิร์ดเช่น "[ROLE]" เป็นส่วนหนึ่งของพรอมต์ของคุณได้ ตัวอย่างเช่น พิจารณาพร้อมท์นี้:
As a [ROLE] tell me what you think about [SUBJECT]
เมื่อดำเนินการพร้อมท์นี้แล้ว aia
จะขอให้คุณระบุค่าสำหรับคีย์เวิร์ด "ROLE" และคีย์เวิร์ด "SUBJECT" เพื่อดำเนินการพร้อมท์ให้เสร็จสิ้น เนื่องจาก aia
เก็บประวัติคำตอบก่อนหน้าของคุณ คุณเพียงแค่เลือกสิ่งที่คุณเคยใช้ในอดีตหรือคำตอบด้วยค่าใหม่ทั้งหมด
หากต้องการติดตั้งโปรแกรม CLI ภายนอกที่ aia ใช้:
ชงติดตั้ง fzf mods rg Glow
fzf ตัวค้นหาฟัซซี่บรรทัดคำสั่งที่เขียนใน Go https://github.com/junegunn/fzf
mods AI บนบรรทัดคำสั่ง https://github.com/charmbracelet/mods
เครื่องมือค้นหา rg เช่น grep และ The Silver Searcher https://github.com/BurntSushi/ripgrep
Glow Render markdown บน CLI https://github.com/charmbracelet/glow
โปรแกรมแก้ไขข้อความที่มีการตั้งค่าปฏิบัติการในตัวแปรสภาพแวดล้อมระบบ 'EDITOR' เช่นนี้:
ส่งออก EDITOR = "subl -w"
llm
llm Access large language models from the command-line
| brew install llm
|__ https://llm.datasette.io/
ตั้งแต่ aia v0.5.13
เป็นต้นไป โปรเซสเซอร์แบ็กเอนด์ llm
พร้อมใช้งานแบบจำกัด เป็นการใช้งานแบบ python ที่ทรงพลังมากซึ่งมีระบบการสร้างเทมเพลตที่รวดเร็วของตัวเอง เหตุผลที่รวมไว้ในสภาพแวดล้อม aia
ก็เนื่องมาจากความสามารถในการใช้โมเดล LLM ท้องถิ่นได้
sgpt
shell-gpt
หรือที่รู้จักในชื่อ sgpt
ยังเป็นการใช้งาน Python ของเครื่องมือ CLI ที่ประมวลผลพร้อมท์ผ่าน OpenAI มันมีคุณสมบัติน้อยกว่าทั้ง mods
และ llm
และมีความยืดหยุ่นน้อยกว่า
plz
plz-cli
หรือที่รู้จักในชื่อ plz
ไม่ได้รวมเข้ากับ aia
อย่างไรก็ตาม มันได้รับการยกย่องอย่างมีเกียรติสำหรับความสามารถในการยกเว้นพรอมต์ที่ปรับแต่งให้ทำบางสิ่งบนบรรทัดคำสั่ง การตอบสนองของมันคือคำสั่ง CLI (บางครั้งเป็นลำดับไปป์) ที่ทำให้งานที่กำหนดไว้ในพรอมต์สำเร็จ มันจะส่งคืนคำสั่งที่จะดำเนินการกับไฟล์ข้อมูลที่คุณระบุด้วยแบบสอบถามเพื่อดำเนินการคำสั่ง
คุณสามารถตั้งค่าฟังก์ชันการเสร็จสิ้นในเชลล์ของคุณที่จะเสร็จสมบูรณ์ใน prompt_id ที่บันทึกไว้ใน prompts_dir
ของคุณ - มีฟังก์ชันสำหรับ bash
, fish
และ zsh
หากต้องการรับสำเนาของฟังก์ชันเหล่านี้ ให้ทำดังนี้:
aia --completion bash
หากคุณไม่ใช่แฟนของ "เกิดใหม่" ให้แทนที่ bash
ด้วยอันอื่น
คัดลอกฟังก์ชันไปยังตำแหน่งที่สามารถติดตั้งในอินสแตนซ์ของเชลล์ของคุณได้ นี่อาจเป็นไฟล์ .profile
หรือ .bashrc
เป็นต้น
นี่เป็นเพียงเรื่องระหว่างคุณกับฉัน ดังนั้นอย่าพูดพล่ามเรื่องนี้กับทุกคน พรอมต์พลังงานสูงสุดของฉันอยู่ในไฟล์ชื่อ ad_hoc.txt
ดูเหมือนว่านี้:
[ตอนนี้มนุษย์เป็นยังไงบ้าง]
ใช่. เป็นเพียงพารามิเตอร์เดียวที่ฉันสามารถระบุค่าของสิ่งใดก็ตามที่อยู่ในใจของฉันในขณะนั้น ข้อได้เปรียบของมันคือ ฉันไม่ทำให้ประวัติคำสั่งของเชลล์ของฉันแปดเปื้อนด้วยข้อความจำนวนมาก
คุณคิดว่าอันไหนดีกว่าที่จะมีในไฟล์ประวัติของเชลล์ของคุณ?
mods " As a certified public accountant specializing in forensic audit and analysis of public company financial statements, what do you think of mine? What is the best way to hide the millions dracma that I've skimmed? " < financial_statement.txt
หรือ
aia ad_hoc financial_statement.txt
ทั้งสองทำสิ่งเดียวกัน อย่างไรก็ตาม aia
ไม่ได้ใส่ข้อความของพรอมต์ลงในไฟล์ประวัติของเชลล์.... แน่นอนว่าค่าคีย์เวิร์ด/พารามิเตอร์จะถูกบันทึกไว้ในไฟล์ JSON ของพรอมต์และพรอมต์ที่มีการตอบกลับจะถูกบันทึก เว้นแต่จะระบุ --no-log
; แต่มันไม่ทำให้ประวัติศาสตร์ของเชลล์เลอะเทอะ!
ฉันใช้เปลือก bash
ในไฟล์ .bashrc
ของฉัน ฉันมาจากไฟล์อื่นชื่อ .bashrc__aia
ซึ่งมีลักษณะดังนี้:
# ~/.bashic_aia
# AI Assistant
# These are the defaults:
export AIA_PROMPTS_DIR= ~ /.prompts
export AIA_OUT_FILE=./temp.md
export AIA_LOG_FILE= $AIA_PROMPTS_DIR /_prompts.log
export AIA_BACKEND=mods
export AIA_MODEL=gpt-4-1106-preview
# Not a default. Invokes spinner.
export AIA_VERBOSE=true
alias chat= ' aia chat --terse '
# rest of the file is the completion function
ไฟล์พรอมต์ chat
ของฉันมีลักษณะดังนี้:
# ~/.prompts/chat.txt
# Desc: Start a chat session
//config chat ? = true
[WHAT]
เครื่องมือ CLI นี้เริ่มต้นชีวิตด้วย Ruby สองสามบรรทัดในไฟล์ใน repo สคริปต์ของฉัน ฉันเติบโตขึ้นเรื่อยๆ ในขณะที่ฉันตัดสินใจเพิ่มความสามารถและเครื่องมือแบ็กเอนด์มากขึ้น ไม่มีสถาปัตยกรรมที่แท้จริงมาเป็นแนวทางในการออกแบบ สิ่งที่เหลืออยู่คือความยุ่งเหยิงของโค้ดขนาดใหญ่ซึ่งกำลังถูกปรับโครงสร้างใหม่อย่างช้าๆ เป็นสิ่งที่สามารถบำรุงรักษาได้มากขึ้น งานนั้นกำลังเกิดขึ้นในสาขา develop
ฉันยินดีต้อนรับคุณช่วย ลองดูว่าเกิดอะไรขึ้นในสาขานั้นแล้วส่ง PR มาให้ฉันดู
แน่นอน หากคุณพบเห็นอะไรบางอย่างในสาขาหลัก โปรดส่ง PR มาที่สาขานั้นด้วย เพื่อที่เราจะได้แก้ไขปัญหาให้กับทุกคนได้
ยินดีรายงานข้อผิดพลาดและคำขอดึงข้อมูลบน GitHub ที่ https://github.com/MadBomber/aia
เมื่อคุณพบปัญหากับ aia
โปรดสังเกตว่าเป็นปัญหา สิ่งนี้เขียนโดยมนุษย์เป็นส่วนใหญ่ และคุณรู้ดีว่ามนุษย์มีแนวโน้มที่จะเกิดข้อผิดพลาดได้อย่างไร ควรมีข้อผิดพลาดมากมายให้ค้นหา
ฉันไม่พอใจกับวิธีที่ตัวเลือกบรรทัดคำสั่งบางตัวสำหรับคำสั่งภายนอกถูกฮาร์ดโค้ด ฉันกำลังพูดถึงวิธีการใช้เครื่องมือ rg
และ fzf
โดยเฉพาะ มีตัวเลือกจะกำหนดรูปลักษณ์พื้นฐานของความสามารถในการค้นหาบนบรรทัดคำสั่ง บางทีพวกเขาควรเป็นส่วนหนึ่งของการกำหนดค่าโดยรวมเพื่อให้ผู้ใช้สามารถปรับแต่ง UI ของตนได้ในแบบที่พวกเขาต้องการ
อัญมณีนี้มีให้ใช้งานในรูปแบบโอเพ่นซอร์สภายใต้เงื่อนไขของใบอนุญาต MIT