ساخت AI Agent شخصی با n۸n و Ollama

ساخت AI Agent شخصی با n8n و Ollama

جدول محتوا 👇

ترکیب n8n با مدل‌های زبانی متن‌باز از طریق Ollama، ساخت یک AI Agent شخصی را بدون برنامه‌نویسی سنگین و بدون ارسال داده به سرویس‌های خارجی ممکن می‌کند. در این راهنمای عملی یک ایجنت پشتیبانی فارسی می‌سازیم که حافظه گفتگو دارد، از دیتابیس وضعیت سفارش را استعلام می‌کند و در صورت نیاز، درخواست را به کارشناس انسانی ارجاع می‌دهد.

AI Agent در n8n چگونه کار می‌کند؟

یک چت‌بات معمولی فقط به پیام پاسخ می‌دهد؛ اما ایجنت می‌تواند برای رسیدن به هدف، ابزار صدا بزند. در n8n، نود AI Agent با الگوی «استدلال و اقدام» کار می‌کند: مدل پیام کاربر را می‌خواند، تصمیم می‌گیرد آیا به ابزار نیاز دارد، ابزار را با پارامترهای مناسب فراخوانی می‌کند، نتیجه را می‌بیند و پاسخ نهایی را می‌نویسد. برای آشنایی با مفهوم کلی، مقاله AI Agent چیست را بخوانید.

پیش‌نیازها و زیرساخت

نودهای هوش مصنوعی n8n

نود نقش
Chat Trigger رابط گفتگو برای تست و دریافت پیام؛ قابل جایگزینی با تریگر تلگرام یا Webhook
AI Agent هماهنگ‌کننده تصمیم‌گیری و فراخوانی ابزارها
Ollama Chat Model اتصال به مدل زبانی روی Ollama
Simple Memory / Postgres Chat Memory نگهداری تاریخچه گفتگو
Tools (Postgres، HTTP Request، Workflow و…) ابزارهایی که ایجنت می‌تواند صدا بزند

نام برخی نودها در نسخه‌های مختلف n8n کمی تغییر کرده است؛ مثلاً نود حافظه ساده در نسخه‌های قدیمی‌تر Window Buffer Memory نام داشت.

ساخت ایجنت قدم‌به‌قدم

  1. یک ورک‌فلو جدید بسازید و نود Chat Trigger را اضافه کنید.
  2. نود AI Agent را اضافه و به تریگر وصل کنید.
  3. به ورودی Chat Model نود ایجنت، نود Ollama Chat Model را وصل کنید. در Credential آن، آدرس Ollama را وارد کنید؛ مثلاً http://ollama:11434 اگر هر دو در یک Docker Compose هستند، یا IP خصوصی سرور GPU. سپس مدل را انتخاب کنید.
  4. در تنظیمات نود ایجنت، بخش System Message را بنویسید:
شما دستیار پشتیبانی فروشگاه هستید و فقط به زبان فارسی پاسخ می‌دهید.
- برای سوال درباره وضعیت سفارش، حتماً از ابزار order_status استفاده کنید و حدس نزنید.
- اگر کاربر شماره سفارش نداده، ابتدا آن را بپرسید.
- اگر نمی‌توانید مشکل را حل کنید یا کاربر درخواست صحبت با انسان دارد، از ابزار handoff استفاده کنید.
- پاسخ‌ها کوتاه، مؤدبانه و دقیق باشند.

یک دستورالعمل خوب، روشن می‌گوید ایجنت چه زمانی از هر ابزار استفاده کند و چه کاری نباید انجام دهد.

تعریف ابزار: استعلام از دیتابیس

به ورودی Tool نود ایجنت، یک نود Postgres (یا MySQL) در حالت ابزار اضافه کنید:

  • نام ابزار: order_status
  • توضیح ابزار: «وضعیت یک سفارش را با شماره سفارش برمی‌گرداند. ورودی: order_id عددی.» مدل بر اساس همین توضیح تصمیم می‌گیرد کی و چطور ابزار را صدا بزند؛ پس آن را دقیق بنویسید.
  • کوئری: یک کوئری SELECT پارامتری که فقط ستون‌های لازم (وضعیت، تاریخ ارسال، کد رهگیری) را برمی‌گرداند.

برای این ابزار یک کاربر دیتابیس فقط‌خواندنی بسازید که فقط به همان جدول یا یک View محدود دسترسی دارد. اگر ایجنت فریب بخورد، نمی‌تواند داده‌ای را تغییر دهد یا اطلاعات مشتریان دیگر را بخواند.

حافظه گفتگو

بدون حافظه، ایجنت هر پیام را مستقل می‌بیند و مثلاً شماره سفارشی را که کاربر یک پیام قبل گفته، فراموش می‌کند. به ورودی Memory نود ایجنت، نود Simple Memory را وصل کنید و تعداد پیام‌های نگهداری‌شده را مثلاً ۱۰ قرار دهید. برای محیط عملیاتی، Postgres Chat Memory بهتر است: تاریخچه هر کاربر با شناسه نشست در دیتابیس ذخیره می‌شود و با ری‌استارت n8n از بین نمی‌رود. تاریخچه طولانی، متن ورودی مدل را بزرگ و پاسخ را کند می‌کند؛ تعداد پیام‌ها را متعادل نگه دارید.

