Bash4LLM⁺ คือ Bash script ไฟล์เดียวที่เรียก LLM จากเทอร์มินัลได้ ไม่ต้องลง SDK หรือ Python
Bash4LLM⁺ คือ Bash script ไฟล์เดียวที่เรียก LLM จากเทอร์มินัลได้ ไม่ต้องลง Python Node หรือ SDK ของใคร จุดต่างคือ CLI ทั้งหมดเปิดอ่านและตรวจสอบได้ เลยเอาไปใช้กับ pipeline และ cron ในงานจริงได้อย่างมั่นใจ

ปกติเวลาจะใช้โมเดล AI สักตัว คนส่วนใหญ่จะเปิดเว็บหรือแอปแชตขึ้นมาพิมพ์คุย แต่ Bash4LLM⁺ มาอีกแบบ เป็นโปรแกรมเล็กๆ ที่ให้คุยกับ AI ได้จากหน้าจอเทอร์มินัลโดยตรง เหมาะกับคนที่ทำงานอยู่กับบรรทัดคำสั่งเป็นหลัก ทั้งสาย dev สาย sysadmin และคนที่เขียนสคริปต์สั่งงานเครื่องแบบอัตโนมัติ
เบื้องหลังมันคุยกับ Groq ซึ่งเป็นบริการเรียกโมเดล LLM ผ่าน API รูปแบบเดียวกับ OpenAI ฝั่งผู้ใช้แค่มี API key ก็สั่งโมเดลได้ และเพราะมันเป็น Bash script ไฟล์เดียวจริงๆ จึงไม่ต้องลง Python ไม่ต้องลง Node ไม่ต้องลง SDK ของเจ้าไหน แค่โหลดไฟล์มา สั่ง chmod +x ให้รันได้ ใส่ GROQ_API_KEY แล้วพิมพ์คำถามต่อท้ายชื่อสคริปต์ได้เลย
จุดที่ทำให้มันต่างจากเครื่องมือเรียก LLM ตัวอื่นไม่ใช่ฟีเจอร์ที่เยอะกว่า แต่กลับตรงกันข้าม เพราะ CLI ทั้งหมดรวมอยู่ในไฟล์เดียว เปิดอ่านได้ทุกบรรทัด จึงเห็นว่ามันส่งอะไรขึ้นเน็ตและไปยุ่งกับอะไรในเครื่องเราบ้าง
CLI ทั้งหมดอยู่ในไฟล์เดียวที่อ่านได้หมด

