Local AI

ساخت یک پایپ‌لاین RAG محلی با Ollama و LangChain برای بازیابی دانش سازمانی در زمان واقعی

در عصری که حریم داده‌ها و تأخیر کم اهمیت‌ترین عوامل هستند، سازمان‌ها به‌طور فزاینده‌ای به دنبال دوری از مدل‌های زبانی بزرگ (LLM) وابسته به ابر هستند. با میزبانی مدل‌ها به صورت محلی با استفاده از Ollama و هماهنگ‌سازی آن‌ها با LangChain، توسعه‌دهندگان می‌توانند یک پایپ‌لاین تولید تقویت‌شده با بازیابی (RAG) بسازند که داده‌های حساس را در داخل دیوار آتش سازمان نگه می‌دارد. این رویکرد نه تنها امنیت را افزایش می‌دهد، بلکه هزینه‌های استنتاج و تأخیر را نیز کاهش می‌دهد.

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

چرا باید به صورت محلی عمل کنیم؟

APIهای مبتنی بر ابر برای LLMها راحتی را ارائه می‌دهند، اما برای موارد استفاده سازمانی با معایب قابل توجهی همراه هستند. نگرانی‌های مربوط به عبور داده‌ها از مرزها، هزینه‌های غیرقابل پیش‌بینی API و تأخیر شبکه می‌تواند برنامه‌های زمان واقعی را مختل کند. استنتاج محلی این مشکلات را با موارد زیر حل می‌کند:

  • حاکمیت داده: هیچ داده سندی خام از سرور شما خارج نمی‌شود.
  • کارایی هزینه: هیچ هزینه‌ای بر اساس توکن وجود ندارد؛ شما فقط هزینه برق و سخت‌افزار را پرداخت می‌کنید.
  • شخصی‌سازی: تنظیم دقیق آسان یا گسترش پنجره زمینه با استفاده از سخت‌افزار محلی.

نمای کلی معماری

یک پایپ‌لاین RAG محلی معمولاً شامل چهار مرحله اصلی است: جذب، نگاشت برداری، ذخیره‌سازی و بازیابی همراه با تولید. برای این آموزش، ما از Mistral از طریق Ollama برای تولید و nomic-embed-text برای نگاشت برداری استفاده خواهیم کرد که هر دو برای اجرای محلی بهینه شده‌اند.

راه‌اندازی محیط

قبل از غوطه‌ور شدن در کد، مطمئن شوید که Ollama نصب و در حال اجرا است. مدل‌های لازم را دریافت کنید:

ollama pull mistral
ollama pull nomic-embed-text

سپس، کتابخانه‌های مورد نیاز پایتون را نصب کنید:

pip install langchain langchain-community langchain-huggingface unstructured

پیاده‌سازی زنجیره RAG

هسته راه‌حل ما از SimplesLoader LangChain برای جذب اسناد و OllamaEmbeddings برای برداری کردن متن استفاده می‌کند. اسکریپت زیر یک محصول حداقلی قابل ارائه (MVP) برای پرس‌وجو از یک سند PDF محلی را نشان می‌دهد.

from langchain_community.document_loaders import UnstructuredFileLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_community.embeddings import OllamaEmbeddings
from langchain_community.vectorstores import FAISS
from langchain_community.llms import Ollama
from langchain.chains import RetrievalQA
import os

# 1. بارگذاری و تکه‌تکه کردن اسناد
loader = UnstructuredFileLoader("enterprise_policy.pdf")
documents = loader.load()

text_splitter = RecursiveCharacterTextSplitter(
    chunk_size=1000, 
    chunk_overlap=200
)
docs = text_splitter.split_documents(documents)

# 2. تولید نگاشت‌های برداری به صورت محلی
embeddings = Ollama(model="nomic-embed-text")

# 3. ذخیره در پایگاه داده برداری (FAISS)
db = FAISS.from_documents(docs, embeddings)

# 4. راه‌اندازی LLM و زنجیره بازیابی
llm = Ollama(model="mistral", temperature=0.1)
qa_chain = RetrievalQA.from_chain_type(
    llm=llm, 
    chain_type="stuff", 
    retriever=db.as_retriever(),
    return_source_documents=True
)

# 5. پرس‌وجو از سیستم
query = "سیاست شرکت در مورد کار از راه دور چیست؟"
result = qa_chain.invoke({"query": query})
print(result['result'])

ملاحظات عملی برای تولید

در حالی که اسکریپت بالا برای نمایش عملکردی است، سیستم‌های درجه تولید به لایه‌های اضافی نیاز دارند. در نظر بگیرید که از LangServe LangChain برای استقرار این پایپ‌لاین به عنوان یک REST API استفاده کنید، تا به برنامه‌های فرانت‌اند شما اجازه دهد به صورت ناهمگام با سیستم RAG تعامل داشته باشند. دوم، مراحل مرتب‌سازی مجدد را پیاده‌سازی کنید تا دقت را بهبود بخشید. FAISS بازیابی سریع را فراهم می‌کند، اما یک مدل متقاطع-انکودر می‌تواند نتایج را برای ارتباط بهتر مجدداً امتیازدهی کند قبل از اینکه آن‌ها را به LLM منتقل کند.

در نهایت، استفاده از GPU خود را نظارت کنید. استنتاج محلی به سخت‌افزار نیاز دارد. استفاده از ابزارهایی مانند nvtop می‌تواند به شما در بهینه‌سازی اندازه دسته‌ها و محدودیت‌های همزمانی برای جلوگیری از بار بیش از حد سیستم در اوج استفاده سازمانی کمک کند.

نتیجه‌گیری

ساخت یک پایپ‌لاین RAG محلی با Ollama و LangChain به سازمان‌ها قدرت می‌دهد تا از پتانسیل هوش مصنوعی بدون سازش بر سر امنیت یا سرعت بهره‌مند شوند. با نگه داشتن داده‌ها به صورت محلی، شما ریسک را کاهش می‌دهید و در عین حال انعطاف‌پذیری لازم برای تطبیق مدل‌های خود با نیازهای خاص حوزه را حفظ می‌کنید. با بهبود مداوم عملکرد مدل‌های محلی، این معماری به استاندارد سیستم‌های بازیابی دانش امن و زمان واقعی تبدیل خواهد شد.

Share: