Retrieval-Augmented Generation (RAG)

استدلال چندمرحله‌ای در RAG: پیاده‌سازی بازیابی زنجیره‌فکری برای پرس‌وجوهای پیچیده سازمانی

تولید تقویت‌شده با بازیابی (RAG) به معماری استاندارد برای برنامه‌های هوش مصنوعی سازمانی تبدیل شده است، که شکاف بین دانش ثابت مدل‌های زبانی بزرگ (LLM) و داده‌های داخلی پویا را پر می‌کند. با این حال، پایپ‌لاین‌های استاندارد RAG اغلب در مواجهه با پرس‌وجوهای پیچیده‌ای که نیاز به تلفیق اطلاعات از چندین سند پراکنده دارند، دچار مشکل می‌شوند. یک جستجوی برداری واحد برای پاسخ به پرسش‌هایی مانند «درآمد فصل سوم محصول A را با هزینه‌های عملیاتی منطقه B مقایسه کنید، با در نظر گرفتن تأخیرهای اخیر در زنجیره تأمین» کافی نیست.

اینجاست که بازیابی زنجیره‌فکری (CoT Retrieval) وارد عمل می‌شود. با تجزیه یک پرس‌وجوی پیچیده به دنباله‌ای از زیرپرس‌وجوهای ساده‌تر و قابل بازیابی، می‌توانیم فرآیند بازیابی را از طریق یک زنجیره استدلال منطقی هدایت کنیم که دقت و مرتبط بودن نتایج را به طور قابل توجهی بهبود می‌بخشد.

محدودیت‌های بازیابی ساده

در یک پیکربندی RAG ساده، پرس‌وجوی کاربر به یک فضای برداری تبدیل (امبدد) می‌شود و k سند مشابه‌ترین بازیابی می‌شوند. این رویکرد فرض می‌کند که پاسخ در یک خوشه معنایی واحد وجود دارد. برای وظایف استدلال چندمرحله‌ای، این فرضیه فرو می‌ریزد. اگر سوالی نیاز به دانستن این داشته باشد که «شرکت X شرکت Y را خریداری کرد» و «شرکت Y بدهی ۵ میلیون دلاری دارد»، یک مرحله بازیابی واحد ممکن است یکی از این حقایق کلیدی را از قلم بیندازد، اگر این دو واقعیت در فضای برداری همبستگی بالایی نداشته باشند.

پیاده‌سازی بازیابی مبتنی بر زنجیره‌فکری

برای پیاده‌سازی استدلال چندمرحله‌ای، به لایه‌ای از ارکستراسیون نیاز داریم که به عنوان «استدلال‌گر» عمل کند. این عامل (Agent) از LLM برای تجزیه سوال اصلی به زیرسوال‌ها استفاده می‌کند، پاسخ‌ها را برای هر کدام بازیابی می‌کند و سپس پاسخ نهایی را سنتز می‌کند. در زیر یک پیاده‌سازی عملی با استفاده از Python و چارچوب LangChain ارائه شده است که رویکردی ساختاریافته به این مشکل را نشان می‌دهد.

from langchain.agents import Tool, AgentExecutor
from langchain.utilities import SerpAPIWrapper
from langchain.chains import LLMMathChain
from langchain.chat_models import ChatOpenAI
from langchain.retrievers.multi_query import MultiQueryRetriever

# ابزارهای مورد نیاز برای عامل خود را تعریف کنید
# ابزار ۱: بازیاب سند برای جستجوی حقایق
def search_documents(query: str) -> str:
    # در یک سناریوی واقعی، این به پایگاه داده برداری شما متصل می‌شود (مانند Pinecone، Milvus)
    results = vector_db.similarity_search(query, k=5)
    return "\n".join([doc.page_content for doc in results])

# ابزار ۲: ماشین‌حساب عددی برای تجمیع‌های پیچیده
llm_math = LLMMathChain(llm=ChatOpenAI(temperature=0))

# لیست ابزارها را تعریف کنید
tools = [
    Tool(
        name="DocumentSearch",
        func=search_documents,
        description="برای جستجو در اسناد داخلی شرکت، گزارش‌ها و ایمیل‌ها مفید است."
    )
]

# عامل LLM را مقداردهی اولیه کنید
llm = ChatOpenAI(model="gpt-4", temperature=0)
agent = AgentExecutor.from_agent_and_tools(
    agent=create_openai_functions_agent(llm, tools),
    tools=tools,
    verbose=True
)

# اجرای یک پرس‌وجوی چندمرحله‌ای پیچیده
complex_query = "کل درآمد منطقه APAC در فصل سوم چه بود و چگونه با بودجه تعیین شده توسط مدیر مالی مقایسه می‌شود؟"

try:
    response = agent.run(complex_query)
    print(response)
except Exception as e:
    print(f"خطا در زنجیره استدلال: {e}")

بهترین شیوه‌ها برای استقرار سازمانی

  1. مدیریت پنجره زمینه (Context Window): همان‌طور که زنجیره فکری رشد می‌کند، زمینه نیز افزایش می‌یابد. از تکنیک‌های خلاصه‌سازی برای فشرده‌سازی نتایج بازیابی میانی قبل از انتقال آن‌ها به مرحله بعد استفاده کنید.
  2. جستجوی ترکیبی: جستجوی برداری را با جستجوی مبتنی بر کلمات کلیدی BM25 ترکیب کنید. در مثال بالا، اصطلاحات مالی خاص مانند «فصل سوم» یا «APAC» ممکن است بهتر توسط جستجوی کلمات کلیدی نسبت به معنای برداری پوشش داده شوند.
  3. حلقه‌های بازخورد: یک سیستم انسان در حلقه (Human-in-the-loop) پیاده‌سازی کنید که در آن توسعه‌دهندگان بتوانند «مراحل فکری» طی شده توسط عامل را بررسی کنند. این امر امکان تنظیم دقیق دستورات تجزیه را فراهم می‌کند.

نتیجه‌گیری

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

Share: