ใช้ตัวแทนเขียนโค้ดที่ติดตั้งแล้วเป็นโมเดลแชต
หากคุณชำระค่าบริการตัวแทนเขียนโค้ดอยู่แล้วและได้ลงชื่อเข้าใช้บนเครื่องที่รัน Libre WebUI คุณสามารถคุยกับตัวแทนนั้นจากแชตปกติได้โดยไม่ต้องเพิ่มคีย์ API แยก Libre WebUI จะตรวจพบอินเทอร์เฟซบรรทัดคำสั่งของตัวแทนและแสดงในตัวเลือกโมเดลเหมือนโมเดลอื่น
สิ่งที่ระบบตรวจพบ
ทุกครั้งที่ขอรายการโมเดล Libre WebUI จะค้นหาคำสั่งต่อไปนี้ใน PATH ของเซิร์ฟเวอร์:
| โมเดล | คำสั่ง | ผู้ให้บริการ |
|---|---|---|
| Claude Code | claude | Anthropic |
| Codex | codex | OpenAI |
| Kiro | kiro-cli | AWS |
| Muse Code | muse | Meta |
| OpenCode | opencode | SST |
| Pi | pi | Mario Zechner |
รายการที่พบจะปรากฏใต้กลุ่ม Agents ในตัวเลือกโมเดล ระบบจะไม่ติดตั้งสิ่งใดให้และไม่ต้องมีไฟล์กำหนดค่า หากคำสั่งทำงานใน shell ของเซิร์ฟเวอร์ รายการนั้นก็จะปรากฏ
การตั้งค่า → แชท → ค่าเริ่มต้น ยังระบุรายการเหล่านี้เป็น เอเจนต์ รวมถึง Strands เมื่อบัญชีของคุณมีสิทธิ์ใช้ โมเดลปลั๊กอินเก็บชื่อผู้ให้บริการ ส่วนป้าย Ollama ใช้กับโมเดล Ollama เท่านั้น การปิด Ollama ไม่ซ่อนเอเจนต์หรือปลั๊กอินที่ตั้งค่าไว้ การ์ดข้อมูลแสดงชื่อและผู้ให้บริการของรายการที่เลือก พร้อมขนาด ตระกูล และรูปแบบเฉพาะเมื่อแคตตาล็อกระบุไว้
การเลือกโมเดล ไม่ใช่แค่ CLI
CLI แต่ละรายการอาจแสดงหลายตัวเลือกในกลุ่ม Agents:
- Claude Code มีค่าเริ่มต้นของบัญชีที่ลงชื่อเข้าใช้ พร้อม Sonnet, Opus และ Haiku
นอกจากนี้ยังมีตัวเลือก Sonnet 5.5 (
claude-sonnet-5-5), Opus 5.5 (claude-opus-5-5) และ Haiku 5.5 (claude-haiku-5-5) แบบระบุชัดเจน โดย Sonnet 5.5 ต้องใช้ Claude Code 2.1.284 หรือใหม่กว่า Opus 5.5 ต้องใช้ Claude Code 2.1.280 หรือใหม่กว่า และ Haiku 5.5 ต้องใช้ Claude Code 2.1.293 หรือใหม่กว่า ทั้งหมดต้องให้บัญชีที่ลงชื่อเข้าใช้มีสิทธิ์เข้าถึง รันclaude updateเพื่ออัปเดต CLI ส่วนชื่อแทน Sonnet, Opus และ Haiku ที่มีอยู่ยังคงอ้างอิงการจับคู่โมเดลปัจจุบันของ CLI - Codex มีค่าเริ่มต้นที่กำหนดไว้ พร้อมตระกูลการลงชื่อเข้าใช้ ChatGPT ตามเอกสาร ได้แก่ GPT-6 Astra, GPT-6.1 Sol (
gpt-6.1-sol), GPT-6 Sol, GPT-6 Luna, GPT-5.6 Sol, Terra, Luna, GPT-5.5 และ GPT-5.3 Codex Spark โดยจะใช้ได้แค่ไหนขึ้นกับการลงชื่อเข้าใช้ของ CLI และสิทธิ์ของบัญชี - Kiro แสดงโมเดลที่บัญชีที่ลงชื่อเข้าใช้ใช้ได้ (จาก
kiro-cli chat --list-models) ข้างค่าเริ่มต้นที่กำหนดไว้ แต่ละรอบรันแบบไม่โต้ตอบบนเอนจินเอเจนต์ V3 ของ CLI โดยตรึงเอเจนต์เริ่มต้นในตัว (vibe) ไว้ ดังนั้นchat.defaultAgentที่กำหนดเองจะไม่มีผล ต้องใช้ Kiro CLI 2.27 หรือใหม่กว่า - Muse Code มีค่าเริ่มต้นที่กำหนดไว้ พร้อม Muse Spark 1.3 (
muse-spark-1.3), Muse Spark 1.3 Contributor (muse-spark-1.3-contributor) และ Muse Wonder 1.0 (muse-wonder-1.0) ลงชื่อเข้าใช้ด้วยmuse login(บัญชี Meta) หรือคีย์ Meta Model API จากMETA_API_KEYหรือmuse auth setโมเดล Contributor คิดค่าบริการในอัตราที่ต่ำกว่า เพราะ Meta อาจนำสิ่งที่คุณส่งไปใช้ฝึกโมเดล - Pi ใช้โมเดลที่กำหนดไว้ใน CLI เอง
- OpenCode แสดงโมเดลของผู้ให้บริการทุกเจ้าที่ได้ยืนยันตัวตนไว้ (จาก
opencode models) และต้องเลือกให้ชัดเจนเสมอ เพราะค่าเริ่มต้นระดับ CLI อาจชี้ไปยังเซิร์ฟเวอร์ในเครื่องที่โฮสต์ Libre WebUI เข้าถึงไม่ได้
เอนจิน Strands ที่ฝังในระบบจะแสดงในกลุ่มเอเจนต์ด้วยเมื่อบัญชีของคุณมีสิทธิ์ใช้ เอนจินนี้ไม่ใช่ CLI แต่ทำงานภายใน backend และขับเคลื่อนโมเดล Ollama และโมเดลจากปลั๊กอินผู้ให้บริการของคุณ รายการ Strands แบบพื้นฐาน (strands) ใช้โมเดลแชตเริ่มต้นของคุณ ส่วนรายการอื่น (strands:<route>) จะมีหนึ่งรายการต่อโมเดลที่พร้อมใช้ เช่น Strands · gpt-5.6-sol (Codex (ChatGPT)) และตรึงทั้งโมเดลและผู้ให้บริการไว้กับบทสนทนานั้น ผู้ให้บริการอื่นที่พร้อมใช้จะไม่เข้ามาแทนที่เมื่อเกิดขัดข้อง การแสดงรายการตัวเลือกไม่ได้เริ่มเอนจิน
รายการ Strands เดียวกันใช้เป็นโมเดลงานใน การตั้งค่า → แชท → ค่าเริ่มต้น สำหรับชื่ออัตโนมัติและสรุปความคิดได้ ใช้โมเดลที่กำลังทำงานอยู่ จะใช้ตัวเลือก Strands ที่บันทึกไว้ในบทสนทนา คำขอข้อความสั้นเหล่านี้เรียกโมเดลผู้ให้บริการเบื้องหลังโดยตรง ไม่รันเครื่องมือของเอเจนต์และไม่สร้างเซสชันเอเจนต์ โปรไฟล์ CLI อื่นต้องมีโมเดลงาน Ollama ปลั๊กอิน หรือ Strands สำหรับคำขอเสริมเหล่านี้
Pi รันแต่ละรอบแบบไม่มีสถานะ (--no-session) ปิดเครื่องมือในเครื่อง และใช้พรอมต์ระบบที่เป็นกลาง คำตอบจึงไม่ถูกปรุงแต่งด้วยการตั้งค่า Pi ส่วนตัวของผู้ใช้ระบบปฏิบัติการบนเซิร์ฟเวอร์ และแชตจะไม่แตะต้องการตั้งค่านั้น
Kiro ตรงข้ามทั้งสองด้าน: Kiro รันด้วยการตั้งค่า Kiro ของผู้ใช้เซิร์ฟเวอร์ แม้เอเจนต์เริ่มต้นในตัวจะถูกตรึงไว้ แต่กฎสิทธิ์ (~/.kiro/settings/permissions.yaml) เซิร์ฟเวอร์ MCP และโมเดลเริ่มต้นที่กำหนดไว้ยังคงมีผล และทุกรอบจะถูกบันทึกเป็นเซสชันใหม่ในที่เก็บเซสชัน Kiro ของผู้ใช้นั้น (kiro-cli chat --list-sessions แสดงเซสชันนี้ พร้อม transcript แชตล่าสุดอยู่ภายใน) ไม่มีแฟล็กให้ปิดสิ่งนี้ เนื้อหาแชตจึงอยู่ในโฮมไดเรกทอรีของผู้ใช้ backend ด้วย นอกฐานข้อมูล Libre WebUI เครื่องมือของ Kiro ยังเปิดอยู่: สิ่งใดที่กฎสิทธิ์เหล่านั้นเชื่อถือ (โดยค่าเริ่มต้นคือการอ่านและคำสั่งแบบอ่านอย่างเดียว เช่น date) จะรันโดยไม่ถาม และการเรียกเครื่องมือใดที่ต้องอนุมัติจะถูกปฏิเสธ เพราะรอบแชตตอบพรอมต์นั้นไม่ได้
Muse Code อ่านพรอมต์จากไฟล์ส่วนตัวและรันแบบ headless โดยปิดการอนุมัติ (--approval-mode never) เพราะรอบแชตตอบพรอมต์ขออนุมัติไม่ได้ sandbox ของ Muse Code เองยังเปิดอยู่ และแต่ละรอบจะได้พื้นที่ทำงานชั่วคราวที่ถูกลบหลังจบรอบ การเขียนไฟล์ของ Muse Code จึงไปลงในโฮมไดเรกทอรีของผู้ใช้เซิร์ฟเวอร์ไม่ได้ รอบต่าง ๆ ไม่ถูกบันทึกใน session log ของ Muse (--no-session-log) แต่การตั้งค่า กฎ และโมเดลเริ่มต้นของ Muse ของผู้ใช้เซิร์ฟเวอร์ยังคงมีผล
วิธีใช้
- ลงชื่อเข้าใช้เป็นผู้ดูแลระบบ
- เริ่มแชตและเปิดตัวเลือกโมเดล
- เลือกรายการใต้ Agents
- ส่งข้อความตามปกติ คำตอบจะสตรีมกลับทีละ token
บทสนทนาถูกจัดเก็บเหมือนแชตอื่น คุณจึงออกแล้วกลับมา เปลี่ยนชื่อ และค้นหาจากชุดคำสั่งได้ แต่ละรอบจะส่ง transcript ของบทสนทนาล่าสุดไปยังตัวแทนและสตรีมคำตอบกลับมา
ผู้ใช้ที่เข้าถึงได้และสิ่งที่ตัวแทนเข้าถึงได้
ฟีเจอร์นี้ใช้ได้ เฉพาะผู้ดูแลระบบ และเหตุผลนี้สำคัญ ตัวแทนรันบนโฮสต์ด้วยผู้ใช้ระบบปฏิบัติการเดียวกับ backend ของ Libre WebUI ไม่ได้รันในคอนเทนเนอร์ Work จึงได้รับข้อมูลรับรองของตัวแทนและสิทธิ์ทั้งหมดที่ผู้ใช้นั้นมีตามปกติ ซึ่งอาจรวมถึงการอ่านไฟล์และรันคำสั่งบนเซิร์ฟเวอร์หากตัวแทนตัดสินใจทำ
ให้ถือว่าการเปิดฟีเจอร์นี้เทียบเท่ากับการให้ตัวแทนเข้าถึง shell ของเครื่อง ด้วยเหตุนี้ฟีเจอร์จึง ปิดอยู่ ตั้งแต่แรก ผู้ดูแลระบบต้องเปิดที่ การตั้งค่า → จัดการผู้ใช้ → การเข้าถึงและนโยบาย → โมเดลเอเจนต์ CLI การตั้งค่าจะถูกบันทึกและมีผลทันทีโดยไม่ต้องรีสตาร์ต
การเปลี่ยนตัวควบคุมนี้จะรีเฟรชแคตตาล็อกโมเดลทันที กลุ่ม เอเจนต์ มีรายการ CLI โดยตรง ส่วน โมเดลปลั๊กอิน มีการผสานรวม API ของผู้ให้บริการ เช่น Codex (ChatGPT) Strands แสดงอยู่ในกลุ่มเดียวกัน แต่เป็นไปตามการตั้งค่าการเข้าถึง เอนจิน Strands ของตัวเอง ไม่ใช่สวิตช์นี้ จึงอาจแสดงได้แม้ปิดโมเดลเอเจนต์ CLI อยู่ การค้นหาโมเดลของ Strands ไม่สามารถขัดขวางการค้นหาเอเจนต์ CLI ที่ติดตั้งไว้
การติดตั้งเดิมสืบทอดตัวเลือก Agents ที่บันทึกไว้ จนกว่าจะบันทึกค่าของ CLI แยกต่างหาก
หากต้องการตรึงการตัดสินใจที่ระดับการติดตั้งโดยไม่ขึ้นกับสวิตช์ขณะรัน ให้ตั้งตัวแปรสภาพแวดล้อมเป็นค่าใดค่าหนึ่ง (และจะล็อกสวิตช์ในอินเทอร์เฟซด้วย):
AGENT_CLI_MODELS_ENABLED=false # or true
สำหรับโมเดลที่ทำงานกับไฟล์ได้แต่ยังอยู่ใน sandbox ให้ใช้ Work แทน โดย Work จะรันโมเดลที่ใช้เครื่องมือได้ในคอนเทนเนอร์ที่จำกัดสิทธิ์พร้อมพื้นที่ทำงานแยก
เอเจนต์เดียวกันใน Work
Work มีเอเจนต์เดียวกันพร้อมตัวเลือกโมเดลและการลงชื่อเข้าใช้เดียวกัน แต่รันภายใน sandbox ของงานแทนการรันบนโฮสต์ อยู่หลัง egress proxy ที่กัน token จริงไว้นอก sandbox เอเจนต์เหล่านี้มีโหมดการเข้าถึงของตัวเอง คือ CLI ของเอเจนต์ใน Work และไม่ต้องใช้สวิตช์ข้างต้น ดู CLI ของเอเจนต์ใน Work
การติดตามการใช้งาน
เปิด การใช้งานผู้ให้บริการ (/usage) และดู เอเจนต์ ใกล้ด้านบน Claude Code, Codex, Kiro, Muse Code, OpenCode, Pi และ Strands มีรายการแยก พร้อมข้อความชัดเจนเมื่อช่วงเวลานั้นไม่มีการเรียกที่บันทึกไว้
CLI ที่เรียกผ่าน LWUI บันทึกผล ระยะเวลา และโทเคนที่รายงาน หนึ่งการเรียกสร้างหนึ่งเหตุการณ์ ภาพรวมซ้ำและรายงานแต่ละขั้นไม่เพิ่มจำนวนเหตุการณ์หรือโทเคนซ้ำ ตัวนับที่ขาดยังคงไม่รายงาน การหยุดคำตอบบันทึกเป็นการยกเลิก และ CLI ที่จบด้วยข้อผิดพลาดไม่ถือว่าสำเร็จเพียงเพราะมีข้อความบางส่วน ไม่ได้นำเข้าการเรียก CLI นอก LWUI
การเรียก Strands จะนับให้กับเอเจนต์ Strands ดูรายละเอียดและข้อจำกัดที่ การใช้งานเอเจนต์
การกำหนดค่า
| ตัวแปร | ค่าเริ่มต้น | วัตถุประสงค์ |
|---|---|---|
AGENT_CLI_MODELS_ENABLED | ไม่ได้ตั้งค่า | ตรึงฟีเจอร์เป็น true/false; หากไม่ตั้งค่าจะใช้สวิตช์ผู้ดูแลระบบ (ปิดตามค่าเริ่มต้น) |
AGENT_CLI_TIMEOUT_MS | 600000 | เวลาสูงสุดที่ตัวแทนหนึ่งรอบทำงานได้ก่อนถูกยุติ |
การแก้ปัญหา
ไม่มีกลุ่ม Agents ปรากฏ ตรวจสอบว่าเปิดฟีเจอร์ที่ การตั้งค่า → จัดการผู้ใช้ → การเข้าถึงและนโยบาย → โมเดลเอเจนต์ CLI (ปิดตามค่าเริ่มต้น) และลงชื่อเข้าใช้เป็นผู้ดูแลระบบ จากนั้นตรวจสอบว่าคำสั่งอยู่ใน PATH ของโปรเซส backend ไม่ใช่เพียง interactive shell ของคุณ ตัวจัดการบริการ คอนเทนเนอร์ Docker หรือ desktop launcher มักเริ่มด้วย PATH ที่สั้นกว่า login terminal มาก
คำตอบล้มเหลวทันที รันคำสั่งเดียวกันด้วยตนเองในฐานะผู้ใช้เซิร์ฟเวอร์ (claude -p "hello", codex exec "hello", muse exec "hello" หรือ echo hello | kiro-cli chat --no-interactive --output-format stream-json --agent-engine v3 --agent vibe) ต้องใช้ Kiro CLI 2.27 หรือใหม่กว่า CLI รุ่นเก่าจะล้มเหลวที่ขั้นตอนนี้ก่อน ซึ่งมองเห็นข้อผิดพลาดได้ ส่วนในแชตความล้มเหลวเดียวกันจะแสดงเพียง Kiro exited unsuccessfully สาเหตุส่วนใหญ่คือตัวแทนขอให้ลงชื่อเข้าใช้ใหม่เพราะเซสชันหมดอายุ หรือถึงขีดจำกัดอัตราของการสมัครสมาชิก โดยเฉพาะ OpenCode จะรายงานการเข้าสู่ระบบผู้ให้บริการที่หมดอายุไว้ใน log ของตนเองเท่านั้น ให้รัน opencode auth login อีกครั้งในฐานะผู้ใช้เซิร์ฟเวอร์ Kiro ลงชื่อเข้าใช้ผ่าน kiro-cli login เซสชันที่หมดอายุจะล้มเหลวแบบเดียวกัน Muse Code จะแจ้ง missing meta credentials จนกว่าจะรัน muse login ในฐานะผู้ใช้เซิร์ฟเวอร์
คำตอบหยุดกลางทาง รอบยาวอาจถึง AGENT_CLI_TIMEOUT_MS ให้เพิ่มค่า หรือแบ่งคำขอเป็นขั้นตอนเล็กลง