0Pricing
AI Engineering Academy · درس

بناء وكيل ReAct باستخدام LangChain

اجمعوا وكيل ReAct كاملًا باستخدام AgentExecutor من LangChain، مع أداة للبحث على الويب وأداة للحساب وأداة للبحث في المستندات، ثم تتبّعوا خطوات استدلاله.

بناء وكيل ReAct باستخدام LangChain درس مجاني في AI Engineering Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في AI Engineering Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة AI Engineering Academy 4 دروس في المجموع.

منظومة وكلاء LangChain

يوفر LangChain حزمة متكاملة لبناء الوكلاء: تحدد الأدوات ما يستطيع الوكيل فعله، وتمنحه المطالبات تعليماته وتنسيق الاستدلال، ويتولى LLM التفكير، بينما ينفذ AgentExecutor الحلقة التي توجّه استدعاءات الأدوات وتعيد الملاحظات إليها. يمكنك إعداد كل جزء على حدة، مما يتيح لك تبديل المكونات دون إعادة كتابة كل شيء.

تجميع وكيل ReAct

أسرع طريقة لبناء وكيل ReAct في LangChain هي استخدام create_react_agent. مرّر إليه نموذج LLM وقائمة من الأدوات وقالب مطالبة. وسيعيد عنصرًا قابلًا للتنفيذ ينشئ تلقائيًا خطوات Thought/Action/Observation. غلّفه داخل AgentExecutor لإدارة الحلقة.

from langchain import hub
from langchain.agents import create_react_agent, AgentExecutor
from langchain_openai import ChatOpenAI
from langchain_core.tools import tool

# 1. Define tools
@tool
def search(query: str) -> str:
    '''Search the web for current information. Input: a search query string.'''
    return f'Search results for "{query}": [mock result]'

@tool
def calculator(expression: str) -> str:
    '''Evaluate a math expression. Input: a valid Python math expression.'''
    try:
        return str(eval(expression))
    except Exception as e:
        return str(e)

tools = [search, calculator]

# 2. Load a ReAct prompt template
prompt = hub.pull('hwchase17/react')

# 3. Create the agent
llm = ChatOpenAI(model='gpt-4o', temperature=0)
agent = create_react_agent(llm, tools, prompt)

التشغيل باستخدام AgentExecutor

يدير AgentExecutor حلقة Thought/Action/Observation. مرّر verbose=True أثناء التطوير لطباعة كل خطوة في وحدة التحكم — فهذا التتبع ذو قيمة كبيرة لتصحيح الأخطاء. وتُعد المعلمة max_iterations وسيلة الحماية من الحلقات اللانهائية.

agent_executor = AgentExecutor(
    agent=agent,
    tools=tools,
    verbose=True,       # Print each step
    max_iterations=10,  # Safety limit
    handle_parsing_errors=True  # Don't crash on format errors
)

# Invoke with a user question
result = agent_executor.invoke({
    'input': 'What is the square root of 144 multiplied by the number of days in a leap year?'
})

print('Final answer:', result['output'])

قراءة التتبع التفصيلي

يوضح التتبع التفصيلي كيفية استدلال الوكيل بدقة. ففي كل تكرار، تُطبع فكرة النموذج، والإجراء الذي اختاره، والملاحظة الواردة من الأداة. يتيح لك ذلك تحديد موضع الخطأ بدقة — سواء اختار الوكيل الأداة الخاطئة، أو مرّر الوسيط الخاطئ، أو أساء فهم الملاحظة.

# Example verbose output from AgentExecutor:
#
# > Entering new AgentExecutor chain...
# Thought: I need to find the square root of 144 first, then multiply by days in a leap year.
# Action: calculator
# Action Input: 144 ** 0.5
# Observation: 12.0
# Thought: 12.0 times 366 days in a leap year.
# Action: calculator
# Action Input: 12.0 * 366
# Observation: 4392.0
# Thought: I have the final answer.
# Final Answer: 4392.0
# > Finished chain.

استخدام أدوات LangChain المدمجة

