پرش به محتوای اصلی
پرش به محتوای مقاله

درون گردش‌کار n8n برای اتوماسیون پشتیبانی دوزبانه با نظارت انسانی

·۱۵ مهر ۱۴۰۵۲۱ دقیقه مطالعه
راهنما
گردش کار پشتیبانی دوزبانه با n8n و DEVUP AI: تأیید سفارش و بررسی انسانی
گردش کار پشتیبانی دوزبانه با n8n و DEVUP AI: تأیید سفارش و بررسی انسانی
اشتراک‌گذاری
واقعاً چه چیز جدید است؟

معرفی یک معماری «بدون تغییر» (No-mutation) که در آن هوش مصنوعی صرفاً نقش دسته‌بندی و استخراج داده را دارد و هرگونه اقدام اجرایی یا ارسال پاسخ، کاملاً از دسترس مدل خارج شده و به تایید انسانی گره خورده است.

تصور کنید مشتری‌ای با عصبانیت می‌پرسد: «من سفارش DZ-1042 را پرداخت کردم، چرا پرداخت من هنوز معلق است؟» و هوش مصنوعی شما با اطمینان کامل اما بر اساس یک توهم (Hallucination)، پاسخ می‌دهد: «پرداخت شما تایید شد». در این لحظه، یک خطای فنی ساده به یک تعهد تجاری الزام‌آور تبدیل می‌شود که می‌تواند اعتبار برند شما را نابود کند و شما را درگیر دعاوی حقوقی یا ضررهای مالی کند.

برای جلوگیری از این فاجعه، DEVUP AI و n8n یک گردش‌کار پشتیبانی دوزبانه پیاده کرده‌اند که پیش‌بینی هوش مصنوعی را از تایید واقعیت‌ها کاملاً جدا می‌کند. این معماری در زمانی ارائه می‌شود که سازمان‌ها برای انتقال عامل‌های هوش مصنوعی از محیط نمونه (Prototype) به تولید (Production) دست‌وپنجه نرم می‌کنند و متوجه می‌شوند که استقلال کامل AI در محیط‌های حساس، ریسک‌پذیر است.

همان‌طور که در تحلیل قبلی ما درباره‌ی JudgeMyAI و استانداردهای بررسی انسانی برای پاسخ‌های مبنی‌سازی‌شده اشاره کردیم، تمرکز این پیاده‌سازی بر «مرز اعتماد» (Trust Boundary) است. این یعنی در حالی که یک مدل زبانی بزرگ (LLM) — مثل کتابخانه‌داری که میلیاردها صفحه را خوانده و حالا با همان لحن کتاب‌ها جواب می‌دهد — می‌تواند پیام را بفهمد، اما هرگز اجازه ندارد به‌تنهایی درباره وضعیت مالی مشتری تصمیم بگیرد یا دستور بازگشت وجه صادر کند. این چالش در مدل‌های دوزبانه پیچیده‌تر است، چرا که تفاوت عملکرد مدل‌های فارسی و انگلیسی در مواجهه با داده‌های رسمی می‌تواند دقت استخراج اطلاعات را تحت تأثیر قرار دهد.

مرز اعتماد

برای حفظ امنیت و جلوگیری از نفوذ داده‌های نامعتبر به لایه‌های تصمیم‌گیر، این گردش‌کار سطوح مختلفی از دسترسی و اعتبار را تعریف کرده است:

  • نامعتبر (Untrusted): متن خام پیام مشتری که هرگونه دستکاری یا تلاش برای Prompt Injection در آن ممکن است.
  • زمینه احراز شده (Authenticated Context): هویت مشتری و مستاجر (Tenant) که توسط اپلیکیشن تایید شده و از طریق توکن‌های امنیتی منتقل می‌شود.
  • پیش‌بینی مدل (Model Prediction): زبان شناسایی شده، قصد کاربر (Intent) و زبان پاسخ درخواستی که توسط AI حدس زده شده است.
  • سند مجاز (Authorized Record): وضعیت پرداخت و ارسال که مستقیماً از یک پایگاه‌داده تایید شده و معتبر استخراج شده است.
  • کد اپلیکیشن (Application Code): قوانین ارجاع و تایید سخت‌گیرانه که خروجی نهایی را کنترل کرده و اجازه ارسال پیام را صادر می‌کنند.

معماری هفت‌گره‌ای

این سامانه از یک خط لوله سخت‌گیرانه با هفت گره (Node) استفاده می‌کند تا ورودی‌های نامعتبر را از اقدامات مجاز جدا کند. این ساختار به گونه‌ای طراحی شده است که هیچ داده‌ای بدون اعتبارسنجی به مرحله بعد نرود. طبق مستندات فنی، این گره‌ها عبارت‌اند از:

  • Manual Trigger: شروع اجرای کنترل‌شده در محیط آزمایشگاه برای تست سناریوهای مختلف.
  • Demo Input: ارائه زمینه مشتری و پیام‌های فرضی (مانند پیام‌های عربی یا فرانسوی) به عنوان ورودی‌های قابل اعتبارسنجی.
  • Prepare Request: اعتبارسنجی ورودی، استخراج صریح شناسه‌های سفارش و ساخت بدنه درخواست API.
  • DEVUP Triage: ارسال یک درخواست HTTP غیر-جریانی (Non-streaming) به مدل هوش مصنوعی برای تحلیل اولیه.
  • Validate Triage: بررسی کامل تکمیل شدن پاسخ، ساختار JSON، انواع داده‌ها و تطبیق شواهد مربوط به شناسه سفارش.
  • Read Demo Order: بررسی مالکیت مشتری و مستاجر و رد کردن داده‌های قدیمی یا منقضی شده.
  • Build Review Packet: اعمال سیاست‌های تجاری و ایجاد یک بسته پیش‌نویس ارسال‌نشده که نیاز به تایید انسانی دارد.

فرآیند با یک ورودی نمونه آغاز می‌شود؛ مثلاً پیامی به زبان عربی که می‌پرسد چرا پرداخت سفارش DZ-1042 معلق است. در این مرحله، replyLocale صراحتاً روی 'ar' (عربی) یا 'fr' (فرانسوی) تنظیم می‌شود. اگرچه زبان شناسایی شده توسط مدل برای تریاژ مفید است، اما هرگز جایگزین زبان ترجیحی مشتری نمی‌شود؛ برای مثال، اگر مشتری پیامی ترکیبی از عربی و فرانسوی بفرستد اما تنظیمات حساب او روی فرانسوی باشد، پاسخ نهایی حتماً به فرانسوی خواهد بود.

در گره دوم، یعنی «Prepare Request»، یک تجزیه‌گر قطعی (Deterministic Parser) برای یافتن شناسه‌های سفارش (که با DZ- و دنبال شده با ۴ تا ۸ رقم هستند) به کار می‌رود. این گره همچنین اعداد عربی و فارسی را به ASCII تبدیل می‌کند تا یکپارچگی داده‌ها حفظ شود. این کار باعث می‌شود پیش از آنکه متن به دست هوش مصنوعی برسد، یک خط پایه از شواهد ایجاد شود. در پرامپت سیستمی (System Prompt) صراحتاً به مدل دستور داده شده که پیام مشتری داده‌ای نامعتبر است و هرگز نباید به عنوان دستور اجرا شود. مدل صراحتاً منع شده است که: «پرداخت را تایید نکند، مجوزها را انتخاب نکند و پیش‌نویس پاسخ ننویسد».

سپس گره DEVUP AI یک درخواست به نقطه اتصال (Endpoint) مدل در آدرس https://api.devupai.com/v1/chat/completions ارسال می‌کند. خروجی مدل توسط یک طرحواره JSON سخت‌گیرانه با استفاده از response_format و json_schema و پارامتر strict محدود شده است. مدل موظف است دقیقاً پنج فیلد را برگرداند: زبان (ar, fr, mixed, other)، قصد کاربر (order_status, payment_issue, refund, other)، شناسه سفارش (DZ- و ۴-۸ رقم یا null)، ادعای پرداخت (boolean) و درخواست بازگشت وجه (boolean).

اعتبارسنجی منطق هوش مصنوعی

گره «Validate Triage» به عنوان یک حفاظ (Guardrail) حیاتی عمل می‌کند. این گره فقط صحت ساختاری JSON را بررسی نمی‌کند، بلکه شناسه استخراج شده توسط مدل را با نتایج تجزیه‌گر قطعی مقایسه می‌کند. به نقل از توسعه‌دهندگان، اگر مشتری فقط به سفارش DZ-1042 اشاره کرده باشد اما مدل مقدار DZ-9999 را برگرداند، سیستم این تریاژ را با دلیل order_id_evidence_mismatch رد می‌کند. حتی اگر ساختار JSON بی‌نقص باشد، تضاد در داده‌های استخراج شده باعث رد درخواست می‌شود.

