Lewati ke konten utama

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:

ModeKapan digunakanCatatan
Pencarian kata kunciSelalu tersediaPeringkat BM25; tidak memerlukan model embedding
Pencarian hibridaEmbedding diaktifkan di PengaturanMenggabungkan 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

  1. Unggah berkas yang didukung dari kontrol dokumen.
  2. Tunggu hingga pemrosesan selesai.
  3. Ajukan pertanyaan dalam chat.
  4. 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

EndpointTujuan
POST /api/documents/uploadMengunggah dokumen yang didukung
GET /api/documentsMencantumkan dokumen yang diunggah
GET /api/documents/session/:sessionIdMencantumkan dokumen untuk sesi chat
POST /api/documents/searchMencari dokumen
DELETE /api/documents/:documentIdMenghapus dokumen
GET /api/documents/embeddings/statusMelihat status embedding
POST /api/documents/embeddings/regenerateMembuat 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.

Dokumentasi Terkait