تصور کنید یک دستیار هوشمند داشته باشید که تمام مستندات شرکت شما را میشناسد، اما برای هر پیام ارسالی، حتی یک سنت هم به شرکتهای نرمافزاری پرداخت نمیکنید. Bolnee-Chat با ارائه یک چارچوب میزبانی شخصی برای تولید بازیابیافزا (RAG) — شبیه دانشآموزی که قبل از جواب دادن، اول کتاب درسی را باز میکند و از آن نقل میآورد — مدل رایج پرداخت بهازای هر پیام را به کلی کنار زده است.
بسیاری از کسبوکارهای کوچک امروز میان دو راه سخت گیر کردهاند: یا باید از پلتفرمهای ابری (SaaS) گرانقیمت استفاده کنند یا یک سیستم پیچیده را از صفر بسازند. آنها اغلب با پدیدهای به نام «قفل شدن در تامینکننده» (Vendor Lock-in) دستوپنجه نرم میکنند؛ وضعیتی که در آن انتقال دادهها به یک ارائهدهنده جدید تقریباً غیرممکن است. همانطور که در تحلیلهای قبلی ما دربارهی امنیت مدلهای بازمتن اشاره کردیم، کنترل روی زیرساخت، کلید حریم خصوصی است. Bolnee-Chat دقیقاً در این نقطه بهعنوان یک راهکار میانی ظاهر شده است؛ ابزاری با داشبورد حرفهای و ویجت قابل تعبیه که کاملاً روی زیرساخت کاربر اجرا میشود. این رویکرد میزبانی محلی، یادآور قابلیتهای پلتفرم BizNode Pro در مدیریت رباتهای مستقل روی سختافزار شخصی است که استقلال زیرساختی را برای توسعهدهندگان به ارمغان آورد.
هسته فنی و زیرساخت
طبق مستندات فنی، این پلتفرم بر پایه یک پشته (Stack) سبک برای استقرار سریع بنا شده است. این سیستم از Node.js 18+ برای محیط اجرا و SQLite (از طریق کتابخانه better-sqlite3) برای ذخیرهسازی تمام دادهها استفاده میکند؛ به این معنا که هیچ نیازی به راهاندازی پایگاهداده خارجی و پیچیده نیست. پایگاهداده در مسیر data/bolnee.db ایجاد میشود و بهطور پیشفرض در فایل .gitignore قرار دارد تا از آپلود ناخواسته دادهها جلوگیری شود. برای کسانی که میزبانی ابری را ترجیح میدهند، پیکربندیهای لازم برای Vercel و Cloudflare Pages از طریق فایلهای vercel.json و wrangler.toml برای مدیریت بازنویسیها (rewrites) و تنظیمات باکت پیشبینی شده است.