يأتي LangChain مزودًا بالعديد من الأدوات الجاهزة للمهام الشائعة. يمكنك إضافة أداة للبحث على الويب من langchain_community.tools دون كتابة أي تعليمات برمجية. وتتولى هذه الأدوات مصادقة API وتحليل الاستجابات نيابةً عنك.

from langchain_community.tools import DuckDuckGoSearchRun
from langchain_community.tools import WikipediaQueryRun
from langchain_community.utilities import WikipediaAPIWrapper

# Web search tool
search_tool = DuckDuckGoSearchRun()

# Wikipedia lookup tool
wiki_tool = WikipediaQueryRun(
    api_wrapper=WikipediaAPIWrapper(top_k_results=2)
)

# Add to your agent
tools_with_search = [search_tool, wiki_tool, calculator]
agent_executor.tools = tools_with_search

البحث في المستندات كأداة RAG

يُعد إتاحة خط أنابيب RAG الخاص بك كأداة للوكيل أحد أقوى الأنماط. إذ يقرر الوكيل متى يسترجع المعلومات من قاعدة معارفك، ومتى يستخدم أدوات أخرى أو يعتمد على بيانات تدريبه. يجعل ذلك نظام RAG ديناميكيًا — فلا يستدعيه الوكيل إلا عند الحاجة.

from langchain_core.tools import tool

@tool
def lookup_knowledge_base(query: str) -> str:
    '''Search the company knowledge base for internal policies, procedures, and documentation.
    Use when the user asks about company-specific information not available publicly.
    Input: a natural language question or keyword query.
    '''
    # Your RAG pipeline here
    retrieved_chunks = vector_store.similarity_search(query, k=3)
    context = '\n'.join([doc.page_content for doc in retrieved_chunks])
    return context if context else 'No relevant documents found.'

بث مخرجات الوكيل

لتحسين تجربة المستخدم، اعرض الإجابة النهائية للوكيل رمزًا تلو الآخر بدلًا من انتظار الاستجابة كاملة. استخدم agent_executor.astream_events لاستقبال الأحداث فور وقوعها، بما في ذلك الخطوات الوسيطة وتدفق المخرجات النهائية.

import asyncio

async def stream_agent(user_input: str):
    async for event in agent_executor.astream_events(
        {'input': user_input},
        version='v1'
    ):
        kind = event['event']
        if kind == 'on_chat_model_stream':
            chunk = event['data']['chunk']
            if chunk.content:
                print(chunk.content, end='', flush=True)
        elif kind == 'on_tool_start':
            print(f'\n[Calling tool: {event["name"]}]')
        elif kind == 'on_tool_end':
            print(f'[Tool result: {str(event["data"]["output"])[:100]}]')

asyncio.run(stream_agent('What is the latest news about AI?'))

تمرير ذاكرة الوكيل

اجمع بين استدلال الوكيل وذاكرة المحادثة حتى يتذكر الوكيل التفاعلات السابقة. استخدم RunnableWithMessageHistory لتغليف منفذ الوكيل وتزويده بمخزن لسجل المحادثة. وسيملك الوكيل عندئذٍ ذاكرة للأدوار السابقة والقدرة على استدعاء الأدوات.

from langchain_core.runnables.history import RunnableWithMessageHistory
from langchain_community.chat_message_histories import ChatMessageHistory

session_store = {}

def get_session_history(session_id: str):
    if session_id not in session_store:
        session_store[session_id] = ChatMessageHistory()
    return session_store[session_id]

agent_with_memory = RunnableWithMessageHistory(
    agent_executor,
    get_session_history,
    input_messages_key='input',
    history_messages_key='chat_history'
)

تخصيص مطالبة ReAct

تعمل مطالبة hub الافتراضية جيدًا، لكنك ستحتاج غالبًا إلى مطالبة نظام مخصصة لمجالك الخاص. تتيح لك المطالبة المخصصة إضافة تعليمات الشخصية وقواعد تنسيق المخرجات والإرشادات الخاصة بالمجال قبل أوصاف الأدوات. استخدم ChatPromptTemplate مع العناصر النائبة المطلوبة في ReAct.

