مقدمه ای بر RAG: اصول اولیه تسلط. 1 خط لوله Rag محلی خود را بسازید (بدون ابر ، بدون کلید API)


نویسنده (ها): طاها آزیزی

در ابتدا منتشر شده در به سمت هوش مصنوعیبشر

قسمت اول معرفی مینی سریال برای RAG
یک راهنمای گام به گام برای اجرای نسل بازیابی به طور کامل آفلاین با Ollama ، Chromadb و Sentencetransformers.

مقدمه ای بر RAG: اصول اولیه تسلط. 1 خط لوله Rag محلی خود را بسازید (بدون ابر ، بدون کلید API)مقدمه ای بر RAG: اصول اولیه تسلط. 1 خط لوله Rag محلی خود را بسازید (بدون ابر ، بدون کلید API)

مقدمه

مدل های بزرگ زبان (LLMS) قدرتمند هستند ، اما آنها با دو محدودیت بزرگ همراه هستند:

  1. آنها غالباً “توهم” می شوند – پاسخ هایی را ایجاد می کنند که صحیح به نظر می رسند اما در واقع اشتباه هستند.
  2. دانش آنها در زمان آموزش یخ زده است.
  3. پاسخ متناسب با دانش عمومی مبتنی بر یک دانش خاص نیست.

بازیابی تولید شده توسط نسل (RAG) با دسترسی به مدل ها به یک پایگاه دانش خارجی ، همه مشکلات فوق را حل می کند. RAG به جای تکیه فقط به آنچه که این مدل به خاطر سپرده شده است ، حقایق مربوطه را از اسناد بازیابی می کند و آنها را به فوری تزریق می کند.

در ابتدا توسط Facebook AI Research در سال 2020 پیشنهاد شده است [1]، Rag به سرعت به یک تکنیک اصلی در تولید سیستم های هوش مصنوعی تبدیل شده است. Openai از آن در استقرار شرکت های چتپ استفاده می کند ، Cohere بازیابی را در API های خود ایجاد می کند ، و بسیاری از استارتاپ ها برای ارائه برنامه های AI قابل اعتماد به آن اعتماد می کنند.

در این قسمت اول من مینی سریال روی پارچه، من به شما نشان می دهم که چگونه:

  • اسناد را در یک پایگاه داده بردار با استفاده از کروما
  • تعبیه شده با فرستنده کننده
  • با استفاده از LLM محلی اجرا کنید اولاما
  • آنها را در یک خط لوله Rag Offline کار کنید

در پایان ، شما یک دستیار خصوصی و محلی خواهید داشت که می تواند با دانش مبتنی بر سؤالات پاسخ دهد – بدون ابر ، کلیدهای API و بدون هزینه.

نظریه: چگونه RAG کار می کند

در هسته اصلی آن ، Rag دو ایده کلیدی را ترکیب می کند: بازیابی وت تولیدبشر

  1. مصرف سند
    شما خود را بارگیری می کنید مجموعه داده (متن ، PDF ، CSV و غیره) و آن را به بخش های قابل کنترل (به عنوان مثال ، 500 کاراکتر) تقسیم کنید.
  2. نسل
    هر قطعه با استفاده از یک مدل پیش ساخته به یک بردار با ابعاد بالا (تعبیه) تبدیل می شود. تعبیه ها معنی معنایی را ضبط می کنند – تکه هایی درباره “پانل های خورشیدی” و “مزارع بادی” در فضای بردار به هم نزدیک خواهند بود.
  3. ذخیره پایگاه داده بردار
    این تعبیه ها در یک پایگاه داده بهینه شده برای جستجوی شباهت ذخیره می شوند (به عنوان مثال ، Chroma ، Faiss ، Pinecone).
  4. پرس و جو + بازیابی
    وقتی کاربر سؤالی می پرسد ، در یک بردار نیز تعبیه شده است. این سیستم از لحاظ معنایی مشابه از پایگاه داده بازیابی می کند.
  5. نسل تقویت شده
    تکه های برگشتی به سریع LLM اضافه می شوند و پاسخ آن را در دانش خارجی به جای مجموعه آموزش استاتیک آن پایه گذاری می کنند.

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

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

این رویکرد در چندین حوزه تأیید شده است ، از پاسخ به سؤال دامنه باز [1]، به جستجوی سازمانی [2]، به حمایت از تصمیم بالینی [3]بشر

به طور خلاصه: RAG LLM شما را باهوش تر ، ایمن تر و مفیدتر می کند.

خط لوله پارچه ای ساده

راه اندازی

ما استفاده خواهیم کرد:

  • اولاما – برای اجرای LLM مانند mistral محلی
  • فرستنده کننده – برای جاسازی متن ما.
  • کرومادب – برای ذخیره و جستجوی تعبیه ها.

الزامات:

  • پایتون 3.10+
  • کارت گرافیک توانمند – NVIDIA RTX 4060 GPU یا بالاتر (cuda نصب شده)
  • 32+ گیگابایت رم