بررسی‌های اعتبارسنجی بسیار جامع هستند. این گره در موارد زیر پاسخ را رد می‌کند:

  • اگر وضعیت HTTP در محدوده ۲۰۰-۲۹۹ نباشد (مثلاً خطای api_http_400).
  • اگر پاکت پاسخ نامعتبر باشد یا finish_reason برابر با 'stop' نباشد.
  • اگر مدل از طریق فیلد choice.message.refusal درخواست را رد کرده باشد.
  • اگر محتوا قابل تجزیه به JSON نباشد یا طول آن از ۸۰۰۰ کاراکتر بیشتر شود.
  • اگر JSON دارای تعداد فیلدهایی بیشتر یا کمتر از ۵ مورد باشد یا از انواع داده‌های اولیه (Primitive Types) اشتباه استفاده کرده باشد.

علاوه بر این، گره مذکور یک شناسه درخواست API پاک‌سازی شده (از هدر x-request-id) را حفظ می‌کند تا بازبینان انسانی بتوانند تلاش‌های مدل را با لاگ‌های عملیاتی تطبیق دهند. این شناسه، تلاش خاص API را مشخص می‌کند اما جایگزین هویت داخلی پیام نمی‌شود.

پس از تایید، گره «Read Demo Order» یک جست‌وجوی محدود (Scoped Lookup) انجام می‌دهد. این گره شناسه مستاجر، شناسه مشتری و شناسه سفارش را با هم تطبیق می‌دهد. این مکانیسم مانع از آن می‌شود که هوش مصنوعی به‌طور تصادفی اطلاعات سفارشی را که متعلق به مشتری دیگری است افشا کند. در این سیستم، یک سفارش «ناشناخته» و یک سفارش «غیرقابل دسترس» هر دو یک خروجی خارجی یکسان تولید می‌کنند: not_found_or_forbidden.

جزئیات تایید سفارش

برای تضمین یکپارچگی داده‌ها و جلوگیری از نشت اطلاعات، گره جست‌وجو قوانین سخت‌گیرانه‌ای را اعمال می‌کند:

  • مالکیت (Ownership): رکورد استخراج شده باید دقیقاً با هر دو شناسه tenantId و customerId مطابقت داشته باشد.
  • تازگی (Freshness): یک آستانه زمانی ۳۰ دقیقه‌ای اعمال می‌شود. رکوردهایی که قدیمی‌تر از این زمان باشند (مثلاً یک رکورد شبیه‌سازی شده با ۱۲۰ دقیقه قدمت)، به عنوان «منقضی» (Stale) علامت‌گذاری می‌شوند.
  • مینیمالیسم (Minimalism): سیستم فقط شناسه سفارش، وضعیت پرداخت، وضعیت ارسال و برچسب زمانی منبع را بازیابی می‌کند. هرگز کل رکورد مشتری یا اطلاعات حساس پرداخت به مدل ارسال نمی‌شود.

بررسی انسانی (Human-in-the-Loop)

مرحله نهایی، ساخت «بسته بررسی» (Review Packet) است. سیستم به‌جای ارسال مستقیم پیام به مشتری، یک بسته شامل موارد زیر تولید می‌کند:

  • پیام اصلی: ورودی نامعتبر مشتری.
  • پیش‌نویس پاسخ: متنی در زبان ترجیحی (عربی یا فرانسوی).
  • شواهد پشتیبان: رکورد تایید شده سفارش (در صورت موجود بودن).
  • دلایل بررسی: پرچم‌هایی مانند payment_claim_conflict (تضاد ادعای پرداخت) یا refund_request (درخواست بازگشت وجه).
  • تخصیص صف: ارجاع به صف‌های support (پشتیبانی)، manual_review (بررسی دستی)، billing_review (بررسی حسابداری) یا refund_review (بررسی بازگشت وجه).
  • اولویت: برای درخواست‌های بازگشت وجه یا تضادهای پرداخت، اولویت روی 'high' تنظیم می‌شود.

اگر مشتری ادعا کند پرداخت کرده اما رکورد سیستم وضعیت «معلق» را نشان دهد، سامانه تضاد را شناسایی کرده و تیکت را با اولویت بالا به صف حسابداری می‌فرستد. پیش‌نویس پاسخ در این حالت به‌جای صدور حکم قطعی، می‌گوید: «بر اساس سوابق موجود برای سفارش... پرداخت شما هنوز به عنوان تایید شده ثبت نشده است» (به زبان عربی: "بحسب السجل المتاح للطلب... الدفع غير مسجّل كمؤكّد بعد"). اگر درخواست بازگشت وجه وجود داشته باشد، پیش‌نویس صراحتاً ذکر می‌کند که هیچ بازگشتی اجرا نشده و بسته را به صف refund_review می‌فرستد.

