نسخه‌های پایهٔ RAG هنگام پاسخ‌دادن به پرسش‌های چندپله‌ای معمولاً ناکافی‌اند؛ آنها فرض می‌کنند «شباهت برداری = مرتبط‌بودن». وقتی پاسخ نیاز به اتصال میان موجودیت‌های جداگانه دارد، قطعات متن تکه‌تکه‌شده معمولاً همهٔ مدرک‌های لازم را هم‌زمان در اختیار ندارند و بازیابی سادهٔ برداری از یافتن مسیرهای استدلالی ناتوان است.

چرا RAG ساده در پرسش‌های چندپله‌ای شکست می‌خورد

مثال عملی: دو بخش از قراردادها یا رکوردهای شرکتی در پایگاه برداری ذخیره شده‌اند:

  • بخش 1: "Acme Corp acquired BetaTech in 2022."
  • بخش 2: "Sarah Connor was appointed CEO of BetaTech in 2023."

سؤال: «چه کسی رهبری شرکتی را بر عهده دارد که Acme Corp آن را خریداری کرده است؟»

جستجوی برداری صرف معمولاً هر بخش را جداگانه از نظر شباهت می‌سنجد؛ چون نام «Sarah Connor» یا عبارت "CEO of BetaTech" لزوماً از منظر برداری به‌خوبی با "Acme Corp" هم‌وزن نیست، بخش 2 ممکن است شناسایی نشود یا وزن کافی نگیرد. در نتیجه مدل به اطلاعات ترکیبیِ لازم دسترسی پیدا نمی‌کند مگر اینکه هر دو نکته در یک تکهٔ متن حاضر باشند.

نیاز اصلی: استدلال ساخت‌یافته با نمودار دانش

پرسش‌های چندپله‌ای نیازمند درک ساختار روابط میان موجودیت‌ها هستند: مثلاً (Acme Corp) -[ACQUIRED]-> (BetaTech) و (Sarah Connor) -[LEADS]-> (BetaTech). ترکیب این یال‌ها یک مسیر استدلالی می‌سازد که بازیابی برداری ساده قادر به کشف آن نیست.

GraphRAG چیست و چگونه عمل می‌کند

GraphRAG تلفیقی از نمودار دانش و جستجوی برداری است. جریان کلی کار به این شکل است:

  • استخراج گره‌ها (موجودیت‌ها) و یال‌ها (روابط) از اسناد و ذخیرهٔ آنها به‌صورت نمودار.
  • جستجوی برداری برای یافتن نقطهٔ شروع پرسش (start node) و تعیین محل آغاز استدلال.
  • پیمایش ساختاری نمودار برای استخراج زیرنمودارِ مرتبط با مسیر استدلالی.
  • تحویل زیرنمودارِ مسیریافته به مدل‌زبان برای تولید پاسخِ دقیق و مبتنی بر ساختار.

منبع پایه دربارهٔ نمودارهای دانش: ویکی‌پدیا — نمودار دانش.

دلایل اثربخشی

  • روابط میان موجودیت‌ها مسیرهای استدلالی صریح می‌سازند و گذر از گام‌های زنجیره‌ای را ممکن می‌کنند.
  • زیرنمودارهای مرتبط وظیفهٔ جمع‌آوری و خلاصه‌سازی شواهد را بر عهده می‌گیرند و بار پردازشی مدل را کاهش می‌دهند.
  • اسکیمای ساختاری و اعتبارسنجی روابط امکان تضمین کیفیت و سازگاری داده‌ها را فراهم می‌کند.
نمودار دانش و گردش‌کار GraphRAG

ابزارها و فریم‌ورک‌ها

محصولاتی مانند Neo4j و پروژه‌هایی در اکوسیستم آن (مثلاً neo4j-graphrag) پیاده‌سازی GraphRAG را تسهیل می‌کنند. برای embeddings و LLM معمولاً از سرویس‌هایی مانند OpenAI استفاده می‌شود.

مراحل عملی برای ساخت خط‌لولهٔ GraphRAG با پایتون

