ข้ามไปยังเนื้อหาหลัก

แชตกับเอกสาร

แชตกับเอกสารช่วยให้ 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) ปกป้องหน้าต่างบริบทโมเดล เมื่อเอกสารแนบเกินขีดจำกัด แชตจะกลับไปค้นคืนและแถบแหล่งที่มาจะอธิบายเหตุผล

อัปโหลดและค้นหา

  1. อัปโหลดไฟล์ที่รองรับจากส่วนควบคุมเอกสาร
  2. รอให้ประมวลผลเสร็จ
  3. ถามคำถามในแชต
  4. 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
  • ลดเกณฑ์ความคล้ายหากการค้นหาเชิงความหมายพลาดบริบทที่มีประโยชน์
  • เพิ่มเกณฑ์หากผลลัพธ์มีสัญญาณรบกวนมาก

เอกสารที่เกี่ยวข้อง