ปลั๊กอิน
Libre WebUI ใช้ปลั๊กอินเพื่อเชื่อมต่อผู้ให้บริการ AI ภายนอกและความสามารถของโมเดล ควบคู่กับ Ollama ภายในเครื่อง
ชนิดปลั๊กอิน
| ชนิด | วัตถุประสงค์ |
|---|---|
| แชต/การเติมเต็ม | โมเดลข้อความและแชตจาก API ผู้ให้บริการ |
| การฝังข้อมูล | การฝังข้อมูลแบบเวกเตอร์สำหรับค้นหาเอกสารและความจำ |
| การสร้างรูปภาพ | โมเดลรูปภาพและแบ็กเอนด์แบบ ComfyUI |
| ข้อความเป็นเสียง | ผู้ให้บริการสังเคราะห์เสียง |
| เสียงเป็นข้อความ | ผู้ให้บริการถอดเสียง |
| การสร้างเสียง | ผู้ให้บริการสร้างเสียง |
| การสร้างวิดีโอ | ผู้ให้บริการสร้างวิดีโอแบบอะซิงโครนัส |
ปลั๊กอินสามารถแสดงรายการจับคู่โมเดลแบบคงที่ และรีเฟรชโมเดลที่พร้อมใช้จาก API ของผู้ให้บริการเมื่อรองรับ
กลุ่มผู้ให้บริการในตัว
Libre WebUI มีข้อกำหนดผู้ให้บริการสำหรับบริการที่ใช้กันทั่วไป:
- OpenAI และ API ที่เข้ากันได้กับ OpenAI
- Anthropic
- Google Gemini
- Groq
- Kimi Code โดย Moonshot AI
- Mistral
- OpenRouter
- Hugging Face
- GitHub Models
- MLX LM สำหรับการอนุมานบน Apple Silicon ภายในเครื่อง
- ComfyUI
- ElevenLabs
รายการของผู้ให้บริการเปลี่ยนแปลงบ่อย เมื่อปลั๊กอินรองรับการค้นหาโมเดลแบบสด ให้ถือว่าส่วนติดต่อผู้ใช้เป็นแหล่งข้อมูลที่ถูกต้อง
ความเป็นเจ้าของและการอนุญาต
ข้อกำหนดปลั๊กอินเป็นการตั้งค่าที่ใช้ร่วมกันทั้งระบบ ทุกเส้นทาง /api/plugins ต้องยืนยันตัวตน
และมีเพียงผู้ดูแลระบบเท่านั้นที่อัปโหลด ติดตั้ง อัปเดต หรือลบข้อกำหนดได้ ส่วนการเปิดใช้ต่างออกไป
ผู้ใช้ที่ยืนยันตัวตนแต่ละรายสามารถเปิดหรือปิดปลั๊กอินที่ใช้ร่วมกันได้เฉพาะบัญชีของตนเอง สถานะนี้
จะเก็บใน SQLite และยังคงอยู่หลังเริ่มแบ็กเอนด์ใหม่โดยไม่กระทบผู้ให้บริการที่ผู้ใช้อื่นเปิดใช้อยู่
ระหว่างอัปเกรด รายการเปิดใช้ส่วนกลางแบบเดิมใน .status.json จะถูกคัดลอกไปยังบัญชีที่มีอยู่เพียงครั้งเดียว
แต่เฉพาะข้อกำหนดที่ตรงกับจุดยึดความเชื่อถือซึ่งคอมไพล์ไว้ใน Libre WebUI ทุกประการ ข้อกำหนดกำหนดเอง
หรือข้อกำหนดที่บดบังรายการเดิมจะยังถูกกักและปิดใช้งาน บัญชีที่สร้างหลังการย้ายข้อมูลนี้จะเริ่มต้นโดย
ไม่มีปลั๊กอินเปิดใช้
ข้อกำหนดที่มีมาให้จะได้รับความเชื่อถือเฉพาะเมื่อเนื้อหาที่ปรับเป็นรูปแบบมาตรฐานตรงกับแฮชที่คอมไพล์ ไว้ในแบ็กเอนด์ ข้อกำหนดที่เขียนได้จะได้รับอนุมัติใน SQLite ตามเส้นทางต้นทางที่ปรับเป็นมาตรฐานและ แฮชข้อกำหนดแบบเต็ม การติดตั้ง อัปเดต หรือนำเข้าใหม่โดยผู้ดูแลระบบจะบันทึกการอนุมัตินั้น ส่วนการแก้ไฟล์ โดยตรงจะทำให้การอนุมัติเป็นโมฆะ การอนุมัติและการอัปเดตจะล้างสถานะการเปิดใช้ของทุกบัญชีก่อนแทนที่ไฟล์ ผู้ใช้แต่ละรายจึงต้องเปิดใช้ข้อกำหนดที่ตรวจสอบแล้วอีกครั้ง ข้อกำหนดกำหนดเองก่อนอัปเกรดต้องนำเข้าใหม่ โดยผู้ดูแลระบบ ก่อนจะปรากฏในรายการ ค้นหาโมเดล รับข้อมูลรับรอง หรือเรียกใช้ความสามารถใด ๆ ได้
ตัวแปรปลั๊กอินจะแยกตามวัตถุประสงค์ มีเพียงผู้ดูแลระบบที่จัดเก็บตัวแปรกำหนดเส้นทางการเชื่อมต่อ ที่ระบบรู้จักได้:
endpoint, base_url, api_path, models_endpoint, api_url,
image_endpoint, embedding_endpoint, stt_endpoint, tts_endpoint,
voice_clone_endpoint, api_mode, model และ model_id นอกจากนี้
config.endpoint_variable, config.models_endpoint_variable หรือ
config.voice_clone_endpoint_variable ที่ความสามารถประกาศไว้ก็ถือเป็นการกำหนดเส้นทาง
การเชื่อมต่อ แม้จะใช้ชื่ออื่น
ผู้ใช้ที่ไม่ใช่ผู้ดูแลระบบยังบันทึกตัวควบคุมการสร้างผลลัพธ์ เช่น temperature และค่ากำหนดการสตรีมได้ ระบบจะละเว้นแถวกำหนดเส้นทางเก่าของผู้ใช้ที่ไม่ใช่ผู้ดูแลระบบ ไม่ส่งกลับเป็นค่าที่กำหนดไว้ และลบออก เมื่อบัญชีนั้นรีเซ็ตตัวแปรปลั๊กอินทั้งหมด วิธีนี้ป้องกันไม่ให้การเลื่อนบทบาทภายหลังทำให้เส้นทางที่หยุดใช้ กลับมาทำงานโดยไม่แจ้ง
ข้อมูลรับรอง
ข้อมูลรับรองอาจมาจากตัวแปรสภาพแวดล้อมหรือการตั้งค่าของผู้ใช้
ตัวอย่างตัวแปรสภาพแวดล้อม:
OPENAI_API_KEY=sk-...
ANTHROPIC_API_KEY=sk-ant-...
GROQ_API_KEY=gsk_...
GEMINI_API_KEY=...
MISTRAL_API_KEY=...
OPENROUTER_API_KEY=sk-or-...
KIMI_API_KEY=...
GITHUB_API_KEY=github_pat_...
ELEVENLABS_API_KEY=...
สำหรับระบบที่ใช้ร่วมกัน ข้อมูลรับรองระดับผู้ใช้มักเหมาะกว่า เพราะผู้ใช้แต่ละรายควบคุมการเรียกเก็บเงินและขีดจำกัดของผู้ให้บริการของตนเอง คีย์ในสภาพแวดล้อมเหมาะกับระบบผู้ใช้คนเดียว ระบบสาธิต หรือระบบที่มีผู้ดูแลจัดการ
คีย์ในสภาพแวดล้อมจะเป็นค่าทดแทนเฉพาะขณะที่คำขอใช้การกำหนดเส้นทางและรูปแบบการยืนยันตัวตน จากข้อกำหนดปลั๊กอินที่มีมาให้และไม่ถูกบดบัง ข้อกำหนดที่นำเข้า ข้อกำหนดที่เขียนได้ซึ่งบดบัง ID ที่มีมาให้ หรือค่ากำหนดเส้นทางการเชื่อมต่อที่ผู้ดูแลระบบบันทึก ต้องใช้ข้อมูลรับรองที่บัญชีเดียวกันบันทึกไว้ ก่อนอนุญาตให้ใช้ค่าทดแทนจากสภาพแวดล้อม Libre WebUI จะเปรียบเทียบปลายทางราก ฟิลด์ยืนยันตัวตน ปลายทางความสามารถและตัวเลือกตัวแปรปลายทาง รวมถึงข้อกำหนดและค่าเริ่มต้นของตัวแปรกำหนดเส้นทาง ที่ระบบรู้จัก แฮชไฟล์กำหนดที่คอมไพล์ไว้ยังคงเป็นหลัก แม้ไดเรกทอรีปลั๊กอินแบบเดิมและแบบที่มีมาให้ ใช้เส้นทางเดียวกัน เช่นในโครงสร้างคอนเทนเนอร์มาตรฐาน ไฟล์กำหนดแพ็กเกจที่ถูกเขียนทับไม่สามารถ สร้างความเชื่อถือให้ตนเองได้
กฎนี้ใช้กับการค้นหา Chat, Work การตรวจสอบความพร้อม และรายการความสามารถ เพื่อป้องกันไม่ให้ ปลายทางกำหนดเองหรือไฟล์กำหนดกำหนดเองก่อนอัปเกรดได้รับความลับที่ผู้ดูแลระบบจัดการ
ข้อมูลรับรองที่ผู้ใช้บันทึกจะผูกกับต้นทางข้อกำหนดที่มีผล แฮชข้อกำหนดแบบเต็ม ข้อกำหนดการยืนยันตัวตน ปลายทางและตัวเลือกความสามารถ รวมถึงค่ากำหนดเส้นทางที่มีผลในขณะบันทึก การเปลี่ยนเส้นทางหรือ ข้อกำหนดจะทำให้ข้อมูลรับรองเดิมใช้ไม่ได้ จนกว่าผู้ใช้จะตรวจสอบปลายทางใหม่และบันทึกข้อมูลรับรองอีกครั้ง ข้อมูลรับรองแบบเดิมที่ไม่มีการผูกจะยอมรับเฉพาะบนเส้นทางที่มีมาให้ซึ่งยึดตรงกันทุกประการ เมื่อใช้สำเร็จ ครั้งแรก ระบบจะเขียนการผูกก่อนส่งคืนคีย์ที่ถอดรหัสแล้ว
ผู้ให้บริการที่เข้ากันได้กับ OpenAI
ผู้ให้บริการจำนวนมากเปิด API ที่เข้ากันได้กับ OpenAI ปลั๊กอินสามารถกำหนดสิ่งต่อไปนี้:
- URL ปลายทาง API แบบเต็ม
- ตัวแปรสภาพแวดล้อมสำหรับ API key
- พฤติกรรมของปลายทาง Chat
- การรองรับการฝังข้อมูล
- พฤติกรรมการค้นหาโมเดล
- รายการจับคู่โมเดลสำรองที่ไม่บังคับ
หากผู้ให้บริการไม่รองรับการค้นหาโมเดลแบบสด Libre WebUI จะใช้รายการจับคู่โมเดลที่กำหนดไว้ JSON ของปลั๊กอินที่นำเข้าใช้กำหนดค่าผู้ให้บริการซึ่งใช้รูปแบบการสื่อสารที่ Libre WebUI รองรับอยู่แล้ว ได้แก่ OpenAI Chat Completions, OpenAI Responses, Anthropic Messages หรือ Gemini การใช้ JSON เพียงอย่างเดียวไม่สามารถแปลงโพรโทคอลเฉพาะใด ๆ ได้ ผู้ให้บริการที่มีโครงสร้างคำขอ การสตรีม การเรียกใช้เครื่องมือ หรือคำตอบต่างออกไปต้องมีอะแดปเตอร์แบ็กเอนด์ขนาดเล็ก
การสร้างรูปภาพ OpenAI
ผู้ให้บริการ OpenAI ที่มีมาให้เปิด Image API ที่
https://api.openai.com/v1/images/generations โดย gpt-image-2 เป็นโมเดลปัจจุบัน
รายการยังคง ID gpt-image-1.5, gpt-image-1 และ gpt-image-1-mini ที่เลิกแนะนำแล้วไว้
สำหรับระบบเดิมที่เข้ากันได้ ส่วนการตั้งค่าใหม่ควรเลือก gpt-image-2
การสร้างรูปภาพใช้ข้อมูลรับรอง OpenAI ที่มีผลรายการเดียวกับ Chat ได้แก่คีย์ที่ผู้ใช้ปัจจุบันบันทึกไว้
หรือค่าทดแทนจากสภาพแวดล้อมของผู้ให้บริการที่มีมาให้และเชื่อถือได้ มีค่ากำหนดทับ image_endpoint
ที่ไม่บังคับแยกต่างหาก เพื่อไม่ให้ปลายทาง Chat กำหนดเองได้รับคำขอรูปภาพโดยไม่ตั้งใจ เว้น
image_endpoint ว่างไว้เพื่อรับทอดปลายทาง Image API ที่มีมาให้
ตัวเลือกภาพจะผูกกับผู้ให้บริการ เมื่อปลั๊กอินรูปภาพสองรายการเปิดให้ใช้ ID โมเดลเดียวกัน Libre WebUI
จะส่งคำขอไปยังผู้ให้บริการที่เลือกในแผงรูปภาพเท่านั้น คำตอบ GPT Image ใช้ข้อมูลรูปภาพแบบ base64
Libre WebUI จะแปลงข้อมูลนั้นเป็นรูปในแอปและบันทึกลงคลังสื่อของผู้ใช้ปัจจุบัน เส้นทาง Image API
ต้องยืนยันตัวตน และคำขอสร้างโดยตรงต้องมีทั้ง pluginId และ model โดยตั้ง n เป็นจำนวนเต็ม JSON
ตั้งแต่ 1 ถึง 10 ได้ ระบบจะปฏิเสธสตริงตัวเลขและค่าเศษส่วนก่อนถึงผู้ให้บริการ
โหมด API Chat Completions และ Responses
ปลั๊กอินสร้างคำตอบที่เข้ากันได้กับ OpenAI ใช้รูปแบบคำขอ chat_completions หรือ responses ได้
ปลั๊กอิน OpenAI ที่มีมาให้แสดงตัวเลือกนี้ใน Settings → Plugins
ระบบเลือกการตั้งค่าการเชื่อมต่อตามลำดับต่อไปนี้:
- ค่า
endpointแบบเต็มที่กำหนดทับ หากตั้งไว้ base_urlบวกapi_pathที่ไม่บังคับendpointแบบเดิมของปลั๊กอิน
ค่าปลายทางที่ตรงกับปลายทางในไฟล์กำหนดปลั๊กอินทุกประการจะถือเป็นค่าเริ่มต้นของไฟล์กำหนด ไม่ใช่ ค่าที่กำหนดทับ วิธีนี้ป้องกันไม่ให้ค่าเริ่มต้นเดิมที่จัดเก็บไว้บดบัง Base URL ใหม่หลังอัปเกรด ส่วนปลายทาง แบบเต็มที่กำหนดเองจริงยังคงมีลำดับความสำคัญสูงสุด
เส้นทางเริ่มต้นคือ /chat/completions ในโหมด Chat Completions และ /responses ในโหมด
Responses โดย base_url ควรเป็นราก API เช่น https://api.example.com/v1 ใช้ api_path
เมื่อผู้ให้บริการที่เข้ากันได้เปิดการดำเนินการบนเส้นทางสัมพัทธ์อื่น ปลายทางแบบเต็มต้องรวมเส้นทาง
การดำเนินการทั้งหมดและมีลำดับความสำคัญเหนือทั้งสองฟิลด์ ส่วนต่อท้าย /chat/completions,
/completions หรือ /responses ที่รู้จักจะเป็นตัวกำหนดรูปแบบคำขอ ส่วนเส้นทางปลายทางกำหนดเอง
จะคง api_mode ที่เลือกไว้
JSON ของปลั๊กอินที่นำเข้าสามารถระบุค่าเริ่มต้นเดียวกันได้:
{
"endpoint": "https://api.example.com/v1/chat/completions",
"api_mode": "responses",
"base_url": "https://api.example.com/v1",
"api_path": "/responses"
}
คำขอ Responses ใช้ input, max_output_tokens เครื่องมือฟังก์ชันแบบแบน และ store: false
พร้อมขอเนื้อหาการใช้เหตุผลที่เข้ารหัสเพื่อดำเนินต่อโดยไม่เก็บสถานะ ผลลัพธ์ Responses ทั้งที่เสร็จแล้ว
และกำลังสตรีมจะถูกปรับกลับเป็นรูปแบบเหตุการณ์ของ Chat และ Work ใน Libre WebUI ระบบจะเก็บสถานะ
สำหรับเล่นซ้ำเฉพาะเมื่ออาร์เรย์ Item ผลลัพธ์ที่เรียงลำดับครบมีไม่เกิน 64 Items และ 90 KB โดยเก็บ
Items ไว้ตรงตามเดิมและไม่ตัดฟิลด์ Items ที่เล่นซ้ำได้ต้องมี ID และชนิดที่ไม่ว่างและไม่ซ้ำกัน ระบบจะ
ตรวจสอบโครงสร้างข้อความ การใช้เหตุผล และการเรียกฟังก์ชันก่อนส่งการเรียกใช้เครื่องมือใด ๆ สถานะ Chat
ที่ใหญ่เกินไปจะกลับไปใช้ประวัติที่มองเห็นซึ่งปรับรูปแบบแล้ว Chat ยังทิ้ง Items การเรียกฟังก์ชันแบบดิบ
เพราะไม่ได้เก็บผลลัพธ์เครื่องมือที่สอดคล้องกัน ระบบจะปฏิเสธคำตอบ Work ที่มีเครื่องมือแต่ไม่มีสถานะ
เล่นซ้ำแบบถูกจำกัดและตรงตามเดิม ก่อนที่เครื่องมือจะก่อผลข้างเคียง
พื้นที่จัดเก็บ Chat ที่ใช้ SQLite จะเข้ารหัสสถานะผู้ให้บริการที่เก็บไว้พร้อมข้อความ ส่วน Work เก็บสถานะ
เฉพาะเครื่องมือไว้ในแถวบริบทที่ซ่อนอยู่และ API ข้อความจะไม่ส่งแถวเหล่านี้กลับ ขอบเขตที่ผ่านการแฮช
จะผูกการเล่นซ้ำไว้กับผู้ให้บริการ โมเดล โหมด Responses ปลายทางสุดท้ายที่กำหนด และลายนิ้วมือ
ทางเดียวแบบทึบของข้อมูลรับรองที่เลือก เมื่อขอบเขตนี้เปลี่ยน รวมถึงหลังหมุนเวียน API key Libre WebUI
จะกลับไปใช้ประวัติข้อความที่ปรับรูปแบบแล้ว แทนการส่ง Items เฉพาะผู้ให้บริการข้ามขอบเขตการยืนยันตัวตน
งาน Work ที่กำลังทำงานจะสร้างลายนิ้วมือของเส้นทางและข้อมูลรับรอง แล้วตรวจสอบอีกครั้งทันทีก่อนทุกรอบ
ของผู้ให้บริการ การเปลี่ยนโหมด ปลายทาง หรือ API key จะหยุดงานก่อนที่คำขออื่นจะได้รับสถานะเครื่องมือเดิม
สถานะที่มีเครื่องมือต้องอยู่ภายในทั้งขีดจำกัดการเล่นซ้ำและตัวห่อข้อมูลกำกับแบบคงอยู่ขนาด 100 KB
ที่สมบูรณ์ก่อน Work จะก่อผลข้างเคียง หากชุดงาน Work ที่เก็บไว้ถูกขัดจังหวะ ระบบจะคืนผลลัพธ์เครื่องมือ
ทุกชิ้นที่หายไปพร้อม ID การเรียกเดิมและคำเตือนว่าไม่ทราบผลลัพธ์ เพื่อให้ผู้ให้บริการตรวจสอบพื้นที่ทำงาน
แทนการทำผลข้างเคียงที่อาจเกิดขึ้นซ้ำโดยไม่ตรวจสอบ ผลลัพธ์ Responses ที่ไม่สมบูรณ์จะไม่ถือเป็นรอบ Chat
หรือ Work ที่สำเร็จ โดยจะเก็บ incomplete_details.reason และแสดงแก่ผู้เรียก
การค้นหาโมเดลจะสร้าง /models จากเส้นทางการดำเนินการทั้งสองแบบ ตัวอย่างเช่น
https://api.example.com/v1/responses จะค้นหาจาก
https://api.example.com/v1/models ผู้ให้บริการที่ไม่มีปลายทางรายการโมเดลซึ่งเข้ากันได้ยังใช้
model_map ที่กำหนดเองได้ การค้นหาจำกัดขอบเขตตามตัวแปรและข้อมูลรับรองของผู้ใช้ปัจจุบัน
ผลลัพธ์จะเก็บแยกตามผู้ใช้แทนการเขียนลงไฟล์กำหนดปลั๊กอินที่ใช้ร่วมกัน การค้นหาจะทำงานหลังเปิดใช้
รีเฟรชโดยตรง เปลี่ยน API key เปลี่ยนตัวแปรการเชื่อมต่อ และรีเซ็ตตัวแปร การบันทึกตัวแปรสร้างผลลัพธ์
ที่ไม่เกี่ยวข้องจะไม่ส่งคำขอผ่านเครือข่าย
การค้นหายังทำงานได้เอง การอ่านรายการปลั๊กอินจะค้นหาผู้ให้บริการสร้างคำตอบที่เปิดใช้อยู่ใหม่ เมื่อ
รายการหายไปหรือเก่ากว่า PLUGIN_MODEL_DISCOVERY_TTL_MS ดังนั้นการโหลดแอปใหม่จะแสดงโมเดล
ปัจจุบันของผู้ให้บริการ แทนรายการที่บันทึกไว้ตอนเปิดใช้ ระยะพักแยกตามผู้ให้บริการจะป้องกันไม่ให้ตรวจ
ผู้ให้บริการที่เข้าถึงไม่ได้ในทุกคำขอ และกำหนดเวลาสิ้นสุดจะป้องกันไม่ให้ผู้ให้บริการที่ช้าถ่วงคำตอบ
หากการรีเฟรชใช้เวลานานเกินกำหนด ผลจะถูกนำมาใช้ในคำขอถัดไป
ระบบจะตรวจ URL ค้นหาสุดท้ายที่สร้างขึ้นก่อนอ่านข้อมูลรับรองของผู้ใช้หรือสร้างส่วนหัวการอนุญาต รวมถึง
เมื่อ URL มาจากไฟล์กำหนดปลั๊กอินที่นำเข้า คำขอค้นหาและความสามารถของผู้ให้บริการจะไม่ติดตามการเปลี่ยน
เส้นทาง HTTP ให้กำหนดปลายทางสุดท้ายสำหรับ Chat, Work, รายการโมเดล รูปภาพ การฝังข้อมูล การถอดเสียง
เสียงพูด การโคลนเสียง เสียง หรือวิดีโอโดยตรง เพื่อป้องกันไม่ให้ข้อมูลรับรองถูกส่งต่อจาก URL ที่ตรวจสอบแล้ว
ไปยังปลายทางเปลี่ยนเส้นทางที่ยังไม่ผ่านการตรวจสอบ
ปลายทางของผู้ให้บริการใช้ HTTP หรือ HTTPS ได้ HTTP จะส่ง API key พรอมต์ ผลลัพธ์เครื่องมือ และเนื้อหา
ที่สร้างขึ้นโดยไม่มีการเข้ารหัสระหว่างส่ง จึงใช้เฉพาะกับเกตเวย์ที่โฮสต์เองบนเครือข่ายที่คุณเชื่อถือ และเลือก
HTTPS เมื่อเกตเวย์รองรับ TLS คำขอมาจากแบ็กเอนด์ ในระบบคอนเทนเนอร์จึงหมายถึง URL บริการ เช่น
http://ai-gateway:8080/v1 ส่วน localhost หมายถึงคอนเทนเนอร์ Libre WebUI เอง เส้นทางความสามารถ
ของปลั๊กอิน รวมถึงการสร้างรูปภาพ จะเลือกตัวแปรปลายทางและข้อมูลรับรองสำหรับบัญชีที่ยืนยันตัวตนซึ่งส่งคำขอ
Libre WebUI ไม่มีโหมดผู้ใช้คนเดียวที่ไม่ยืนยันตัวตน
ปลายทางเฉพาะความสามารถ
ค่าปลายทาง Chat ที่กำหนดทับจะแยกจากความสามารถด้านรูปภาพ การฝังข้อมูล การถอดเสียง การแปลงข้อความ
เป็นเสียง เสียง และวิดีโอ ปลั๊กอินที่มีหลายความสามารถสามารถเปิดให้กำหนด image_endpoint,
embedding_endpoint, stt_endpoint, tts_endpoint หรือตัวแปรอื่นที่ตั้งชื่อด้วย
config.endpoint_variable เส้นทางโคลนเสียงก็ตั้งชื่อ config.voice_clone_endpoint_variable
ได้เช่นกัน การเว้นฟิลด์เหล่านี้ว่างจะใช้ปลายทางความสามารถที่ปลั๊กอินประกาศไว้ ระบบจะไม่นำ endpoint
ทั่วไปของ Chat มาใช้เป็นค่ากำหนดทับของความสามารถ
ปลั๊กอิน GitHub Models ที่มีมาให้จะรับทอดปลายทางปัจจุบัน
models.github.ai/inference/chat/completions เมื่อเว้นค่ากำหนดทับที่ไม่บังคับให้ว่าง ส่วนปลั๊กอิน
Hugging Face ใช้เส้นทางและข้อมูลคำขอ hf-inference/models/{model} แยกตามงานสำหรับการฝังข้อมูล
รูปภาพ และการแปลงข้อความเป็นเสียง แทนการส่งคำขอเหล่านั้นไปยังปลายทาง Chat
การกำหนดปลายทางทับค่าเดิม
ตัวแปร endpoint คือ URL คำขอแบบเต็ม รวมถึงเส้นทางการดำเนินการ ตัวอย่างเช่น ปลั๊กอินสนทนา
ที่เข้ากันได้กับ OpenAI มักใช้ URL เช่น https://provider.example/v1/chat/completions
ไม่ใช่เพียง https://provider.example การตั้งค่าปลั๊กอินแบบเดิมที่นำเข้าอาจเรียกตัวแปรนี้ว่า
api_url Libre WebUI ยอมรับชื่อแทนนั้น แต่ endpoint ที่ไม่ว่างจะมีลำดับความสำคัญก่อนเสมอ
เมื่อตั้งทั้งสองรายการ
ระบบยอมรับ URL ปลายทาง HTTP และ HTTPS แบบเต็ม และปฏิเสธโพรโทคอลอื่น HTTP มีไว้สำหรับเกตเวย์ ที่โฮสต์เองบนเครือข่ายที่เชื่อถือได้ เพราะส่งข้อมูลรับรองและเนื้อหาคำขอโดยไม่มีการเข้ารหัสระหว่างส่ง ควรใช้ HTTPS สำหรับทุกเส้นทางที่ออกนอกขอบเขตระบบส่วนตัว การเว้นค่ากำหนดทับให้ว่างจะใช้ปลายทาง แบบเต็มจากข้อกำหนดปลั๊กอิน ส่วนค่าที่ระบุชัดแต่ไม่ถูกต้องจะถูกปฏิเสธ แทนการเปลี่ยนเส้นทางไปยังค่าเริ่มต้น นั้นโดยไม่แจ้ง
คำขอถึงผู้ให้บริการจะไม่ติดตามการเปลี่ยนเส้นทาง ให้กำหนด URL การดำเนินการสุดท้ายที่ผ่านการตรวจสอบ โดยตรง ระบบจะรายงานคำตอบที่เปลี่ยนเส้นทางเป็นข้อผิดพลาดของผู้ให้บริการ แทนการส่งต่อข้อมูลรับรอง หรือเนื้อหาคำขอไปยังจุดถัดไป
โปรดจำว่าคำขอมาจากแบ็กเอนด์ Libre WebUI ภายในคอนเทนเนอร์ localhost หมายถึงคอนเทนเนอร์นั้นเอง
ไม่ใช่โฮสต์ของคอนเทนเนอร์หรือบริการอื่นโดยอัตโนมัติ ให้ใช้ชื่อบริการคอนเทนเนอร์ของเกตเวย์ หรือชื่อที่
เข้าถึงโฮสต์ได้ เช่น host.docker.internal เมื่อระบบคอนเทนเนอร์มีชื่อดังกล่าวให้ใช้
การค้นหาโมเดล
Settings → Plugins มีพื้นที่ Provider connections สำหรับขั้นตอนนี้ ค้นหาผู้ให้บริการในบานหน้าต่าง ด้านซ้าย เลือกรายการ แล้วใช้บานหน้าต่างด้านขวาเพื่อตรวจสอบสถานะการเปิดใช้และรายการโมเดลที่มีผลจริง การกำหนดค่าผู้ให้บริการจะยังย่ออยู่จนกว่าจะเลือก Configure วิธีนี้ซ่อนปลายทาง ข้อมูลรับรอง และ ตัวควบคุมการสร้างผลลัพธ์ขั้นสูงจากมุมมองเริ่มต้น
สำหรับผู้ให้บริการสนทนาและสร้างคำตอบ Refresh models จะค้นหาโมเดลของผู้ให้บริการที่เลือก
แล้วโหลดทั้งรายการปลั๊กอินและรายการโมเดลของ Chat ใหม่ รายการนี้เป็นแบบอ่านอย่างเดียว โดยแถวต่าง ๆ
มาจาก ID ที่ค้นพบของผู้ใช้ปัจจุบันรวมกับรายการจับคู่โมเดลตามความสามารถในข้อกำหนดปลั๊กอิน ป้าย
ความสามารถบอกว่าเส้นทางปลั๊กอินใดแสดงโมเดลนั้น ไม่ใช่การตรวจสถานะ เพิ่ม ID โมเดลสำรองหรือที่ดูแล
ด้วยตนเองผ่าน model_map ใน JSON ของปลั๊กอิน อย่าแก้แถวที่ค้นพบ
เมื่อเปิดใช้ปลั๊กอิน Libre WebUI จะพยายามค้นหาโมเดลด้วยปลายทางและข้อมูลรับรองที่มีผลของบัญชีนั้น เส้นทางกำหนดเองของผู้ดูแลระบบต้องใช้ข้อมูลรับรองที่บัญชีเดียวกันจัดเก็บ ส่วนค่าทดแทนจากสภาพแวดล้อม จะใช้เฉพาะกับเส้นทางในไฟล์กำหนดที่เชื่อถือได้ สำหรับ API ที่เข้ากันได้ Libre WebUI จะสร้าง URL รายการโมเดลจากปลายทางแบบเต็ม:
- URL ที่ลงท้ายด้วย
/modelsจะใช้ตามเดิม - ส่วนต่อท้ายการดำเนินการที่รู้จัก เช่น
/chat/completions,/completions,/responses,/embeddingsหรือ/messagesจะถูกแทนด้วย/models - มิฉะนั้นจะเติม
/modelsต่อท้ายเส้นทาง
ปลั๊กอินที่ใช้ URL ซึ่งระบบสร้างไม่ได้อาจเปิดให้กำหนด models_endpoint เป็น URL รายการโมเดล
แบบเต็มอย่างชัดเจน ค่านี้มีลำดับก่อนการสร้าง URL อยู่ภายใต้นโยบาย URL ขาออกเดียวกัน และระบบจะส่ง
คำขอโดยไม่ติดตามการเปลี่ยนเส้นทาง การบันทึกหรือรีเซ็ต endpoint, api_url, models_endpoint,
base_url, api_path หรือ api_mode จะล้างและรีเฟรชรายการที่ค้นพบของผู้ใช้ปัจจุบัน ก่อนส่วนติดต่อ
ผู้ใช้โหลดรายการใหม่
เส้นทางกำหนดเองทั้งหมดจะถูกคำนวณและตรวจสอบก่อนเลือกข้อมูลรับรอง นโยบายข้อมูลรับรองต้องไม่ใช้คีย์ สภาพแวดล้อมของเซิร์ฟเวอร์เป็นค่าทดแทนสำหรับเส้นทางกำหนดเองที่บันทึกไว้ ให้กำหนดคีย์แยกตามผู้ใช้ สำหรับเส้นทางนั้นแทน ค่าทดแทนจากสภาพแวดล้อมสงวนไว้สำหรับปลายทางที่ข้อกำหนดปลั๊กอินซึ่งเชื่อถือได้ระบุ
การค้นหาคาดหวังคำตอบที่เข้ากันได้กับ OpenAI ซึ่งมี ID โมเดลในอาร์เรย์ data การเปิดใช้จะรอ
ความพยายามนั้นก่อนตอบกลับ เพื่อให้การรีเฟรชรายการปลั๊กอินครั้งแรกมีรายการที่ค้นพบได้ ผลลัพธ์ที่สำเร็จ
จะเก็บแยกตามผู้ใช้และซ้อนทับในมุมมองปลั๊กอินของผู้ใช้นั้น Libre WebUI จะไม่เขียน JSON ของปลั๊กอิน
ที่ใช้ร่วมกันใหม่ หรือเปิดเผย ID โมเดลที่ผู้ใช้หนึ่งค้นพบแก่บัญชีอื่น หากผู้ให้บริการไม่มีปลายทางรายการ
โมเดลที่เข้ากันได้ เข้าถึงไม่ได้ หรือส่งรูปแบบคำตอบอื่น การเปิดใช้ตามปกติจะเก็บผลการค้นหาก่อนหน้าของ
ผู้ใช้นั้นไว้ การเปลี่ยนฟิลด์การเชื่อมต่อโดยตั้งใจจะล้างรายการล้าสมัยก่อน จึงใช้ model_map สำรองของ
ปลั๊กอินเมื่อค้นหาเส้นทางใหม่ไม่ได้
การบันทึกหรือรีเซ็ตเส้นทางการเชื่อมต่อจะล้างรายการที่บัญชีนั้นค้นพบก่อนหน้าก่อนพยายามค้นหาครั้งถัดไป โมเดลที่เรียนรู้จากปลายทางหนึ่งจึงไม่คงเป็นตัวเลือกหลังเปลี่ยนเส้นทาง
สถานะปลั๊กอิน ความพร้อมของ Work รายการโมเดล และเส้นทางความสามารถ ใช้บริบทผู้ใช้และขอบเขตข้อมูล รับรองเดียวกัน ตัวอย่างเช่น ระบบจะเลือกความพร้อมของโมเดลรูปภาพ ตัวแปรปลายทาง และข้อมูลรับรอง สำหรับผู้ใช้ที่ส่งคำขอ
การเลือกผู้ให้บริการที่แน่นอนในแชต
ID โมเดลไม่จำเป็นต้องไม่ซ้ำกันทั้งระบบ โมเดล Ollama และปลั๊กอินที่เปิดใช้อยู่หลายรายการอาจเปิดให้ใช้
โมเดลชื่อ example-model พร้อมกันได้ Chat จึงเก็บ ID โมเดลดิบพร้อมข้อมูลระบุผู้ให้บริการที่ไม่บังคับ:
providerType: "ollama"ระบุเส้นทาง Ollama ภายในเครื่องหรือที่กำหนดไว้providerType: "plugin"ร่วมกับproviderIdระบุปลั๊กอินหนึ่งรายการโดยเฉพาะ
ค่าที่ระบุผู้ให้บริการและเข้ารหัสแบบ URL จะใช้เป็นคีย์ที่ป้องกันการชนกันในตัวเลือกโมเดลเท่านั้น คำขอยังคงส่ง ID โมเดลดิบของผู้ให้บริการ ชื่อโมเดล Ollama/ปลั๊กอิน และปลั๊กอิน/ปลั๊กอินที่ซ้ำกัน จะยังเป็นตัวเลือกแยกกัน และการเปิดการสนทนาอีกครั้งจะคืนค่าตัวเลือกที่บันทึกไว้โดยเจาะจง
ข้อมูลระบุผู้ให้บริการที่ระบุชัดจะปฏิเสธไว้ก่อน หากปลั๊กอินที่เลือกถูกปิดใช้ ลบ หรือไม่แสดงโมเดลนั้นแล้ว Libre WebUI จะยังแสดงตัวเลือกที่บันทึกไว้ว่าไม่พร้อมใช้งาน และไม่เปลี่ยนไปยังผู้ให้บริการอื่นที่มีโมเดล ชื่อเดียวกันโดยไม่แจ้ง ให้เปิดใช้ผู้ให้บริการอีกครั้งหรือเลือกโมเดลอื่นอย่างชัดเจนก่อนสร้างผลลัพธ์อีกครั้ง
เซสชันและค่ากำหนดที่สร้างก่อนเริ่มจัดเก็บข้อมูลระบุผู้ให้บริการอาจไม่ได้ตั้ง providerType และ
providerId หรือมีค่าเป็น null ระเบียนเดิมเหล่านี้จะคงการกำหนดเส้นทางแบบอิงชื่อเพียงอย่างเดียว
ไว้เพื่อความเข้ากันได้ เพราะไม่สามารถสร้างข้อมูลผู้ให้บริการเดิมกลับมาได้อย่างเชื่อถือได้ ตัวเลือกจะแสดง
ระเบียนเหล่านี้ว่า "provider not recorded" แทนการเดาป้าย Ollama หรือปลั๊กอิน การเลือกผู้ให้บริการ
รายการใดรายการหนึ่งจะบันทึกผู้ให้บริการที่แน่นอนสำหรับคำขอถัดไป ตัวเลือก Persona ใหม่จะคงข้อมูลระบุ
ในส่วนติดต่อผู้ใช้เป็น persona:<id> และบันทึกว่าทำงานผ่าน Ollama
การตั้งค่าและการสืบทอดผู้ให้บริการ
เปิด Settings → Plugins แล้วเลือก Configure สำหรับผู้ให้บริการ แผงผู้ให้บริการจะปิดไว้ โดยค่าเริ่มต้น ผู้ดูแลระบบสามารถจัดการข้อกำหนดที่ใช้ร่วมกันและค่ากำหนดเส้นทางการเชื่อมต่อ ผู้ใช้ที่ ยืนยันตัวตนรายอื่นสามารถเปิดใช้ผู้ให้บริการ บันทึก API key ของตน และเปลี่ยนตัวควบคุมการสร้างผลลัพธ์ ของตนได้ แต่ส่วนติดต่อผู้ใช้จะไม่แสดงตัวควบคุมสำหรับอัปโหลด ติดตั้ง ส่งออก ลบ หรือกำหนดเส้นทาง ปลั๊กอินแก่ผู้ใช้เหล่านั้น
สำหรับผู้ดูแลระบบ ค่าการเชื่อมต่อที่กำหนดทับจะแสดงก่อน ตัวควบคุมการสุ่มตัวอย่างและตัวควบคุมเฉพาะทาง อื่นยังอยู่ภายใต้ Advanced parameters ซึ่งปิดไว้โดยค่าเริ่มต้นเช่นกัน ค่าการเชื่อมต่อและการสร้าง ผลลัพธ์ที่รับทอดมาจะแสดงเป็นช่องว่างพร้อมคำแนะนำค่าเริ่มต้นของผู้ให้บริการ Libre WebUI จะไม่คัดลอก ค่าเริ่มต้นจากไฟล์กำหนดไปยังการตั้งค่าที่บันทึกของบัญชี เพียงเพราะมีการเปิดแผง
การบันทึกจะส่งเฉพาะฟิลด์ที่เปลี่ยนในเซสชันตัวแก้ไขปัจจุบัน การล้างค่าที่ไม่ละเอียดอ่อนซึ่งบันทึกไว้จะลบ ค่าที่กำหนดทับของบัญชีนั้นและคืนค่าเริ่มต้นของผู้ให้บริการ ส่วนฟิลด์ละเอียดอ่อนที่ปิดบังและเว้นว่างจะไม่เปลี่ยน Reset to Defaults จะลบค่าตัวแปรที่กำหนดทับทั้งหมดซึ่งบัญชีได้รับอนุญาตให้จัดการ หากบันทึกหรือรีเซ็ต ล้มเหลว ตัวแก้ไขจะยังแสดงค่าที่ยังไม่บันทึกเพื่อให้ผู้ใช้ลองอีกครั้งได้
ความแตกต่างนี้สำคัญสำหรับปลายทางกำหนดเอง ผู้ดูแลระบบจะเว้นปลายทางว่างเพื่อรับทอด URL ที่มากับปลั๊กอิน หรือป้อน URL ที่เข้ากันได้แบบเต็มเพื่อกำหนดทับสำหรับการเชื่อมต่อผู้ให้บริการของผู้ดูแลระบบนั้น
ปลั๊กอินใน Work
Work สามารถใช้ปลั๊กอิน completion และ chat ที่เปิดใช้อยู่ นอกเหนือจาก Ollama และ Ollama Cloud
ระบบจะรับงาน Work ที่ทำงานผ่านปลั๊กอินเฉพาะเมื่อ:
- ปลั๊กอินเปิดใช้อยู่
- โมเดลอยู่ในรายการที่ผู้ใช้ปัจจุบันค้นพบ หรือรายการจับคู่โมเดลที่กำหนดของปลั๊กอิน และ
- มีข้อมูลรับรองสำหรับผู้ดูแลระบบปัจจุบัน
Work จะเก็บชนิดผู้ให้บริการและ ID ปลั๊กอินที่เลือกไว้ทั้งกับงานและการทำงานแต่ละครั้ง การกำหนดเส้นทาง จึงอิงผู้ให้บริการที่บันทึกไว้อย่างเจาะจง ไม่ใช่เพียงชื่อโมเดล การเปิดใช้ปลั๊กอินที่มีชื่อโมเดลตรงกับโมเดล Ollama จะไม่เปลี่ยนเส้นทางงานที่มีอยู่โดยไม่แจ้ง
Work จะแปลงการเรียกใช้เครื่องมือผ่านรูปแบบคำขอและคำตอบที่รองรับ OpenAI, Anthropic และ Gemini โดยตรง โมเดลที่เลือกต้องรองรับการเรียกใช้เครื่องมือ แม้ผู้ให้บริการจะมีการสร้างคำตอบสนทนาทั่วไป หากผู้ให้บริการปฏิเสธเครื่องมือหรือส่งคำตอบที่ไม่เข้ากัน งานจะล้มเหลวโดยไม่เปลี่ยนไปใช้ผู้ให้บริการอื่น
งาน Work ระยะไกลอาจส่งคำขอถึงผู้ให้บริการหลายครั้ง ผู้ให้บริการจะได้รับพรอมต์ระบบของ Work บริบท การสนทนา ข้อกำหนดเครื่องมือ และผลลัพธ์เครื่องมือที่ร้องขอ ผลลัพธ์เครื่องมืออาจมีไฟล์ต้นฉบับ รายการ ไดเรกทอรี หรือผลลัพธ์คำสั่ง Libre WebUI แสดงคำชี้แจงเกี่ยวกับผู้ให้บริการระยะไกลใน Work แยกตามผู้ใช้ และผู้ใช้สามารถปิดได้ แต่ผู้ดูแลควรตรวจสอบราคา การเก็บรักษาข้อมูล และนโยบายการฝึกของผู้ให้บริการ ก่อนเปิดใช้บริการกับโครงการที่มีข้อมูลละเอียดอ่อน
การฝังข้อมูล
ปลั๊กอินที่รองรับการฝังข้อมูลสามารถปรากฏในการตั้งค่าการฝังข้อมูลของเอกสาร Libre WebUI ยังตรวจหาโมเดลการฝังข้อมูล Ollama ที่น่าจะใช่ เช่น nomic-embed-text, bge, e5, gte และชื่อโมเดลที่คล้ายกัน
เมื่อไม่พบโมเดลการฝังข้อมูล ส่วนติดต่อผู้ใช้จะใช้ nomic-embed-text เป็นตัวเลือกเริ่มต้นภายในเครื่อง
หมายเหตุการพัฒนาปลั๊กอิน
ข้อกำหนดปลั๊กอินควรอธิบายความสามารถอย่างชัดเจน และไม่อ้างว่าผู้ให้บริการรองรับคุณสมบัติที่ไม่ได้เปิดให้ใช้ รักษารายการจับคู่โมเดลให้เล็กพอจะใช้เป็นค่าทดแทนได้ และควรเลือกการค้นหาโมเดลสำหรับผู้ให้บริการที่มี API รายการโมเดลรวดเร็วและเชื่อถือได้
เมื่อเพิ่มผู้ให้บริการ:
- เพิ่มข้อกำหนดปลั๊กอิน
- กำหนดคีย์ข้อมูลรับรองหรือฟิลด์ข้อมูลรับรองผู้ใช้
- สร้างการค้นหาโมเดลหากผู้ให้บริการมีปลายทางรายการโมเดล
- เพิ่มการจับคู่คำขอสำหรับการสนทนา การฝังข้อมูล รูปภาพ TTS หรือ STT
- ทดสอบสถานะเมื่อไม่มีคีย์ คีย์ไม่ถูกต้อง และผู้ให้บริการเกิดข้อผิดพลาด