گردش کار پشتیبانی دوزبانه با n8n و DEVUP AI: سفارش‌های تاییدشده و بازبینی انسانی

مقاوم‌سازی برای محیط تولید

برای جلوگیری از اتلاف هزینه استنتاج (Inference) — که شبیه پرداخت کرایه یک آشپزخانه صنعتی است و هرچه دستور پخت سنگین‌تر باشد هزینه بیشتر می‌شود — سیستم توصیه می‌کند از یک صندوق ورودی (Inbox) بادوام استفاده شود که بر اساس کلید ترکیبی tenantId + source + messageId مدیریت می‌شود. این رویکرد مشابه استراتژی صندوق ورودی برای Agentها است که توسط آمازون معرفی شد تا از پردازش‌های تکراری و هزینه‌بر جلوگیری شود. این کار باعث می‌شود پیام‌های تکراری که از طریق وب‌هوک‌ها ارسال می‌شوند، باعث اجرای مجدد و هزینه‌بر مدل نشوند.

بسته همراه این سیستم شامل inbox_demo.py است؛ یک مرجع SQLite که از یک کلید اصلی ترکیبی و یک هش payload_sha256 استفاده می‌کند تا تشخیص دهد آیا همان هویت پیام با محتوای متفاوتی دوباره ارسال شده است یا خیر.

جزئیات پیاده‌سازی صندوق ورودی (Inbox)

مرجع SQLite از ساختار جدول خاصی برای مدیریت وضعیت رویدادها استفاده می‌کند:

  • کلید ترکیبی: ترکیب (tenant_id, source, message_id) یکتایی را تضمین می‌کند.
  • ردیابی وضعیت: رویدادها به عنوان claimed (در حال پردازش) یا completed (تکمیل شده) علامت‌گذاری می‌شوند.
  • ادعاهای اتمیک (Atomic Claims): رویدادهای جدید در یک تراکنش (Transaction) رزرو می‌شوند تا از تداخل همزمان چندین Worker جلوگیری شود.
  • اعتبارسنجی محتوا: اگر شناسه پیام تکراری باشد اما payload_sha256 تغییر کرده باشد، درخواست رد می‌شود.

برای استقرار نهایی، تریگر دستی با یک گره Webhook در n8n جایگزین می‌شود. تأکید می‌شود که احراز هویت فراخواننده (اثبات اینکه آداپتور اجازه فراخوانی گردش‌کار را دارد) و مجوزهای مشتری (تعیین اینکه پیام متعلق به کدام مستاجر/مشتری است) بررسی‌های جداگانه‌ای هستند که باید پیش از شروع گردش‌کار توسط آداپتور اپلیکیشن مدیریت شوند.

مدیریت خطا و ارزیابی

رفتارهای صریحی برای حالت‌های مختلف شکست تعریف شده است:

  • ورودی نامعتبر: گره Prepare Request خطا می‌دهد و ورودی رد می‌شود.
  • خطای API/انتقال: منجر به ایجاد یک بسته manual-review ارسال‌نشده می‌شود.
  • رد مدل/JSON نامعتبر: تریاژ رد شده و مرحله جست‌وجوی سفارش نادیده گرفته می‌شود.
  • رکوردهای منقضی: رکوردهای قدیمی‌تر از ۳۰ دقیقه به عنوان stale علامت‌گذاری شده و تایید وضعیت پرداخت متوقف می‌شود.
  • تضاد پرداخت: با اولویت بالا به billing_review ارجاع داده می‌شود.
  • درخواست بازگشت وجه: با اولویت بالا به refund_review ارجاع داده می‌شود؛ گردش‌کار هرگز بازگشت وجه واقعی را اجرا نمی‌کند.

ارزیابی سیستم از کد جدا شده است. بسته همراه شامل ۲۷ تست جاوااسکریپت و ۵ تست SQLite برای صندوق ورودی است. این تست‌ها تایید می‌کنند که سیستم اعداد فارسی/عربی، پیام‌های دوزبانه و تلاش‌ها برای افشای شواهد غیرمجاز را به‌درستی مدیریت می‌کند. به‌طور خاص، تست‌ها تضمین می‌کنند که سفارش متعلق به یک مستاجر یا مشتری دیگر، منجر به افشای هیچ داده‌ای نشود.

معیارهای ارزیابی

