Kursus
Pertanyaan umum di ranah AI self-hosted adalah bagaimana cara mengobrol dengan dokumen privat tanpa mengirimkannya ke API cloud.
AnythingLLM adalah jawaban populer. Ia menangani semuanya (unggah dokumen, embedding, pencarian, dan chat) dalam satu antarmuka dan terhubung ke berbagai penyedia LLM. Ini memungkinkan Anda membangun alur kerja AI privat tanpa bergantung pada layanan cloud.
Dalam panduan ini, saya akan menjelaskan apa itu AnythingLLM, menelusuri arsitekturnya, menunjukkan cara memasangnya dengan Docker dan Ollama, dan mendemonstrasikan pipeline Retrieval-Augmented Generation (RAG) yang berfungsi. Saya juga akan membandingkannya dengan Open WebUI dan ChatGPT.
Apa Itu AnythingLLM?
AnythingLLM adalah aplikasi open-source yang dibuat oleh Mintplex Labs di bawah lisensi MIT. Memiliki komunitas GitHub yang aktif dan rilis yang sering, serta banyak digunakan di ranah AI self-hosted.
Inilah fungsinya: ia mengubah dokumen Anda menjadi konteks yang dapat digunakan large language model (LLM) selama percakapan. Anda mengunggah file, sistem memproses dan menyimpannya, lalu LLM dapat menjawab pertanyaan berdasarkan data Anda. Proyek ini berkembang pesat, dengan komunitas Discord yang aktif dan pembaruan bulanan yang menambahkan penyedia LLM dan fitur baru.
Ada dua hal yang perlu dipahami di awal. Pertama, AnythingLLM bukanlah model itu sendiri. Ini adalah jembatan yang menghubungkan Anda ke penyedia LLM eksternal, baik lokal (seperti Ollama) maupun berbasis cloud (seperti OpenAI atau Anthropic).
Kedua, platform ini mengatur semuanya ke dalam workspace. Anggap ini sebagai ruangan terpisah untuk proyek berbeda. Setiap workspace memiliki dokumen dan percakapan sendiri yang tetap terisolasi kecuali Anda mengonfigurasikan untuk berbagi.

Antarmuka workspace AnythingLLM dengan dokumen. Gambar oleh Penulis.
AnythingLLM di desktop vs. Docker
Aplikasi desktop (macOS, Windows, Linux) ditujukan untuk pengguna tunggal yang menjalankan semuanya secara lokal. Aplikasi ini dilengkapi mesin LLM bawaan, embedder berbasis CPU, dan LanceDB terpaket. Instal sekali klik, tanpa perlu konfigurasi.
Versi Docker dibuat untuk tim dan server. Ia menambahkan kontrol akses yang tepat dengan peran Admin, Manager, dan Default, plus widget chat yang bisa disematkan di situs web dan white-labeling. Jika Anda memerlukan akses tim atau widget chat untuk publik, Docker adalah satu-satunya opsi.
|
Fitur |
Desktop |
Docker |
|
Dukungan multi-pengguna |
Tidak |
Ya (peran Admin, Manager, Default) |
|
Mesin LLM bawaan |
Ya |
Tidak (hubungkan ke penyedia eksternal) |
|
Widget chat yang dapat disematkan |
Tidak |
Ya |
|
White-labeling |
Tidak |
Ya |
|
Kompleksitas setup |
Instal sekali klik |
Memerlukan pengetahuan Docker |
Fitur Inti AnythingLLM
Sekarang Anda sudah tahu apa itu AnythingLLM dan cara memilih antara Desktop dan Docker, mari kita telusuri fitur-fitur yang membuatnya berguna untuk alur kerja AI berbasis dokumen.
Ingesti dokumen
Bekerja dengan PDF, DOCX, TXT, Markdown, CSV, XLSX, PPTX, HTML, 50+ jenis file kode, dan file audio (menggunakan transkripsi Whisper). Anda juga dapat menarik konten langsung dari repo GitHub, transkrip YouTube, halaman Confluence, dan situs web menggunakan scraper bawaan.
Basis data vektor
LanceDB sudah terpasang dan tidak perlu setup. Jika Anda memerlukan fitur enterprise, Anda bisa beralih ke Chroma, Milvus, Pinecone, Qdrant, Weaviate, Zilliz, AstraDB, atau PGVector.
Dukungan multi-LLM
Mendukung berbagai penyedia, termasuk Ollama, LM Studio, OpenAI, Anthropic, Azure OpenAI, Google Gemini, AWS Bedrock, Groq, dan DeepSeek. Anda memilih model per workspace, sehingga satu workspace dapat memakai model Ollama lokal untuk data sensitif sementara workspace lain memakai GPT-4o lewat OpenAI.
Agen AI
Ketik @agent di chat mana pun untuk mengaktifkan pembuat agen tanpa kode. Memiliki skill bawaan untuk pencarian dokumen, rangkuman, dan web scraping. Agent Flows memberi kanvas visual untuk merangkai panggilan API, instruksi LLM, dan operasi file. Juga mendukung Model Context Protocol (MCP) untuk menghubungkan tool eksternal.
Akses API
API untuk pengembang tersedia di /api/docs (dokumentasi Swagger). Anda dapat mengelola workspace, melakukan embedding dokumen, dan mengirim pesan chat secara terprogram.
Cara Kerja AnythingLLM (Tinjauan Arsitektur)
Aplikasi ini memiliki tiga bagian: frontend (React/ViteJS) memberi antarmuka yang Anda lihat dan gunakan. Server (backend Express) menangani semua interaksi LLM, pekerjaan basis data vektor, dan permintaan API. Ia menggunakan SQLite untuk menyimpan konfigurasi. Collector adalah layanan terpisah yang mengurai dan memproses dokumen yang Anda unggah. Saat Anda mengunggah PDF, collector mengekstrak teks, lalu server memecah, melakukan embedding, dan menyimpannya.
Pipeline RAG
Pipeline bekerja dalam dua fase.
Ingesti: Dokumen Anda masuk ke collector, yang mengekstrak teks. Server kemudian membagi teks ini menjadi potongan (hingga 1.000 karakter dengan sedikit overlap untuk menjaga konteks). Setiap potongan diubah menjadi vektor oleh model embedding, lalu disimpan di basis data vektor. Folder vector-cache/ mengurangi embedding ulang yang tidak perlu dalam banyak kasus.
Kueri: Pertanyaan Anda diubah menjadi vektor menggunakan model embedding yang sama. Lalu sistem mencari potongan yang paling mirip (biasanya empat hingga enam). Setelah difilter berdasarkan skor kemiripan, teks yang cocok ditambahkan ke prompt LLM bersama dengan pertanyaan dan riwayat chat Anda. LLM membaca semuanya (instruksi sistem, konteks yang diambil, pertanyaan Anda, dan pesan sebelumnya) lalu menghasilkan jawabannya.

