แชตกับเอกสาร
แชตกับเอกสารช่วยให้ Libre WebUI ค้นหาเอกสารที่อัปโหลดและส่งข้อความส่วนที่เกี่ยวข้องเข้าไปในบริบทของแชต
ไฟล์ที่รองรับ
ประเภทไฟล์ที่รองรับในปัจจุบัน:
- PDF (มีแหล่งที่มาตามหน้า)
- ข้อความธรรมดาและบันทึก
- Markdown (
.md,.markdown,.mdx, มีแหล่งที่มาตามส่วน) - HTML
- เอกสาร Word (
.docx) - งานนำเสนอ (
.pptx, มีแหล่งที่มาตามสไลด์) - สเปรดชีต (
.xlsx, มีแหล่งที่มาตามชีต) และ CSV/TSV - โค้ดต้นฉบับ (TypeScript, Python, Go, Rust, SQL, YAML และภาษาอื่นที่ใช้ทั่วไป)
- รูปภาพ (
.png,.jpg,.webp,.gif) — ข้อความจะถูกอ่านด้วยโมเดลวิชันที่กำหนดค่า (การตั้งค่า → ค่าเริ่มต้น → โมเดลวิชัน) - เสียง (
.wav,.webm) — ถอดข้อความผ่านผู้ให้บริการเสียงเป็นข้อความ ภายใต้สิทธิ์ STT เดียวกับการป้อนด้วยเสียง - ขนาดไฟล์สูงสุด: 10 MB
รูปแบบ Office จะถูกแยกด้วยตัววิเคราะห์แบบจำกัดใน repository โดยไม่มีไลบรารีเอกสารภายนอกทำงานในโปรเซสเซิร์ฟเวอร์ การอัปโหลดไบต์ที่เหมือนกันซ้ำในขอบเขตเดียวกันจะถูกขจัดรายการซ้ำแทนการนำเข้าสองครั้ง
การสกัดรูปภาพและเสียงจะส่งไปยังผู้ให้บริการที่คุณกำหนดค่าไว้แล้ว โดยไม่มี OCR หรือเครื่องมือเสียงในเครื่องรวมมา และไม่มีข้อมูลออกจากอินสแตนซ์นอกจากคำขอไปยังโมเดลที่เลือก PDF ที่ไม่มีชั้นข้อความ (ไฟล์สแกน) จะจัดการแบบเดียวกัน ระบบกู้รูปหน้า JPEG ที่ฝังไว้และอ่านผ่านโมเดลวิชันพร้อมแหล่งที่มาตามหน้า ไฟล์สแกนที่เก็บด้วยการเข้ารหัสภาพอื่น (CCITT fax, JBIG2) ยังไม่ให้ข้อความ และหากไม่มีโมเดลวิชันหรือผู้ให้บริการ STT การอัปโหลดจะถูกทำเครื่องหมายว่าล้มเหลวพร้อมเหตุผลใน การตั้งค่า → เอกสาร
backend จะประมวลผลไฟล์และเก็บร่วมกับข้อมูลแอปพลิเคชันอื่น
โหมดการค้นหา
Libre WebUI รองรับโหมดการค้นคืนสองแบบ:
| โหมด | เมื่อใช้ | หมายเหตุ |
|---|---|---|
| ค้นหาคำสำคัญ | พร้อมใช้เสมอ | การจัดอันดับ BM25 ไม่ต้องใช้โมเดล embedding |
| ค้นหาแบบผสม | เปิด embedding ในการตั้งค่า | รวมการจัดอันดับ vector กับ BM25 ด้วย reciprocal-rank fusion |
เมื่อเปิด embedding ทุกคำค้นจะเรียกการจัดอันดับทั้งสองและรวมผล คำที่ตรงกันพอดีอาจมีอันดับสูงกว่าส่วนที่คล้ายเชิงความหมายแต่คลุมเครือกว่า และส่วนที่กำลังสร้าง embedding ยังพบได้ผ่านการค้นหาเชิงคำ หาก embedding ล้มเหลวหรือปิดอยู่ การค้นหาเอกสารจะกลับไปใช้คำสำคัญล้วน
การให้คะแนนเชิงคำทำงานในโปรเซสกับส่วนที่คุณเข้าถึงได้ Libre ตั้งใจไม่เก็บดัชนีข้อความฉบับเต็มบนดิสก์สำหรับส่วนเอกสาร เพราะข้อความของส่วนถูกเข้ารหัสและดัชนี token จะเก็บข้อความธรรมดาไว้ข้าง ciphertext ส่วนจะเข้าร่วมการจัดอันดับเชิงคำเมื่อมีคำจากคำค้นอย่างครบถ้วนอย่างน้อยหนึ่งคำ ดังนั้นตัวระบุผสมอย่าง ALPHA_BETA_GAMMA จะไม่แสดงข้อความที่ตรงเพียงส่วนย่อย
คอลเลกชันความรู้ที่ แชร์กับคุณ จะเข้าร่วมการจัดอันดับทั้งสองโดยอัตโนมัติ การควบคุมสิทธิ์บังคับใช้ภายในคำค้น vector โดยเผยแพร่สิทธิ์ลง ACL ของดัชนี ดังนั้นการถอนการแชร์จะซ่อนเอกสารในการค้นหาครั้งถัดไปทันทีโดยไม่ต้องสร้าง embedding ใหม่
เปิดการค้นหาเชิงความหมาย
ติดตั้งโมเดล embedding:
ollama pull nomic-embed-text
จากนั้นเปิดการตั้งค่าและเปิด embedding คุณสามารถใช้โมเดล embedding ของ Ollama ในเครื่องหรือ plugin ผู้ให้บริการที่รองรับ embedding
การตั้งค่า embedding เริ่มต้น:
- โมเดล:
nomic-embed-text - ขนาดส่วน: 1000 อักขระ
- ส่วนทับซ้อน: 200 อักขระ
- เกณฑ์ความคล้าย: 0.3
การอ้างอิงและโหมดเอกสารฉบับเต็ม
ข้อความส่วนที่ค้นคืนมีแหล่งที่มา ได้แก่ ชื่อไฟล์ต้นฉบับ ดัชนีส่วน คะแนนการค้นคืน และสำหรับรูปแบบที่มีแผนที่ส่วน จะมีหน้า สไลด์ ชีต หรือส่วน Markdown ที่มา บริบทแชตกำกับตำแหน่งให้แต่ละข้อความ และแถบแหล่งที่มาของการสนทนาจะแสดงตำแหน่งอ้างอิงใต้เอกสาร
แต่ละแชตสลับเป็น โหมดเอกสารฉบับเต็ม จากแถบแหล่งที่มาได้ แทนที่จะส่งข้อความส่วนที่ค้นคืน ระบบจะส่งเนื้อหาที่สกัดทั้งหมดของเอกสารในขอบเขตพร้อมข้อความ ตัวป้องกัน token (FULL_DOCUMENT_CONTEXT_MAX_TOKENS, ค่าเริ่มต้น 32000) ปกป้องหน้าต่างบริบทโมเดล เมื่อเอกสารแนบเกินขีดจำกัด แชตจะกลับไปค้นคืนและแถบแหล่งที่มาจะอธิบายเหตุผล
อัปโหลดและค้นหา
- อัปโหลดไฟล์ที่รองรับจากส่วนควบคุมเอกสาร
- รอให้ประมวลผลเสร็จ
- ถามคำถามในแชต
- Libre WebUI ค้นคืนส่วนที่เกี่ยวข้องสำหรับเซสชันและรวมเป็นบริบท
ตัวอย่าง prompt:
Summarize the uploaded document in five bullets.
What deadlines are mentioned in the PDF?
Find the section that talks about pricing.
Compare the uploaded policy with this proposed change.
endpoint ของ API
| Endpoint | วัตถุประสงค์ |
|---|---|
POST /api/documents/upload | อัปโหลดเอกสารที่รองรับ |
GET /api/documents | แสดงเอกสารที่อัปโหลด |
GET /api/documents/session/:sessionId | แสดงเอกสารสำหรับเซสชันแชต |
POST /api/documents/search | ค้นหาเอกสาร |
DELETE /api/documents/:documentId | ลบเอกสาร |
GET /api/documents/embeddings/status | ดูสถานะ embedding |
POST /api/documents/embeddings/regenerate | สร้าง embedding ใหม่ |
แนวทางปฏิบัติที่ดี
- จำกัดไฟล์อัปโหลดให้เกี่ยวข้องกับงานปัจจุบัน
- เลือก PDF ที่มีข้อความเป็นหลัก PDF สแกนทำงานผ่านโมเดลวิชันแต่ใช้หนึ่งคำขอโมเดลต่อหน้า
- สร้าง embedding ใหม่หลังเปลี่ยนโมเดล embedding
- ลดเกณฑ์ความคล้ายหากการค้นหาเชิงความหมายพลาดบริบทที่มีประโยชน์
- เพิ่มเกณฑ์หากผลลัพธ์มีสัญญาณรบกวนมาก