إنشاء نظام LangChain agentic RAG باستخدام Granite-3.0-8B-Instruct في watsonx.ai

مؤلف

Anna Gutowska

AI Engineer, Developer Advocate

IBM

ما المقصود بالتوليد المعزز بالاسترجاع القائم على الوكلاء؟

في هذا الدليل، ستُنشئ نظام RAG وكيل باستخدام LangChain مع نموذج IBM Granite-3.0-8B-Instruct المتوفر الآن على watsonx.ai،القادر على الإجابة عن الأسئلة المعقدة حول بطولة US Open لعام 2024 باستخدام معلومات خارجية.

نظرة عامة على التوليد المعزز بالاسترجاع القائم على الوكلاء

ما المقصود بالتوليد المعزز بالاسترجاع (RAG)؟

التوليد المعزز بالاستخراج (RAG) هو تقنية في معالجة اللغة الطبيعية (NLP) تستفيد من استرجاع المعلومات والنماذج التوليدية لإنتاج ردود أكثر دقة وملاءمة ووعيًا بالسياق. في مهام توليد اللغة التقليدية، تُستخدم النماذج اللغوية الكبيرة (LLMs) مثل نماذج Llama من Meta أو نماذج Granite من IBM لبناء الردود استنادًا إلى موجِّه الإدخال. من بين حالات الاستخدام الشائعة في العالم الواقعي لهذه النماذج اللغوية الكبيرة هي روبوتات المحادثة. عندما تفتقد النماذج معلومات حديثة وذات صلة في قاعدة معرفتها، يُعَد التوليد المعزز بالاسترجاع (RAG) أداة قوية.

مَن هم وكلاء الذكاء الاصطناعي؟

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

التوليد المعزز بالاسترجاع القائم على الوكلاء مقابل التوليد المعزز بالاسترجاع التقليدي

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

يمكن لوكلاء الذكاء الاصطناعي، أو الوكلاء الأذكياء، العمل بشكل تعاوني أيضًا في أنظمة متعددة الوكلاء، والتي غالبًا ما تتفوق على الوكلاء الفرديين. وهذه القدرة على التوسع والتكيف هي ما يميز أنظمة RAG القائمة على الوكلاء عن أنظمة RAG التقليدية.

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

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

الخطوات

الخطوة 1. إعداد البيئة

رغم توفُّر عدة أدوات للاختيار منها، يُرشدك هذا الدليل خلال خطوات إعداد حساب IBM لاستخدام Jupyter Notebook.

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

  2. إنشاء مشروع watsonx.ai.

    يمكنك الحصول على معرِّف المشروع من داخل مشروعك. انقر على علامة التبويب الإدارة (Manage)، ثم انسخ معرِّف المشروع من قسم التفاصيل (Details) في صفحة عام (General). ستحتاج إلى هذا المعرِّف في هذا البرنامج التعليمي.

  3. أنشئ Jupyter Notebook.

ستؤدي هذه الخطوة إلى فتح بيئة دفتر ملاحظات حيث يمكنك نسخ التعليمات البرمجية من هذا البرنامج التعليمي. أو يمكنك تنزيل هذا الدفتر إلى نظامك المحلي وتحميله إلى مشروع watsonx.ai كأصل. لمشاهدة المزيد من البرامج التعليمية حول Granite، تفضَّل بزيارة مجتمع IBM Granite. يمكن العثور على Jupyter Notebook هذا مع مجموعات البيانات المستخدمة على GitHub.

الخطوة 2. إعداد مثيل watsonx.ai Runtime ومفتاح واجهة برمجة التطبيقات.

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

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

  3. اربط مثيل خدمة watsonx.ai Runtime بالمشروع الذي أنشأته في watsonx.ai.

الخطوة 3. تثبيت واستيراد المكتبات ذات الصلة وإعداد بيانات الاعتماد الخاصة بك.

نحن بحاجة إلى بعض التبعيات لهذا البرنامج التعليمي. تأكَّد من استيراد الحزم التالية؛ وإذا لم تكن مثبَّتة، يمكنك تثبيتها بسرعة باستخدام أمر pip.

من أُطُر العمل الشائعة في Python لبناء أنظمة الذكاء الاصطناعي الوكيل: LangChain وLangGraph وLlamaIndex. في هذا البرنامج التعليمي، سنستخدم LangChain.