فرآیند جذب دانش توسط یک خزندهی اختصاصی مبتنی بر پایتون (crawler/crawler.py) مدیریت میشود. این سیستم به Python 3.10+ و وابستگیهایی نظیر aiohttp ،beautifulsoup4 ،lxml ،requests و brotli نیاز دارد. برای وبسایتهایی که محتوای آنها به شدت وابسته به جاوااسکریپت است (JS-heavy)، این ابزار از Playwright پشتیبانی میکند. این خزنده با رعایت دقیق فایل robots.txt و استخراج محتوا بهطور خاص از تگهای h1، h2، p و li، تضمین میکند که هوش مصنوعی زاینده (Generative AI) — مثل کتابخانهداری که میلیاردها صفحه را خوانده و حالا با همان لحن جواب میدهد — به یک پایگاه دانش پاک و بدون نویز دسترسی داشته باشد.
کاربران میتوانند فایلهای PDF، TXT، MD یا DOCX را آپلود کنند یا آدرس وبسایتها را ارائه دهند. این دادهها در یک خط لوله (Pipeline) پردازشی شامل مراحل «صفبندی $\rightarrow$ خزیدن $\rightarrow$ تجزیه $\rightarrow$ نمایهسازی $\rightarrow$ نمایهشده» عبور میکنند. محتوا سپس تکهبندی شده و در قابلیت جستوجوی تماممتن (FTS) در SQLite ذخیره میشود تا استنتاج (Inference) — لحظهای که مدل واقعاً جواب تولید میکند — با بیشترین سرعت رخ دهد. همچنین دادههای وبسایتها در فایلهای مجزایی مانند data/{chatbotId}_website.json ذخیره میشوند.
انعطافپذیری در انتخاب مدل
یکی از برجستهترین ویژگیهای این ابزار، پشتیبانی از هر API سازگار با OpenAI است. این قابلیت به کاربر اجازه میدهد بر اساس هزینه یا عملکرد، ارائهدهنده مدل زبانی بزرگ (LLM) خود را به راحتی تغییر دهد:
- OpenRouter: اولویت با مدلهایی است که برچسب
:freeدارند (مانندinclusionai/ling-3.0-flash-fin:free) تا هزینهها به صفر برسد. - Groq و vLLM: برای دستیابی به استنتاج با سرعت بسیار بالا و پاسخهای آنی.
- Ollama: برای اجرای کاملاً محلی و آفلاین مدلها بدون نیاز به اینترنت.
- OpenAI: برای یکپارچگی استاندارد با مدلهای قدرتمندی مثل GPT-4o یا GPT-4o-mini.
برای محافظت از دادههای حساس، Bolnee-Chat تمام کلیدهای API ارائهدهندگان را با استاندارد رمزنگاری AES-256-GCM امن میکند. این کلیدها به همراه baseUrl و نام مدل در سمت سرور ذخیره میشوند و هرگز در قطعه کد تعبیه شده در سمت کاربر (Client-side embed snippet) نمایش داده نمیشوند. کاربران همچنین میتوانند لیست مدلهای فعال را مستقیماً از داشبورد فراخوانی کنند تا مطمئن شوند مدل انتخابی در دسترس است.
استقرار و شخصیسازی
اتصال ربات به وبسایت تنها با یک قطعه کد جاوااسکریپت دو خطی انجام میشود. این قطعه کد شامل یک شیء window.BotConfig و فراخوانی فایل chatbot-widget.js است. ویجت نهایی «تم-آگاه» (Theme-aware) است و از حالتهای روشن، تیره و خودکار پشتیبانی میکند (مثلاً استفاده از رنگ #0f172a برای حالت تیره و #fff برای حالت روشن). این سیستم یک VISITOR_ID و تاریخچه گفتگوها را در localStorage مرورگر ذخیره میکند تا با رفرش شدن صفحه، گفتگوها پاک نشوند و پیام خوشآمدگویی تنها یکبار نمایش داده شود.
مدیران از طریق یک کنسول مدیریتی با تم تیره (پسزمینه #020617 و کارتهای #1e293b)، تمام جزئیات را مدیریت میکنند. این داشبورد امکان پیشنمایش زنده ظاهر ربات، آپلود آواتارهای سفارشی (در قالبهای PNG، JPG یا WEBP تا سقف ۲ مگابایت) و تغییر رنگهای تاکیدی را فراهم میکند. آواتارها برای بهینهسازی در ارائه، از فرمت Data URL به مسیر /api/public/avatar/:id تبدیل میشوند.
بررسی دقیق قابلیتها
- نمای کلی ربات (Bot Overview): نمایش وضعیت زنده، تعداد کل پیامها، تعداد کاربران، تاریخ ایجاد و تعداد منابع دانش. کد تعبیه (Embed Snippet) در این بخش تولید میشود.
- بخش ظاهر (Appearance Tab): امکان ویرایش نام ربات، آپلود آواتار، تغییر رنگ پسزمینه و تنظیم پیام خوشآمدگویی اولیه. تغییرات از طریق متد
PATCH /api/chatbots/:idذخیره میشوند. - مدیریت گفتگوها (Chat Management): تعاملات بر اساس
visitorId(که از IP مشتق شده) و سپس بر اساس تاریخ گروهبندی میشوند. مدیران میتوانند لیست را رفرش کرده یا دادهها را در قالبهای CSV (اکسل)، JSON یا PDF صادر کنند. جلسات فعال به عنوان بازدیدکنندگانی تعریف میشوند که در ۵ دقیقه اخیر فعال بودهاند. - مدیریت دانش (Knowledge Management): بخشی اختصاصی که مکانیاب (Locator)، نوع، وضعیت و لاگ خطاهای هر منبع را لیست میکند. کاربران میتوانند از طریق یک جادوگر (Wizard) چهارمرحلهای، دانش جدیدی به سیستم اضافه کنند.
- تنظیمات و منطقه خطر (Settings & Danger Zone): این بخش مدیریت پیکربندی ارائهدهنده، پیامهای پیشفرض (قبل از اولین نوبت گفتگو) و پیامهای جایگزین (Fallback) را بر عهده دارد که وقتی هیچ منبعی با پرسش کاربر مطابقت ندارد، نمایش داده میشوند. «منطقه خطر» امکان حذف کامل ربات، تمام چتها، منابع و تکههای داده (Chunks) را فراهم میکند.
گردش کار عملیاتی
راهاندازی یک ربات در چهار گام ساده رخ میدهد:
۱. برندسازی در چند ثانیه: ایجاد ربات با تعیین نام و آپلود آواتار (حداکثر ۲ مگابایت).
۲. افزودن دانش: وارد کردن آدرس وبسایت یا آپلود فایلهای PDF/TXT/MD/DOCX/FAQ. سیستم بهطور خودکار عملیات خزیدن و نمایهسازی را انجام میدهد.
۳. پیکربندی ارائهدهنده: انتخاب ارائهدهنده، پر کردن خودکار Base URL، وارد کردن کلید API و دریافت لیست مدلها.
۴. تعبیه: کپی کردن قطعه کد از تب Overview یا Knowledge و قرار دادن آن قبل از تگ </body>. ویجت بهطور خودکار مبدأ (Origin) را از طریق window.location.origin شناسایی میکند.
به نقل از مستندات فنی، این سیستم برای ارسال پاسخها از Server-Sent Events (SSE) استفاده میکند. فایل public/chatbot-widget.js این جریان را از طریق getReader() میخواند تا کاربر پاسخ هوش مصنوعی را بهصورت جریانی (Streaming) و در لحظه تایپ شدن ببیند. در صورتی که جریان پاسخ قفل شود، سیستم شامل یک مکانیزم دور زدن (Bypass) برای Service Worker است تا تحویل پیام تضمین شود.
تحلیل تحریریه
این تغییر به سمت ابزارهای «میکرو-RAG»، اقتصاد پشتیبانی مشتری را برای توسعهدهندگان مستقل (Indie Hackers) و آژانسهای کوچک تغییر میدهد. با جداسازی رابط کاربری چتبات از ارائهدهنده LLM، Bolnee-Chat دستیار هوش مصنوعی را از یک هزینه ماهانه تکرار شونده به یک ابزار کاربردی (Utility) تبدیل میکند.
برای خواننده، این بدان معناست که مانع ورود به دنیای هوش مصنوعی «مبنیسازی شده» (Grounded AI) عملاً به صفر رسیده است. دیگر نیازی به مدیریت پایگاهدادههای برداری پیچیده مانند Pinecone یا Weaviate برای سایتهای تجاری ساده نیست؛ یک فایل محلی SQLite برای اکثر پایگاههای دانش کوچک تا متوسط کافی است. همچنین استفاده از متغیر محیطی DISABLE_AUTH=true در استقرارهای تک-کاربره (Single-tenant)، فرآیند را بیش از پیش ساده میکند.
گام بعدی شما
- مخزن گیتهاب پروژه را کلون کرده و با مجموعهای از فایلهای PDF، کیفیت مبنیسازی (Grounding) را تست کنید.
- برای شروع، دستور
npm installرا اجرا کرده، فایل.envرا با یکJWT_SECRETتنظیم کنید و باnpm run devکنسول را در آدرسhttp://localhost:3000اجرا نمایید. - منتظر پلاگینهای جامعه کاربری باشید که احتمالاً پشتیبانی از ذخیرهسازهای برداری پیچیدهتر را با رشد حجم پایگاههای دانش اضافه خواهند کرد.
اما داستان سختافزاری این تحول حتی شگفتانگیزتر است — به تحلیل ما دربارهی تراشههای Blackwell مراجعه کنید.




گفتگو