نشر وكيل دعم تكنولوجيا المعلومات LangGraph ReAct مع IBM Granite على watsonx.ai®

المؤلفون

Anna Gutowska

AI Engineer, Developer Advocate

IBM

في هذا البرنامج التعليمي، ستبني وكيل ذكاء اصطناعي من نوع ReAct (الاستدلال والعمل) باستخدام إطار العمل LangGraph مفتوح المصدر باستخدام نموذج IBM Granite من خلال IBM watsonx.ai API في Python. حالة الاستخدام هي إدارة تذاكر دعم تكنولوجيا المعلومات الموجودة وإنشاء تذاكر جديدة.

ما المقصود بوكيل ReAct؟

يُشير وكيل الذكاء الاصطناعي إلى نظام أو برنامج قادر على تنفيذ المهام بشكل مستقل نيابةً عن المستخدم أو نظام آخر، وذلك من خلال تصميم سير عمل الوكيل واستخدام الأدوات المتاحة. يستخدم وكلاء الذكاء الاصطناعي التوليدي تقنيات معالجة اللغة الطبيعية (NLP) المتقدمة الخاصة بالنماذج اللغوية الكبيرة (LLMs) لفهم مدخلات المستخدم خطوة بخطوة والرد عليها وتحديد الوقت المناسب لاستدعاء الأدوات الخارجية. أحد العناصر الأساسية لوكيل الذكاء الاصطناعي هو الاستدلال. عند الحصول على معلومات جديدة عبر استدعاء الأدوات أو التدخل البشري أو وكلاء آخرين، يوجِّه نموذج الاستدلال الخطوات التالية للوكيل.

مع كل إجراء وكل استجابة من الأداة، يوجّه نموذج ReAct (الاستدلال والعمل) الوكلاء إلى "التفكير" والتخطيط لخطواتهم التالية. يمنحنا هذا التفكير البطيء خطوة بخطوة رؤى حول كيفية استخدام الوكيل للسياق المحدَّث لصياغة الاستنتاجات. ولأن عملية التفكير هذه مستمرة، فهي غالبًا ما تُسمَّى حلقة التفكير-الفعل-الملاحظة، وتُعَد شكلًا من تحفيز سلسلة الأفكار.

استخدام LangGraph لإنشاء وكلاء ReAct

سيستخدم هذا البرنامج التعليمي إطار العمل LangGraph، وهو وكيل ذكاء اصطناعي مفتوح المصدر مصمم لبناء ونشر وإدارة مهام سير العمل المعقدة لوكيل الذكاء الاصطناعي التوليدي. تُعَد دالة create_react_agent الجاهزة التي يوفرها LangGraph وسيلة سهلة لبناء وكيل بسيط ومخصص. يتكون وكلاء ReAct البسطاء، مثل الوكيل في هذا البرنامج التعليمي الموضَّح في الشكل 1، من عقدتين. عقدة مسؤولة عن استدعاء النموذج، بينما يتم تخصيص الأخرى لاستخدام الأدوات. تشمل الأدوات الشائعة الأداة الجاهزة LangChain Wikipedia، وأداة DuckDuckGoSearchRun، وحتى تقنية التوليد المعزز بالاسترجاع (RAG). في الحالات التي يكون فيها إدخال الإجراء معقدًا، يمكن إضافة عقدة أخرى، كما هو موضَّح في الشكل 2. ستعمل هذه العقدة الإضافية على ضمان أن يُرجع الوكيل مخرجات منظمة.

في LangGraph، تعمل ميزة "الحالة" كخزان للذاكرة يسجِّل ويتبَّع جميع المعلومات القيّمة التي تتم معالجتها في كل تكرار لنظام الذكاء الاصطناعي. تسمح هذه الرسوم البيانية ذات الحالة للوكلاء باسترجاع المعلومات السابقة والسياق القيّم. تتم الاستفادة من البنية الدورية لمخطط ReAct عندما يعتمد ناتج خطوة معينة على الخطوات السابقة في الحلقة. تقوم العُقد، أو "الفاعلون"، في المخطط بترميز منطق الوكيل وتكون متصلة بواسطة الحواف. الحواف هي في الأساس دوال Python التي تحدِّد العقدة التالية التي ستُنفَّذ بناءً على الحالة الحالية.

