في هذا البرنامج التعليمي، سنستخدم أدوات LangChain المعدة مسبقًا لوكيل ReAct لإظهار قدرته على التمييز بين حالات الاستخدام المناسبة لكل أداة. سنستخدم بشكل أساسي حزمة LangChain Python مفتوحة المصدر.
استدعاء الأدوات، أو ما يُعرف أيضًا باسم استدعاء الوظيفة، هو الواجهة التي تسمح لوكلاء الذكاء الاصطناعي (AI) بالعمل على مهام محددة تتطلب معلومات محدَّثة، والتي لا تتوفر بخلاف ذلك للنماذج اللغة الكبيرة المدربة (LLMs). تتمتع نماذج LLM مثل ™IBM® Granite أو نماذج GPT (المحول التوليدي المُدرَّب مسبقًا) من OpenAI بإمكانية الوصول فقط إلى المعلومات المستخدمة في التدريب. هناك العديد من الأدوات الافتراضية التي يمكن الوصول إليها من خلال LangChain بما في ذلك أداة للعمل مع استعلامات قاعدة بيانات SQL، والوصول إلى المعلومات على Wikipedia وأكثر من ذلك بكثير. ننصحك بقراءة وثائق LangChain للحصول على قائمة شاملة بالأدوات الجاهزة.
يمكن تعريف الأدوات المخصصة باستخدام طرق مختلفة بما في ذلك استخدام مصمم @tool أو LangChain Runnables والذي سنغطيه في هذا البرنامج التعليمي. يمكن إنشاء أدوات Async باستخدام فئات StructuredTool أو BaseTool. لمعرفة الفروقات بين كل نهج، نوصيك بالرجوع إلى وثائق LangChain. راجِع البرنامج التعليمي لاستدعاء الوظائف من IBM للحصول على أمثلة للأدوات المخصصة.
نُوصي بالاطلاع على شرح وكلاء الذكاء الاصطناعي الخاص بنا للحصول على نظرة متعمقة حول أنواع وكلاء الذكاء الاصطناعي المختلفة وكيف تختلف عن روبوتات المحادثة التقليدية المعتمدة على النماذج اللغوية الكبيرة.
تحتاج إلى حساب ®IBM Cloud.
رغم توفُّر عدة أدوات للاختيار منها، يُرشدك هذا الدليل خلال خطوات إعداد حساب IBM لاستخدام Jupyter Notebook.
سجِّل الدخول إلى ™watsonx.ai باستخدام حساب IBM Cloud الخاص بك.
أنشئ مشروع watsonx.ai.
يمكنك الحصول على معرِّف المشروع من داخل مشروعك. انقر على علامة التبويب الإدارة (Manage)، ثم انسخ معرِّف المشروع من قسم التفاصيل (Details) في صفحة عام (General). ستحتاج إلى هذا المعرِّف في هذا البرنامج التعليمي.
أنشئ Jupyter Notebook.
ستؤدي هذه الخطوة إلى فتح بيئة Jupyter Notebook حيث يمكنك نسخ التعليمات البرمجية من هذا البرنامج التعليمي. أو يمكنك تنزيل هذا الدفتر إلى نظامك المحلي وتحميله إلى مشروع watsonx.ai كأصل. لمشاهدة المزيد من البرامج التعليمية حول Granite، تفضَّل بزيارة مجتمع IBM Granite. هذا البرنامج التعليمي متاح أيضًا على Github.
أنشئ مثيل خدمة watsonx.ai Runtime (اختَر المنطقة المناسبة لك، واختَر خطة Lite، وهي مثيل مجاني).
اربط مثيل خدمة watsonx.ai Runtime بالمشروع الذي أنشأته في watsonx.ai.
نحن بحاجة إلى عدد قليل من المكتبات والوحدات لهذا البرنامج التعليمي. تأكد من استيراد الصفحات التالية وإذا لم يتم تثبيتها، فيمكنك حل هذه المشكلة عن طريق تثبيت سريع للنقطة. ستكون LangChain وLangGraph إطار العمل ومجموعة الأدوات المستخدمة.
ملاحظة: تم إنشاء هذا البرنامج التعليمي باستخدام Python 3.11.9 وهو متوافق أيضًا مع Google Colab الذي يستخدم Python 3.10.12. للتحقق من إصدار Pythonالخاص بك، يمكنك تشغيل أمر !python --version في خلية التعليمات البرمجية.
لتعيين بيانات الاعتماد الخاصة بنا، نحتاج إلى WATSONX_APIKEY وWATSONX_PROJECT_ID التي أنشأتها في الخطوة 1. يمكنك إما تخزينها في ملف .env في الدليل الخاص بك أو استبدال نص العنصر النائب. سنقوم أيضًا بتعيين عنوان URL الذي يعمل كنقطة نهاية لواجهة برمجة التطبيقات.
تتطلب أداة الطقس المستخدمة في هذا البرنامج التعليمي مفتاح API OpenWeather. لإنشاء حساب واحد، قم بإنشاء حساب OpenWeather. عند إنشاء حساب، حدد علامة التبويب "مفاتيح API" لعرض مفتاحك المجاني.
في هذا البرنامج التعليمي، سنستخدم غلاف ChatWatsonx لتعيين نموذج المحادثة الخاص بنا. يعمل هذا الغلاف على تبسيط تكامل استدعاء الأدوات والتسلسل. سنستخدم نموذج granite-3-8b-instruct. ننصحك باستخدام مراجع واجهة برمجة التطبيقات في وثائق ChatWatsonx للحصول على المزيد من المعلومات.
لتهيئة LLM، نحتاج إلى تعيين معلمات النموذج. من المهم تكوين درجة حرارة النموذج هنا للحد من هلوسة الوكيل.
يمكننا استخدام فئة الأداة لجعل أدواتنا قابلة للاستدعاء. ومن المهم أيضًا أن يكون هناك وصف واضح وبسيط للأداة. بالإضافة إلى ذلك، تحدِّد السمة المنطقية return_direct إذا ما كان يجب إرجاع استجابة الأداة مباشرةً إلى المستخدم. وأخيرًا، يتم استخدام السمة الاختيارية args_schema لنوع pydantic.BaseModel لتوفير معلومات إضافية أو التحقق من صحة النموذج.
لنتخيل أنك تخطط لعطلتك القادمة إلى اليونان وأنك حريص على معرفة المزيد عنها والاستعداد للرحلة. أولًا، دعنا نقُم بإعداد أداة الطقس LangChain المدمجة. تستخدم الأداة OpenWeatherMapAPIWrapper الذي يستخدم OPENWEATHERMAP_API_KEY الذي أنشأناه سابقًا.
بعد ذلك، دعنا نقُم بإعداد أداة YouTube الجاهزة باستخدام حزمة بحث YouTube المتوفرة من خلال LangChain. ستكون هذه الخطوة مفيدة في العثور على مقاطع فيديو عن وجهة سفرك.
أخيرًا، دعنا ننشئ أداة تسوق عبر الإنترنت باستخدام Ionic. تعمل هذه الأداة على إرجاع العناصر ذات الصلة باستعلام المستخدم والتي يتم بيعها من خلال سوق التجارة الإلكترونية.
دعنا نضع قائمة بالأدوات المتعددة التي نقدمها للنموذج اللغوي الكبير. يمكننا أيضًا طباعة القائمة لنرى كيف تم تحميلها. للحصول على قائمة موسَّعة لأدوات LangChain المتوفرة، راجِع وثائق LangChain.
Output:
[Tool(name='weather_search', description='Get weather for a city and country code, e.g. Athens, GR', func=<bound method OpenWeatherMapAPIWrapper.run of OpenWeatherMapAPIWrapper(owm=<pyowm.owm.OWM - API key=************************611450cc, subscription type=free, PyOWM version=(3, 3, 0)>, openweathermap_api_key='******************')>),
Tool(name='youtube_search', description='Search YouTube for video links.', func=<bound method BaseTool.run of YouTubeSearchTool()>),
Tool(name='ionic_commerce_shopping_tool', description='\nIonic is an e-commerce shopping tool...[abbreviated]', verbose=True, func=<bound method Ionic.query of <ionic_langchain.tool.Ionic object at 0x17f6e5510>>)]
يشير استدعاء الأداة عادة إلى LLM الذي يعيد اسم الأداة المراد استدعاؤها ووسيطاتها. يمكننا إما استخدام المعلومات المستخرجة لأغراض أخرى أو يمكننا استدعاء الأداة بهذه الوسيطات. لمزيد من الأمثلة على ذلك، راجع البرنامج التعليمي لاستدعاء الوظيفة.
في الواقع، لا يعني ذلك بالضرورة تشغيل الأداة واسترداد ناتجها. في هذا البرنامج التعليمي، سنستكشف كِلا النهجين.
لإنجاز استدعاء الأداة التقليدية، يمكننا ببساطة تقديم استعلام مستخدم واستخدام طريقة bind_tools التي تم إنشاؤها مسبقًا لتمرير قائمة الأدوات إلى LLM عند كل تكرار.
Output:
AIMessage(content='', additional_kwargs={'tool_calls': [{'id': 'chatcmpl-tool-7a15abba7d3c4419970d807ac0c8d353', 'type': 'function', 'function': {'name': 'youtube_search', 'arguments': '{"query": "greece"}'}}]}, response_metadata={'token_usage': {'completion_tokens': 21, 'prompt_tokens': 578, 'total_tokens': 599}, 'model_name': 'ibm/granite-3-8b-instruct', 'system_fingerprint': '', 'finish_reason': 'tool_calls'}, id='chat-5fe7a26b8f954c179c4995e873bff91e', tool_calls=[{'name': 'youtube_search', 'args': {'query': 'greece'}, 'id': 'chatcmpl-tool-7a15abba7d3c4419970d807ac0c8d353', 'type': 'tool_call'}], usage_metadata={'input_tokens': 578, 'output_tokens': 21, 'total_tokens': 599})
Output:
{'tool_calls': [{'id': 'chatcmpl-tool-7a15abba7d3c4419970d807ac0c8d353',
'type': 'function',
'function': {'name': 'youtube_search',
'arguments': '{"query": "greece"}'}}]}
كما هو موضح في إخراج tool_calls، يحدد LLM بشكل صحيح استدعاء الأداة المناسب والوسيطات. لا يقوم LLM بتشغيل الأداة نفسها. سنفعل هذا في الخطوة التالية.
لتشغيل استدعاءات الأداة، نحتاج أولًا إلى إنشاء وكيل ReAct باستخدام طريقة مساعد create_react_agent LangGraph التي تم إنشاؤها مسبقًا. تقوم هذه الوظيفة بإنشاء رسم بياني يعمل كجسر بين نموذج المحادثة والأدوات المتاحة، وبالتالي تمكين استدعاء الأداة الوكيلية. يتم تمثيل هذا الرسم البياني في المخطط التالي.
نحن الآن قادرون على طرح الأسئلة على الوكيل والتي تتطلب استدعاء الأداة. أولًا، يمكننا أن نطلب من النموذج إرجاع عناوين URL لمقاطع فيديو على YouTube حول اليونان. يمكننا استخدام فئة HumanMessage لتمرير استعلام المستخدم إلى LLM.
Output:
[HumanMessage(content='What are some YouTube videos about Greece', additional_kwargs={}, response_metadata={}, id='1adba6c0-32e6-4bbd-92a6-7d21b0177439'),
AIMessage(content='', additional_kwargs={'tool_calls': [{'id': 'chatcmpl-tool-b4b5bf452404424ba4d6d9c26e53c6ce', 'type': 'function', 'function': {'name': 'youtube_search', 'arguments': '{"query": "Greece"}'}}]}, response_metadata={'token_usage': {'completion_tokens': 22, 'prompt_tokens': 578, 'total_tokens': 600}, 'model_name': 'ibm/granite-3-8b-instruct', 'system_fingerprint': '', 'finish_reason': 'tool_calls'}, id='chat-5f41aee6736842749285aa7fbff50f65', tool_calls=[{'name': 'youtube_search', 'args': {'query': 'Greece'}, 'id': 'chatcmpl-tool-b4b5bf452404424ba4d6d9c26e53c6ce', 'type': 'tool_call'}], usage_metadata={'input_tokens': 578, 'output_tokens': 22, 'total_tokens': 600}),
ToolMessage(content="['https://www.youtube.com/watch?v=waQY2Ucpbd0&pp=ygUGR3JlZWNl', 'https://www.youtube.com/watch?v=NMlBB2pK5qo&pp=ygUGR3JlZWNl']", name='youtube_search', id='1ccf3137-2c10-495e-86ad-a548a3434243', tool_call_id='chatcmpl-tool-b4b5bf452404424ba4d6d9c26e53c6ce'),
AIMessage(content='Here are some YouTube videos about Greece:\n\n1. [Greece Travel Guide | Top 10 Tourist Attractions](https://www.youtube.com/watch?v=waQY2Ucpbd0&pp=ygUGR3JlZWNl)\n2. [Greece Travel Guide | Top 10 Tourist Attractions](https://www.youtube.com/watch?v=NMlBB2pK5qo&pp=ygUGR3JlZWNl)', additional_kwargs={}, response_metadata={'token_usage': {'completion_tokens': 117, 'prompt_tokens': 677, 'total_tokens': 794}, 'model_name': 'ibm/granite-3-8b-instruct', 'system_fingerprint': '', 'finish_reason': 'stop'}, id='chat-801e3b596a174ac88246b507c93e5869', usage_metadata={'input_tokens': 677, 'output_tokens': 117, 'total_tokens': 794})]
رائع! كما هو موضح في AIMessage، حدد النموذج بشكل صحيح استدعاء الأداة المناسبة. في ToolMessage، نرى أن النموذج أعاد بنجاح الإخراج المتوقع باستخدام أداة LangChain YouTube المدمجة. أخيرًا، يُظهر AIMessage أن LLM قام بتوليف استجابة الأداة.
بعد ذلك، دعنا نسأل النموذج عن الطقس في اليونان لتحديد ما إذا كان يستدعي أداة weather_search كما هو متوقع.
Output:
[HumanMessage(content='What is the weather in Athens, GR', additional_kwargs={}, response_metadata={}, id='a0c4b69c-988a-4f7d-9b8a-4780305f8e2a'),
AIMessage(content='', additional_kwargs={'tool_calls': [{'id': 'chatcmpl-tool-9a0c07a3b35f4c69a351c5540ab663f8', 'type': 'function', 'function': {'name': 'weather_search', 'arguments': '{"__arg1": "Athens, GR"}'}}]}, response_metadata={'token_usage': {'completion_tokens': 26, 'prompt_tokens': 579, 'total_tokens': 605}, 'model_name': 'ibm/granite-3-8b-instruct', 'system_fingerprint': '', 'finish_reason': 'tool_calls'}, id='chat-eeed087050e049f0ad715f3615c7fdda', tool_calls=[{'name': 'weather_search', 'args': {'__arg1': 'Athens, GR'}, 'id': 'chatcmpl-tool-9a0c07a3b35f4c69a351c5540ab663f8', 'type': 'tool_call'}], usage_metadata={'input_tokens': 579, 'output_tokens': 26, 'total_tokens': 605}),
ToolMessage(content='In Athens, GR, the current weather is as follows:\nDetailed status: few clouds\nWind speed: 4.47 m/s, direction: 23°\nHumidity: 58%\nTemperature: \n - Current: 15.15°C\n - High: 15.74°C\n - Low: 14.1°C\n - Feels like: 14.24°C\nRain: {}\nHeat index: None\nCloud cover: 20%', name='weather_search', id='587b0230-b667-41de-97b9-3779554d2559', tool_call_id='chatcmpl-tool-9a0c07a3b35f4c69a351c5540ab663f8'),
AIMessage(content='The current weather in Athens, GR is:\n- Detailed status: few clouds\n- Wind speed: 4.47 m/s, direction: 23°\n- Humidity: 58%\n- Temperature:\n - Current: 15.15°C\n - High: 15.74°C\n - Low: 14.1°C\n - Feels like: 14.24°C\n- Rain: None\n- Heat index: None\n- Cloud cover: 20%', additional_kwargs={}, response_metadata={'token_usage': {'completion_tokens': 125, 'prompt_tokens': 733, 'total_tokens': 858}, 'model_name': 'ibm/granite-3-8b-instruct', 'system_fingerprint': '', 'finish_reason': 'stop'}, id='chat-6719a5ca266a439bb10ed410db25c5ef', usage_metadata={'input_tokens': 733, 'output_tokens': 125, 'total_tokens': 858})]
كان النموذج قادرًا على تمييز الأداة المناسبة للاتصال وتشغيل الأداة مع الوسيطات المستخرجة بالإضافة إلى تجميع إخراج الأداة. الآن، دعنا نطلب من LLM بعض الحقائب التي تقل قيمتها عن 100 دولار أمريكي لرحلتك القادمة. لاحظ أن الأداة مصممة للبحث عن الأسعار بالسنت. ومن ثم، فإننا نطلب حقائب أقل من 10,000 سنت في هذا السيناريو، أي ما يعادل 100 دولار أمريكي.
Output:
[HumanMessage(content='Find some suitcases for less than 10000', additional_kwargs={}, response_metadata={}, id='8b207035-150a-4390-aff3-8b09ef85a592'),
AIMessage(content='', additional_kwargs={'tool_calls': [{'id': 'chatcmpl-tool-b011e718b18e41dcbcae2f7786af263d', 'type': 'function', 'function': {'name': 'ionic_commerce_shopping_tool', 'arguments': '{"__arg1": "suitcases, 10, 0, 10000"}'}}]}, response_metadata={'token_usage': {'completion_tokens': 41, 'prompt_tokens': 582, 'total_tokens': 623}, 'model_name': 'ibm/granite-3-8b-instruct', 'system_fingerprint': '', 'finish_reason': 'tool_calls'}, id='chat-e38c8568d1754636a6a92082561180bd', tool_calls=[{'name': 'ionic_commerce_shopping_tool', 'args': {'__arg1': 'suitcases, 10, 0, 10000'}, 'id': 'chatcmpl-tool-b011e718b18e41dcbcae2f7786af263d', 'type': 'tool_call'}], usage_metadata={'input_tokens': 582, 'output_tokens': 41, 'total_tokens': 623}),
ToolMessage(content='[{"products": [{"links": [{"text": "Details", "type": "pdp", "url": "https://go.ionic.click/Ch4CKd"}], "merchant_name": "Walmart", "merchant_product_id": "811277349", "name": "Zimtown Hardside Lightweight Spinner Orange 3 Piece Luggage Set with TSA Lock", "price": "$69.99", "status": "available", "thumbnail": "https://i5.walmartimages.com/asr/b809a274-ccc7-4ca4-b4f1-e848b4412fe6.314144bcd13e5467a33cb99e8dd5237c.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff", "brand_name": "Zimtown", "upc": "273109526768"}, {"links": [{"text": "Details", "type": "pdp", "url": "https://www.amazon.com/dp/B071HHX6VF?tag=ioniccommer00-20&linkCode=osi&th=1&psc=1"}], "merchant_name": "Amazon", "merchant_product_id": "B071HHX6VF", "name": "Amazon Basics Expandable Hardside Luggage, Suitcase with Wheels, 30-Inch Spinner with Four Spinner Wheels and Scratch-Resistant Surface, Black", "price": "$74.49", "status": "available", "thumbnail": "https://m.media-amazon.com/images/I/41jJcuMYSdL._SL160_.jpg", "brand_name": "Amazon Basics", "upc": "841710177190"}, .....[abbreviated],
AIMessage(content='Here are some suitcases that are less than 10000:\n\n1. [Zimtown Hardside Lightweight Spinner Orange 3 Piece Luggage Set with TSA Lock](https://go.ionic.click/Ch4CKd) - $69.99\n2. [Amazon Basics Expandable Hardside Luggage, Suitcase with Wheels, 30-Inch Spinner](https://www.amazon.com/dp/B071HHX6VF) - $74.49\n3. [SwissGear Sion Softside Expandable Luggage, Blue, Carry-On 21-Inch](https://www.amazon.com/dp/B01MFBVKDF) - $80.73\n4. [Travelers Club Midtown Hardside Luggage Travel, Rose Gold, 4-Piece Set](https://www.amazon.com/dp/B07RS4PK3J) - $95.19\n5. [American Tourister Stratum 2.0 Expandable Hardside Luggage with Spinner Wheels, 28" SPINNER, Slate Blue](https://www.amazon.com/dp/B0B2X1BDFH) - $89.97\n6. [Wrangler Smart Luggage Set with Cup Holder and USB Port, Navy Blue, 20-Inch Carry-On](https://www.amazon.com/dp/B07SLG6WZ2) - $39.99\n7. [Wrangler Hardside Carry-On Spinner Luggage, Lilac, 20-Inch](https://www.amazon.com/dp/B0C7YWMBGP) - $40.00\n8. [Protege 20 inch Hard Side Carry-On Spinner Luggage, Black Matte Finish (Walmart.com Exclusive)](https://go.ionic.click/qJqBRA) - $29.87\n9. [Wrangler Wesley Rolling Duffel Bag, Tannin, Large 30-Inch](https://www.amazon.com/dp/B07XKWMLJ5) - $44.00\n10. [U.S. Traveler Boren Polycarbonate Hardside Rugged Travel Suitcase Luggage with 8 Spinner Wheels, Aluminum Handle, Lavender, Checked-Large 30-Inch](https://www.amazon.com/dp/B085B4D852) - $79.99', additional_kwargs={}, response_metadata={'token_usage': {'completion_tokens': 612, 'prompt_tokens': 2794, 'total_tokens': 3406}, 'model_name': 'ibm/granite-3-8b-instruct', 'system_fingerprint': '', 'finish_reason': 'stop'}, id='chat-d08201ff6ef84c428e7ae44372396926', usage_metadata={'input_tokens': 2794, 'output_tokens': 612, 'total_tokens': 3406})]
كما يتضح من استجابة LLM، استخدم النموذج بشكل صحيح أداة التسوق لإعادة العديد من الحقائب للشراء عبر الإنترنت بأقل من 100 دولار أمريكي.
في هذا البرنامج التعليمي، استخدمت أدوات LangChain المعدة مسبقًا لإنشاء وكيل ReAct في Python باستخدام watsonx باستخدام نموذج granite-3-8b-instruct . لقد استخدمت أدوات youtube_search ، وweather_search وionic_search . أوضح البرنامج التعليمي كيفية تنفيذ استدعاء الأدوات التقليدي بالإضافة إلى نهج يعمل على تشغيل الأدوات. نموذج الناتج مهم لأنه يوضح الخطوات التي اتخذها الوكيل في إنشاء سير عمل الوكيل الخاص به باستخدام الوظائف المتاحة. كانت الأدوات الممنوحة للوكيل ضرورية للإجابة عن استفسارات المستخدمين.
يمكنك إنشاء مساعدين ووكلاء ذكاء اصطناعي ووكلاء أقوياء يعملون على أتمتة مهام سير العمل والعمليات باستخدام الذكاء الاصطناعي التوليدي ونشرها وإدارتها.
يمكنك بناء مستقبل عملك باستخدام حلول الذكاء الاصطناعي الجديرة بالثقة.
تساعد خدمات IBM Consulting AI في إعادة تصور طريقة عمل الشركات باستخدام حلول الذكاء الاصطناعي من أجل النهوض بأعمالها.