أصبح الاسترجاع المعزز بالتوليد (RAG) البنية القياسية لتطبيقات الذكاء الاصطناعي المؤسسي، مما يسد الفجوة بين معرفة نماذج اللغات الكبيرة الثابتة والبيانات الداخلية الديناميكية. ومع ذلك، غالباً ما تفشل خطوط أنابيب RAG القياسية عند مواجهة استعلامات معقدة تتطلب تركيب المعلومات من مستندات متعددة ومتفرقة. لا يكفي إجراء بحث وحيد باستخدام المتجهات للإجابة على أسئلة مثل: "قارن إيرادات الربع الثالث للمنتج أ مع التكاليف التشغيلية للمنطقة ب، مع الأخذ في الاعتبار تأخيرات سلسلة التوريد الأخيرة."
هنا يأتي دور استرجاع سلسلة التفكير (CoT). من خلال تفكيك الاستعلام المعقد إلى تسلسل من الاستعلامات الفرعية الأبسط والقابلة للاسترجاع، يمكننا توجيه عملية الاسترجاع عبر سلسلة من الاستدلال المنطقي، مما يحسن الدقة والصلة بشكل كبير.
قيود الاسترجاع البسيط
في إعداد RAG البسيط، يتم تضمين استعلام المستخدم في فضاء متجهي، ويتم استرجاع المستندات الأكثر تشابهاً من بين أفضل k نتيجة. يفترض هذا النهج أن الإجابة موجودة في عنقود دلالي واحد. بالنسبة لمهام الاستدلال متعدد الخطوات، ينهار هذا الافتراض. إذا كانت السؤال يتطلب معرفة أن "الشركة أ استحوذت على الشركة ب" وأن "الشركة ب لديها دين بقيمة 5 ملايين دولار"، فقد يفوت خطوة استرجاع واحدة إحدى هذه الحقائق الحاسمة إذا لم تكن مترابطة بشدة في الفضاء المتجهي.
تنفيذ الاسترجاع المدعوم بسلسلة التفكير
لتطبيق الاستدلال متعدد الخطوات، نحتاج إلى طبقة توجيه تعمل كـ "مستدل". يستخدم هذا الوكيل نموذج اللغة الكبير (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
# Define the tools for our agent
# Tool 1: Document Retriever for factual lookup
def search_documents(query: str) -> str:
# In a real scenario, this connects to your vector DB (e.g., Pinecone, Milvus)
results = vector_db.similarity_search(query, k=5)
return "\n".join([doc.page_content for doc in results])
# Tool 2: Numerical Calculator for complex aggregations
llm_math = LLMMathChain(llm=ChatOpenAI(temperature=0))
# Define the tools list
tools = [
Tool(
name="DocumentSearch",
func=search_documents,
description="Useful for searching internal company documents, reports, and emails."
)
]
# Initialize the LLM Agent
llm = ChatOpenAI(model="gpt-4", temperature=0)
agent = AgentExecutor.from_agent_and_tools(
agent=create_openai_functions_agent(llm, tools),
tools=tools,
verbose=True
)
# Execute a complex multi-step query
complex_query = "What was the total revenue of the APAC region in Q3, and how does it compare to the budget set by the CFO?"
try:
response = agent.run(complex_query)
print(response)
except Exception as e:
print(f"Error in reasoning chain: {e}")
أفضل الممارسات للنشر المؤسسي
- إدارة نافذة السياق: مع نمو سلسلة التفكير، يزداد السياق أيضاً. استخدم تقنيات التلخيص لضغط نتائج الاسترجاع الوسيطة قبل تمريرها إلى الخطوة التالية.
- البحث الهجين: اجمع بين البحث باستخدام المتجهات والبحث القائم على الكلمات المفتاحية BM25. في المثال أعلاه، قد يتم التقاط المصطلحات المالية المحددة مثل "الربع الثالث" أو "منطقة آسيا والمحيط الهادئ" بشكل أفضل من خلال البحث بالكلمات المفتاحية بدلاً من الدلالات المتجهية.
- حلقات التغذية الراجعة: قم بتنفيذ نظام يتضمن تدخلاً بشرياً حيث يمكن للمطورين مراجعة "خطوات التفكير" التي اتخذها الوكيل. يتيح ذلك ضبط نصوص تفكيك الأسئلة بشكل دقيق.
الخاتمة
يحول تنفيذ استرجاع سلسلة التفكير RAG من مجرد باحث بسيط عن المستندات إلى محرك استدلال حقيقي. وعلى الرغم من أنه يقدم تأخيراً إضافياً وتعقيداً، فإن المقايضة مبررة لتطبيقات المؤسسات حيث تكون الدقة والقابلية للتفسير أمراً بالغ الأهمية. من خلال تقسيم المشكلات المعقدة إلى خطوات قابلة للاسترجاع، يمكن للمنظمات إطلاق العنان للإمكانات الكاملة لبياناتها الخاصة، وتوفير مساعدين ذكيين يفهمون حقاً دقة العمليات التجارية.