# installations
!pip install langchain | tail -n 1
!pip install langchain-ibm | tail -n 1
!pip install langchain-community | tail -n 1
!pip install ibm-watsonx-ai | tail -n 1
!pip install ibm_watson_machine_learning | tail -n 1
!pip install chromadb | tail -n 1
!pip install tiktoken | tail -n 1
!pip install python-dotenv | tail -n 1
!pip install bs4 | tail -n 1
# imports import os
from dotenv import load_dotenv
from langchain_ibm import WatsonxEmbeddings, WatsonxLLM
from langchain.vectorstores import Chroma
from langchain_community.document_loaders import WebBaseLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain.prompts import PromptTemplate
from langchain.tools import tool
from langchain.tools.render import render_text_description_and_args
from langchain.agents.output_parsers import JSONAgentOutputParser
from langchain.agents.format_scratchpad import format_log_to_str
from langchain.agents import AgentExecutor
from langchain.memory import ConversationBufferMemory
from langchain_core.runnables import RunnablePassthrough
from ibm_watson_machine_learning.metanames import GenTextParamsMetaNames as GenParams
from ibm_watsonx_ai.foundation_models.utils.enums import EmbeddingTypes

إعداد بيانات الاعتماد الخاصة بك. يُرجى حفظ متغيرَي PROJECT_ID وAPIKEY في ملف .env منفصل يقع في نفس مستوى الدليل الخاص بك مثل دفتر الملاحظات هذا.

load_dotenv(os.getcwd()+"/.env", override=True)
credentials = {
    "url": "https://us-south.ml.cloud.ibm.com",
    "apikey": os.getenv("WATSONX_APIKEY", ""),
}
project_id = os.getenv("PROJECT_ID", "")

الخطوة 4. تهيئة وكيل أساسي دون أدوات

هذه الخطوة مهمة لأنها ستُنتج مثالًا واضحًا لسلوك الوكيل مع وجود مصادر بيانات خارجية ودونها. لنبدأ بتعيين المَعلمات.

يمكن العثور على مَعلمات النموذج المتاحة هنا. أجرينا تجارب على مجموعة من مَعلمات النموذج، بما في ذلك درجة الحرارة، والحدين الأدنى والأقصى للرموز الجديدة، وتسلسلات الإيقاف. تعرَّف على المزيد حول مَعلمات النموذج وما تعنيه في وثائق watsonx. من المهم تحديد stop_sequences هنا للحد من الهلوسة. تُشير هذه التعليمات إلى الوكيل بضرورة التوقف عن المتابعة عند العثور على سلاسل نصية محددة. في حالتنا، نريد من الوكيل إنهاء استجابته عند الوصول إلى الملاحظة، وألا يختلق ردًا بشريًا. لذلك، فإن إحدى تسلسلات الإيقاف (stop_sequences) لدينا هي "Human:" والأخرى هي "Observation" ليتوقف الوكيل بمجرد إنتاج استجابة نهائية.

في هذا البرنامج التعليمي، نوصي باستخدام نموذج Granite-3.0-8B-Instruct من IBM كنموذج لغوي كبير لتحقيق نتائج مشابهة. لك الحرية في استخدام أي نموذج ذكاء اصطناعي من اختيارك. يمكن العثور على نماذج الأساس المتاحة من خلال watsonx هنا. الغرض من هذه النماذج في تطبيقات LLM هو العمل كمحرك الاستدلال الذي يقرر الإجراءات التي يجب اتخاذها.

llm = WatsonxLLM(
    model_id="ibm/granite-3-8b-instruct",
    url=credentials.get("url"),
    apikey=credentials.get("apikey"),
    project_id=project_id,
    params={
        GenParams.DECODING_METHOD: "greedy",
        GenParams.TEMPERATURE: 0,
        GenParams.MIN_NEW_TOKENS: 5,
        GenParams.MAX_NEW_TOKENS: 250,
        GenParams.STOP_SEQUENCES: ["Human:", "Observation"],
    },
)

سنقوم بإعداد قالب موجِّه في حال أردت طرح عدة أسئلة.

template = "Answer the {query} accurately. If you do not know the answer, simply say you do not know."
prompt = PromptTemplate.from_template(template)

والآن يمكننا إعداد سلسلة باستخدام الموجِّه والنموذج اللغوي الكبير. هذا يسمح للنموذج التوليدي بإنتاج استجابة.

agent = prompt | llm

دعنا نختبر لنرى كيف يستجيب الوكيل لاستعلام أساسي.