المتطلبات الأساسية

تحتاج إلى حساب IBM Cloud لإنشاء مشروع watsonx.ai.

الخطوات

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

الخطوة 1. إنشاء بيانات اعتماد watsonx.ai الخاصة بك.

  1. سجِّل الدخول إلى watsonx.ai باستخدام حساب IBM Cloud الخاص بك.

  2. أنشئ مثيل خدمة watsonx.ai Runtime (اختَر المنطقة المناسبة لك، واختَر خطة Lite، وهي مثيل مجاني).

  3. أنشئ مفتاح واجهة برمجة التطبيقات (API).

الخطوة 2. إعداد المشروع في بيئة التطوير المتكاملة (IDE) لديك.

للبدء بسهولة في نشر الوكلاء على watsonx.ai، انسخ مستودع GitHub هذا وادخل إلى مشروع وكيل ReAct لدعم تكنولوجيا المعلومات. يمكنك تشغيل الأمر التالي في محطتك الطرفية للقيام بذلك.

git clone git@github.com:IBM/ibmdotcom-tutorials.git
cd react-agent-langgraph-it-support/base/langgraph-react-agent/

بعد ذلك، قم بتثبيت Poetry إذا لم يكن مثبتًا لديك بالفعل. وهو أداة لإدارة تبعيات Python وتجهيز الحزم البرمجية.

pipx install --python 3.11 poetry

بعد ذلك، فعِّل بيئتك الافتراضية.

source $(poetry -q env use 3.11 && poetry env info --path)/bin/activate

بدلًا من استخدام أمر pip install ، تسمح لنا حزمة Poetry بإضافة التبعيات عن طريق تشغيل الأمر التالي في المحطة الطرفية. تساعد هذه الخطوة على تثبيت تبعيات المستودع المنعكسة في ملف pyproject.toml إلى بيئتك الافتراضية المنفصلة.

poetry install

من الضروري إضافة دليل العمل إلى PYTHONPATH للخطوات التالية. في المحطة الطرفية الخاصة بك نفِّذ ما يلي: 

export PYTHONPATH=$(pwd):${PYTHONPATH}

لإعداد بيئتك، اتَّبِع الإرشادات الواردة في ملف README.md على Github. يتطلب هذا الإعداد تشغيل عدة أوامر على IDE أو سطر الأوامر.

الخطوة 3. تعيين متغيّرات البيئة

في ملف config.toml ، ستجد بيانات الاعتماد الفارغة التالية التي يجب تعبئتها قبل محاولة نشر الوكيل. تم إعداد watsonx_apikey و watsonx_url في الخطوة 1 من هذا البرنامج التعليمي. بعد ذلك، اتَّبِع النموذج البسيط الموجود في صفحة Developer Access لتحديد مساحة النشر الخاصة بك أو إنشاء مساحة جديدة. هناك، يمكنك استرداد space_id الضروري لتوصيل الوكيل بعملية نشر watsonx.ai. وأخيرًا، تم ضبط model_id على نموذج IBM Granite 3.2.

[deployment]
  watsonx_apikey = ""
  watsonx_url = ""  # should follow the format: `https://{REGION}.ml.cloud.ibm.com`
  space_id = "" # found in the "Manage" tab of your Deployment or in the Developer Access page here: https://dataplatform.cloud.ibm.com/developer-access

[deployment.custom]
# during creation of deployment additional parameters can be provided inside `CUSTOM` object for further referencing
# please refer to the API docs: https://cloud.ibm.com/apidocs/machine-learning-cp#deployments-create
  model_id = "ibm/granite-3-2-8b-instruct"
  thread_id = "thread-1" # More info here: https://langchain-ai.github.io/langgraph/how-tos/persistence/

الخطوة 4. تحميل بياناتك إلى IBM Cloud Object Storage