برای ارزیابی زنده با استفاده از sample-cases.json معیارهای زیر در اولویت هستند:

  • Recall (فراخوانی): به‌ویژه برای تشخیص درخواست‌های بازگشت وجه و ادعای پرداخت، تا هیچ نیاز به ارجاعی نادیده گرفته نشود.
  • Consistency (ثبات): اندازه‌گیری شکست‌های ثبات شناسه سفارش در مواردی که ساختار JSON درست بود اما شناسه اشتباه بود.
  • Security (امنیت): تضمین صفر بودن افشاهای غیرمجاز در تست‌های مجوزدهی.
  • Accuracy (دقت): ردیابی اصلاحات بازبین انسانی در پیش‌نویس‌ها و تخصیص صف‌ها.

این رویکرد، نقش هوش مصنوعی را از یک تصمیم‌گیرنده به یک دستیار تریاژ تغییر می‌دهد. بازبین انسانی در نهایت تنها به چهار سوال پاسخ می‌دهد: مشتری چه گفت؟ سیستم اجازه خواندن کدام رکورد را داشت؟ چه شواهدی وجود دارد و چقدر قدیمی است؟ و چه چیزی هنوز نیاز به تصمیم انسانی دارد؟

این طراحی این فرض را می‌شکند که عامل‌های هوش مصنوعی برای مفید بودن باید کاملاً خودمختار باشند. با اعمال سیاست «عدم تغییر» (No-mutation) — که در آن مدل نمی‌تواند بازگشت وجه را اجرا کند یا پیام بفرستد — سیستم به جای تکیه بر مهندسی پرامپت، از حفاظ‌های قطعی برای رسیدن به قابلیت اطمینان استفاده می‌کند.

برای پیاده‌سازی این مدل، توسعه‌دهندگان باید ابتدا گرامر شناسه‌های سفارش خود را تعریف کرده و یک اتصال «فقط خواندنی» به سرویس سفارشات ایجاد کنند و سپس لایه تریاژ هوش مصنوعی را اضافه نمایند.

گام بعدی شما

  • گرامر شناسه‌های سفارش خود را به‌صورت دقیق تعریف کنید تا بتوانید از تجزیه‌گرهای قطعی استفاده کنید.
  • یک اتصال «فقط خواندنی» (Read-only) به سرویس سفارشات خود ایجاد کنید تا لایه هوش مصنوعی نتواند داده‌ها را تغییر دهد.
  • برای کاهش هزینه‌ها، یک لایه Deduplication (حذف تکرار) بر اساس هش محتوا در ورودی سیستم پیاده کنید.

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

چرا این موضوع مهم است؟

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

تأثیر برای ایران

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

·نگاه ما
تحریریه دات‌هوش

جایگزینی خودمختاری کامل با «تریاژ هوشمند» نشان می‌دهد که در محیط‌های سازمانی، قابلیت اطمینان بر سرعت اولویت دارد. این معماری ثابت می‌کند که بهترین کاربرد فعلی عامل‌های هوش مصنوعی، نه جایگزینی انسان، بلکه تبدیل داده‌های نامنظم به بسته‌های تصمیم‌گیری ساختاریافته است. در واقع، ارزش افزوده در اینجا نه در قدرت مدل، بلکه در سخت‌گیرانه بودن لایه‌های اعتبارسنجی پیرامونی است.

منابع

این گزارش با خط‌لولهٔ خودکار دات‌هوش از منابع معتبر جهانی تدوین و زیر نظر تحریریه منتشر شده است. روش کار ما

گفتگو

پنج‌شنبه‌های هوش‌محور

بسته‌ی هفتگی دات‌هوش

۵ خبر، ۲ ابزار، ۱ پرامپت در هر شماره. به‌زودی راه‌اندازی می‌شود — هر پنج‌شنبه صبح.

خبر کلیدی
ابزار کاربردی
پرامپت حرفه‌ای
تحلیل پژوهش
به‌زودی
زاویه‌ی ایرانی
به‌زودی
تمرین این هفته
به‌زودی

راهنماهای دات‌هوش

راهنماهای کاربردیِ دات‌هوش برای کار با هوش مصنوعی — از همین‌جا شروع کنید:

دات‌هوش

راهنمای فارسی هوش مصنوعی — با نگاه به ایران

اخبار روزانه، معرفی ابزارها و مدل‌ها، و آموزشِ کار با هوش مصنوعی؛ همیشه با این پرسش که از ایران چه چیزی کار می‌کند و چه چیزی نه.