Tinjauan arsitektur pipeline RAG AnythingLLM. Gambar oleh Penulis.
Menginstal AnythingLLM dengan Docker
Seperti yang akan Anda lihat di FAQ, AnythingLLM ringan: sekitar 2GB RAM, CPU 2-core, dan sekitar 5GB penyimpanan. Menjalankan LLM lokal bersamaan memerlukan lebih banyak (model 7B biasanya butuh 8GB+ RAM/VRAM). Untuk tutorial ini, saya menggunakan model 3B yang bekerja pada hardware terbatas. Pastikan Docker terinstal dan berjalan sebelum memulai. Pengguna Windows juga memerlukan WSL.
Langkah 1: Instal Ollama dan tarik model
Unduh Ollama dari ollama.com/download, lalu tarik sebuah model chat dan model embedding:
ollama pull llama3.2:3b
ollama pull nomic-embed-text
ollama serve
Saya memakai llama3.2:3b karena berjalan baik pada mesin dengan VRAM terbatas (seperti RTX 3050 dengan 6GB). Untuk kualitas lebih baik, coba llama3.2:8b atau deepseek-r1:7b jika hardware Anda memungkinkan. Lihat panduan kami tentang menjalankan LLM secara lokal untuk opsi model lainnya.
Langkah 2: Buat file Docker Compose
mkdir anythingllm-setup && cd anythingllm-setup
touch .env
Buat docker-compose.yml:
services:
anythingllm:
image: mintplexlabs/anythingllm:latest
container_name: anythingllm
ports:
- "3001:3001"
cap_add:
- SYS_ADMIN
volumes:
- anythingllm_storage:/app/server/storage
- ./.env:/app/server/.env
environment:
- STORAGE_DIR=/app/server/storage
extra_hosts:
- "host.docker.internal:host-gateway"
restart: unless-stopped
volumes:
anythingllm_storage:
Beberapa hal terkait konfigurasi ini. Flag cap_add: SYS_ADMIN diperlukan untuk web scraper PuppeteerJS bawaan, yang menggunakan browser Chromium tersandbox.
Baris extra_hosts menyelesaikan masalah jaringan Docker yang paling umum: ia memungkinkan container menjangkau Ollama yang berjalan di mesin host Anda. Tanpa ini, setiap upaya menghubungkan ke localhost:11434 dari dalam container akan gagal karena container Docker memiliki namespace jaringan sendiri.
Saya menggunakan volume Docker bernama (anythingllm_storage) alih-alih bind mount untuk kompatibilitas lintas platform yang lebih baik, terutama di Windows dan macOS, di mana izin bind mount bisa bermasalah.
Langkah 3: Jalankan dan konfigurasikan
Tunggu sekitar 30 detik hingga container inisialisasi, lalu buka http://localhost:3001. Anda akan melihat wizard setup pertama. Namun sebelumnya, jalankan perintah ini:
docker compose up -d