agent.invoke({"query": 'What sport is played at the US Open?'})

Output: ' Do not try to make up an answer.\n\nThe sport played at the US Open is tennis.'

استجاب الوكيل بنجاح للسؤال الأساسي وقدَّم الإجابة الصحيحة. في الخطوة التالية من هذا البرنامج التعليمي، سننشئ أداة RAG تمكِّن الوكيل من الوصول إلى معلومات ذات صلة بمشاركة IBM في بطولة US Open لعام 2024. كما أوضحنا، لا تستطيع النماذج اللغوية التقليدية الحصول على المعلومات الحديثة بمفردها. دعنا نتحقق من هذا.

agent.invoke({"query": 'Where was the 2024 US Open Tennis Championship?'})

Output: ' Do not make up an answer.\n\nThe 2024 US Open Tennis Championship has not been officially announced yet, so the location is not confirmed. Therefore, I do not know the answer to this question.'

من الواضح أن LLM غير قادر على تزويدنا بالمعلومات ذات الصلة. بيانات التدريب المستخدمة لهذا النموذج تحتوي على معلومات تسبق بطولة US Open لعام 2024، ودون الأدوات المناسبة، لا يمكن للوكيل الوصول إلى هذه المعلومات.

الخطوة 5. إنشاء قاعدة المعرفة وأداة استرجاع المعلومات

الخطوة الأولى في إنشاء قاعدة المعرفة هي تحديد عناوين الروابط (URLs) التي سنستخرج منها المحتوى. في هذه الحالة، سيتم جمع مصدر البيانات من المحتوى الإلكتروني الذي يلخص مشاركة IBM في بطولة US Open لعام 2024. يتم إنشاء عناوين URL ذات الصلة في قائمة عناوين URL.

urls = ['https://www.ibm.com/qa-ar/case-studies/us-open',
        'https://www.ibm.com/qa-ar/sports/usopen',
        'https://newsroom.ibm.com/US-Open-AI-Tennis-Fan-Engagement',
        'https://newsroom.ibm.com/2024-08-15-ibm-and-the-usta-serve-up-new-and-enhanced-generative-ai-features-for-2024-us-open-digital-platforms']

بعد ذلك، حمِّل المستندات باستخدام أداة WebBaseLoader من LangChain للعناوين التي قمنا بإدراجها. سنطبع أيضًا نموذج وثيقة لمعرفة كيفية تحميله.

docs = [WebBaseLoader(url).load() for url in urls]
docs_list = [item for sublist in docs for item in sublist]
docs_list[0]

Output: Document(metadata={'source': 'https://www.ibm.com/qa-ar/case-studies/us-open', 'title': 'U.S. Open | IBM', 'description': 'To help the US Open stay on the cutting edge of customer experience, IBM Consulting built powerful generative AI models with watsonx.', 'language': 'en'}, page_content='\n\n\n\n\n\n\n\n\n\nU.S. Open | IBM\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nHome\n\n\n\n\nCase Studies\n\n\n\nUS Open \n\n\n\n                    \n\n\n\n  \n    Acing the US Open digital experience\n\n\n\n\n\n\n    \n\n\n                \n\n                        \n\n\n  \n  \n      AI models built with watsonx transform data into insight\n  \n\n\n\n\n    \n\n\n                    \n\n\nGet the latest AI and tech insights\n\n\nLearn More\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nFor two weeks at the end of summer, nearly one million people make the journey to Flushing, New York, to watch the best tennis players in the world compete in the US Open Tennis Championships...')

لتقسيم البيانات في هذه الوثائق إلى أجزاء يمكن للنموذج اللغوي الكبير معالجتها، يمكننا استخدام أداة لتجزئة النصوص مثل RecursiveCharacterTextSplitter. تقوم أداة تقسيم النص هذه بتقسيم المحتوى استنادًا إلى الأحرف التالية: ["\n\n", "\n", " ", ""]. يتم ذلك بهدف الحفاظ على النص في كتل موحَّدة، مثل الفقرات والجمل والكلمات معًا.

بمجرد بدء تقسيم النص، يمكننا تطبيقه على docs_list.

text_splitter = RecursiveCharacterTextSplitter.from_tiktoken_encoder(chunk_size=250, chunk_overlap=0)
doc_splits = text_splitter.split_documents(docs_list)

نموذج التضمين الذي نستخدمه هو نموذج IBM™ Slate من خلال خدمة التضمينات في watsonx.ai. لنبدأ.