يحتاج وكيلنا إلى مصدر بيانات لتوفير معلومات محدَّثة وإضافة بيانات جديدة. سنخزِّن ملف البيانات الخاص بنا في IBM Cloud Object Storage.

  1. أولًا، سجِّل الدخول إلى IBM Cloud. ثم أنشئ مشروعًا جديدًا.
  2. في القائمة الموجودة على الجانب الأيسر، اختَر قائمة الموارد. باستخدام زر "إنشاء مورد"، أنشئ مثيل Cloud Object Storage جديدًا أو استخدِم هذا الرابط ببساطة.
  3. افتح مثيل IBM Cloud Storage الذي تم إنشاؤه حديثًا، وأنشئ سلة جديدة. بالنسبة إلى هذا البرنامج التعليمي، يمكنك اختيار الطبقة الذكية وهي الطبقة المجانية. حمِّل ملفك عند توجيهك بذلك. للحصول على نموذج الملف، ارجع إلى ملف tickets.csv في مستودع GitHub المرتبط في الخطوة 2.

الخطوة 5. إنشاء اتصال البيانات الخاص بك

لتزويد وكيل ReAct بوظائف إدارة تذاكر تكنولوجيا المعلومات، يجب علينا الاتصال بمصدر البيانات الخاص بنا في IBM Cloud Object Storage. في هذه الخطوة، يمكننا استخدام مكتبة ibm_boto3 .

في tools.py ، يجب تعبئة COS_ENDPOINT , COS_INSTANCE_CRN , BUCKET_NAME و CSV_FILE_NAME بالمعلومات المناسبة باستخدام تفاصيل الحاوية الموجودة في مثيل Cloud Object Storage الخاص بك ضمن علامة التبويب "التكوين". 

  COS_ENDPOINT = ""       #find in your COS bucket configuration
  COS_INSTANCE_CRN = ""   #find in your COS bucket configuration
  BUCKET_NAME = ""        #find in your COS bucket configuration
  CSV_FILE_NAME = "filename.csv" #you can use the provided tickets.csv sample file 

  cos = ibm_boto3.client(
      "s3",
      ibm_api_key_id=dep_config["watsonx_apikey"],
      ibm_service_instance_id=COS_INSTANCE_CRN,
      config=Config(signature_version="oauth"),
      endpoint_url=COS_ENDPOINT,
  )

الخطوة 6. إنشاء أدواتك المخصصة

سيكون الوكيل قادرًا على قراءة وكتابة البيانات في الملف. أولًا، لننشئ الأداة لقراءة البيانات باستخدام أداة التصميم@tool‎ في LangChain. 

لقد أضفنا أداةfind_tickets هذه إلى ملفtools.py . تسترد هذه الأداة كائن البيانات من Cloud Object Storage وتُعيده على شكل إطار بيانات Pandas. بخلاف ذلك، سيتم إصدار استثناء. 

  @tool 
  def find_tickets():
      """Returns a list of of all tickets."""
      try:
          response = cos.get_object(Bucket=BUCKET_NAME, Key=CSV_FILE_NAME)
          csv_data = pd.read_csv(response['Body']) 
          print("Ticket file loaded successfully:")
          return csv_data
      except Exception as e:
          print(f"Error loading file from COS: {e}")
          return None

 

بعد ذلك، أضفنا أداة create_ticket

  @tool 
def create_ticket(issue: str, urgency:str):
    """Creates a tickets for a customer issue. Request a detailed explanation of the customer issue and urgency level before creating a ticket.
    
    Args:
        issue (str): A description of the issue.
        urgency (str): A category value for the level of urgency. Can be "low", "medium", or "high".
    
    Returns:
        The new ticket.
    """
    try:
        # retrieve the existing item to reload the contents
        response = cos.get_object(Bucket=BUCKET_NAME, Key=CSV_FILE_NAME)
        existing_body_df = pd.read_csv(response['Body'])
        new_ticket = {"issue": issue, "date_added":datetime.now().strftime("%m-%d-%Y"), "urgency":urgency, "status":"open"}
        # Add a new row (i.e. ticket) using loc[]
        existing_body_df.loc[len(existing_body_df)] = new_ticket

        cos.put_object(Bucket=BUCKET_NAME, Key=CSV_FILE_NAME, Body=existing_body_df.to_json())
        return "New ticket successfully created!"
    except Exception as e:
        print("Unable to create new ticket. Please try again.")