Wizard setup awal AnythingLLM di Docker. Gambar oleh Penulis.
Selama wizard setup, pilih Ollama sebagai penyedia LLM dan embedding, setel base URL ke http://host.docker.internal:11434, pilih llama3.2:3b sebagai model chat, dan nomic-embed-text sebagai embedder. Biarkan LanceDB sebagai basis data vektor default.
Untuk alternatif Desktop, unduh aplikasinya dari anythingllm.com. Aplikasi ini memaketkan semuanya dan langsung berfungsi tanpa konfigurasi. Ideal untuk penggunaan pribadi, namun seperti disebutkan sebelumnya, tidak memiliki fitur multi-pengguna dan enterprise yang tersedia di Docker.
Menghubungkan Penyedia LLM
Di luar Ollama, Anda dapat menghubungkan penyedia cloud melalui Settings (seperti disebut di FAQ 1, ini berguna jika hardware Anda terbatas).
OpenAI
Pilih OpenAI sebagai penyedia LLM, masukkan API key dari platform.openai.com, dan pilih model (GPT-4o, GPT-4o-mini, dll.). Akun Anda perlu menyiapkan penagihan, jika tidak maka tidak akan berfungsi (dan pesan error-nya tidak akan jelas).
Anthropic
Masukkan key Anda dari console.anthropic.com. Semua model Claude berfungsi untuk chat, tetapi Anthropic tidak memiliki model embedding, jadi Anda tetap memerlukan embedder terpisah seperti nomic-embed-text dari Ollama.
Konfigurasi Ollama
Jika Anda mengonfigurasi Ollama saat instalasi seperti di atas, Anda sudah siap. Untuk setup lainnya, gunakan http://host.docker.internal:11434 di Windows/macOS, atau http://172.17.0.1:11434 di Linux. Jika Ollama tidak dapat dijangkau, setel OLLAMA_HOST=0.0.0.0:11434 sebelum menjalankannya.
Menggunakan AnythingLLM untuk Chat Dokumen
Klik "New Workspace" di sidebar dan beri nama. Unggah file menggunakan tombol unggah di sidebar atau seret-dan-lepas.
AnythingLLM mendukung dua mode dokumen. Attaching (seret ke chat) memasukkan seluruh teks ke dalam percakapan, tetapi hanya untuk thread chat itu saja. Model melihat semuanya, namun Anda dibatasi oleh kapasitas token. Embedding (pendekatan RAG standar) memecah dokumen menjadi potongan, mengubahnya menjadi vektor, dan menyimpannya di workspace. Setelah di-embed, dokumen berfungsi di semua chat dalam workspace tersebut. Untuk sebagian besar kasus, embedding adalah pilihan yang lebih baik. Klik "Move to Workspace" untuk memulai proses embedding.
Menyetel kualitas retrieval
Ketik pertanyaan Anda dan sistem secara otomatis menemukan potongan yang relevan dan mengirimkannya ke LLM. Jika jawabannya kurang baik, berikut pengaturan kunci yang perlu disesuaikan:
Ambang kemiripan
Seperti disebutkan di FAQ 5, mulailah dengan "No Restriction" jika Anda mengalami masalah, lalu naikkan perlahan untuk menyaring noise.
Maksimal cuplikan konteks
Default-nya empat hingga enam potongan. Naikkan ke 10 atau 12 untuk model dengan jendela konteks besar seperti Claude.
Preferensi pencarian
"Accuracy Optimized" pada LanceDB mengaktifkan reranking, yang meningkatkan hasil tetapi dapat menambah latensi tergantung model dan hardware.
Penyematan dokumen (pin)
Sematkan dokumen penting untuk melewati proses chunking sepenuhnya. Teks lengkap ditambahkan ke setiap kueri (dengan asumsi muat dalam batas token).
AnythingLLM vs. Open WebUI
Kedua alat sama-sama solid, tetapi dibuat untuk user yang berbeda.
|
Dimensi |
AnythingLLM |
Open WebUI |
|
Target utama |
Pengguna bisnis, tim kecil |
Pengembang, pengguna teknis |
|
Aplikasi desktop |
Ya (macOS, Windows, Linux) |
Tidak (hanya berbasis web) |
|
Kompleksitas setup |
Desktop: sekali klik; Docker: mudah |
Memerlukan Docker atau setup server |
|
Implementasi RAG |
Bawaan dengan dukungan multi-vector DB, reranking |
RAG ekstensif, ekstensibilitas berbasis plugin |
|
Multi-pengguna |
Hanya Docker; tiga peran RBAC |
Fitur kolaborasi terbatas |
|
Ekosistem plugin |
Berkembang; skill kustom via Node.js |
Lebih matang dan ekstensif |
|
Lisensi |
MIT |
BSD-3-Clause yang dimodifikasi dengan perlindungan branding sejak v0.6.6 |
AnythingLLM cenderung cocok untuk tim yang memprioritaskan manajemen workspace dan widget yang dapat disematkan, sementara Open WebUI cenderung cocok bagi pengguna yang menginginkan ekosistem plugin lebih besar dan ekstensibilitas yang berorientasi pengembang. Beberapa tim menjalankan keduanya: Open WebUI untuk dev yang menginginkan kontrol mendalam, dan AnythingLLM untuk pengguna bisnis yang butuh workspace dokumen yang cepat.
AnythingLLM vs. ChatGPT
Perbandingan ini soal prioritas, bukan mana yang lebih "baik."
|
Dimensi |
AnythingLLM |
ChatGPT |
|
Privasi data |
Kepemilikan penuh dengan model lokal |
Data dikirim ke server OpenAI |
|
Biaya |
Gratis (self-hosted); cloud mulai $50/bulan |
Paket gratis; Plus $20/bulan; Pro $200/bulan |
|
Kustomisasi |
LLM, embedder, vector DB, agen apa pun |
Terbatas pada model OpenAI |
|
Kemampuan offline |
Ya (dengan model lokal) |
Tidak |
|
Upaya setup |
Memerlukan instalasi |
Tanpa setup, berbasis browser |
|
Chat dokumen |
Kontrol RAG penuh (ambang, chunking, reranking) |
Unggah file dengan batasan penggunaan |
ChatGPT menekankan pengalamanan yang sepenuhnya di-host dan kualitas model default yang kuat, sementara AnythingLLM menekankan privasi, fleksibilitas, dan kontrol atas pengaturan RAG. Anda juga dapat menghubungkan GPT-4o ke AnythingLLM melalui OpenAI API. Itu memberi Anda model dengan kualitas ChatGPT dengan fitur workspace dan RAG milik AnythingLLM.
Use Case AnythingLLM
Berikut area di mana AnythingLLM paling efektif:
Basis pengetahuan internal
Karyawan dapat mengajukan pertanyaan tentang dokumen perusahaan alih-alih menelusuri folder. Unggah kebijakan, prosedur, dan dokumentasi Anda, lalu biarkan orang mencari dengan bahasa alami.
Alur kerja riset
Akademisi dapat menelusuri ratusan makalah secara instan. Lakukan embedding pustaka riset Anda dan munculkan temuan relevan tanpa pencarian kata kunci manual.
Penerapan enterprise privat
Tim kesehatan, keuangan, dan legal dapat menggunakan AI sambil menjaga semua data tetap di server mereka sendiri. Umum di industri teregulasi di mana data harus tetap on-premises.
Pengujian pengembang
Coba LLM berbeda (Ollama, OpenAI, Claude) pada dokumen yang sama dengan mengganti model per workspace. Tidak perlu perubahan infrastruktur.
Widget chat pelanggan
Sematkan antarmuka chat di situs web Anda menggunakan Docker. Konfigurasikan allowlist domain dan batas per sesi untuk penggunaan publik.
Transkripsi rapat
Fitur Meeting Assistant bekerja seperti alat catatan berbasis cloud tetapi berjalan secara lokal. Memerlukan sekitar 16GB RAM agar lancar.
Keterbatasan
Seperti dibahas sebelumnya, Desktop dan Docker memiliki fitur yang berbeda, yang membingungkan pengguna baru.
Kualitas RAG perlu penyetelan (saya telah membahas pengaturan utama sebelumnya) karena pencarian kemiripan berbasis matematika dan bukan benar-benar memahami makna.
Sistem plugin lebih kecil dibanding Open WebUI, dan membangun skill agen kustom memerlukan pengetahuan Node.js.
Terakhir, tidak ada fine-tuning bawaan. Anda hanya bisa melakukan kustomisasi melalui system prompt, temperature, dan batas token.
Keamanan dan Privasi AnythingLLM
Penerapan lokal menjaga semua data tetap di perangkat Anda. (Saya memiliki detail lebih lanjut di FAQ ketiga di bawah.) Saat menggunakan penyedia cloud, hanya prompt dan konteks yang diambil yang dikirim selama inferensi. Vektor dan embedding tetap berada di server Anda. Pertimbangkan dengan saksama workspace mana yang menggunakan model cloud versus lokal.
Versi Docker menyertakan Simple SSO melalui SIMPLE_SSO_ENABLED, yang membuat token akses sementara. API key memberikan akses penuh tanpa izin granular, jadi perlakukan seperti kata sandi admin dan ganti secara berkala. Jika Anda mengekspos AnythingLLM ke internet, letakkan Nginx reverse proxy dengan SSL di depannya (aplikasi ini tidak menangani HTTPS sendiri). Telemetri dapat dinonaktifkan dengan DISABLE_TELEMETRY=true di file .env Anda.
Kesimpulan
AnythingLLM menyelesaikan masalah nyata di ranah AI self-hosted. Ia memberi Anda antarmuka untuk mengobrol dengan dokumen Anda, terhubung ke hampir semua penyedia LLM, dan menjaga data Anda tetap di bawah kendali Anda. Seperti dibahas sebelumnya, pilih Desktop untuk penggunaan pribadi atau Docker untuk penerapan tim.
Seperti alat apa pun, ada trade-off. Kualitas RAG bergantung pada cara Anda mengonfigurasinya, dan perbedaan fitur Desktop/Docker dapat membingungkan pendatang baru.
Langkah berikutnya, lihat AI Fundamentals track kami atau tutorial tentang membangun AI lokal dengan Docker dan n8n.
Saya seorang data engineer dan pembangun komunitas yang bekerja lintas pipeline data, cloud, dan perkakas AI sambil menulis tutorial praktis dan berdampak tinggi untuk DataCamp dan pengembang yang sedang berkembang.
FAQs
Bisakah saya menjalankannya di laptop lama tanpa GPU?
Ya! AnythingLLM sendiri ringan: sekitar 2GB RAM, CPU 2-core, dan sekitar 5GB penyimpanan. Bagian beratnya adalah menjalankan LLM secara lokal melalui Ollama. Jika hardware Anda terbatas, hubungkan ke penyedia cloud seperti OpenAI atau Groq. Anda mendapatkan fitur workspace dan RAG yang sama, tetapi inferensi terjadi di cloud. Dengan kata lain, AnythingLLM mengelola alur kerja, dan Anda memilih apakah model berjalan secara lokal atau di cloud.
Apa yang terjadi jika saya mengubah basis data vektor nanti?
Rencanakan hal ini sebelumnya. Tidak ada migrasi otomatis antar basis data vektor. Beralih dari LanceDB ke Pinecone berarti melakukan embedding ulang semua dokumen. File asli Anda tetap aman, tetapi vektor perlu dibuat ulang. Catatan praktis: tetap gunakan LanceDB kecuali Anda memiliki kebutuhan enterprise spesifik. Biasanya minim konfigurasi dan cocok untuk banyak penerapan tim kecil.
Apakah data saya benar-benar privat jika saya menggunakan OpenAI untuk LLM?
Intinya: dokumen dan embedding Anda tidak pernah meninggalkan server Anda. Namun ketika Anda bertanya, potongan teks yang diambil dan prompt Anda dikirim ke API OpenAI untuk inferensi. Untuk data yang betul-betul sensitif, gunakan Ollama. Semuanya tetap lokal. Untuk dokumen kerja umum, AnythingLLM dengan OpenAI tetap lebih privat daripada mengunggah file langsung ke ChatGPT.
Bisakah tim saya berbagi satu setup AnythingLLM?
Ya, tetapi hanya dengan versi Docker. Versi ini mendukung multi-pengguna dengan tiga peran: Admin, Manager, dan Default. Aplikasi Desktop hanya untuk satu pengguna. Penting: mode multi-pengguna dirancang sebagai perubahan konfigurasi satu arah. Putuskan apakah Anda memerlukan akses tim sebelum mengaktifkannya.
Mengapa kadang-kadang dokumen saya diabaikan saat menjawab?
Biasanya ada tiga alasan: ambang kemiripan terlalu tinggi, kueri yang samar, atau dokumen non-Inggris dengan embedder default berbahasa Inggris. Perbaikan cepat: coba "No Restriction" pada ambang terlebih dulu. Jika dokumen Anda bukan berbahasa Inggris, ganti ke model embedding multibahasa yang tersedia di Ollama (misalnya salah satu model berbasis e5) untuk hasil yang jauh lebih baik.

