پرش به محتوا
← همهٔ یادداشت‌ها

RAG با Langflow و Ollama روی GPU ابری: پرسش از اسناد

·۸ دقیقه مطالعه·تیم جی‌پی‌یو

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

اگر می‌خواهید یک مدل زبانی فقط از روی اسناد خودتان جواب بدهد — آیین‌نامهٔ شرکت، دفترچهٔ راهنمای محصول، قراردادها — ساده‌ترین راه یک RAG با Langflow و Ollama روی GPU ابری است. در این آموزش یک ماشین با قالب آمادهٔ Langflow (Ollama) اجاره می‌کنید، یک فایل PDF را به یک پایگاه برداری می‌دهید و بعد در یک پنجرهٔ چت از آن سؤال می‌پرسید؛ بدون این‌که یک خط پایتون بنویسید.

کل کار برای بار اول حدود ۴۵ دقیقه طول می‌کشد و روی یک کارت ۱۲ گیگابایتی، هزینه‌اش کمتر از یک ساعت اجاره است. اسناد شما روی ماشین خودتان می‌ماند و به هیچ سرویس هوش مصنوعی بیرونی فرستاده نمی‌شود، چون هم مدل زبانی و هم مدل embedding روی همان کارت گرافیک اجرا می‌شوند.

RAG چیست و چرا به درد می‌خورد؟

RAG مخفف Retrieval-Augmented Generation است: «تولید متن با کمک بازیابی». مدل زبانی به‌تنهایی فقط چیزهایی را می‌داند که موقع آموزش دیده؛ از اسناد داخلی شما خبر ندارد. در RAG، متن اسناد اول به تکه‌های کوچک تقسیم می‌شود و هر تکه به یک بردار عددی (embedding) تبدیل و در یک پایگاه برداری ذخیره می‌شود.

وقتی سؤالی می‌پرسید، همان سؤال هم به بردار تبدیل می‌شود، نزدیک‌ترین تکه‌ها پیدا می‌شوند و همراه سؤال به مدل زبانی داده می‌شوند. نتیجه: پاسخی که به متن خودتان تکیه دارد، نه به حافظهٔ کلی مدل. مزیتش نسبت به fine-tune این است که با عوض شدن اسناد، فقط کافی است فایل تازه را دوباره بارگذاری کنید.

پیش‌نیازها

انتخاب ماشین مناسب برای اجرای مدل زبانی

در این آموزش دو مدل همزمان روی کارت گرافیک بالا می‌آیند: مدل زبانی qwen2.5:7b (حدود ۴٫۷ گیگابایت) و مدل embedding چندزبانهٔ bge-m3 (حدود ۱٫۲ گیگابایت) که با متن فارسی هم کار می‌کند. جمعاً با فضای لازم برای متن ورودی، حدود ۸ گیگابایت VRAM مصرف می‌شود؛ پس هر کارت ۱۲ گیگابایتی جواب می‌دهد.

  • پیشنهاد اقتصادی: RTX 3060 با ۱۲ گیگابایت VRAM؛ در زمان نوشتن این مطلب از حدود ۱۶ هزار تومان در ساعت.
  • پیشنهاد میانه: RTX A4000 با ۱۶ گیگابایت؛ در زمان نوشتن این مطلب از حدود ۲۸ هزار تومان در ساعت. جای کافی برای یک مدل بزرگ‌تر یا اسناد طولانی‌تر.
  • پیشنهاد سریع: RTX 3090 با ۲۴ گیگابایت؛ در زمان نوشتن این مطلب از حدود ۴۴ هزار تومان در ساعت. اگر می‌خواهید مدل‌های ۱۴B را امتحان کنید، این انتخاب منطقی است. RTX 4090 هم با همین ۲۴ گیگابایت سریع‌تر است، ولی در زمان نوشتن این مطلب از حدود ۱۱۹ هزار تومان در ساعت شروع می‌شود.

ماشین‌ها را در بازار GPU با فیلتر مدل کارت و حافظه پیدا کنید. قیمت ساعتی موقع اجاره قفل می‌شود.

اجاره و راه‌اندازی Langflow روی GPU ابری

۱. در بازار، روی ماشین دلخواه بزنید و در فهرست قالب‌ها Langflow (Ollama) را انتخاب کنید. این قالب Langflow را همراه با Ollama روی همان ماشین بالا می‌آورد.

۲. دکمهٔ اجاره را بزنید و صبر کنید وضعیت ماشین «آماده» شود. چند دقیقه طول می‌کشد.

۳. در صفحهٔ ماشین، دکمهٔ «پنل ماشین» را بزنید تا رابط وب Langflow باز شود. دستور SSH آماده هم همان‌جاست؛ آن را کپی کنید و در ترمینال لپ‌تاپ اجرا کنید، چون در مرحلهٔ بعد لازمش دارید.

مرحلهٔ ۱: دانلود مدل‌ها در Ollama

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

ollama pull qwen2.5:7b
ollama pull bge-m3

بعد مطمئن شوید هر دو آماده‌اند:

ollama list

باید هر دو نام را در خروجی ببینید. اگر می‌خواهید ببینید Langflow به Ollama دسترسی دارد، این دستور فهرست مدل‌ها را به‌صورت JSON برمی‌گرداند:

curl http://127.0.0.1:11434/api/tags

مرحلهٔ ۲: ساخت جریان از روی قالب Vector Store RAG

در Langflow یک جریان (flow) تازه بسازید و از قالب‌های آماده Vector Store RAG را بردارید. این قالب دو بخش دارد:

  • جریان بارگذاری داده: فایل را می‌خواند، با Split Text تکه‌تکه می‌کند، با یک مدل embedding به بردار تبدیل می‌کند و در پایگاه برداری می‌گذارد.
  • جریان بازیابی: سؤال را از Chat Input می‌گیرد، تکه‌های مرتبط را از پایگاه برداری بیرون می‌کشد، با Prompt کنار سؤال می‌گذارد و به مدل زبانی می‌دهد.

قالب پیش‌فرض با مدل‌های OpenAI و پایگاه Astra DB ساخته شده که هر دو کلید API بیرونی می‌خواهند. ما همه را با نسخهٔ محلی عوض می‌کنیم.

جایگزین کردن embedding با Ollama

در هر دو بخش، جزء embedding را حذف کنید و به‌جایش Ollama Embeddings بگذارید. در فیلد Ollama Base URL بنویسید http://127.0.0.1:11434، دکمهٔ Refresh را بزنید و در Ollama Model مدل bge-m3 را انتخاب کنید. مهم: هر دو بخش باید دقیقاً یک مدل embedding داشته باشند؛ وگرنه بردار سؤال با بردار اسناد قابل مقایسه نیست.

جایگزین کردن پایگاه برداری با Chroma DB

دو جزء Astra DB را حذف کنید و در هر دو بخش Chroma DB بگذارید. در هر دو یک Collection Name یکسان بنویسید، مثلاً docs. Chroma روی خود ماشین اجرا می‌شود و حساب جداگانه‌ای نمی‌خواهد.

جایگزین کردن مدل زبانی با Ollama

در جریان بازیابی، جزء مدل زبانی را با Ollama عوض کنید. Base URL را http://127.0.0.1:11434 بگذارید و در Model Name گزینهٔ qwen2.5:7b را انتخاب کنید. خروجی Prompt را به ورودی Ollama، و خروجی Model Response را به Chat Output وصل کنید.

نوشتن Prompt فارسی

متن جزء Prompt را با چیزی شبیه این عوض کنید تا مدل فارسی جواب بدهد و از متن بیرون نزند:

فقط با استفاده از متن زیر به پرسش پاسخ بده. اگر پاسخ در متن نیست، بگو «در اسناد پیدا نشد».

متن:
{context}

پرسش:
{question}

پاسخ را به فارسی بنویس.

متغیرهای داخل آکولاد باید همان نام‌هایی باشند که در قالب اصلی به جزء Prompt وصل‌اند؛ اگر نامشان فرق داشت، همان‌ها را نگه دارید.

مرحلهٔ ۳: بارگذاری اسناد و پرسیدن سؤال

در جریان بارگذاری، روی جزء خواندن فایل بزنید و PDF خودتان را آپلود کنید. بعد دکمهٔ اجرای همان جزء پایگاه برداری (Chroma DB در بخش بارگذاری) را بزنید. برای یک PDF پنجاه‌صفحه‌ای، ساختن بردارها روی RTX 3060 معمولاً کمتر از یک دقیقه طول می‌کشد.

حالا دکمهٔ Playground را باز کنید و سؤال بپرسید: «مرخصی استحقاقی سالانه چند روز است؟». پاسخ باید از متن سند بیاید. اگر سؤالی بپرسید که در سند نیست، مدل باید بگوید پیدا نشد؛ این یعنی Prompt درست کار می‌کند.

برای بهتر شدن نتیجه، در جزء Split Text اندازهٔ تکه‌ها را امتحان کنید. تکه‌های خیلی کوچک جمله را نصفه می‌کنند و تکه‌های خیلی بزرگ اطلاعات نامرتبط را هم با خودشان می‌آورند.