คำว่าไฟล์เดียวในที่นี้คือไฟล์เดียวจริงๆ ตัว CLI ทั้งหมดเป็น Bash script ที่จบในตัวเอง เปิดด้วย editor ตัวไหนก็ไล่อ่านได้ตั้งแต่บรรทัดแรกถึงบรรทัดสุดท้าย เห็นว่ามันยิง request ไปที่ endpoint ไหน แนบ header อะไร และเขียนไฟล์ลงตรงไหนบ้าง
เทียบกับเครื่องมือเรียก LLM ทั่วไปที่มักมาเป็น SDK ก้อนใหญ่และลากแพ็กเกจตามมาอีกหลายสิบตัว เรามักได้แต่เชื่อว่าข้างในมันทำตามที่บอกไว้ แต่ไฟล์นี้อ่านโค้ดได้ครบ จึงตรวจสอบเองได้ว่าไม่มีอะไรแอบส่งข้อมูลออกไปที่อื่น ซึ่งสำคัญมากเวลาจะเอาไปใช้กับงานที่มีข้อมูลสำคัญจริงๆ
เครื่องมือที่เปิดอ่านได้ทุกบรรทัด คือเครื่องมือที่ตรวจสอบเองได้ว่ามันทำอะไรกับข้อมูลเรา
อีกอย่างที่ควรรู้คือมันไม่ได้ฝัง model list ไว้ตายตัว เวลาสั่ง --refresh-models มันจะดึงรายชื่อโมเดลล่าสุดจาก Groq มาเองผ่าน endpoint /models เลยไม่ต้องรอใครมาอัปเดตไฟล์ให้ และโดยค่าเริ่มต้นมันไม่จำบทสนทนาข้ามรอบ ถ้าอยากให้จำบริบทต่อเนื่องค่อยเปิด --session เอาตอนนั้น
ลงเสร็จในไม่กี่บรรทัด
เริ่มใช้จริงทำได้ในไม่กี่นาที เริ่มจาก clone repo ลงมา ก็อปไฟล์สคริปต์ออกมาหนึ่งไฟล์ สั่ง chmod +x แล้วใส่ API key จาก Groq จากนั้นดึง model list แล้วถามคำถามแรก
git clone --depth 1 --branch main https://github.com/kamaludu/bash4llm.git repo-bash4llm
cp repo-bash4llm/bin/bash4llm . && chmod +x bash4llm
export GROQ_API_KEY="gsk_xxxxxxxxxxxxxxxxx"
./bash4llm --refresh-models
./bash4llm "อธิบาย closure ใน JavaScript แบบสั้นๆ"API key ที่ขึ้นต้นด้วย gsk_ เอามาจากหน้า dashboard ของ Groq แล้วใส่ผ่าน environment variable ชื่อ GROQ_API_KEY ส่วน --refresh-models ต้องมี key ก่อนถึงจะทำงานได้ เพราะต้องไปถาม Groq ว่ามีโมเดลอะไรให้ใช้บ้าง หลังจากนั้น เวลาจะถามก็แค่พิมพ์คำถามในเครื่องหมายคำพูดต่อท้าย ./bash4llm
ถามได้หลายแบบ จะให้คำตอบไหลทีละส่วนหรือรอจบทีเดียวก็ได้
นอกจากพิมพ์คำถามตรงๆ แล้ว มันยังรับ input ได้หลายทางตามสไตล์งานที่ทำ
./bash4llm "คำถาม"สำหรับถามเร็วๆ ทีละคำถามecho "explain relativity" | ./bash4llmสำหรับต่อท้ายคำสั่งอื่นด้วย pipe ให้ผลลัพธ์ไหลเข้ามาเอง./bash4llm -f prompt.txtสำหรับ prompt ยาวๆ ที่เก็บไว้เป็นไฟล์./bash4llm -m llama-3.3-70b-versatile "..."สำหรับเลือกโมเดลเองเป็นรายครั้ง./bash4llm --chatสำหรับนั่งคุยโต้ตอบต่อเนื่องแบบ REPL ในเทอร์มินัล
จะเลือกแบบไหนก็ดูที่งาน ถ้าถามสดทีละครั้งให้พิมพ์ตรงๆ ถ้าจะเอาไปต่อในสคริปต์ให้ใช้ pipe และถ้าอยากนั่งคุยยาวๆ ให้ใช้ --chat
ส่วนรูปแบบการตอบมีให้เลือกสองทาง คือ --stream ที่ปล่อยคำตอบไหลออกมาทีละส่วนแบบเรียลไทม์ เห็นมันพิมพ์ไปเรื่อยๆ เหมาะกับตอนนั่งดูเอง กับ --no-stream ที่รอจนจบแล้วค่อยคืนคำตอบมาทั้งก้อน เหมาะกับตอนเอาผลไปเก็บต่อในสคริปต์ เพราะได้ข้อความครบในทีเดียว
ใช้กับ pipeline · cron · มือถือได้เลย