تتلقى هذه الأداة وصف المشكلة من المستخدم ومدى إلحاحها كمعطيات. تتم إضافة صف جديد إلى ملفنا في COS بهذه المعلومات وبالتالي يتم إنشاء تذكرة جديدة. بخلاف ذلك، سيتم إصدار استثناء. 

أداة أخيرة يجب أن نضيفها إلى tools.py الملف وهي أداة get_todays_date التي تستخدم وحدة datetime لعرض تاريخ اليوم بتنسيق MM-DD-YYYY. ستكون هذه الأداة مفيدة للوصول إلى التاريخ الحالي، حيث لا يمتلك الوكيل طريقة أخرى للحصول عليه؛ لأن النموذج اللغوي الكبير (LLM) لم يتم تدريبه على هذه البيانات. 

  @tool
  def get_todays_date():
    """Returns today's date in MM-DD-YYYY format."""
    date = datetime.now().strftime("%m-%d-%Y")
    return date 

لمنح الوكيل حق الوصول إلى هذه الأدوات، أضفناها إلى قائمة TOOLS في وحدة الامتدادات ضمن ملف init.py . يجب أن تكون هذه القائمة هي محتويات ملف init.py الخاص بك في دليل src/langgraph_react_agent .

  from .tools import (
    find_tickets,
    get_todays_date,
    create_ticket
  )

  TOOLS = [
      find_tickets,
      get_todays_date,
      create_ticket
  ]


يتم استيراد هذه الأدوات في ملف agent.py وتمريرها إلى دالة LangGraph الجاهزة create_react_agent  التي تعمل كمنفِّذ وكيل. تشمل المَعلمات الأخرى النموذج اللغوي الكبير الذي تمت تهيئته باستخدام فئة ChatWatsonx التي تسمح باستدعاء الأدوات على watsonx.ai وموفِّر الذاكرة وموجِّه النظام. لاحِظ أن بعض الموجِّهات تعمل بشكل أفضل من غيرها، لذا قد يكون من الضروري إجراء بعض هندسة الموجِّهات حسب النموذج اللغوي الكبير الذي تختاره. 

قبل نشر الوكيل الخاص بك، تذكَّر إكمال جميع المعلومات الضرورية في ملف config.toml

الخطوة 7. الدردشة مع وكيلك

هناك ثلاث طرق للدردشة مع وكيلك.

الخيار 1: استعلام الوكيل محليًا


تشغيل البرنامج النصي لتنفيذ خدمة الذكاء الاصطناعي المحلية.

  poetry run python examples/execute_ai_service_locally.py


الخيار 2. نشر الوكيل على واجهة الدردشة المدمجة في watsonx.ai.


الخيار الأخير هو الوصول إلى الوكيل في مساحة "عمليات النشر (Deployments)" على watsonx.ai. للقيام بذلك، اختَر "Deployments" في القائمة الموجودة على الجانب الأيسر. ثم اختَر مساحة النشر الخاصة بك، واختَر علامة التبويب "الأصول (Assets)"، واختَر الأصلonline ai_service ، واختَر الأصل الموسوم بالعلامة "wx-agent" مرة أخرى، وأخيرًا افتح علامة التبويب "معاينة (Preview)". الآن، يمكنك الدردشة مع الوكيل في واجهة الدردشة التفاعلية. يجب أن يؤدي كلٌّ من هذه الخيارات الثلاثة إلى نتيجة مماثلة.

الخيار 3. نشر الوكيل والدردشة معه داخل بيئة التطوير المتكاملة (IDE) الخاصة بك.

لتشغيل البرنامج النصي للنشر، هيِّئ المتغير deployment_id  في ملف query_existing_deployment.py .

يمكن الحصول على deployment_id الخاص بعملية النشر عن طريق تشغيل ملف scripts/deploy.py .

