Chat Dokumen
Chat Dokumen memungkinkan Libre WebUI mencari dokumen yang diunggah dan memasukkan kutipan yang relevan ke konteks chat.
Berkas yang Didukung
Dukungan unggahan saat ini:
- PDF (dengan asal per halaman)
- Teks biasa dan log
- Markdown (
.md,.markdown,.mdx, dengan asal per bagian) - HTML
- Dokumen Word (
.docx) - Presentasi (
.pptx, dengan asal per slide) - Lembar kerja (
.xlsx, dengan asal per lembar) dan CSV/TSV - Kode sumber (TypeScript, Python, Go, Rust, SQL, YAML, dan bahasa umum lainnya)
- Gambar (
.png,.jpg,.webp,.gif) — teks dibaca oleh model penglihatan yang Anda konfigurasikan (Pengaturan → Bawaan → Model Penglihatan) - Audio (
.wav,.webm) — ditranskripsikan melalui penyedia ucapan-ke-teks Anda, di balik gerbang akses STT yang sama dengan input suara - Ukuran berkas maksimum: 10 MB
Format Office dibongkar dengan parser terbatas yang tersedia dalam repositori—tidak ada pustaka dokumen pihak ketiga yang berjalan dalam proses server. Mengunggah ulang byte yang identik dalam cakupan yang sama akan dideduplikasi, bukan dimasukkan dua kali.
Ekstraksi gambar dan audio dirutekan ke penyedia yang sudah Anda konfigurasikan—tidak ada mesin OCR atau ucapan lokal yang disertakan, dan tidak ada yang keluar dari instans selain panggilan ke model pilihan Anda. PDF tanpa lapisan teks (hasil pemindaian) ditangani dengan cara yang sama: gambar halaman JPEG yang tertanam dipulihkan dan dibaca melalui model penglihatan, dengan asal per halaman. Pindaian yang disimpan dalam pengodean gambar lain (faks CCITT, JBIG2) tetap tidak menghasilkan teks. Jika tidak ada model penglihatan atau penyedia STT yang dikonfigurasi, unggahan ditandai gagal dan alasannya ditampilkan di Pengaturan → Dokumen.
Berkas diproses oleh backend dan disimpan bersama data aplikasi lainnya.
Mode Pencarian
Libre WebUI mendukung dua mode pengambilan:
| Mode | Kapan digunakan | Catatan |
|---|---|---|
| Pencarian kata kunci | Selalu tersedia | Peringkat BM25; tidak memerlukan model embedding |
| Pencarian hibrida | Embedding diaktifkan di Pengaturan | Menggabungkan peringkat vektor dengan BM25 melalui reciprocal-rank fusion |
Jika embedding diaktifkan, setiap kueri menjalankan kedua pemeringkatan dan menggabungkannya: kecocokan istilah persis dapat mengungguli potongan yang mirip secara semantik tetapi lebih samar, dan potongan yang embedding-nya masih dibuat tetap dapat ditemukan melalui sisi leksikal. Jika embedding gagal atau dinonaktifkan, pencarian dokumen kembali menggunakan pencocokan kata kunci murni.
Penilaian leksikal berjalan di dalam proses atas potongan yang dapat Anda akses. Libre sengaja tidak memelihara indeks teks lengkap di disk untuk potongan dokumen, karena teks potongan disimpan terenkripsi dan indeks token akan menyimpan teks biasa di sebelah ciphertext. Sebuah potongan hanya memenuhi syarat untuk pemeringkatan leksikal jika sepenuhnya memuat sedikitnya satu kata kueri. Karena itu, pengenal gabungan seperti ALPHA_BETA_GAMMA tidak pernah memunculkan teks yang hanya memiliki salah satu fragmennya.
Koleksi pengetahuan yang dibagikan kepada Anda otomatis mengikuti kedua pemeringkatan. Kontrol aksesnya ditegakkan di dalam kueri vektor itu sendiri—pemberian akses diterbitkan ke ACL indeks, sehingga pencabutan pembagian langsung menyembunyikan dokumen tersebut pada pencarian berikutnya tanpa perlu membuat ulang embedding.
Mengaktifkan Pencarian Semantik
Instal model embedding:
ollama pull nomic-embed-text
Kemudian buka Pengaturan dan aktifkan embedding. Anda dapat menggunakan model embedding Ollama lokal atau plugin penyedia yang mendukung embedding.
Pengaturan embedding bawaan:
- Model:
nomic-embed-text - Ukuran potongan: 1000 karakter
- Tumpang tindih potongan: 200 karakter
- Ambang kemiripan: 0.3
Sitasi dan Mode Dokumen Lengkap
Kutipan yang diambil menyertakan asal: nama berkas sumber, indeks potongan, skor pengambilan, serta—untuk format dengan peta segmen—halaman, slide, lembar, atau bagian Markdown asal kutipan. Konteks chat memberi label lokasi tersebut pada setiap kutipan, dan panel Sumber percakapan mencantumkan lokasi yang disitasi di bawah setiap dokumen.
Setiap chat juga dapat beralih ke mode dokumen lengkap dari panel Sumber. Alih-alih kutipan hasil pengambilan, seluruh konten hasil ekstraksi dari setiap dokumen dalam cakupan dikirim bersama pesan. Pelindung token (FULL_DOCUMENT_CONTEXT_MAX_TOKENS, bawaan 32000) melindungi jendela konteks model: jika dokumen terlampir melebihi batas ini, chat kembali menggunakan pengambilan dan panel Sumber menjelaskan alasannya.
Mengunggah dan Mencari
- Unggah berkas yang didukung dari kontrol dokumen.
- Tunggu hingga pemrosesan selesai.
- Ajukan pertanyaan dalam chat.
- Libre WebUI mengambil potongan yang relevan untuk sesi tersebut dan menyertakannya sebagai konteks.
Contoh 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 | Tujuan |
|---|---|
POST /api/documents/upload | Mengunggah dokumen yang didukung |
GET /api/documents | Mencantumkan dokumen yang diunggah |
GET /api/documents/session/:sessionId | Mencantumkan dokumen untuk sesi chat |
POST /api/documents/search | Mencari dokumen |
DELETE /api/documents/:documentId | Menghapus dokumen |
GET /api/documents/embeddings/status | Melihat status embedding |
POST /api/documents/embeddings/regenerate | Membuat ulang embedding |
Praktik Terbaik
- Batasi unggahan pada tugas saat ini.
- Utamakan PDF berbasis teks; PDF hasil pindai dapat diproses melalui model penglihatan, tetapi memerlukan satu panggilan model per halaman.
- Buat ulang embedding setelah mengganti model embedding.
- Turunkan ambang kemiripan jika pencarian semantik melewatkan konteks yang berguna.
- Naikkan ambang jika hasil terasa terlalu ramai.