ارجاع به کارشناس انسانی

یک ابزار دوم با نود Call n8n Workflow Tool بسازید که یک زیرورک‌فلو را اجرا کند. این زیرورک‌فلو یک تیکت در سیستم پشتیبانی ثبت می‌کند یا به گروه تلگرام کارشناسان پیام می‌فرستد. نام آن را handoff بگذارید و توضیح دهید «وقتی کاربر درخواست صحبت با انسان دارد یا مشکل حل نشده، خلاصه گفتگو را برای کارشناس ارسال می‌کند». این کار تجربه کاربر را در مواردی که ایجنت از عهده‌اش برنمی‌آید، حفظ می‌کند.

پاسخ بر اساس اسناد (RAG)

اگر می‌خواهید ایجنت به سوال‌های عمومی (قوانین ارسال، شرایط مرجوعی، راهنمای محصول) از روی اسناد شما پاسخ دهد:

  1. یک پایگاه داده برداری مثل Qdrant یا PGVector راه‌اندازی کنید.
  2. در یک ورک‌فلو جداگانه، اسناد را بخوانید، به قطعه‌های کوچک تقسیم کنید و با یک مدل Embedding (مثلاً nomic-embed-text روی Ollama) در پایگاه داده ذخیره کنید.
  3. در ایجنت، نود Vector Store را به‌عنوان ابزار اضافه کنید تا قبل از پاسخ، قطعه‌های مرتبط را جستجو کند.

این روش معمولاً از Fine-Tuning مدل ساده‌تر و به‌روزتر است؛ مقایسه در Inference و Fine-Tuning.

امنیت و پایداری

  • Prompt Injection: پیام کاربر یا محتوای اسناد ممکن است دستورهایی برای فریب ایجنت داشته باشد. ابزارها را به حداقل دسترسی لازم محدود کنید و برای اقدامات حساس، تأیید انسانی بگذارید. جزئیات در امنیت AI Agentها.
  • Ollama را عمومی نکنید: پورت ۱۱۴۳۴ فقط باید از شبکه داخلی یا شبکه خصوصی در دسترس باشد.
  • سقف تکرار: در تنظیمات نود ایجنت، Max Iterations را محدود کنید تا ایجنت در حلقه گیر نکند.
  • پایش: اجراهای ناموفق را با یک Error Workflow به اطلاع خود برسانید و زمان پاسخ مدل را زیر نظر بگیرید. اگر کاربران زیاد شدند، مقاله Ollama یا vLLM را برای انتخاب موتور مناسب‌تر بخوانید.
  • امنیت n8n: تنظیمات امنیت n8n Self-Hosted را اعمال کنید.

سوالات متداول

آیا ساخت AI Agent با n8n به برنامه‌نویسی نیاز دارد؟

خیر. بیشتر کار با کشیدن و وصل کردن نودها انجام می‌شود. آشنایی با JSON و کمی JavaScript یا SQL برای سفارشی‌سازی ابزارها مفید است.

کدام مدل برای ایجنت فارسی بهتر است؟

Qwen ۲.۵ در اندازه‌های ۷ و ۱۴ میلیاردی و Llama ۳.۱ در فراخوانی ابزار و درک دستورهای فارسی عملکرد خوبی دارند. مدل‌های بزرگ‌تر در گفتگوهای چندمرحله‌ای قابل اعتمادترند.

چرا ایجنت ابزار را صدا نمی‌زند و از خودش جواب می‌سازد؟

یا مدل از Tool Calling پشتیبانی نمی‌کند، یا توضیح ابزار و دستورالعمل سیستمی به‌اندازه کافی روشن نیست. در System Message صریحاً بنویسید برای چه سوال‌هایی باید از کدام ابزار استفاده شود.

می‌توانم ایجنت را به تلگرام وصل کنم؟

بله. به‌جای Chat Trigger از Telegram Trigger استفاده کنید و پاسخ ایجنت را با نود Telegram ارسال کنید. شناسه چت تلگرام را به‌عنوان شناسه نشست حافظه قرار دهید تا گفتگوی هر کاربر جدا بماند.

زیرساخت ایجنت هوش مصنوعی اختصاصی

n8n را روی سرورهای مجازی لینوکس و مدل را روی سرورهای GPU تراست هاست اجرا کنید تا ایجنت شما با حریم خصوصی کامل و بدون هزینه به‌ازای توکن کار کند.

ریورس پروکسی Nginx؛ ۶ گام کانفیگ حرفه‌ای همراه با Let’s Encrypt و HTTP/۲

مشاوره تراست‌هاست​

با متخصصان و کارشناسان به صورت رایگان!

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *