Cara Bina Ejen AI n8n Sendiri di VPS
Ketahui cara membina ejen AI n8n menggunakan nod AI Agent, model Claude, HTTP Request, dan memori. Kami sertakan tetapan penting untuk mengehadkan kos penggunaan API anda.
Apakah ejen AI n8n, dan perbezaannya dengan rantaian
Ejen AI n8n ialah satu nod AI Agent dengan sub-nod yang disambungkan kepadanya: satu model sembang, satu atau lebih alatan, dan memori pilihan. Anda menyatakan matlamat dalam bahasa biasa, dan model tersebut menentukan alatan mana yang perlu dipanggil serta mengikut urutan yang bagaimana sehingga ia dapat menjawab. Segala perkara di bawah adalah konfigurasi di sekitar idea tunggal tersebut.
Rantaian berfungsi secara terbalik. Dalam Basic LLM Chain, anda menentukan langkah-langkahnya dan model hanya mengisi teks. Dalam ejen, model yang menentukan langkah-langkah tersebut, jadi soalan yang sama boleh memakan kos satu panggilan model hari ini dan sembilan panggilan pada hari esok. Perbezaan tunggal itu mendorong setiap tetapan dalam panduan ini.
Panduan ini mengandaikan n8n sudah berjalan di sebalik HTTPS pada mesin yang anda kawal. Jika belum, mulakan dengan self-hosting n8n pada Docker dengan sijil sebenar, kerana kunci API yang bakal anda simpan memerlukan sandaran kunci penyulitan yang ditekankan dalam panduan tersebut. Untuk corak bukan ejen, peringkas webhook dan pengelas berjadual, lihat corak aliran kerja Claude dan n8n.
Semak versi anda sebelum mempercayai mana-mana nama medan di sini, kerana n8n kerap menukar nod AI.
docker compose exec n8n n8n --versionNama-nama dalam panduan ini sepadan dengan n8n stabil semasa setakat Julai 2026. Sejak versi 1.82.0, setiap nod AI Agent berjalan sebagai Tools Agent, jadi menu lungsur jenis ejen lama tidak lagi wujud.
Langkah 1: pilih pencetus
Untuk ejen perbualan, tambah nod Chat Trigger. Pastikan Make Chat Publicly Available dimatikan semasa anda membina ejen, supaya hanya panel sembang editor yang boleh mencapainya. Hidupkan tetapan ini apabila ejen selesai dibina dan anda telah memutuskan kaedah pengesahan.
Chat Trigger memberikan ejen satu medan yang dipanggil chatInput. Nama tersebut penting dalam langkah 3, dan kesilapan menamakannya adalah punca kegagalan pertama yang paling kerap berlaku.
Untuk ejen tanpa pengawasan, gunakan nod Schedule Trigger atau Webhook sebagai gantinya. Kedua-duanya tidak menghasilkan chatInput, jadi anda perlu menulis prompt tersebut sendiri.
Langkah 2: kelayakan model
Letakkan nod AI Agent pada kanvas. n8n akan terus memaparkan penyambung Chat Model yang kosong di bawahnya. Lampirkan sub-nod Anthropic Chat Model di situ.
Cipta kelayakan daripada Anthropic Console di platform.claude.com, di bawah Settings dan kemudian API Keys. Kunci tersebut hanya dipaparkan sekali. Penggunaan API dibilkan mengikut token dan berasingan daripada sebarang langganan Claude.ai, jadi akaun tersebut perlu mempunyai tetapan pengebilan sebelum pelaksanaan pertama.
Pilih model mengikut ejen, bukan mengikut syarikat. Ejen satu alat yang mencari maklumat dan melaporkannya berfungsi dengan baik menggunakan Haiku, yang setakat Julai 2026 disenaraikan pada harga $1 bagi setiap sejuta token input dan $5 bagi setiap sejuta token output. Apabila ejen mempunyai beberapa alat dan perlu merancang penggunaannya, beralihlah kepada Sonnet. Kegagalan yang anda elakkan ialah penggunaan model murah yang memanggil alat yang salah sebanyak empat kali, yang kosnya lebih tinggi daripada model mahal yang memanggil alat yang betul sekali sahaja.
Tetapkan Maximum Number of Tokens dalam pilihan sub-nod tersebut. Ia mengehadkan panjang setiap respons yang dihasilkan oleh model. Jika dibiarkan pada nilai lalai yang besar, satu pelaksanaan yang keliru boleh menghasilkan jawapan yang sangat panjang dan menyebabkan anda dibilkan untuknya.
Satu peringatan daripada dokumentasi n8n yang sering terlepas pandang oleh pengguna: ungkapan di dalam sub-nod sentiasa diselesaikan berdasarkan item input pertama, bukan setiap item. Letakkan ungkapan bagi setiap item dalam medan prompt nod akar.
Langkah 3: prompt yang diterima oleh ejen
Buka nod AI Agent. Parameter Prompt mempunyai dua tetapan.
- Take from previous node automatically menjangkakan medan masuk bernama
chatInput. Ini adalah pilihan yang tepat di belakang Chat Trigger. - Define below mendedahkan medan Prompt (User Message) di mana anda menulis teks statik atau ungkapan. Ini adalah pilihan yang tepat di belakang Schedule Trigger atau nod Webhook.
Dengan nod Webhook di hadapan, badan POST akan mendarat di bawah $json.body, jadi medan prompt akan kelihatan seperti ini.
Check the current status of {{ $json.body.service }} and tell me
whether it is up. If it is down, say for how long. No preamble.Langkah 4: berikan ejen satu alat
Nod Ejen AI tanpa sub-nod alat akan enggan berjalan. Mulakan dengan satu alat, kerana satu alat yang berfungsi mengajar anda lebih banyak daripada empat alat yang dikonfigurasikan separuh jalan.
Sambungkan nod HTTP Request ke penyambung Tool ejen tersebut. Konfigurasikan ia seperti anda mengkonfigurasi nod HTTP Request biasa, kemudian uji endpoint tersebut daripada shell terlebih dahulu.
curl -s -H 'Accept: application/json' \
https://status.example.com/api/status/database | head -c 400Jika curl tersebut memulangkan ralat atau halaman log masuk HTML, ejen juga akan gagal, dan kegagalan itu akan kelihatan seperti masalah model sedangkan ia sebenarnya masalah URL atau pengesahan. Selesaikan masalah itu di shell, bukan pada nod.
Medan Description alat bukanlah dokumentasi untuk rakan sekerja anda. Ia adalah satu-satunya perkara yang dibaca oleh model apabila menentukan sama ada alat ini relevan. Tulisnya sebagai pernyataan ringkas tentang apa yang dipulangkan: "Returns the current up or down state and the downtime duration for one monitored service, as JSON."
Untuk membolehkan model mengisi sebahagian daripada permintaan, gunakan ungkapan $fromAI(). Ia hanya berfungsi dalam alat yang disambungkan ke nod Ejen AI, dan ia tidak berfungsi dalam alat Code.
{{ $fromAI('service', 'The name of the service to look up', 'string') }}Argumennya ialah key, diikuti dengan description, type dan defaultValue pilihan. Kunci mestilah antara 1 hingga 64 aksara, menggunakan huruf, digit, garis bawah dan sempang. Jenisnya adalah salah satu daripada string, number, boolean atau json, dan ditetapkan secara lalai kepada string. Panggilan yang lebih lengkap kelihatan seperti ini.
{{ $fromAI('limit', 'How many records to return', 'number', 20) }}Kunci hanyalah petunjuk, bukan rujukan kepada data sedia ada. $fromAI('service') tidak membaca medan bernama service dari mana-mana tempat. Ia memberitahu model "hasilkan satu nilai dan namakannya service", dan model akan mencari melalui perbualan, data input dan hasil alat lain untuk menemuinya. Dalam aliran kerja sembang, ia mungkin hanya bertanya kepada pengguna.
Carian web adalah alat kedua yang biasa digunakan, dan memandangkan ia hanyalah satu lagi endpoint HTTP, anda boleh menghalakan nod yang sama ini ke instans SearXNG anda sendiri dan bukannya API carian berbayar, dengan syarat anda menganggap setiap halaman yang dipulangkan sebagai teks yang tidak dipercayai yang kini berada di dalam prompt anda.
Langkah 5: memori, dan sebab ejen terlupa
Tanpa sub-nod memori, setiap mesej bermula daripada kosong. Lampirkan sub-nod Simple Memory untuk menyimpan perbualan terkini.
Ia mempunyai dua parameter. Session Key menentukan perbualan yang sedang berlangsung, supaya dua pengguna dengan kunci berbeza mendapat sejarah yang berasingan. Context Window Length ialah bilangan interaksi terdahulu yang dimainkan semula ke dalam prompt.
Context Window Length merupakan pengawal kos dan juga pengawal kualiti, kerana setiap pusingan yang diingati akan dihantar semula sebagai token input pada setiap panggilan seterusnya. Tetingkap bersaiz 20 pada ejen yang aktif bermakna anda membayar untuk mesej awal yang sama sebanyak dua puluh kali.
Simple Memory tidak berfungsi dalam aliran kerja pengeluaran aktif apabila n8n berjalan dalam mod baris gilir (queue mode), kerana sejarah tersebut tersimpan dalam data aliran kerja itu sendiri dan bukannya dalam storan kongsi. Pada tika mod baris gilir, gunakan sub-nod Postgres Chat Memory sebagai ganti dan halakan ia ke pangkalan data yang boleh dicapai oleh kedua-dua proses utama dan pekerja (workers).
Langkah 6: Mesej Sistem
Buka Options ejen dan tambah System Message. Di sinilah deskripsi tugas diletakkan, dan ia merupakan teks yang paling berkesan dalam aliran kerja anda.
You are an infrastructure status assistant. Always call the status
tool before answering a question about whether something is running.
Never guess. If the tool returns an error, say so and stop.Arahan "Always call the status tool before answering" memainkan peranan penting di sini. Tanpanya, model yang menganggap ia sudah mengetahui jawapan akan melangkau alat tersebut dan menjawab berdasarkan memori, yang mungkin salah apabila infrastruktur anda berubah.
Mengapa ejen bergelung, dan apakah yang menghentikannya
Di bawah Options juga terdapat Max Iterations, yang ditetapkan secara lalai kepada 10. Satu lelaran (iteration) ialah satu panggilan model ditambah satu hasil alat yang dimasukkan semula ke dalam konteks. Jadi, satu larian ejen bukanlah satu panggilan API, sebaliknya sehingga sepuluh panggilan, dan setiap satu membawa keseluruhan perbualan yang semakin berkembang sebagai input.
Kurangkan nilainya. Kebanyakan ejen satu-alat selesai dalam dua lelaran, dan had sebanyak 3 atau 4 pusingan akan menukarkan gelung yang tidak terkawal kepada kegagalan bersih yang boleh anda lihat dalam senarai pelaksanaan.
Semasa anda melakukan penyahpepijatan (debugging), aktifkan Return Intermediate Steps. Output akhir kemudiannya akan menyertakan panggilan alat yang dibuat oleh ejen sepanjang proses tersebut, yang merupakan cara untuk membezakan antara "model tidak pernah memanggil alat" dengan "alat tidak mengembalikan apa-apa yang berguna". Matikan semula tetapan ini sebelum anda melancarkannya secara langsung, kerana langkah-langkah tersebut hanyalah gangguan bagi pengguna akhir.
Perhatikan larian yang berlaku daripada shell.
docker compose logs -f n8nMenghalang ejen tanpa pengawasan daripada berbelanja secara senyap
Ejen di belakang Chat Trigger mempunyai manusia yang memantaunya, dan manusia itu menghentikannya apabila jawapan kelihatan salah. Ejen di belakang Schedule Trigger tidak dipantau oleh sesiapa. Perkara yang dipantau di sini ialah perbelanjaan penggunaan model, bukan perbelanjaan lesen, kerana nod agent, tool dan memory semuanya berfungsi pada edisi self-hosted percuma, manakala ciri yang memerlukan kunci berbayar kebanyakannya berkaitan pasukan dan tadbir urus. Huraian penuh terdapat dalam Kawalan kos ejen AI pada VPS yang sentiasa hidup. Empat tetapan paling banyak membantu dalam hal ini.
- Hadkan Maximum Number of Tokens pada sub-nod model, supaya tiada respons tunggal yang boleh berjalan terlalu lama.
- Tetapkan Max Iterations kepada nombor terkecil yang masih boleh menyelesaikan tugasan tersebut.
- Pastikan respons alat adalah kecil. Alat yang mengembalikan blob JSON 4,000 baris akan memasukkan kesemuanya ke dalam panggilan model seterusnya, dan kemudian ke dalam setiap panggilan selepas itu dalam larian yang sama.
- Tanya sama ada ejen tersebut benar-benar memerlukan jadual. Tugasan yang berjalan setiap lima minit akan dicetuskan 288 kali sehari. Berapakah kos satu larian, itulah angka yang perlu anda darabkan.
Nyahaktifkan aliran kerja semasa anda melakukan lelaran. Aliran kerja aktif dengan Schedule Trigger akan terus berjalan berdasarkan versi yang disimpan oleh n8n, yang tidak semestinya versi yang ada pada skrin anda.
FAQ
Mengapakah nod AI Agent saya enggan melaksanakan tugas?
Nod AI Agent memerlukan sub-nod model sembang dan sekurang-kurangnya satu sub-nod alat (tool). Nod yang mempunyai model tetapi tiada alat akan gagal sebelum ia membuat sebarang panggilan API. Lampirkan satu alat, walaupun yang ringkas, dan jalankan semula.
Ejen menjawab, tetapi ia tidak pernah memanggil alat saya. Apakah masalahnya?
Hampir selalunya disebabkan oleh medan Description alat tersebut. Model memilih alat dengan membaca deskripsi tersebut, jadi deskripsi seperti "HTTP Request" tidak memberitahunya bila alat itu perlu digunakan. Tulis semula deskripsi tersebut untuk menyatakan data apa yang akan diperoleh dan dalam situasi apa ia berguna, kemudian tambahkan satu baris pada System Message yang mengarahkan ejen untuk memanggil alat tersebut sebelum menjawab.
Mengapakah soalan yang sama mempunyai kos yang berbeza bagi setiap pelaksanaan?
Ini kerana model memilih bilangan langkah (steps). Setiap lelaran menghantar semula keseluruhan perbualan setakat ini, termasuk output alat sebelumnya, jadi pelaksanaan yang mengambil empat lelaran menelan kos jauh lebih tinggi daripada empat kali ganda satu panggilan tunggal. Max Iterations ialah had maksimum bagi perkara tersebut, dan Return Intermediate Steps menunjukkan kepada anda berapa banyak langkah yang sebenarnya digunakan oleh sesuatu pelaksanaan.
Memori saya berfungsi dalam editor tetapi tidak dalam pengeluaran. Apakah yang berubah?
Semak sama ada instans tersebut berjalan dalam mod baris gilir (queue mode). Simple Memory menyimpan sejarah dalam data pelaksanaan aliran kerja itu sendiri, yang tidak akan kekal apabila diserahkan kepada proses pekerja (worker process) yang berasingan, jadi aliran kerja pengeluaran yang aktif akan kehilangannya. Gantikan dengan sub-nod Postgres Chat Memory, yang menyimpan sejarah dalam pangkalan data yang dikongsi oleh setiap pekerja.