embeddings = WatsonxEmbeddings(
    model_id=EmbeddingTypes.IBM_SLATE_30M_ENG.value,
    url=credentials["url"],
    apikey=credentials["apikey"],
    project_id=project_id,
)

لتخزين المستندات المضمَّنة لدينا، سنستخدم Chroma DB، وهو متجر متجهات مفتوح المصدر.

vectorstore = Chroma.from_documents(
    documents=doc_splits,
    collection_name="agentic-rag-chroma",
    embedding=embeddings,
)

للوصول إلى المعلومات في متجر المتجهات، يجب إعداد أداة استرجاع.

retriever = vectorstore.as_retriever()

الخطوة 6. تحديد أداة RAG الخاصة بالوكيل

دعونا نحدِّد الأداة get_IBM_US_Open_context() التي سيستخدمها الوكيل. المَعلمة الوحيدة لهذه الأداة هي استعلام المستخدم. يتم أيضًا تدوين وصف الأداة لإبلاغ الوكيل باستخدامها. بهذه الطريقة، يعرف الوكيل متى يستدعي هذه الأداة. يمكن استخدام هذه الأداة من قبل نظام RAG القائم على الوكلاء لتوجيه استعلام المستخدم إلى مخزن المتجهات إذا كان يتعلق بمشاركة IBM في بطولة US Ope لعام 2024.

@tool
def get_IBM_US_Open_context(question: str):
    """Get context about IBM's involvement in the 2024 US Open Tennis Championship."""
    context = retriever.invoke(question)
    return context

tools = [get_IBM_US_Open_context]

الخطوة 7. إنشاء قالب الموجِّه

بعد ذلك، سنقوم بإعداد نموذج موجِّه جديد لطرح أسئلة متعددة. هذا القالب أكثر تعقيدًا. يُشار إليه على أنها موجِّه دردشة منظمة ويمكن استخدامه لإنشاء وكلاء لديهم أدوات متعددة متاحة. في حالتنا، تم تحديد الأداة التي نستخدمها في الخطوة 6. سيتكون موجِّه الدردشة المنظمة من system_prompt وhuman_prompt وأداة RAG الخاصة بنا.

أولًا، سنقوم بإعداد system_prompt. يطلب هذا الموجِّه من الوكيل طباعة "عملية تفكيره"، والتي تتضمن المهام الفرعية التي قام بها، والأدوات المستخدمة، والمخرجات النهائية. وهذا يمنحنا رؤى حول وظيفة الوكيل التي يتم استدعاؤها. يطلب الموجِّه من الوكيل أيضًا إرجاع ردوده بتنسيق JSON Blob.

system_prompt = """Respond to the human as helpfully and accurately as possible. You have access to the following tools: {tools}
Use a json blob to specify a tool by providing an action key (tool name) and an action_input key (tool input).
Valid "action" values: "Final Answer" or {tool_names}
Provide only ONE action per $JSON_BLOB, as shown:"
```
{{
"action": $TOOL_NAME,
"action_input": $INPUT
}}
```
Follow this format:
Question: input question to answer
Thought: consider previous and subsequent steps
Action:
```
$JSON_BLOB
```
Observation: action result
... (repeat Thought/Action/Observation N times)
Thought: I know what to respond
Action:
```
{{
"action": "Final Answer",
"action_input": "Final response to human"
}}
Begin! Reminder to ALWAYS respond with a valid json blob of a single action.
Respond directly if appropriate. Format is Action:```$JSON_BLOB```then Observation"""

في الكود التالي، نُنشئ human_prompt. يطلب هذا الموجِّه من الوكيل عرض إدخال المستخدم متبوعًا بالخطوات الوسيطة التي اتخذها الوكيل كجزء من agent_scratchpad.

human_prompt = """{input}
{agent_scratchpad}
(reminder to always respond in a JSON blob)"""

بعد ذلك، نحدِّد ترتيب الموجِّهات التي أنشأناها داخل قالب الموجِّه. نُنشئ هذا القالب الجديد ليشمل system_prompt، متبوعًا بقائمة اختيارية من الرسائل المخزَّنة في ذاكرة الوكيل (إن وجدت)، وأخيرًا human_prompt الذي يحتوي على إدخال المستخدم وagent_scratchpad.

prompt = ChatPromptTemplate.from_messages(
    [
        ("system", system_prompt),
        MessagesPlaceholder("chat_history", optional=True),
        ("human", human_prompt),
    ]
)

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

