เครื่องมือ CLI สำหรับ LLM ของฉันสามารถรันเครื่องมือจากโค้ด Python หรือปลั๊กอินได้แล้ว
(simonwillison.net)- ใน LLM 0.26 มีการเพิ่มความสามารถด้าน การเรียกใช้เครื่องมือ อย่างหลากหลาย ทำให้โมเดล LLM หลายค่าย เช่น OpenAI, Anthropic, Gemini และ Ollama สามารถใช้เครื่องมือที่พัฒนาเป็นฟังก์ชัน Python หรือปลั๊กอินได้
- สามารถ ติดตั้งเครื่องมือโดยตรงหรือส่งเป็นฟังก์ชัน ผ่าน command line หรือ Python API ได้ จึงเพิ่มทั้งความสามารถในการขยายและความยืดหยุ่นอย่างมาก
- ด้วยปลั๊กอินเครื่องมือ สามารถเพิ่มความสามารถต่าง ๆ ให้โมเดลได้ง่าย เช่น การคำนวณทางคณิตศาสตร์ การรัน JavaScript การสืบค้น SQL และการเชื่อมต่อบริการภายนอก
- ผู้ให้บริการ LLM รายใหญ่ทั้งหมดและโมเดลแบบโลคัล ต่างเริ่มใช้รูปแบบการเรียกเครื่องมือกันอย่างแพร่หลาย และ LLM 0.26 ก็รวมสิ่งนี้เข้าด้วยกันในรูปแบบที่เป็นมาตรฐาน
- สำหรับ แผนในอนาคตและทิศทางการพัฒนา มีการพูดถึงการรองรับมาตรฐาน MCP การขยายระบบนิเวศการพัฒนาปลั๊กอิน และการปรับปรุงบันทึกการรันเครื่องมือ
LLM 0.26: รองรับการเรียกใช้เครื่องมือกับโมเดลภาษาขนาดใหญ่จากเทอร์มินัล
ณ วันที่ 27 พฤษภาคม 2025 มีการเปิดตัว LLM 0.26 แล้ว เวอร์ชันนี้เป็นการเปลี่ยนแปลงครั้งใหญ่ที่สุดนับตั้งแต่เริ่มโครงการ LLM โดยมีการเพิ่มการรองรับเครื่องมือ (tool) เข้ามา ตอนนี้โมเดล LLM หลากหลายค่าย เช่น OpenAI, Anthropic, Gemini และ Ollama สามารถเชื่อมเข้ากับเครื่องมือ CLI และไลบรารี Python ของ LLM เพื่อเข้าถึงเครื่องมือใด ๆ ก็ได้ที่สามารถนิยามเป็นฟังก์ชัน Python
ฟีเจอร์และการเปลี่ยนแปลงสำคัญ
- ติดตั้งและโหลดเครื่องมือจากปลั๊กอิน: สามารถลงทะเบียนและใช้งานเครื่องมือผ่านปลั๊กอินที่ติดตั้งไว้ได้ด้วยออปชัน
--tool/-T - ส่งโค้ด Python ผ่าน command line: ใช้ออปชัน
--functionsเพื่อส่งโค้ดฟังก์ชัน Python โดยตรงและนำมาใช้เป็นเครื่องมือได้ - รองรับเครื่องมือใน Python API ด้วย: ส่ง
tools=[ชื่อฟังก์ชัน]ให้เมธอด.chainเพื่อเชื่อมต่อเครื่องมือได้ง่าย - รองรับทั้ง context แบบ synchronous และ asynchronous: สามารถเรียกใช้เครื่องมือได้ทั้งในสถานการณ์ sync และ async
ตัวอย่างการใช้งานเครื่องมือ
การเตรียมใช้งาน
-
ต้องติดตั้งหรืออัปเกรด LLM เป็นเวอร์ชันล่าสุด
-
ลงทะเบียน API key เช่นของ OpenAI:
llm keys set openai # ป้อน API key -
ตัวอย่างการรันเครื่องมือตัวแรก:
llm --tool llm_version "What version?" --td- llm_version เป็นเครื่องมือเดโมแบบง่ายที่มีมาให้
--tdคือออปชันสำหรับ แสดงดีบักของเครื่องมือ เพื่อดูขั้นตอนการเรียกใช้และเนื้อหาการตอบกลับ
-
เปลี่ยนโมเดล:
llm models default gpt-4.1-mini- รองรับโมเดลได้หลากหลายผ่านออปชัน (เช่น
-m o4-mini)
- รองรับโมเดลได้หลากหลายผ่านออปชัน (เช่น
-
เรียกใช้เครื่องมือเวลาที่มีมาในตัว:
llm --tool llm_time "What time is it?" --td -m o4-mini- จะแสดงข้อมูลเวลาและเขตเวลาอย่างละเอียด
รองรับหลายโมเดลและปลั๊กอิน
- ทำงานด้วยอินเทอร์เฟซเครื่องมือเดียวกันได้ใน สภาพแวดล้อมของโมเดล LLM หลายแบบ เช่น Anthropic Claude 4, Google Gemini 2.5 Flash และ Ollama Qwen3:4b
- ตัวอย่างคำสั่ง:
llm install llm-anthropic -U llm keys set anthropic llm --tool llm_version "What version?" --td -m claude-4-sonnet
การคำนวณทางคณิตศาสตร์และการรันโค้ด
- สามารถใช้เครื่องมือ Python มาชดเชย ข้อจำกัดของ LLM ที่ไม่เก่งคณิตศาสตร์ ได้
- ปลั๊กอิน llm-tools-simpleeval รองรับการคำนวณเลขคณิตอย่างปลอดภัย
llm install llm-tools-simpleeval llm -T simpleeval llm -T simple_eval 'Calculate 1234 * 4346 / 32414 and square root it' --td- หากไม่มีการรองรับ
sqrt()ก็สามารถแทนด้วย** 0.5ได้ ซึ่งช่วยให้ การรันโค้ดยืดหยุ่น มากขึ้น
- หากไม่มีการรองรับ
แนะนำปลั๊กอินเครื่องมือ
- [llm-tools-simpleeval]: คำนวณเลขคณิตและนิพจน์ง่าย ๆ
- [llm-tools-quickjs]: เครื่องมืออินเทอร์พรีเตอร์ JavaScript sandbox ของ QuickJS
- [llm-tools-sqlite]: สืบค้น SQL แบบ อ่านอย่างเดียว กับฐานข้อมูล SQLite ในเครื่อง
- [llm-tools-datasette]: รองรับการรัน SQL query กับอินสแตนซ์ Datasette ระยะไกล
ตัวอย่าง:
llm install llm-tools-datasette
llm -T 'Datasette("https://datasette.io/content")' --td "What has the most stars?"
- เป็นปลั๊กอินแบบ toolbox ที่ตั้งค่าได้ผ่านอาร์กิวเมนต์ เช่น URL
- หากระบุคอลัมน์ผิด จะสามารถ ตรวจจับ error จากเครื่องมือและลองใหม่ → ดู schema → สร้าง query ที่ถูกต้องได้ แสดงให้เห็นถึงความสามารถในการปรับตัวของ LLM
นิยามเครื่องมือด้วยโค้ด Python โดยตรง
- สามารถส่ง ฟังก์ชัน Python แบบกำหนดเอง ผ่านออปชัน
--functionsบน command line แล้วเปลี่ยนเป็นเครื่องมือได้ทันที - ตัวอย่าง:
llm --functions ' import httpx def search_blog(q): "Search Simon Willison blog" return httpx.get("https://simonwillison.net/search/", params={"q": q}).content ' --td 'Three features of sqlite-utils' -s 'use Simon search'- สามารถสร้างเครื่องมือค้นหาเว็บแบบง่ายได้
- การกำหนดทิศทางให้โมเดลใช้เครื่องมือผ่าน system prompt เป็นสิ่งสำคัญ
การใช้งานร่วมกับไลบรารี Python
- LLM รองรับทั้ง CLI และ Python API
- เมธอด
.chain()จะตรวจจับคำขอเรียกใช้เครื่องมือ → รันเครื่องมือ → นำผลลัพธ์กลับมาใช้ต่อได้โดยอัตโนมัติ - ตัวอย่าง:
import llm def count_char_in_text(char: str, text: str) -> int: "How many times does char appear in text?" return text.count(char) model = llm.get_model("gpt-4.1-mini") chain_response = model.chain( "Rs in strawberry?", tools=[count_char_in_text], after_call=print ) for chunk in chain_response: print(chunk, end="", flush=True) - รองรับ ฟังก์ชันแบบ async (
async def) ด้วย จึงใช้งานแบบทำงานพร้อมกันได้ - ปลั๊กอินแบบ toolbox ก็เชื่อมต่อได้ตรง ๆ ในรูปแบบ
tools=[Datasette(...)]
พัฒนาการของแนวคิดเรื่องเครื่องมือ
- รูปแบบการเรียกใช้เครื่องมือ ถูกนำเสนอไว้ตั้งแต่บทความวิจัย ReAcT ปี 2022 เป็นต้นมา และหลังจากนั้นผู้ให้บริการ LLM รายใหญ่ทั้งหมดรวมถึงโมเดลโลคัลก็นำไปใช้
- แต่ละ API ใช้ชื่อแตกต่างกัน เช่น "Function calling" หรือ "การใช้เครื่องมือ" แต่สุดท้ายก็อยู่ในรูปแบบเดียวกัน
- Ollama และ llama.cpp ก็ได้เพิ่ม การรองรับเครื่องมือ และขยายความสามารถนี้ไปแล้วเช่นกัน
เบื้องหลังการพัฒนาและการใช้งานจริง
- ทีมพัฒนา LLM ตระหนักมานานแล้วว่าจำเป็นต้องมีการเชื่อมต่อกับเครื่องมือ แต่การออกแบบ abstraction layer ให้ครอบคลุมหลายโมเดลเป็นเรื่องยาก
- เมื่อรูปแบบการใช้เครื่องมือระหว่างผู้ให้บริการเริ่มเป็นมาตรฐานมากขึ้น LLM 0.26 จึงสามารถรวมการทำงานนี้ไว้ได้
- มีการสาธิตการใช้งานจริงในเวิร์กช็อป PyCon US 2025 ด้วย
ความสัมพันธ์กับ “เอเจนต์”
- แม้คำว่า "เอเจนต์" ยังเป็นคำที่มีข้อถกเถียง แต่ในระบบนิเวศ LLM ปัจจุบัน รูปแบบ "tool in the loop" ได้กลายเป็นมาตรฐานไปแล้ว
- LLM 0.26 เป็นการใช้งานที่เหมาะกับการพัฒนาเอเจนต์เช่นกัน
- ต่อจากนี้จะมีการผลักดันเทมเพลตสำหรับ สร้างปลั๊กอิน ประเด็นการปรับปรุง และเอกสารสำหรับปลั๊กอินขั้นสูงอย่างต่อเนื่อง
เตรียมรองรับ Model Context Protocol (MCP)
- MCP กำลังกลายเป็นโปรโตคอลมาตรฐานใหม่อย่างรวดเร็วสำหรับให้ LLM เข้าถึงเครื่องมือ
- ภายในช่วง 8 วันที่ผ่านมา API ของผู้ให้บริการรายใหญ่อย่าง OpenAI, Anthropic และ Mistral ก็เริ่มนำไปใช้อย่างรวดเร็ว
- แผนต่อไปคือทำให้ LLM เป็น MCP client เพื่อเชื่อมต่อกับ MCP server ที่หลากหลายได้อย่างง่ายดาย
ชุมชนและการขยายระบบนิเวศ
- มีชุมชน Discord สำหรับพูดคุยเรื่องปลั๊กอิน เครื่องมือ และการขยายระบบนิเวศของโครงการ LLM
- มีการเน้นย้ำว่าความเป็นไปได้ของการใช้ LLM แบบอิงเครื่องมือในระบบนิเวศโอเพนซอร์สนั้น แทบไร้ขีดจำกัด
ด้วยแนวทางเหล่านี้ LLM 0.26 กำลังกลายเป็น แพลตฟอร์มเชื่อมต่อเครื่องมือ ที่ใช้งานได้ทั่วไปและขยายต่อได้ ซึ่งทำงานร่วมกับโมเดล LLM รายใหญ่ทั้งหมดได้อย่างมีประสิทธิภาพ เครื่องมือเหล่านี้ช่วยขยายขอบเขตการใช้งานของโมเดลภาษาอย่างมาก จึงเป็นเครื่องมือที่มีความหมายอย่างยิ่งสำหรับนักพัฒนาและผู้ปฏิบัติงานสายไอที
1 ความคิดเห็น
ความเห็นจาก Hacker News
ผมมีตัวเรนเดอร์ Markdown แบบสตรีมมิงที่ทำขึ้นมาเองสำหรับเครื่องมือนี้
ดูรายละเอียดเพิ่มเติมได้ที่ Streamdown
และยังมีสิ่งที่น่าสนใจอีกอัน ที่นี่
ผมยังทำเครื่องมือ tmux ชื่อ llmehelp เองด้วย ซึ่งสร้างอยู่บน llm ของ Simon
ตอนนี้กลายเป็นเครื่องมือที่ขาดไม่ได้และใช้ทุกวันไปแล้ว
ไลบรารีนี้ดูเจ๋งมากจริงๆ
ผมคิดว่าน่าจะดีถ้ามี hook ที่เปิดให้ปลั๊กอินควบคุมส่วนการแสดงผลเนื้อหาได้โดยตรง
ผมเปิด issue เรื่องนี้ไว้ ที่นี่
ใส่ตัวเลือกด้านดีไซน์ไว้หลายแบบ แต่ก็ยังไม่มั่นใจเต็ม 100%
อยากได้ฟีดแบ็กมาก
มีอีกอย่างที่ผมลืมพูดถึง
คราวนี้เป็นปลั๊กอิน ZSH ที่สร้างบน llm
ใช้ zle เพื่อแปลภาษาอังกฤษเป็นคำสั่งเชลล์ได้ในครั้งเดียว
พระเอกก็คือ Zummoner
เป็นเครื่องมือที่เปลี่ยนชีวิตผมไปเลย
ตัวอย่างเช่นคำสั่งที่ผมเพิ่งสร้างวันนี้
เป็นคำสั่งที่ผมใช้จริงในคอมเมนต์อันหนึ่งนี้
เดิมทีคือ
ผมส่งบัฟเฟอร์ไปที่ openrouter ด้วยคีย์ลัด ctrl-x x ที่ไว้ใจได้ แล้วไม่ถึง 1 วินาทีก็ได้ไวยากรณ์ที่ถูกต้องกลับมา
เจ๋งมาก
ผมเองก็เคยทำตัวเรนเดอร์ Markdown แบบสตรีมมิงในหลายภาษาเพื่อแสดงผลลัพธ์จาก LLM แบบเร็วๆ เหมือนกัน
ดีใจที่รู้ว่าไม่ได้มีแค่ผมคนเดียว
น่าสนใจ เดี๋ยวจะลองดูแน่นอน
ตอนนี้ผมใช้ llm คู่กับ bat เพื่อทำ syntax highlighting อยู่
นี่แหละฟีเจอร์ที่ผมอยากได้มาก
ขอบคุณ
เครื่องมือแบบนี้เพิ่มความเสี่ยงที่จะเป็น footgun ได้สูงมาก
ในเอกสารก็มีคำเตือนเรื่อง prompt injection อยู่ แต่ในทางปฏิบัติผมคิดว่าความเสียหายจากการพลาดเองน่าจะเกิดบ่อยกว่า
เช่น ถ้าให้เครื่องมือเข้าถึงบัญชีนายหน้า ก็สามารถทำระบบเทรดอัตโนมัติได้
ต่อให้ไม่มี prompt injection ถ้าบอตดันเทรดโง่ๆ ก็ไม่มีทางหยุดได้
เอกสารอ้างอิง
ความเสี่ยงที่จะเกิดเรื่องแบบนี้สูงมากจริงๆ
พอเอาเครื่องมือไปต่อกับ LLM แล้ว มันสามารถลงมือทำอะไรแทนผมผ่านการเรียกที่มีสิทธิ์ยืนยันตัวตนได้ ทำให้เกิดสถานการณ์ไม่คาดคิดได้เยอะมาก
เราเห็นปรากฏการณ์นี้ได้จากกรณี GitHub MCP ล่าสุด เป็นต้น บทความที่เกี่ยวข้อง
ผมใส่คำเตือนเรื่องความเสี่ยงไว้เด่นมากในเอกสาร และยังไม่ได้ปล่อยปลั๊กอินเครื่องมือชุดแรกที่อาจทำให้เกิดความเสียหายจริง
เพราะงั้น QuickJS sandbox กับปลั๊กอิน SQLite ของผมจึงเป็นแบบอ่านอย่างเดียวเท่านั้น
แต่ถึงอย่างนั้น พื้นที่นี้ก็ยังทั้งน่าสนุกและน่าทึ่งมาก
ถ้ามีใครเอา llm ไปต่อกับบัญชีนายหน้า แบบนั้นไม่ใช่บอตโง่ แต่แทบจะเป็นคนที่โง่เองมากกว่า
เครื่องมืออะไรก็มีโอกาสถูกใช้งานผิดวิธีได้ทั้งนั้น
สำหรับคนที่ใช้ llm ผมขอแนะนำ Gtk-llm-chat
เป็นงานที่ทุ่มเทอย่างมาก
มีทั้งการเชื่อมรวมกับเครื่องมือบรรทัดคำสั่ง llm, เดสก์ท็อป, ไอคอนในถาดระบบ และหน้าต่างแชตที่เรียบร้อย
เพิ่งออกรุ่น 3.0.0 พร้อมแพ็กเกจสำหรับ 3 ระบบปฏิบัติการเดสก์ท็อปหลัก
อยากรู้ว่าใช้งานอย่างอื่นนอกจากแชตทั่วไปกันยังไงบ้าง
นี่คือจังหวะเวลาที่ดีที่สุดจริงๆ
ช่วงนี้ผมกำลังลองอะไรหลายอย่างในเทอร์มินัล (Warp) และแม้จะชอบไอเดียเรื่อง agent แต่ก็ไม่ค่อยสบายใจกับแนวแบบ Cursor ที่เป็นสไตล์ "ฝากพรอมป์ต์/LLM call ไว้กับพวกเราได้เลยนะ (แล้วก็เก็บเงิน)"
เพราะงั้นสิ่งที่ผมต้องการจริงๆ คือ terminal agent แบบ CLI ง่ายๆ เพื่ออุดช่องว่างเรื่องทักษะเชลล์ของตัวเอง
ผมรู้ดีมากว่าเครื่องมือแบบนี้มีความเสี่ยงแบบ footgun สูง
แต่การจับคู่ระหว่างเครื่องมือเทอร์มินัลกับ llm ดูเป็นการผสมที่เบาและลงตัวในอุดมคติมาก จนผมคาดหวังอยู่
เลยสงสัยว่ามันรองรับแบบที่เวลา LLM เรียกใช้เครื่องมืออย่าง
rm -rf ./*แล้วจะถามประมาณว่า "กด Y เพื่ออนุมัติ" ทุกครั้งไหมถ้ามีแบบนั้นก็น่าจะช่วยกันไม่ให้ LLM มาควบคุมเทอร์มินัลของผมเองตามใจชอบ และพอจะเป็นกลไกป้องกันได้ระดับหนึ่ง
ถ้ารันโดยไม่ใส่แฟลก
--full-autoมันจะถามอนุมัติทุกครั้งผมดูแลปลั๊กอิน zsh/omz สำหรับ tab completion ของ LLM CLI อย่างจริงจังอยู่ แต่ความเร็วในการออกฟีเจอร์ใหม่ตามไม่ทันจริงๆ
โชคดีที่คำสั่งด้านล่างช่วยทำให้อัตโนมัติได้ประมาณ 90%
รีโพซิทอรีปลั๊กอินของผมอยู่ ที่นี่
ผมพยายามรองรับตัวเลือกต่างๆ ให้ได้มากที่สุด เลยทำให้โครงสร้างค่อนข้างซับซ้อน
ถ้าได้ฟีดแบ็กจะขอบคุณมาก
คนรุ่นหลังคงงงว่าเมื่อก่อนเราสร้างอะไรกันได้ยังไง
ให้ความรู้สึกแบบเดียวกับที่พวกเราเองนึกภาพไม่ออกว่านักเขียนโปรแกรม assembly ทำงานกันยังไง
GPT-4.1 เป็นโมเดลที่ทรงพลังมากทั้งเรื่อง structured output และ tool calling
ตลอด 2 ปีที่ผ่านมา งานซ้ำๆ ในชีวิตประจำวันของผมแทบทั้งหมดถูก LLM จัดการให้
มันเป็นชุดโมเดลที่ทั้งถูกและเก่ง เลยเลือกใช้เป็นค่าเริ่มต้นตลอด
จากที่ลองทุกอย่างผ่าน API มันถูกแบบเหลือเชื่อแต่ก็ทำงานส่วนใหญ่ได้ดีมากจริงๆ
ถ้าเป็นงานโค้ดผมใช้ o4-mini ส่วนอย่างอื่น 4.1-mini ก็มักพอแล้ว
นี่คือตัวอย่างที่ลองเล่นวันนี้ ผมส่งเดโมโค้ด CSS Minecraft ที่ยอดเยี่ยมและไม่มีคอมเมนต์แม้แต่บรรทัดเดียวให้ GPT-4.1 mini อธิบาย
เดโมต้นฉบับที่เกี่ยวข้อง ซอร์ส
คำตอบของ GPT-4.1 mini ออกมาดีมากจริงๆ
มันชี้ได้แม้แต่ลูกเล่นยากๆ อย่างประโยคที่ว่า "CSS นี้ใช้เทคนิค CSS ระดับล้ำสมัยเพื่อสร้าง UI สไตล์ voxel แบบ 3D interactive โดยใช้ JavaScript ให้น้อยที่สุด"
คำอธิบายทั้งหมด
โทเค็นขาเข้า 3,813 โทเค็นขาออก 1,291
ผลการคำนวณ ประมาณ 0.3591 เซนต์ หรือแค่ราวหนึ่งในสามของ 1 เซนต์เท่านั้น
เครื่องมือของ Simon สุดยอดมากจริงๆ
ผมใช้ทุกวัน
การต่อ pipe และการสลับโมเดลได้ง่ายมาก ทั้งแบบ local และ remote อย่าง ollama ทำให้งานสะดวกขึ้นมาก
เจ๋งมากจริงๆ
เท่าที่ผมรู้ llama.cpp ก็รองรับเครื่องมือเหมือนกัน แต่ยังหาวิธีเชื่อมกับ llm ไม่เจอ
สงสัยว่าอาจแก้ได้ด้วยการเพิ่มอะไรบางอย่างใน extra-openai-models.yaml
... พอลองดูแล้ว วิธีที่สองใช้ได้ แล้วในอีกหน้าต่างหนึ่ง ผมสรุปไว้ ที่นี่
ขอบคุณมากสำหรับรีลีสครั้งนี้
ผมคิดว่าไลบรารีนี้เป็นองค์ประกอบหลักที่จะเปิดศักยภาพของ LLM ได้อย่างแท้จริง โดยไม่ติดอยู่กับข้อจำกัดและกรอบของไคลเอนต์แบบเดิม
หลังจากเวอร์ชัน 0.26 alpha ออกมา ผมพยายามสร้างปลั๊กอินที่คุยกับ MCP server แต่รู้สึกว่าค่อนข้างยาก
ตอนนี้ผมทำให้มันเชื่อมต่อแล้วดึงเครื่องมือมาใช้งานแบบไดนามิกได้แล้ว แต่ยังส่งพารามิเตอร์เข้าไปไม่ได้
พยายามทำเดโมปลั๊กอินง่ายๆ ให้ได้มากที่สุด แต่ก็ไม่ใช่เรื่องง่าย
ไลบรารี mcp Python อย่างเป็นทางการต้องให้มีการรัน asyncio, การเชื่อมต่อกับเซิร์ฟเวอร์, และการ introspect เครื่องมือที่ใช้งานได้ เป็นต้น
เป็นฟีเจอร์ที่รอมานานมาก
เดิมคิดว่าน่าจะเป็นการทำบนฐาน mcp หรือ openapi แต่แนวทางตอนนี้อาจเรียบง่ายและยืดหยุ่นกว่ามาก
และก็ดูเหมือนจะทำเป็นปลั๊กอินได้ไม่ยากด้วย