from langchain_core.prompts import ChatPromptTemplate

custom_prompt = ChatPromptTemplate.from_messages([
    ('system', '''You are a helpful customer support agent for TechCorp.
Always be polite and professional. When you do not know something, use your tools.

You have access to these tools:
{tools}

Tool names: {tool_names}

Use this format:
Thought: ...
Action: tool_name
Action Input: input_value
Observation: result
Final Answer: your response to the customer
'''),
    ('human', '{input}'),
    ('assistant', '{agent_scratchpad}')
])

agent = create_react_agent(llm, tools, custom_prompt)

مراقبة خطوات استدلال الوكيل

يعيد AgentExecutor الخطوات الوسيطة إلى جانب المخرجات النهائية عند ضبط return_intermediate_steps=True. كل خطوة عبارة عن صف يتكون من إجراء الوكيل وملاحظة الأداة. يفيد ذلك في بناء واجهات مستخدم تعرض للمستخدمين عملية استدلال الوكيل.

agent_executor = AgentExecutor(
    agent=agent,
    tools=tools,
    return_intermediate_steps=True
)

result = agent_executor.invoke({'input': 'What is 2 to the power of 10?'})

print('Final answer:', result['output'])
print('Reasoning steps:')
for step in result['intermediate_steps']:
    action, observation = step
    print(f'  Tool: {action.tool}, Input: {action.tool_input}')
    print(f'  Observation: {observation}')

اختبار وكيلك بدقة

اختبر وكيلك باستخدام مجموعة من الأسئلة التمثيلية التي تغطي: المهام التي تستخدم أداة واحدة، والمهام متعددة المراحل التي تتطلب عدة استدعاءات للأدوات، والمهام التي لا تحتاج إلى أداة (إذ يجيب النموذج من بيانات تدريبه)، والمدخلات العدائية مثل الأسئلة المصممة لإرباك اختيار الأداة. تابع معدلات النجاح وأنماط الإخفاق لتحسين أوصاف أدواتك ومطالبتك.

اختبار سريع

اختبر مدى فهمك لبناء وكيل ReAct باستخدام LangChain.

مراجعة الدرس

تعلمت في هذا الدرس أن: ‎create_react_agent يجمع نموذج LLM والأدوات والمطالبة في وكيل ReAct، وأن AgentExecutor يدير حلقة Thought/Action/Observation مع حدود أمان قابلة للضبط، وأن ‎verbose=True وreturn_intermediate_steps=True يوفران رؤية كاملة لاستدلال الوكيل. بعد ذلك سنتعلم كيفية التعامل مع إخفاقات الوكيل ومنع الحلقات اللانهائية.

الأسئلة الشائعة

هل درس «بناء وكيل ReAct باستخدام LangChain» مجاني؟

نعم — نص درس «بناء وكيل ReAct باستخدام LangChain» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة AI Engineering Academy، انتقل إلى CoddyKit PRO. تتضمن دورة AI Engineering Academy 4 دروس في المجموع.

ماذا ستتعلم في «بناء وكيل ReAct باستخدام LangChain»؟

اجمعوا وكيل ReAct كاملًا باستخدام AgentExecutor من LangChain، مع أداة للبحث على الويب وأداة للحساب وأداة للبحث في المستندات، ثم تتبّعوا خطوات استدلاله. تتمرن على AI Engineering Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ AI Engineering Academy؟

لا تُشترط خبرة سابقة. AI Engineering Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.

كم من الوقت يستغرق درس «بناء وكيل ReAct باستخدام LangChain»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس AI Engineering Academy هذا؟

نعم. كل درس في AI Engineering Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. إطار ReAct: فكّر وتصرّف ولاحظ
  2. تعريف الأدوات لوكيلكم
  3. بناء وكيل ReAct باستخدام LangChain
  4. التعامل مع إخفاقات الوكلاء والحلقات
← العودة إلى AI Engineering Academy