เพราะมันอ่าน stdin และพ่นผลออก stdout เหมือนคำสั่ง Unix ทั่วไป เลยเอาคำตอบของโมเดลไปต่อกับคำสั่งถัดไปได้ทันที จะเอาไปแทรกใน cron ให้รันเองตามเวลา หรือร้อยอยู่กลางสคริปต์ยาวๆ ก็ได้หมด ถ้ามีคำถามเป็นชุด --batch ก็รับไฟล์ที่ใส่หนึ่ง prompt ต่อหนึ่งบรรทัดแล้วไล่ถามให้ทีละอัน
อีกจุดที่ไฟล์เดียวและไม่ต้องมีรันไทม์ภาษาได้เปรียบชัดคือบนมือถือ มันรันใน Termux บน Android ได้ และตรวจจับ Termux เอง พอรู้ว่าอยู่บน Android ก็เลี่ยง flock ที่มักมีปัญหาในระดับ kernel หรือ SELinux ของ Android แล้วใช้กลไกล็อกแบบ directory-lock ด้วย mkdir แทน งานเลยไม่สะดุด สรุปคือ scp ไฟล์เดียวขึ้นเครื่องไหน ก็พร้อมเรียกโมเดลจากเครื่องนั้น
ปลอดภัยมาตั้งแต่ออกแบบ
จุดที่ออกแบบมาดีและควรรู้ไว้คือมันไม่เคยเอา output ของโมเดลไปรันเป็นคำสั่ง ต่อให้โมเดลตอบกลับมาเป็นข้อความที่หน้าตาเหมือนคำสั่ง shell เป๊ะ สคริปต์ก็มองมันเป็นแค่ข้อความ ไม่เอาไปรันเป็นคำสั่ง และไม่มี eval ซ่อนอยู่ตรงไหนเลย
มันยังไม่ยุ่งกับ /tmp ของระบบ โดยเก็บไฟล์ชั่วคราวไว้ในไดเรกทอรีของตัวเองและตั้ง permission ไว้ที่ 700 ส่วนไฟล์ที่บันทึกผลลัพธ์ตั้งไว้ที่ 600 คนอื่นบนเครื่องเดียวกันเลยอ่านคำถามหรือคำตอบของเราไม่ได้ เรื่องพวกนี้สำคัญเพราะยิ่งเอา output ของโมเดลไปรันใน automation มากเท่าไร ก็ยิ่งต้องปิดโอกาสที่ข้อความแปลกปลอมจะหลุดไปรันเองตั้งแต่แรก ซึ่งตัวนี้ปิดไว้ให้ตั้งแต่ขั้นออกแบบ
สองเรื่องที่ต้องเข้าใจให้ตรง
ของแบบนี้ต้องเข้าใจขอบเขตให้ตรงด้วย ไม่อย่างนั้นจะคาดหวังผิด
เรื่องแรก คำว่าไม่ต้องลง SDK ไม่ได้แปลว่าไม่ต้องลงอะไรเลย
บน Linux หรือ macOS ส่วนใหญ่เครื่องมือพวกนี้ติดมากับระบบอยู่แล้ว หรือไม่ก็ลงเพิ่มได้ด้วยคำสั่งเดียว สิ่งที่หายไปจริงๆ คือขั้นตอนตั้ง virtualenv หรือจัดการเวอร์ชันรันไทม์ ไม่ใช่ตัว dependency ทั้งหมด
เรื่องที่สอง โดยค่าเริ่มต้นมันคุยกับ Groq เป็นหลัก provider อื่นอย่าง Gemini · Hugging Face · Mistral ต่อเพิ่มได้ก็จริง แต่ต้องลง extras ผ่าน --install-extras ก่อน ไม่ได้มาพร้อมในไฟล์ตั้งแต่แรก เพราะฉะนั้นมองมันเป็นเครื่องมือสาย Groq ที่ขยายต่อได้ จะตรงกว่าคาดหวังให้เป็น hub กลางที่รองรับทุกเจ้าตั้งแต่บรรทัดแรก
ทำไมไฟล์เดียวถึงน่าวางใจกว่า
ในยุคที่เครื่องมือ AI ส่วนใหญ่บวมจนเปิดอ่านไม่ไหว การที่ CLI ทั้งหมดมาอยู่ในไฟล์เดียวและไล่อ่านจบได้ในบ่ายเดียว กลับเป็นเหตุผลที่ทำให้กล้าเอามันไปใช้กับงานจริงจัง เพราะเครื่องมือที่ตรวจสอบได้ทุกบรรทัด คือเครื่องมือที่ไว้ใจให้รันแทนเราแบบอัตโนมัติได้
ที่มา: Bash4LLM⁺ บน GitHub