گام 1 — نصب وابستگی‌ها

ابتدا Neo4j را آماده کنید و بسته‌های زیر را نصب نمایید:

pip install neo4j neo4j-graphrag openai python-dotenv

گام 2 — اتصال و مدیریت نرخ درخواست‌ها

استخراج گره‌ها و روابط ممکن است درخواست‌های متعدد و پرهزینه‌ای به مدل‌زبان ایجاد کند؛ مدیریت اعتبارنامه‌ها و پیاده‌سازی یک مکانیزم محدودیت نرخ و بازتلاش (retry) ضروری است.

import os
from neo4j import GraphDatabase
from neo4j_graphrag.llm import OpenAILLM
from neo4j_graphrag.embeddings import OpenAIEmbeddings
from neo4j_graphrag.utils.rate_limit import RetryRateLimitHandler

neo4j_uri = os.environ.get("NEO4J_URI")
neo4j_user = os.environ.get("NEO4J_USERNAME")
neo4j_password = os.environ.get("NEO4J_PASSWORD")

if not all([neo4j_uri, neo4j_user, neo4j_password]):
    raise ValueError("Missing required Neo4j environment variables.")

driver = GraphDatabase.driver(neo4j_uri, auth=(neo4j_user, neo4j_password))
driver.verify_connectivity()

llm = OpenAILLM(model_name="gpt-4o", model_params={"temperature": 0}, rate_limit_handler=RetryRateLimitHandler(max_attempts=5, min_wait=2.0))
embedder = OpenAIEmbeddings(model="text-embedding-3-small")

گام 3 — استخراج موجودیت‌ها و اعمال اسکیمای نمودار

بدون اسکیمای مشخص، نمودار به رویه‌ای نامنظم تبدیل می‌شود. از مدل‌زبان خروجی را در قالب ساخت‌یافته بخواهید و سپس گره‌ها و یال‌ها را در Neo4j وارد کنید. نمونهٔ سادهٔ اسکیمای پیشنهادی:

  • Node: Company {name, founded, industry}
  • Node: Person {name, role, start_date}
  • Relationship: (Person)-[LEADS]->(Company)
  • Relationship: (Company)-[ACQUIRED]->(Company)

گام 4 — جستجو، شروع از گره و پیمایش

جستجوی برداری نقطهٔ شروع پرسش را مشخص می‌کند؛ سپس با پرس‌وجوی Cypher زیرنمودار مرتبط را برداشت کنید و خروجیِ پیمایش‌شده را به مدل‌زبان بدهید تا استدلال نهایی تولید شود. نمونهٔ سادهٔ Cypher:

MATCH (a:Company {name: 'Acme Corp'})-[:ACQUIRED]->(b:Company)<-[:LEADS]-(p:Person)
RETURN p.name, b.name

نکات عملی و هزینه‌ها

  • استخراج موجودیت‌ها برای هر سند هزینهٔ API دارد؛ با batching و نمونه‌گیری می‌توان بار و هزینه را کاهش داد.
  • تعریف اسکیمای نسخه‌پذیر (versioned schema) برای سازگاری و پایداری طولانی‌مدت ضروری است.
  • ترکیب جستجوی برداری برای یافتن نقطهٔ شروع و پیمایش گراف برای کشف اتصالات، رویکرد مؤثری است؛ تکیهٔ صرف به یکی از روش‌ها کافی نیست.

گام‌های بعدی برای تیم‌های مهندسی

  1. یک مجموعهٔ کوچک و کنترل‌شده از اسناد دارای روابط را دستی برچسب‌گذاری و اسکیمای اولیه را آزمایش کنید.
  2. استخراج را با مکانیزم‌های نرخ‌محدودکننده و استراتژی‌های بک‌آف پیاده‌سازی کنید تا هزینه‌ها کنترل شود.
  3. معیارهای کیفیت شامل دقت مسیرهای پیمایش‌شده، جامعیت مدارک و میزان اعتماد به منابع را تعریف و اندازه‌گیری کنید.

چشم‌انداز

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