prompt = prompt.partial(
    tools=render_text_description_and_args(list(tools)),
    tool_names=", ".join([t.name for t in tools]),
)

الخطوة 8. إعداد ذاكرة الوكيل وسلسلة الوكيل

الميزة المهمة لوكلاء الذكاء الاصطناعي هي ذاكرتهم. يمكن للوكلاء تخزين المحادثات السابقة والنتائج السابقة في ذاكرتهم لتحسين دقة وملاءمة ردودهم في المستقبل. في حالتنا، سنستخدم ConversationBufferMemory() من LangChain كوسيلة لتخزين الذاكرة.

memory = ConversationBufferMemory()

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

chain = ( RunnablePassthrough.assign(
    agent_scratchpad=lambda x: format_log_to_str(x["intermediate_steps"]),
    chat_history=lambda x: memory.chat_memory.messages,
    )
    | prompt | llm | JSONAgentOutputParser())

agent_executor = AgentExecutor(agent=chain, tools=tools, handle_parsing_errors=True, verbose=True, memory=memory)

الخطوة 9. إنشاء ردود باستخدام نظام RAG القائم على الوكلاء

نحن الآن قادرون على طرح أسئلة على الوكيل. تذكر عدم قدرة الوكيل السابقة على تزويدنا بالمعلومات المتعلقة ببطولة US Open لعام 2024. الآن بعد أن أصبح لدى الوكيل أداة RAG الخاصة به متاحة للاستخدام، دعنا نحاول طرح الأسئلة نفسها مرة أخرى.

agent_executor.invoke({"input": 'Where was the 2024 US Open Tennis Championship?'})

الناتج: (تم اختصار بعض حقول الوصف ومحتوى الصفحة لعرض النتائج بشكل موجز)

> بدء سلسلة AgentExecutor جديدة...

التفكير: المستخدم يسأل عن موقع بطولة الولايات المتحدة المفتوحة للتنس 2024. أحتاج إلى معرفة مكان انعقاده.
الإجراء:
```
{
    "action": "get_IBM_US_Open_context",
    "action_input": "Where was the 2024 US Open Tennis Championship held?"
}
```
Observation[Document(metadata={'description': "IBM and the United States Tennis Association (USTA) announced several watsonx-powered fan features coming to the US Open digital platforms ahead of this year's tournament. These new and enhanced capabilities – a product of collaboration between IBM and the USTA digital team – aim to deliver a more informative and engaging experience for millions of tennis fans around the world.", 'language': 'en-us', 'source': 'https://newsroom.ibm.com/2024-08-15-ibm-and-the-usta-serve-up-new-and-enhanced-generative-ai-features-for-2024-us-open-digital-platforms', 'title': 'IBM and the USTA Serve Up New and Enhanced Generative AI Features for 2024 US Open Digital Platforms'}, page_content="IBM and the USTA Serve Up New and Enhanced Generative AI Features for 2024 US Open Digital Platforms\n-New Match Report summaries offer...")]

Action:
```
{
    "action": "Final Answer",
    "action_input": "The 2024 US Open Tennis Championship was held at the USTA Billie Jean King National Tennis Center in Flushing, Queens, New York."
}
```
Observation

> Finished chain.

{'input': 'Where was the 2024 US Open Tennis Championship?',
  'history': '',
  'output': 'The 2024 US Open Tennis Championship was held at the USTA Billie Jean King National Tennis Center in Flushing, Queens, New York.'}

رائع! استخدَم الوكيل أداة RAG المتاحة لإرجاع موقع بطولة US Open لعام 2024، وفقًا لاستعلام المستخدم. حتى أننا نرى المستند الدقيق الذي يسترد الوكيل معلوماته منه. الآن، دعنا نجرب استعلام سؤال أكثر تعقيدًا قليلًا. هذه المرة، سيكون الاستفسار حول مشاركة IBM في بطولة US Open لعام 2024.

agent_executor.invoke({"input": 'How did IBM use watsonx at the 2024 US Open Tennis Championship?'})

الناتج: (تم اختصار بعض حقول الوصف ومحتوى الصفحة لعرض النتائج بشكل موجز)