اگر به مشکل خوردید

  • فهرست مدل‌ها در Langflow خالی است: آدرس Base URL را دوباره چک کنید و مطمئن شوید ollama list هر دو مدل را نشان می‌دهد. بعد دکمهٔ Refresh را بزنید.
  • خطای CUDA out of memory یا کندی شدید: مدل بزرگ‌تری از ظرفیت کارت انتخاب کرده‌اید. به qwen2.5:7b برگردید یا ماشینی با VRAM بیشتر بگیرید.
  • پاسخ‌ها ربطی به سند ندارند: معمولاً مدل embedding دو بخش یکی نیست، یا Collection Name فرق دارد. هر دو را یکسان کنید و اسناد را دوباره بارگذاری کنید.
  • متن فارسی PDF به‌هم‌ریخته خوانده می‌شود: بعضی PDFها متن واقعی ندارند و فقط عکس صفحه‌اند. نسخهٔ متنی (TXT یا DOCX) همان سند را امتحان کنید.
  • پنل ماشین باز نمی‌شود: چند دقیقه صبر کنید تا سرویس کامل بالا بیاید؛ اگر باز نشد، از دستور «تونل امن» در صفحهٔ ماشین استفاده کنید.

هزینه و صرفه‌جویی

بار اول، از اجاره تا اولین پاسخ، حدود ۴۵ دقیقه وقت می‌گیرد؛ دفعه‌های بعد کمتر. روی RTX 3060، در زمان نوشتن این مطلب، این یعنی حدود ۱۶ هزار تومان یا کمتر. هزینه دقیقه‌ای از کیف پول کم می‌شود، پس بعد از کار حتماً ماشین را متوقف کنید؛ ماشین متوقف‌شده هزینه ندارد.

دیسک ماشین با حذف آن پاک می‌شود. قبل از حذف، جریان Langflow را از منوی خود Langflow به‌صورت فایل JSON خروجی بگیرید و دانلود کنید تا دفعهٔ بعد فقط وارد کنید و اسناد را دوباره بارگذاری کنید.

قدم بعدی

اگر Ollama برایتان تازه است، اجرای مدل زبانی با Ollama روی GPU ابری پایه‌اش را توضیح می‌دهد. برای یک رابط چت کامل‌تر برای همکارانتان هم Open WebUI: چت‌بات هوش مصنوعی خصوصی روی GPU ابری را بخوانید. مستندات رسمی اجزای Ollama در Langflow هم این‌جاست.

پرسش‌های متداول

RAG بهتر است یا fine-tune مدل زبانی؟

برای پرسش‌وپاسخ روی اسنادی که مدام عوض می‌شوند، RAG ساده‌تر و ارزان‌تر است، چون با هر تغییر فقط فایل تازه را بارگذاری می‌کنید. fine-tune وقتی به کار می‌آید که بخواهید سبک نوشتن یا رفتار خود مدل را عوض کنید.

آیا Langflow برای RAG به برنامه‌نویسی نیاز دارد؟

نه. همه‌چیز با کشیدن و وصل کردن اجزا در رابط وب انجام می‌شود. فقط برای دانلود مدل‌ها دو دستور ساده در ترمینال لازم است.

آیا مدل زبانی محلی متن فارسی را می‌فهمد؟

مدل‌هایی مثل qwen2.5:7b فارسی را در حد قابل قبولی می‌فهمند و می‌نویسند، و bge-m3 برای embedding چندزبانه ساخته شده است. کیفیت را حتماً با چند سؤال از اسناد خودتان بسنجید.

برای RAG چقدر VRAM لازم است؟

با یک مدل ۷B کوانتیزه و یک مدل embedding، حدود ۸ گیگابایت کافی است؛ پس یک کارت ۱۲ گیگابایتی مثل RTX 3060 جواب می‌دهد. برای مدل‌های بزرگ‌تر به ۲۴ گیگابایت بروید.

اسناد من روی ماشین امن می‌ماند؟

اسناد و مدل‌ها روی ماشینی می‌مانند که خودتان اجاره کرده‌اید و برای پاسخ دادن به هیچ سرویس هوش مصنوعی بیرونی فرستاده نمی‌شوند. با حذف ماشین، دیسک و همهٔ فایل‌ها پاک می‌شوند.

تصویر کاور: «Labrador Retriever Nessie Water» اثر Boaworm، از ویکی‌مدیا کامنز، لایسنس CC BY 3.0.