Alat Chat
Chat dapat mengizinkan model memanggil alat. Giliran dengan alat yang diaktifkan menjalankan loop native beberapa putaran: model meminta alat, Libre WebUI mengeksekusinya berdasarkan identitas dan izin pengguna pemanggil, hasil dikembalikan kepada model, lalu loop berlanjut sampai model menjawab—maksimum delapan putaran per giliran dan delapan panggilan per putaran. Hentikan membatalkan panggilan model, panggilan alat yang sedang berjalan, dan penantian persetujuan yang tertunda.
Panggilan alat dicatat sebagai peristiwa ternormalisasi (chat.tool-call.v1, chat.tool-result.v1, chat.approval.v1) yang mengalir secara identik melalui jalur WebSocket privat dan aliran peristiwa tahan lama. Karena itu, penyegaran atau penyambungan ulang memutar kembali keadaan yang sama. Giliran yang selesai menyimpan panggilannya, beserta pratinjau hasil terbatas, pada pesan asisten.
Mengaktifkan Alat
Alat dinonaktifkan secara bawaan. Administrator membukanya di bawah Pengaturan → Manajemen Pengguna (khusus administrator atau semua pengguna); setiap giliran kemudian ikut serta melalui ikon kunci inggris di penyusun, yang membuka pemilih: satu sakelar utama serta satu kotak centang untuk setiap alat bawaan dan server terdaftar, sehingga giliran hanya berjalan dengan alat yang Anda pilih. Pemilih dapat mempersempit alat yang terikat pada profil, tetapi tidak pernah memperluasnya. Chat privat (inkognito) tidak pernah menawarkan alat: panggilan alat merupakan tindakan yang mengarah keluar dan dapat meninggalkan persetujuan serta catatan audit.
Profil asisten (persona) dapat membatasi alat yang ditawarkan: server alat terikat, sebagian alat bawaan, keterampilan terikat, dan koleksi pengetahuan terikat membatasi apa yang dilihat model dalam sesi yang menggunakan profil tersebut.
Alat Bawaan
Chat menyertakan tiga belas alat pihak pertama (semuanya hanya baca kecuali alat mutasi catatan dan kalender, yang melewati alur persetujuan efek samping):
web_search— mesin pencari yang dikonfigurasi administrator, sesuai mode akses pencarian web.search_documents— pencarian hibrida atas dokumen unggahan dan koleksi pengetahuan pengguna, termasuk koleksi yang dibagikan kepadanya (ikatan profil dapat membatasi koleksi); setiap bagian disitasi beserta potongan dan lokasi sumbernya.list_documents— mencantumkan dokumen dalam cakupan chat ini beserta ID, jenis, dan ukurannya, agar model dapat menentukan dokumen yang perlu dibaca.read_document— membaca jendela terbatas dari satu dokumen yang tersedia berdasarkan ID dan offset, diberi label lokasi sumber, untuk menelusuri berkas yang tidak dapat dijawab hanya melalui pengambilan.load_skill— memuat instruksi lengkap suatu keterampilan berdasarkan slug; deskripsi alat membawa manifes keterampilan aktif milik pengguna, sehingga keterampilan tetap dimuat secara malas sampai model memerlukannya. Jika keterampilan menyertakan berkas pendamping, instruksi yang dimuat diakhiri dengan inventaris berkas.read_skill_file— membaca satu berkas pendamping dalam sebuah keterampilan berdasarkan slug dan jalur relatif, sehingga dokumen referensi besar tidak memakan konteks sampai model benar-benar membukanya.list_notes— mencantumkan catatan sendiri dan catatan berbagi milik pengguna beserta ID-nya.read_note— membaca isi lengkap sebuah catatan berdasarkan ID.create_note— membuat catatan (memiliki efek samping, memerlukan persetujuan).update_note— mengganti isi catatan; keadaan sebelumnya disimpan sebagai revisi yang dapat dipulihkan, sehingga pengeditan model selalu dapat dibatalkan (memiliki efek samping, memerlukan persetujuan).list_calendar_events— mencantumkan acara kalender sendiri dan berbagi milik pengguna dalam rentang milidetik epoch.create_calendar_event— membuat acara kalender (memiliki efek samping, memerlukan persetujuan).delete_calendar_event— menghapus satu acara kalender berdasarkan ID (memiliki efek samping, memerlukan persetujuan).
Server Alat
Administrator mendaftarkan server alat eksternal di Pengaturan → Alat (templat awal di sana mengisi formulir terlebih dahulu, termasuk API demo publik yang aman):
- OpenAPI: spesifikasi JSON OpenAPI 3.x diambil sekali dan dikunci dengan digest SHA-256. Setiap operasi menjadi alat; operasi
GETdigolongkan hanya baca dan operasi lainnya sebagai efek samping sampai administrator mengganti klasifikasi tiap alat. Eksekusi menyusun ulang panggilan dari operasi yang dikunci—argumen model tidak pernah memilih tujuan. - MCP (HTTP yang Dapat Dialirkan): daftar alat server diambil melalui JSON-RPC dan dikunci dengan cara yang sama.
annotations.readOnlyHintmenandai alat sebagai hanya baca. Server MCP stdio sengaja tidak didukung: proses eksternal tidak pernah berjalan di dalam proses web.
Inventaris yang berubah hanya berlaku setelah administrator menyegarkan server, yang memajukan revisi terkunci dan mempertahankan override per alat. Ketersediaan per server dapat dibatasi untuk administrator, semua pengguna, atau berdasarkan pemberian akses melalui model pemberian sumber daya bersama (izin pengguna dan grup pada server alat).
Kredensial
Server yang memerlukan autentikasi menggunakan kredensial per pengguna (token bearer atau header bernama). Setiap rahasia dienkripsi dengan data terautentikasi tambahan yang mengikatnya kepada pengguna dan server yang persis, dimasukkan oleh setiap pengguna di Pengaturan → Alat, dan tidak pernah dibagikan antar akun.
Kebijakan Egress
Setiap permintaan alat menyelesaikan sendiri alamat tujuannya, menolak ruang alamat privat, loopback, dan metadata, lalu menyematkan koneksi ke alamat hasil resolusi agar pengikatan ulang DNS tidak dapat mengalihkan panggilan. Respons pengalihan ditolak. Ukuran respons dibatasi dan setiap panggilan memiliki batas waktu ketat. Nama host internal yang persis dapat diizinkan melalui TOOLS_PRIVATE_NETWORK_ALLOWLIST (dipisahkan koma); host yang diizinkan tetap disematkan dan dibatasi. Keluaran alat masuk kembali ke model sebagai teks yang tidak tepercaya.
Persetujuan
Alat hanya baca berjalan tanpa bertanya. Alat yang memiliki efek samping menjeda giliran dan meminta pengguna memilih: izinkan sekali, izinkan untuk chat ini, selalu izinkan alat ini pada server ini, atau tolak. Keputusan bersifat tahan lama—izin "selalu" bertahan setelah mulai ulang dan dapat dicabut di Pengaturan → Alat—sedangkan permintaan tertunda kedaluwarsa setelah dua menit, yang dilihat model sebagai penolakan. Penolakan dan waktu habis tidak pernah mengeksekusi panggilan. Setiap keputusan dan panggilan meninggalkan peristiwa audit keamanan yang disunting.
Contoh
Aktifkan sakelar kunci inggris di penyusun terlebih dahulu; setiap contoh berikut adalah pesan chat biasa.
web_search — mencari informasi
Apa yang berubah dalam rilis SQLite terbaru? Cari di web sebelum menjawab.
Model memanggil web_search dengan kueri seperti {"query": "SQLite latest release changelog"}, kartu panggilan menampilkan cuplikan hasil yang diterimanya, dan balasan menyitasi temuannya. Pencarian web harus dikonfigurasi dan diizinkan untuk akun Anda.
search_documents — menanyakan berkas Anda sendiri
Unggah PDF atau tambahkan dokumen ke koleksi pengetahuan, lalu:
Cari klausul pengakhiran dalam dokumen saya dan kutip secara persis.
Model memanggil search_documents dengan {"query": "termination clause"} dan menerima bagian yang cocok beserta label dokumen sumber, sehingga jawaban dapat mengutip dan mencantumkan sumbernya.
load_skill — menerapkan keterampilan tersimpan
Buat keterampilan di Pengaturan → Keterampilan (misalnya $release-notes—cara Anda ingin catatan rilis ditulis), lalu:
Buat draf catatan rilis untuk diff ini menggunakan $release-notes.
Model melihat keterampilan dalam manifesnya, memanggil load_skill {"slug": "release-notes"} untuk mengambil instruksi lengkap, lalu mengikutinya. Mengetik $ di penyusun melengkapi otomatis slug keterampilan Anda.
Server OpenAPI — misalnya API cuaca
-
Pengaturan → Alat → Daftarkan server: nama
Weather, jenisOpenAPI, URL dasarhttps://api.example-weather.dev, URL spesifikasihttps://api.example-weather.dev/openapi.json, mode autentikasibearer. -
Spesifikasi dikunci dan operasinya muncul sebagai alat—misalnya
getForecast(GET, hanya baca) dancreateAlert(POST, efek samping). -
Setiap pengguna yang ingin menggunakannya menyimpan kunci API miliknya sendiri pada kartu server.
-
Dalam chat:
Bagaimana prakiraan cuaca Montreal akhir pekan ini?
Model memanggil
weather__getForecast {"city": "Montreal"}dan langsung menjalankannya—alat hanya baca tidak pernah meminta persetujuan.Peringatkan saya jika suhu turun di bawah -20 malam ini.
weather__createAlertmemiliki efek samping, sehingga giliran dijeda dengan kartu persetujuan: Izinkan sekali, Izinkan untuk chat ini, Selalu izinkan, atau Tolak. Tidak ada data yang dikirim sampai Anda memilih.
Server MCP — misalnya pelacak issue
-
Pengaturan → Alat → Daftarkan server: nama
Issues, jenisMCP, URL dasarhttps://mcp.example-tracker.dev/mcp, mode autentikasiheaderdengan nama headerX-Api-Key. -
Daftar alatnya dikunci; alat yang ditandai hanya baca oleh server (seperti
search_issues) berjalan bebas, sedangkan alat lain (seperticreate_issue) meminta persetujuan terlebih dahulu. -
Dalam chat:
Temukan issue terbuka yang menyebut "database lock", lalu buat issue baru yang merangkum polanya.
issues__search_issueslangsung berjalan;issues__create_issuemenampilkan argumen persis pada kartu persetujuan sehingga Anda dapat membaca apa yang akan diajukan sebelum mengizinkannya.
Variabel Lingkungan
| Variabel | Efek |
|---|---|
TOOLS_ACCESS_MODE | Mengunci fitur alat ke admins atau all-users dan mengunci sakelar administrator. |
TOOLS_PRIVATE_NETWORK_ALLOWLIST | Nama host persis yang boleh diresolusi server alat ke alamat privat (daftar dipisahkan koma). |
Batasan
- Panggilan alat berjalan pada jalur WebSocket (transportasi sesi privat sengaja dikecualikan) dan jalur pembuatan tahan lama yang digunakan untuk chat persisten. Endpoint streaming REST lama tidak menjalankan loop alat.
- Agen Work memanggil server yang sama melalui gerbang yang sama: hanya proses dengan jaringan aktif, server tanpa kredensial disaring saat penawaran, alat berefek samping dikendalikan oleh persetujuan Work.
- Model Gemini dan CLI agen tidak menerima alat; penyedia Ollama, kompatibel OpenAI, Responses-API, dan Anthropic menerimanya.
- Server MCP melakukan autentikasi dengan kredensial statis per pengguna; server MCP yang hanya mendukung OAuth interaktif belum dapat didaftarkan.