بعد ذلك، شغِّل البرنامج النصي للنشر. 

  poetry run python scripts/deploy.py

ثم شغِّل البرنامج النصي لاستعلام النشر.

  poetry run python examples/query_existing_deployment.py


لأغراض هذا البرنامج التعليمي، دعنا نختَر الخيار 2 ونسأل وكيلنا المنشور على watsonx.ai في شكل روبوت محادثة وكيلي. دعنا نزوِّد الوكيل ببعض الموجِّهات التي تتطلب استخدام الأدوات. عند اتباع الخطوات المدرجة في الخيار 3، يجب أن ترى واجهة دردشة على watsonx.ai. هناك، يمكننا كتابة الموجِّه. 

أولًا، دعنا نختبر إذا ما كان سيتم استدعاء أداة create_ticket بنجاح أم لا. لنوجِّه الوكيل إلى إنشاء تذكرة جديدة.

كما ترى في الإجابة النهائية للوكيل، نجح نظام الذكاء الاصطناعي في استخدام مهارات حل المشكلات لإنشاء تذكرة جديدة باستخدام أداة create_ticket . يُعَد الاطِّلاع على استدعاءات الأدوات مفيدًا لأغراض تصحيح الأخطاء. الآن، دعنا نتحقق مما إذا تمت إضافة التذكرة بنجاح إلى ملف البيانات الخاص بنا، والذي يعمل كقاعدة معرفة للوكيل. 

رائع! نجح الوكيل في إضافة التذكرة إلى الملف.

الخاتمة

في هذا البرنامج التعليمي، أنشأت وكيلًا باستخدام إطار ReAct يعتمد على اتخاذ القرار لحل مهام معقدة مثل إنشاء تذاكر الدعم واسترجاعها. هناك العديد من نماذج الذكاء الاصطناعي التي تُتيح استدعاء الأدوات الوكيلية، مثل Gemini من Google، وGranite من IBM، وGPT-4 من OpenAI. في مشروعنا، استخدمنا نموذج IBM Granite AI من خلال واجهة برمجة تطبيقات watsonx.ai. تصرَّف النموذج كما هو متوقع على البيئة المحلية وعند نشره على watsonx.ai. كخطوة تالية، تحقَّق من قوالب LlamaIndex وcrewAI متعددة الوكلاء المتاحة في مستودع watsonx-developer-hub على GitHub لبناء وكلاء الذكاء الاصطناعي.

حلول ذات صلة
تطوير وكلاء الذكاء الاصطناعي من IBM 

تمكين المطورين من إنشاء وكلاء الذكاء الاصطناعي ونشرهم ومراقبتهم باستخدام استوديو IBM watsonx.ai.

استكشف watsonx.ai
وكلاء ومساعدو الذكاء الاصطناعي من IBM

حقِّق إنتاجية غير مسبوقة مع مجموعة من أكثر الحلول تكاملًا في القطاع لمساعدة الأعمال على بناء وتخصيص وإدارة وكلاء ومساعدي الذكاء الاصطناعي. 

استكشِف وكلاء الذكاء الاصطناعي
IBM Granite

تحقيق وفورات في التكاليف تزيد على 90% باستخدام نماذج Granite الصغيرة والمفتوحة المصممة لتعزيز كفاءة المطوِّرين. تقدِّم هذه النماذج الجاهزة للمؤسسات أداءً استثنائيًا في معايير الأمان، وتتفوق في مجموعة واسعة من المهام المؤسسية من الأمن الإلكتروني إلى التوليد المعزز بالاسترجاع (RAG).

استكشف Granite
اتخِذ الخطوة التالية

تمكَّن من أتمتة سير عملك المعقد وتحقيق إنتاجية غير مسبوقة باستخدام واحدة من أكثر مجموعات القدرات شمولًا في القطاع لمساعدة الشركات على بناء وكلاء ومساعدي الذكاء الاصطناعي وتخصيصهم وإدارتهم. 

استكشف تطوير وكلاء watsonx.ai استكشف watsonx Orchestrate