> Entering new AgentExecutor chain...
```
{
    "action": "get_IBM_US_Open_context",
    "action_input": "How did IBM use watsonx at the 2024 US Open Tennis Championship?"
}
```
Observation[Document(metadata={'description': 'To help the US Open stay on the cutting edge of customer experience, IBM Consulting built powerful generative AI models with watsonx.', 'language': 'en', 'source': 'https://www.ibm.com/qa-ar/case-studies/us-open', 'title': 'U.S. Open | IBM'}, page_content='The US Open is a sprawling, two-week tournament, with hundreds of matches played on 22 different courts. Keeping up with all the action is a challenge, both for tennis fans and the USTA editorial team covering the event...)]

Action:
```
{
    "action": "Final Answer",
    "action_input": "IBM used watsonx at the 2024 US Open Tennis Championship to create generative AI-powered features such as Match Reports, AI     Commentary, and SlamTracker. These features enhance the digital experience for fans and scale the productivity of the USTA editorial team."
}
```
Observation
> Finished chain.

{'input': 'How did IBM use watsonx at the 2024 US Open Tennis Championship?',
 'history': 'Human: Where was the 2024 US Open Tennis Championship?\nAI: The 2024 US Open Tennis Championship was held at the USTA Billie Jean King National Tennis Center in Flushing, Queens, New York.',
 'output': 'IBM used watsonx at the 2024 US Open Tennis Championship to create generative AI-powered features such as Match Reports, AI Commentary, and SlamTracker. These features enhance the digital experience for fans and scale the productivity of the USTA editorial team.'}

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

الآن، دعنا نختبر إذا ما كان الوكيل قادرًا على معرفة متى لا يكون استدعاء الأداة ضروريًا للإجابة عن استفسار المستخدم. يمكننا اختبار ذلك من خلال طرح سؤال على وكيل RAG لا يتعلق ببطولة US Open.

agent_executor.invoke({"input": 'What is the capital of France?'})

الناتج

> Entering new AgentExecutor chain...

{
    "action": "Final Answer",
    "action_input": "The capital of France is Paris."
}

Observation
> Finished chain.

{'input': 'What is the capital of France?',
 'history': 'Human: Where was the 2024 US Open Tennis Championship?\nAI: The 2024 US Open Tennis Championship was held at the USTA Billie Jean King National Tennis Center in Flushing, Queens, New York.\nHuman: How did IBM use watsonx at the 2024 US Open Tennis Championship?\nAI: IBM used watsonx at the 2024 US Open Tennis Championship to create generative AI-powered features such as Match Reports, AI Commentary, and SlamTracker. These features enhance the digital experience for fans and scale the productivity of the USTA editorial team.',
 'output': 'The capital of France is Paris.'}

كما يظهر في سلسلة AgentExecutor، أدرك الوكيل أن لديه المعلومات اللازمة في قاعدة معرفته للإجابة عن هذا السؤال دون الحاجة إلى استخدام أدواته.

ملخص

في هذا البرنامج التعليمي، أنشأت وكيل RAG باستخدام LangChain في Python مع watsonx. كان النموذج اللغوي الكبير الذي استخدمته هو IBM Granite-3.0-8B-Instruct . الناتج التجريبي مهم لأنه يُبرز أهمية هذا التقدم في مجال الذكاء الاصطناعي التوليدي. تمكَّن وكيل الذكاء الاصطناعي بنجاح من استرجاع المعلومات ذات الصلة عبر أداة get_IBM_US_Open_context، وتحديث ذاكرته مع كل تفاعُل، وإصدار ردود مناسبة. من المهم أيضًا ملاحظة قدرة الوكيل على تحديد إذا ما كان استدعاء الأداة مناسبًا لكل مهمة محددة. عندما كانت لدى الوكيل المعلومات الكافية للإجابة عن الاستفسار، لم يستخدم أي أدوات للإجابة عن السؤال.

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

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

يمكنك إنشاء مساعدين ووكلاء ذكاء اصطناعي ووكلاء أقوياء يعملون على أتمتة مهام سير العمل والعمليات باستخدام الذكاء الاصطناعي التوليدي ونشرها وإدارتها.

    استكشف watsonx Orchestrate
    حلول وكلاء الذكاء الاصطناعي من IBM

    يمكنك بناء مستقبل عملك باستخدام حلول الذكاء الاصطناعي الجديرة بالثقة.

    استكشف حلول وكلاء الذكاء الاصطناعي
    خدمات الذكاء الاصطناعي لدى IBM Consulting

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

    استكشف خدمات الذكاء الاصطناعي
    اتخِذ الخطوة التالية

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

    استكشف watsonx Orchestrate استكشف watsonx.ai