وابستگی ها را نصب کنید:

pip install chromadb sentence-transformers ollama

Ollama را نصب کنید و یک مدل را بکشید:

ollama pull mistral

کد گام به گام

مرحله 1 اسناد را بارگیری کنید

ما از یک ساده استفاده خواهیم کرد .txt پرونده برای این نسخه ی نمایشی.

# load_docs.py
from pathlib import Path

def load_text_files(folder_path):
texts = []
for file in Path(folder_path).glob("*.txt"):
with open(file, "r", encoding="utf-8") as f:
texts.append(f.read())
return texts

docs = load_text_files("./data")
print(f"Loaded {len(docs)} documents.")

مرحله 2 متن تکه

# chunking.py
def chunk_text(text, chunk_size=500, overlap=50):
chunks = []
start = 0
while start len
(text):
end = min(start + chunk_size, len(text))
chunks.append(text[start:end])
start += chunk_size - overlap
return chunks

all_chunks = []
for doc in docs:
all_chunks.extend(chunk_text(doc))
print(f"Total chunks: {len(all_chunks)}")

مرحله 3. ایجاد تعبیه

ما استفاده خواهیم کرد all-MiniLM-L6-v2 برای سریع ، GPUتعبیه شده های مجلل.

# embeddings.py
from sentence_transformers import SentenceTransformer

embedder = SentenceTransformer("sentence-transformers/all-MiniLM-L6-v2")
embeddings = embedder.encode(all_chunks, convert_to_numpy=True, show_progress_bar=True)
print(f"Created embeddings with shape: {embeddings.shape}")

مرحله 4. فروشگاه در Chroma

# store.py
import chromadb
client = chromadb.Client()

collection = client.create_collection(name="local_rag")
for i, chunk in enumerate(all_chunks):
collection.add(
ids=[f"chunk_{i}"],
documents=[chunk],
embeddings=[embeddings[i]]
)
print("Chunks stored in Chroma.")

مرحله 5. پرس و جو + بازیابی

# query.py
query = "What does the document say about renewable energy?"
query_embedding = embedder.encode([query], convert_to_numpy=True)[0]
results = collection.query(
query_embeddings=[query_embedding],
n_results=3
)

for i, doc in enumerate(results["documents"][0]):
print(f"Result {i+1}: {doc}\n")

مرحله 6. پاسخ با اولاما ایجاد کنید

اکنون زمینه بازیابی شده را به LLM ارسال می کنیم.

# rag.py
import subprocess

context = "\n".join(results["documents"][0])
prompt = f"Answer the question using only the following context:\n{context}\n\nQuestion: {query}\nAnswer:"
ollama_cmd = ["ollama", "run", "mistral", prompt] #or your specific model
response = subprocess.run(ollama_cmd, capture_output=True, text=True)
print("LLM Response:\n", response.stdout)

اسکریپت گردش کار کامل

می توانید همه مراحل را در یک ادغام کنید rag_basic.py پرونده بنابراین می توانید اجرا کنید:

#refer to the github repository for the complete execution
python rag_basic.py

خروجی مورد انتظار

Result 1: Renewable energy sources such as solar and wind...
Result 2: The government plans to expand green infrastructure...
Result 3: A report on renewable adoption in rural areas...

LLM Response:
Renewable energy sources, particularly solar and wind, are being prioritized...

نتیجه گیری و مراحل بعدی

تبریک می گویم – شما اکنون یک سیستم RAG کاملاً آفلاین در حال اجرا روی دستگاه خود هستید. شما می توانید:

  • اسناد بیشتری را اضافه کنید
  • آزمایش با مدل های مختلف تعبیه شده
  • مبادله در سایر LLM های Ollama

در قسمت 2 این سریال، من شیرجه می زنم دستمال ترکیبی -ترکیب جستجوی معنایی با BM25 مبتنی بر کلمه کلیدی برای بازیابی دقیق تر.

💬 من دوست دارم بشنوم که چگونه با RAG آزمایش می کنید. با چه چالش هایی روبرو شده اید؟ تجربیات خود را در نظرات به اشتراک بگذارید – و مرا دنبال کن برای گرفتن مقاله بعدی در این سری.

منابع

[1] پاتریک لوئیس ، ایتان پرز ، الکساندرا پیکتوس و همکاران ، بازیابی نسل آگوست برای دانش فشرده NLP وظایف (2020) ، Neurips.
[2] جی آلامار ، نسل بازیابی مصور (2023) ، وبلاگ Cohere.
[3] Openai ، کاهش توهم در LLMS با نسل بازیابی (2023) ، تحقیقات OpenAi.

مخزن GitHub: https://github.com/taha-azizi/rag

تمام تصاویر توسط نویسنده با استفاده از ابزارهای AI تولید شده است.

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



منبع: https://towardsai.net/p/artificial-intelligence/introduction-to-rag-basics-to-mastery-1-build-your-own-local-rag-pipeline-no-cloud-no-api-keys