در چهار مقالهٔ قبلی این سری، سختافزار مناسب را انتخاب کردیم، مدل محلی را به ابزارهای بیرونی وصل کردیم، پایپلاین RAG کاملاً آفلاین را شناختیم، و روشی عملی برای اندازهگیری کیفیت روی کار خودمان یاد گرفتیم. حالا وقت آن رسیده که همهٔ اینها را در یک پروژهٔ واقعی کنار هم بگذاریم: یک دستیار آفلاین که روی اسناد شخصی یا سازمانی شما کار میکند، بدون اینکه حتی یک بایت از محتوای آن اسناد از دستگاه شما خارج شود. این مقاله یک راهنمای گامبهگام است که مسیر را از صفر تا یک سیستم قابلاستفاده طی میکند و در پایان با یک چکلیست خودارزیابی، به شما کمک میکند مطمئن شوید چیزی از قلم نیفتاده است.
لیست مطالب
هدف پروژه
هدف این پروژه ساخت دستیاری است که بتواند به پرسشهای شما دربارهٔ مجموعهای از اسناد شخصی (قراردادها، یادداشتها، گزارشها، یا هر مجموعهٔ متنی دیگر) پاسخ دهد، بدون اتصال به هیچ سرویس ابری در کل زنجیرهٔ پردازش. این پروژه ترکیبی از هر چهار مقالهٔ قبلی است: انتخاب سختافزار مناسب، اتصال مدل به رابط کاربری از طریق endpoint سازگار با OpenAI، ساخت پایپلاین RAG کاملاً آفلاین، و در پایان ارزیابی کیفیت روی نمونههای واقعی خودتان.

گامهای اجرا
- انتخاب سختافزار و مدل: بر اساس نوع دستگاهی که در اختیار دارید (GPU اختصاصی، مک با حافظهٔ یکپارچه، یا فقط CPU) یک مدل زبانی محلی متناسب انتخاب کنید. اگر این تصمیم را هنوز نگرفتهاید، به بخش سختافزار در نقشهٔ راه مدلهای متنباز و اجرای محلی برگردید.
- نصب و اجرای سرور مدل محلی: ابزاری مثل Ollama یا LM Studio را نصب کنید و مطمئن شوید سرور آن یک endpoint سازگار با OpenAI روی
localhostدر حال اجراست. - انتخاب و اجرای مدل embedding محلی: جدا از مدل چت، یک مدل embedding محلی هم راهاندازی کنید که مسئول برداریکردن اسناد شماست.
- راهاندازی پایگاهدادهٔ برداری محلی: نسخهٔ self-hosted یک پایگاهدادهٔ برداری را روی همان دستگاه یا شبکهٔ داخلی نصب کنید.
- جمعآوری و آمادهسازی اسناد: اسناد شخصی خود را در یک پوشهٔ مشخص جمع کنید؛ اگر PDF اسکنشده دارید، از یک ابزار OCR محلی برای استخراج متن استفاده کنید.
- chunk کردن اسناد: متن هر سند را به قطعات کوچکتر و معنادار تقسیم کنید تا برای embedding و بازیابی مناسب باشند.
- ساخت پایپلاین ingest: اسکریپت یا workflow ای بسازید که هر قطعه را embed کرده و در پایگاهدادهٔ برداری ذخیره کند. برای این مرحله میتوانید مستقیماً از n8n استفاده کنید؛ نحوهٔ اتصال آن به مدل محلی در مقالهٔ اتصال توضیح داده شده است.
- ساخت رابط پرسشوپاسخ: یک رابط ساده (چه در n8n، چه یک اسکریپت، چه یک اپلیکیشن سبک) بسازید که پرسش کاربر را میگیرد، قطعات مرتبط را از پایگاهدادهٔ برداری بازیابی میکند، و همراه پرسش به مدل زبانی محلی میفرستد.
- بررسی کامل زنجیرهٔ آفلاین: با یک ابزار مانیتورینگ شبکه یا فایروال، مطمئن شوید هیچکدام از اجزای سیستم (نه مدل، نه embedding، نه پایگاهدادهٔ برداری، نه ابزارهای جانبی) درخواستی به بیرون از شبکهٔ محلی نمیفرستند.
- ارزیابی کیفیت روی نمونههای واقعی: طبق روش «بیست نمونه، یک پرامپت، مقایسهٔ کور»، عملکرد دستیار آفلاین خود را روی پرسشهای واقعی محک بزنید و نقاط ضعف را شناسایی کنید.
معماری نهایی
در پایان این مسیر، معماری سیستم شما به این شکل خواهد بود: اسناد شخصی در یک پوشهٔ محلی، یک مرحلهٔ ingest که آنها را chunk و embed میکند، یک پایگاهدادهٔ برداری self-hosted که این بردارها را نگه میدارد، یک سرور مدل زبانی محلی با endpoint سازگار با OpenAI، و یک رابط کاربری یا workflow که همهٔ این اجزا را به هم وصل میکند. هیچکدام از این اجزا نیازی به اتصال اینترنت در زمان اجرا ندارند.
خطاهای رایج در این پروژه
در تجربهٔ ساخت چنین سیستمی، چند اشتباه بیشتر از بقیه تکرار میشود. اولین اشتباه رایج، فراموشکردن محلیبودن مدل embedding است؛ چون معمولاً تمرکز روی مدل چت است و این مرحله در سایه میماند. دومین اشتباه، chunkبندی نامناسب اسناد است؛ قطعات خیلی بزرگ باعث میشوند بازیابی دقیق نباشد، و قطعات خیلی کوچک باعث از دست رفتن context میشوند؛ اندازهٔ مناسب معمولاً با آزمونوخطا روی خود اسناد شما پیدا میشود. سومین اشتباه، عدم تست دوبارهٔ سیستم بعد از افزودن اسناد جدید است؛ هر بار که مجموعهٔ اسناد تغییر میکند، بهتر است حداقل چند نمونه از چکلیست کیفیت را دوباره اجرا کنید تا مطمئن شوید بازیابی همچنان درست کار میکند.
چکلیست خودارزیابی
| آیتم | وضعیت (بله / خیر) | یادداشت |
|---|---|---|
| مدل زبانی روی سختافزار محلی و متناسب با نیاز واقعی اجرا میشود | ||
| مدل embedding هم محلی است، نه از طریق API ابری | ||
| پایگاهدادهٔ برداری نسخهٔ self-hosted است، نه سرویس ابری managed | ||
| مرحلهٔ OCR/parsing اسناد (در صورت وجود) هم محلی است | ||
| هیچ فراخوانی شبکهٔ خروجی غیرمنتظرهای در حین اجرا ثبت نشده | ||
| رابط کاربری یا workflow با base_url محلی بهدرستی وصل شده | ||
| پایپلاین ingest برای اسناد جدید قابلتکرار و مستند است | ||
| کیفیت خروجی روی حداقل بیست نمونهٔ واقعی ارزیابی شده | ||
| نقاط ضعف شناساییشده (اگر بودند) مستند شدهاند |
اگر در جریان ساخت این پروژه به دغدغههای امنیتی گستردهتر برخوردید—مثلاً کنترل دسترسی به این دستیار، یا سیاست نگهداری داده—مرور نقشهٔ راه امنیت هوش مصنوعی میتواند مسیر بعدی شما باشد. و اگر بعداً خواستید این دستیار را به یک چتبات تخصصی کاملتر با قابلیتهای بیشتر تبدیل کنید، نقشهٔ راه ساخت چتبات تخصصی ادامهٔ منطقی همین پروژه است.
جمعبندی
- این پروژه چهار مقالهٔ قبلی را در یک سیستم واحد و قابلاستفاده کنار هم میگذارد.
- هر جزء زنجیره—مدل، embedding، پایگاهدادهٔ برداری، ابزارهای جانبی—باید جداگانه محلی بودنش تأیید شود.
- پیش از اعلام «آماده»، ترافیک شبکهٔ خروجی سیستم را حتماً بررسی کنید.
- چکلیست خودارزیابی را نه فقط یکبار، بلکه بعد از هر تغییر بزرگ در پایپلاین دوباره اجرا کنید.
- ارزیابی کیفیت روی نمونههای واقعی خودتان، معیار نهایی موفقیت این پروژه است، نه ظاهر فنی سیستم.
