Menambahkan Interaksi Frontend ke Tool
Sebagian Tool hanya perlu dijalankan di sisi server dan tidak memerlukan antarmuka khusus. Tool lain perlu meminta pengguna untuk mengonfirmasi, memilih, atau mengedit parameter. Dalam situasi ini, Anda dapat mendaftarkan kartu, modal, atau logika eksekusi browser untuk Tool dengan nama yang sama.
Kartu frontend hanya menangani tampilan ToolCall dan interaksi pengguna; kartu tidak berarti logika bisnis Tool harus dijalankan di browser.
Jika Anda hanya menampilkan pilihan seperti suggestions lalu melanjutkan invoke() di server setelah pengguna memilih, pertahankan nilai default execution: 'backend'. Gunakan execution: 'frontend' dan implementasikan invoke di frontend hanya jika logika Tool benar-benar perlu mengakses halaman browser saat ini, FlowModel, atau status editor.
Beberapa alat hanya perlu dijalankan di sisi server dan tidak memerlukan antarmuka yang disesuaikan. Alat lain harus memungkinkan pengguna mengonfirmasi, memilih, atau mengedit parameter. Dalam hal ini, Anda dapat mendaftarkan kartu front-end untuk Alat dengan nama yang sama.
Kartu front-end hanya bertanggung jawab atas tampilan dan interaksi manusia-komputer di ToolCall. Ini tidak berarti bahwa logika bisnis Alat harus dijalankan di browser.
Jika Anda hanya menampilkan opsi seperti suggestions dan melanjutkan sisi server invoke() setelah pengguna memilihnya, biarkan saja default execution: 'backend'. Tetapkan execution: 'frontend' dan implementasikan front-end invoke hanya jika logika Alat yang sebenarnya harus mengakses halaman browser, FlowModel, atau status editor saat ini.
Mendefinisikan Parameter dan Logika Eksekusi di Server
Alat suggestions bawaan terletak di:
Skemanya berisi kandidat dan pilihan akhir pengguna:
Menurut deskripsi Alat, hanya options yang harus dibuat saat pertama kali model dipanggil. Karena Alat ini tidak memiliki defaultPermission: 'ALLOW' yang disetel dan izin defaultnya adalah ASK, ToolCall akan berhenti sejenak menunggu operasi pengguna.
Setelah pengguna memilihnya, ujung depan menggabungkan option ke dalam parameter asli melalui decisions.edit(), dan kemudian memulihkan ToolCall. Server invoke() akhirnya mengembalikan konten yang dipilih:
Implementasi bawaan juga akan menulis kembali hasil pemilihan ke aiMessages.toolCalls, sehingga ketika pesan historis dirender ulang, masih dapat menampilkan item mana yang dipilih pengguna.
Menulis Kartu Tool
Penerimaan kartu front-end ToolsUIProperties:
Komponen ini menunjukkan penggunaan umum decisions.edit() dan menangani klik berulang dan parameter string JSON. Saat digunakan secara resmi, percakapan hanya-baca, pesan aktif saat ini, dan status pemilihan riwayat juga perlu ditangani sesuai dengan antarmuka obrolan. Untuk implementasi selengkapnya, silakan merujuk ke packages/plugins/@nocobase/plugin-ai/src/client-v2/ai-employees/tools/SuggestionsOptionsCard.tsx.
decisions menyediakan tiga operasi:
SuggestionsOptionsCard.tsx bawaan juga menangani detail berikut:
- Kompatibel dengan bentuk array dan string JSON
options - ToolCall masih menampilkan pemuatan saat pembuatan
- Hanya pilihan yang diperbolehkan untuk ToolCall dalam status
interrupted - Nonaktifkan tombol segera setelah mengkliknya untuk menghindari pengiriman berulang
- Simpan opsi yang dipilih dalam pesan riwayat dan sorot opsi tersebut
- Hanya izinkan percakapan yang dapat diedit saat ini untuk memicu tindakan
Mendaftarkan di Plugin Klien
Nama registrasi front-end harus sama persis dengan nama Alat di sisi server:
Jika file server adalah src/ai/tools/developerChoice.ts, developerChoice didaftarkan di sini.
Proses registrasi suggestions bawaan juga selesai seperti ini:
Kemudian PluginAIClientV2.load() memanggil registerPluginAIClientV2BuiltinTools(this.ai.toolsManager) untuk menggabungkan kartu ke dalam definisi Alat dengan nama yang sama yang dikembalikan oleh server.
Memilih Kartu, Modal, atau Eksekusi Frontend
Hanya konfigurasi umum klien ToolsOptions yang tercantum di bawah. Lihat packages/core/client-v2/src/ai/tools-manager/types.ts untuk tipe lengkapnya.
Menggunakan Kartu
Gunakan card terlebih dahulu secara default. Kartu cocok untuk menampilkan status eksekusi, tombol konfirmasi, dan beberapa pilihan di posisi ToolCall.
Menggunakan Modal
Tambahkan modal jika kontennya banyak, memerlukan pratinjau berukuran besar, atau membutuhkan pengeditan parameter yang rumit.
Menjalankan Tool di Browser
Jika Tool sisi server menetapkan execution: 'frontend', klien juga perlu menyediakan invoke. Tool jenis ini cocok untuk membaca konteks halaman saat ini, konten editor, atau status FlowEngine, tetapi tidak cocok untuk menulis data yang memerlukan perlindungan izin sisi server.
Contoh Lengkap: Menambahkan Kartu Pilihan ke Karyawan AI Bawaan
Setelah menyelesaikan Contoh Lengkap: Membuat Karyawan AI Bawaan, Anda dapat mengubah pertanyaan lanjutan Dev Helper menjadi opsi yang dapat diklik. Tentukan Tool developerChoice dan daftarkan kartu frontend. File sisi server ditempatkan di:
Alat ini bertanggung jawab untuk mendeklarasikan opsi dan menerima pilihan pengguna:
Karena developerChoice.ts terletak di direktori tools/ Skill welcome-developer, maka secara otomatis terikat ke Skill saat ini. Namun, pengikatan hanya berarti model dapat menggunakan Alat ini, namun tidak berarti model pasti akan memanggilnya.
Alur kerja SKILLS.md juga perlu dimodifikasi secara bersamaan, menggantikan langkah awal 5–6 dengan:
Kartu front-end menggunakan kembali DeveloperChoiceCard yang ditentukan sebelumnya dan menyimpannya ke:
Akhirnya terdaftar di src/client-v2/plugin.tsx:
Setelah registrasi kartu selesai, bangun kembali klien. Ketika developerChoice tercapai dalam percakapan, ToolCall berhenti sejenak dan menampilkan opsi yang dapat diklik.
Tautan terkait
- Mendefinisikan Tool server — Mendefinisikan Tool server yang sesuai dengan kartu front-end
- Contoh Lengkap: Membuat Karyawan AI Bawaan — Selesaikan contoh dasar Dev Helper terlebih dahulu
- Internasionalisasi — Terjemahkan salinan antarmuka manajemen Alat dan Keterampilan
- Plugin Klien — Memahami entri plugin klien dan
load()

