وكيل RAG: ما وراء Chatbots البسيطة
الكلمة الطنانة "عميل الذكاء الاصطناعي" موجودة في كل مكان. ولكن ماذا يعني ذلك في الواقع، ولماذا يجب أن تهتم؟
إن روبوتات الدردشة البسيطة التي تستخدم RAG (جيل الاسترجاع المعزز) الأساسي محدودة: فهي تجيب على الأسئلة الثابتة من قاعدة معرفية ثابتة. ولا يمكنهم التفكير عبر مصادر متعددة، أو التخطيط لسلسلة من الإجراءات، أو تصحيح أنفسهم عندما يحدث خطأ ما.
** وكيل RAG ** يغير ذلك. إنه يمنح طلاب LLM القدرة على التفكير، والتخطيط، والاسترجاع، والتصرف، والتصحيح الذاتي — مما يجعلهم قادرين على التعامل مع سير العمل المعقد ومتعدد الخطوات الذي يتجاوز بكثير روبوتات الأسئلة الشائعة.
هذه المقالة هي دليلك العملي لبناء وكلاء الذكاء الاصطناعي الذين يعملون بالفعل في الإنتاج.
Table of Contents
- لماذا يفشل RAG البسيط
- بنية RAG للوكيل
- اللبنات الأساسية: الأطر والأدوات
- مثال كامل: وكيل دعم العملاء
- الأنماط المتقدمة
- قائمة التحقق من جاهزية الإنتاج
- متى لا تستخدم الوكلاء
- الخلاصة
- الوجبات السريعة الرئيسية
- هل تحتاج إلى مساعدة وكلاء البناء؟
لماذا يفشل RAG البسيط
!Agentic RAG system architecture: retrieval, reasoning, action, and memory components
تعمل RAG الأساسية على النحو التالي:
- يطرح المستخدم سؤالاً
- يقوم النظام باسترداد الوثائق ذات الصلة من قاعدة بيانات المتجهات
- تقوم LLM بإنشاء إجابة بناءً على تلك المستندات
- إجابة العودة
إنه أمر رائع بالنسبة للأسئلة الشائعة، ولكنه هش بالنسبة لأي شيء يتطلب:
- استدلال متعدد الخطوات: "ما هو أفضل مزود سحابي لتطبيق بث الفيديو الذي يحتاج أيضًا إلى تدريب على التعلم الآلي والامتثال للقانون العام لحماية البيانات؟" يتطلب مقارنة AWS وGCP وAzure عبر ثلاثة أبعاد.
- استخدام الأداة: "احجز لي أرخص رحلة طيران ذهابًا وإيابًا إلى طوكيو الأسبوع المقبل وتصل قبل الساعة 10 صباحًا وتحتوي على مقعد بجانب النافذة." يحتاج إلى البحث عن الرحلات الجوية ومقارنة الأسعار واختيار المقعد.
- الذاكرة والحالة: "بناءً على طلباتي السابقة، ما المنتج الذي يجب أن أفكر فيه بعد ذلك؟" يحتاج إلى الوصول إلى سجل الطلب.
- استرداد الخطأ: إذا فشل بحث الويب أو أدى إلى إرجاع بيانات غير هامة، فسيتوقف نظام RAG البسيط عن العمل. يمكن للوكيل إعادة المحاولة باستخدام استعلام مختلف أو الرجوع إلى نتيجة مخزنة مؤقتًا.
بنية RAG للوكيل
يضيف النظام الوكيل ثلاث طبقات فوق RAG الأساسي:
إليك تدفق الوكيل النموذجي:
المستخدم: "ما هو الطقس في طوكيو الأسبوع المقبل وهل يجب أن أحزم مظلة؟"
الوكيل (المخطط):
الخطوة 1: الحصول على توقعات الطقس لطوكيو
الخطوة 2: بناءً على التوقعات، حدد ما إذا كانت هناك حاجة إلى مظلة أم لا
الوكيل (خطوة المنفذ 1):
- البحث في الويب: "توقعات الطقس في طوكيو الأسبوع المقبل"
- تحليل النتائج واستخراج درجات الحرارة وهطول الأمطار
الوكيل (خطوة المنفذ 2):
- إذا كان هطول الأمطار > 30% → "نعم، احزم المظلة"
- آخر → "لا حاجة لمظلة"
الوكيل (الناقد):
- تحقق: هل حصلنا على التواريخ الصحيحة؟ (الأسبوع القادم = 7 أيام من اليوم؟)
- التحقق: هل قمنا بتحليل الأرقام بشكل صحيح؟ (عتبة 30% تعسفية؟)
- إذا لم تكن متأكدا، اسأل المستخدم: "هل تريد توقعات مفصلة يوما بعد يوم؟"
الإجابة النهائية: "سيكون طقس طوكيو مشمسًا في الغالب مع احتمال سقوط أمطار بنسبة 20%. ولا حاجة إلى مظلة."اللبنات الأساسية: الأطر والأدوات
ليس عليك بناء هذا من الصفر. تدعم العديد من أطر العمل مفتوحة المصدر سير العمل الوكيل:
1. LangGraph (بواسطة LangChain)
يتيح لك LangGraph تحديد الرسوم البيانية الدورية حيث تكون العقد عبارة عن مكالمات أو أدوات LLM. مثالي للوكلاء الذين يحتاجون إلى التكرار حتى يتم استيفاء الشرط.
من langgraph.graph قم باستيراد StateGraph، END
من langchain_core.messages قم باستيراد HumanMessage
فئة AgentState (TypedDict):
الرسائل: قائمة[HumanMessage]
التالي: شارع
قم بإلغاء استرداد العقدة (الحالة: AgentState):
query =state['messages'][-1].content
المستندات = Vector_db.search(استعلام)
إرجاع {"messages": [SystemMessage(content=f"Context: {docs}")]}
تعريف Reasoning_node(الحالة: AgentState):
الاستجابة = llm.invoc(state['messages'])
إرجاع {"الرسائل": [الاستجابة]}
def must_continue(state: AgentState) -> str:
last =state['messages'][-1].content
إذا كانت "أحتاج إلى مزيد من المعلومات" في الأخير:
عودة "استرجاع"
آخر:
عودة "النهاية"
سير العمل = StateGraph(AgentState)
Workflow.add_node("استرداد"، استرداد_عقدة)
Workflow.add_node("سبب"، Reasoning_node)
Workflow.add_conditional_edges("reason"، must_continue، {"retrieve": "retrieve"، "end": END})
سير العمل.set_entry_point("استرداد")
الوكيل = سير العمل. ترجمة ()يتعامل LangGraph مع استمرارية الحالة ونقاط التفتيش وانقطاع الإنسان في الحلقة.
2. LlamaIndex + AgentWorkflow
تعمل فئة AgentWorkflow الخاصة بـ LlamaIndex على تسهيل التعاون بين الوكلاء المتعددين:
من llama_index.core.agent.workflow قم باستيراد AgentWorkflow
من llama_index.core.tools قم باستيراد FunctionTool
تعريف search_knowledge_base(query: str) -> str:
"""البحث في قاعدة المعارف الداخلية."""
إرجاع Vector_db.query(استعلام)
تعريف search_web(query: str) -> str:
"""البحث في الويب عن المعلومات الحالية."""
إرجاع web_search (استعلام)
Def Execute_sql(query: str) -> str:
"""تشغيل استعلامات SQL في قاعدة بيانات التحليلات."""
إرجاع sql_db.execute (استعلام)
سير العمل = AgentWorkflow.from_tools_or_functions(
[search_knowledge_base، search_web،execute_sql]،
llm=OpenAI(model="gpt-4-turbo"),
system_prompt="أنت مساعد مفيد يمكنه البحث في قاعدة بيانات المعرفة والويب والتحليلات."
)
الاستجابة = انتظار سير العمل.run(user_msg="ما هي مبيعاتنا في الربع الأول في أوروبا وكيف يمكن مقارنتها باتجاهات الصناعة؟")يقرر الوكيل تلقائيًا الأداة (الأدوات) التي سيتم استخدامها وبأي ترتيب.
3. مخصص مع الخطوط العريضة
للتحكم الكامل، استخدم "المخططات التفصيلية" لفرض الإخراج المنظم (مخطط JSON، التعبير العادي) من LLM، ثم قم بالتوجيه إلى الأدوات بناءً على الاستجابة المنظمة.
الخطوط العريضة للاستيراد
من استيراد pydantic BaseModel، Field
فئة ToolCall (BaseModel):
الأداة: str = Field(description="اسم الأداة المراد الاتصال بها")
الوسائط: dict = Field(description='وسيطات الأداة')
النموذج = الخطوط العريضة.models.transformers("meta-llama/Llama-3-70b-chat-hf")
موجه = و"""
المستخدم: {user_query}
الأدوات المتاحة: search_web، query_db، send_email
قرر الأداة التي ستستخدمها وبأي وسيطات. إخراج JSON.
"""
النتيجة = الخطوط العريضة. توليد. json (موجه، المخطط = ToolCall، نموذج = نموذج)
## نتيجة: {"tool": "search_web"، "arguments": {"query": "foo"}}مثال كامل: وكيل دعم العملاء
لنقم ببناء وكيل يمكنه:
- ابحث عن سجل الطلبات
- التحقق من المخزون
- ابحث عن السياسات ذات الصلة
- قم بإنشاء إجابة مفيدة (أو تصعيدها)
من llama_index.core.agent.workflow قم باستيراد AgentWorkflow
من llama_index.core.tools قم باستيراد FunctionTool
من llama_index.llms.openai قم باستيراد OpenAI
تعريف get_order_history(user_id: str) -> الإملاء:
"""جلب سجل طلبات المستخدم من قاعدة البيانات."""
query = f"SELECT * FROM Orders WHERE user_id = '{user_id}' ORDER BY create_at DESC LIMIT 10"
إرجاع sql_db.execute (استعلام)
def check_inventory(sku: str) -> dict:
"""التحقق من توفر المنتج في المخزون."""
إرجاع المخزون_db.lookup(sku)
تعريف search_knowledge_base(query: str) -> str:
"""البحث في مستندات المساعدة، والسياسات، ومعلومات الشحن."""
إرجاع Vector_db.search(استعلام)
def create_ticket(user_id: str, Issue: str) -> str:
"""افتح تذكرة دعم للمتابعة البشرية."""
Ticket_id = zendesk.create_ticket(user_id, Issue)
return f"تم إنشاء التذكرة: {ticket_id}"
سير العمل = AgentWorkflow.from_tools_or_functions(
الأدوات=[get_order_history، check_inventory، search_knowledge_base، create_ticket]،
llm=OpenAI(model="gpt-4-turbo"),
نظام_مطالبة = """
أنت وكيل دعم العملاء لشركة Acme للتجارة الإلكترونية.
هدفك: حل مشكلة المستخدم باستخدام الأدوات المتاحة.
القواعد:
- تحقق دائمًا من سجل الطلبات أولاً إذا ذكر المستخدم طلبًا
- إذا نفد المنتج من المخزون، قم بتقديم البدائل أو تاريخ إعادة التخزين
- إذا كانت القضية معقدة أو عاطفية، قم بإنشاء تذكرة للمتابعة البشرية
- كن مهذبًا وموجزًا ومفيدًا.
"""
)
## تشغيل
user_query = "لقد طلبت SKU-12345 الأسبوع الماضي ولكن لم أتلق تأكيد الشحن. رقم طلبي هو ABC-789."
الاستجابة = انتظار سير العمل.تشغيل (user_msg=user_query)
طباعة (رد)سيقوم الوكيل بما يلي:
- اتصل بـ "get_order_history" باستخدام معرف المستخدم المشتق من رقم الطلب
- تأكد من أن الطلب "جاري المعالجة" ولكن لم يتم شحنه
- اتصل بـ "search_knowledge_base" لمعرفة سياسة الشحن ("تستغرق معالجة الطلب من 1 إلى 3 أيام عمل")
- قم بإنشاء إجابة: "لا يزال طلبك ABC-789 قيد المعالجة. يستغرق الشحن عادةً من 1 إلى 3 أيام عمل. ستتلقى رقم تتبع عبر البريد الإلكتروني عند شحنه."
إذا تجاوز الطلب فترة الشحن، فقد يستدعي "create_ticket".
الأنماط المتقدمة
تسلسل الأدوات وتمرير البيانات
يمكن للوكلاء ربط الأدوات حيث يصبح ناتج أحدها مدخلاً للآخر. يعالج إطار سير العمل هذا تلقائيًا عندما تقوم ببناء محفوظات المحادثة بشكل صحيح.
إدارة الذاكرة والسياق
بالنسبة للمحادثات الطويلة، تحتاج إلى ضغط السجل أو تلخيصه ليناسب نافذة السياق. التقنيات:
- مخازن الملخص المؤقتة: قم بتلخيص الرسائل القديمة بشكل دوري واحتفظ فقط بالرسائل الحديثة + الملخص
- نقاط الملاءمة: قم بتخزين جميع التفاعلات السابقة في قاعدة بيانات متجهة واسترجاع التفاعلات ذات الصلة فقط عند كل منعطف
- حالة الجلسة: احتفظ بالحالة المنظمة (على سبيل المثال،
current_order_id،user_name) في مخزن منفصل وقم بإدخالها في الموجه في كل خطوة
التعاون متعدد الوكلاء
يمكن تقسيم المهام المعقدة عبر وكلاء متخصصين، ويتم تنسيقها بواسطة المشرف:
الوكيل المشرف
├─ وكيل الأبحاث (يبحث على الويب، قاعدة المعرفة)
├─ وكيل البيانات (يقوم بتشغيل SQL وتحليل البيانات)
└─ وكيل الكتابة (يولد الإجابة النهائية)يدعم LangGraph هذا محليًا: يمكن أن تكون كل عقدة عبارة عن سير عمل كامل للوكيل.
الإنسان في الحلقة
يجب أن يعرف الوكلاء متى يتوقفون ويسألون الإنسان. أضف أداة ask_human(question) التي توقف التنفيذ مؤقتًا وترسل السؤال إلى قناة Slack أو لوحة التحكم. عندما يرد الإنسان، يستأنف الوكيل.
قائمة التحقق من جاهزية الإنتاج
متى لا تستخدم الوكلاء
الوكلاء أقوياء لكنهم يضيفون تعقيدًا. تجنبهم عندما:
- المهمة عبارة عن إجابة بسيطة على الأسئلة من قاعدة معرفية ثابتة (يكفي RAG الأساسي)
- أنت بحاجة إلى زمن وصول منخفض للغاية (< 200 مللي ثانية) - يضيف الوكلاء 1-3 خطوات من الحمل الزائد
- تكلفة مكالمات LLM الإضافية تفوق الفائدة
- لا يمكنك تحديد أدوات واضحة بمخرجات حتمية
- يتطلب الامتثال التنظيمي إمكانية التنبؤ الكاملة (الوكلاء غير محددين)
الخلاصة
يتجاوز Agentic RAG روبوتات الدردشة البسيطة إلى أنظمة تفكير متعددة الخطوات يمكنها التخطيط والاسترجاع والتصرف والتصحيح الذاتي. أطر عمل مثل LangGraph وLlamaIndex وOutlines تجعله سهل الوصول إليه.
ابدأ صغيرًا: اختر سير عمل واحدًا عالي القيمة (دعم العملاء، وتحليل البيانات، ومساعد الأبحاث) وقم ببناء وكيل له. قم بقياس النجاح من خلال تقليل التصعيد البشري، وليس فقط جودة الإجابة.
إن مستقبل تطبيقات الذكاء الاصطناعي لا يقتصر على تقديم مطالبات أفضل فحسب، بل إنه ذكاء منسق.
الوجبات السريعة الرئيسية
- يقتصر RAG البسيط على الأسئلة والأجوبة الثابتة؛ يضيف الوكلاء التخطيط واستخدام الأدوات والذاكرة والتصحيح الذاتي
- الأطر الأساسية: LangGraph (الرسوم البيانية الدورية)، LlamaIndex (AgentWorkflow)، الخطوط العريضة (المخرجات المنظمة)
- بناء وكلاء لسير العمل متعدد الخطوات: دعم العملاء، وتحليل البيانات، والبحث
- جاهزية الإنتاج: المهلات، وإعادة المحاولة، وضوابط التكلفة، وإمكانية المراقبة، والدرابزين
- معرفة متى لا تستخدم الوكلاء (المهام البسيطة، الكمون المنخفض، الحتمية الصارمة)
هل تحتاج إلى مساعدة وكلاء البناء؟
نحن نصمم وننشر وكلاء الذكاء الاصطناعي على مستوى الإنتاج الذين يتكاملون مع بياناتك وأدواتك وسير العمل. تواصل معنا لحضور ورشة عمل فنية.
<a href="/get-started/" class="btn btn-primary">جدول زمني لورشة العمل</a>
عدد الكلمات: ~1050
اللغات المستهدفة: الإنجليزية (المصدر)، العربية، الإسبانية، الألمانية، الفرنسية