دليل الذكاء الاصطناعي القائم على العمل الذاتي: ابدأ رحلتك في بناء وكلاء الذكاء الاصطناعي
تعلم أساسيات كيفية إنشاء وكلاء الذكاء الاصطناعي. اكتشف الأدوات والتقنيات اللازمة لتصميم وتنفيذ هذه الأنظمة الذكية.
تشهد صناعة الذكاء الاصطناعي تطورات متسارعة. إنها مثيرة للإعجاب وغالبًا ما تكون مربكة.
لقد كنت أدرس وأتعلم وأبني أسسي في هذا المجال من علم البيانات لأنني أعتقد أن مستقبل علم البيانات مرتبط ارتباطًا وثيقًا بتطوير الذكاء الاصطناعي التوليدي.
يبدو الأمر وكأنه بالأمس عندما قمت ببناء أول وكيل ذكاء اصطناعي (AI Agent)، وبعد أسبوعين من ذلك، كانت هناك العديد من حزم Python للاختيار من بينها، ناهيك عن خيارات عدم وجود تعليمات برمجية التي تحقق نتائج جيدة جدًا، مثل n8n.
من مجرد نماذج يمكنها الدردشة معنا إلى تسونامي من وكلاء الذكاء الاصطناعي الموجودين في كل مكان، والبحث في الإنترنت، والتعامل مع الملفات، وتنفيذ مشاريع علم البيانات (Data Science) بأكملها (من الاستكشاف الأولي للبيانات إلى النمذجة والتقييم)، كل ذلك حدث في غضون بضع سنوات فقط.
ماذا؟
عند رؤية كل ذلك، كان تفكيري: “أحتاج إلى الانضمام في أقرب وقت ممكن”. ففي النهاية، من الأفضل ركوب الموجة بدلًا من أن تبتلعك.
لهذا السبب، قررت أن أبدأ هذه السلسلة من المنشورات حيث أخطط للانتقال من الأساسيات إلى بناء أول وكيل ذكاء اصطناعي خاص بنا، وصولًا إلى مفاهيم أكثر تعقيدًا.
كفى حديثًا، هيا بنا ننطلق.
أساسيات وكلاء الذكاء الاصطناعي
يتم إنشاء وكيل الذكاء الاصطناعي (AI Agent) عندما نمنح نموذج اللغة الكبير (LLM) القدرة على التفاعل مع الأدوات وتنفيذ إجراءات مفيدة لنا. بدلاً من مجرد كونه روبوت دردشة، يمكنه الآن جدولة المواعيد، والاعتناء بالتقويم الخاص بنا، والبحث في الإنترنت، وكتابة منشورات وسائل التواصل الاجتماعي، والقائمة تطول… هذا التحول يجعله مساعدًا رقميًا متكاملاً.
يُمكن للوكلاء الذين يعتمدون على الذكاء الاصطناعي القيام بأشياء مفيدة، وليس مجرد الدردشة.
ولكن كيف يُمكننا منح هذه القوة إلى نموذج لغوي كبير (LLM)؟
الإجابة البسيطة هي استخدام واجهة برمجة تطبيقات (API) للتفاعل مع النموذج اللغوي الكبير. توجد العديد من حزم Python لذلك في الوقت الحاضر. إذا كنت تتابع مدونتي، فسترى أنني جربت بالفعل حزمتين لإنشاء وكلاء: Langchain و Agno (PhiData سابقًا) و CrewAI، على سبيل المثال. لهذه السلسلة، سألتزم بـ Agno [1].
أولاً، قم بإعداد بيئة افتراضية باستخدام uv
أو Anaconda أو معالج البيئة الذي تفضله. بعد ذلك، قم بتثبيت الحزم.
# Agno AI
pip install agno
# module to interact with Gemini
pip install google-generativeai
# Install these other packages that will be needed throughout the tutorial
pip install agno groq lancedb sentence-transformers tantivy youtube-transcript-api
ملاحظة سريعة قبل المتابعة. لا تنسَ الحصول على مفتاح واجهة برمجة تطبيقات Google Gemini [2].
إنشاء وكيل بسيط أمر سهل للغاية. جميع الحزم متشابهة جدًا. لديهم فئة Agent
أو شيء مشابه يسمح لنا بتحديد نموذج وبدء التفاعل مع النموذج اللغوي الكبير الذي نختاره. فيما يلي المكونات الرئيسية لهذه الفئة:
model
: الاتصال بالنموذج اللغوي الكبير. هنا سنختار بين OpenAI و Gemini و Llama و Deepseek وما إلى ذلك.description
: تسمح لنا هذه الوسيطة بوصف سلوك الوكيل. تتم إضافة هذا إلىsystem_message
، وهي وسيطة مماثلة.instructions
: أحب أن أفكر في الوكيل كموظف أو مساعد نقوم بإدارته. من أجل إنجاز مهمة ما، يجب علينا تقديم تعليمات حول ما يجب القيام به. هنا يمكنك فعل ذلك.expected_output
: هنا يمكننا تقديم تعليمات حول المخرجات المتوقعة.tools
: هذا ما يجعل النموذج اللغوي الكبير وكيلاً، مما يمكنه من التفاعل مع العالم الحقيقي باستخدام هذه الأدوات.
الآن، لنقم بإنشاء وكيل بسيط ليس لديه أدوات، ولكنه سيخدم لبناء حدسنا حول بنية الكود.
# Imports
from agno.agent import Agent
from agno.models.google import Gemini
import os
# Create agent
agent = Agent(
model= Gemini(id="gemini-1.5-flash",
api_key = os.environ.get("GEMINI_API_KEY")),
description= "An assistant agent",
instructions= ["Be sucint. Answer in a maximum of 2 sentences."],
markdown= True
)
# Run agent
response = agent.run("What's the weather like in NYC in May?")
# Print response
print(response.content)
############ الإخراج ###############
توقع درجات حرارة مُعتدلة في نيويورك خلال شهر مايو، تتراوح عادةً بين أوائل الخمسينيات ومنتصف السبعينيات فهرنهايت. هناك احتمال لهطول الأمطار، لذا يُنصح بارتداء طبقات من الملابس ومظلة.
هذا عظيم. نحن نستخدم نموذج Gemini 1.5. لاحظ كيف يستجيب بناءً على البيانات التي تم تدريبه عليها. إذا طلبنا منه إخبارنا بالطقس اليوم، فسنرى ردًا يقول إنه لا يستطيع الوصول إلى الإنترنت.
دعنا نستكشف الوسيطات instructions
و expected_output
. نريد الآن جدولاً بالشهر والموسم ومتوسط درجة الحرارة لمدينة نيويورك (NYC).
# Imports
from agno.agent import Agent
from agno.models.google import Gemini
import os
# Create agent
agent = Agent(
model= Gemini(id="gemini-1.5-flash",
api_key = os.environ.get("GEMINI_API_KEY")),
description= "An assistant agent",
instructions= ["Be sucint. Return a markdown table"],
expected_output= "A table with month, season and average temperature",
markdown= True
)
# Run agent
response = agent.run("What's the weather like in NYC for each month of the year?")
# Print response
print(response.content)
وهذه هي النتيجة.
الشهر | الموسم | متوسط درجة الحرارة (°F) |
---|---|---|
January | الشتاء | 32 |
February | الشتاء | 35 |
March | الربيع | 44 |
April | الربيع | 54 |
May | الربيع | 63 |
June | الصيف | 72 |
July | الصيف | 77 |
August | الصيف | 76 |
September | الخريف | 70 |
October | الخريف | 58 |
November | الخريف | 48 |
December | الشتاء | 37 |
الأدوات
الإجابات السابقة جيدة، ولكننا بطبيعة الحال لا نريد استخدام نماذج لغوية كبيرة (LLMs) قوية للعب مع روبوت محادثة أو إخبارنا بأخبار قديمة، أليس كذلك؟
نحن نريدها أن تكون جسراً نحو الأتمتة والإنتاجية والمعرفة. لذلك، ستضيف الأدوات قدرات إلى وكلاء الذكاء الاصطناعي لدينا، وبالتالي بناء الجسر مع العالم الحقيقي. تتضمن الأمثلة الشائعة لأدوات الوكلاء ما يلي: البحث في الويب، وتشغيل SQL، وإرسال بريد إلكتروني أو استدعاء واجهات برمجة التطبيقات (APIs).
ولكن أكثر من ذلك، يمكننا إنشاء قدرات مخصصة لوكلائنا باستخدام أي دالة Python كأداة، مما يفتح إمكانيات واسعة للتكامل مع الأنظمة والعمليات المختلفة.
الأدوات (Tools) هي وظائف يمكن للوكيل (Agent) تشغيلها لإنجاز المهام.
من حيث التعليمات البرمجية، فإن إضافة أداة إلى الوكيل (Agent) هي مجرد مسألة استخدام الوسيطة tools
في فئة Agent
.
تخيل شركة فردية (شركة لشخص واحد) في مجال الحياة الصحية ترغب في أتمتة إنشاء المحتوى الخاص بها. ينشر هذا الشخص نصائح حول العادات الصحية كل يوم. أعلم حقيقة أن إنشاء المحتوى ليس بالبساطة التي يبدو عليها. فهو يتطلب الإبداع والبحث ومهارات كتابة الإعلانات. لذلك، إذا كان من الممكن أتمتة ذلك، أو على الأقل جزء منه، فهذا يوفر الوقت.
لذلك، نكتب هذا الرمز لإنشاء وكيل (agent) بسيط للغاية يمكنه إنشاء منشور بسيط على Instagram وحفظه في ملف Markdown لمراجعته. لقد اختزلنا العملية من التفكير > البحث > الكتابة > المراجعة > النشر إلى المراجعة > النشر.
# Imports
import os
from agno.agent import Agent
from agno.models.google import Gemini
from agno.tools.file import FileTools
# Create agent
agent = Agent(
model= Gemini(id="gemini-1.5-flash",
api_key = os.environ.get("GEMINI_API_KEY")),
description= "You are a social media marketer specialized in creating engaging content.",
tools=[FileTools(
read_files=True,
save_files=True
)],
show_tool_calls=True)
# Writing and saving a file
agent.print_response("""Write a short post for instagram with tips and tricks
that positions me as an authority in healthy eating
and save it to a file named 'post.txt'.""",
markdown=True)
نتيجة لذلك، لدينا ما يلي.
أطلق العنان لطاقتك الإيجابية من خلال تناول طعام صحي:
1. أعطِ الأولوية للأطعمة الكاملة: تناول الكثير من الفواكه والخضراوات والبروتينات قليلة الدهون والحبوب الكاملة. فهي غنية بالعناصر الغذائية وتمنحك شعورًا بالشبع والنشاط.
2. تناول الطعام بوعي: انتبه لإشارات الجوع والشبع في جسمك. تجنب المشتتات أثناء تناول الطعام.
3. اشرب الكثير من الماء: الماء ضروري للهضم، ومستويات الطاقة، والصحة العامة.
4. لا تحرم نفسك: اسمح بتناول بعض الحلويات بين الحين والآخر. قد يؤدي الحرمان إلى الإفراط في تناول الطعام لاحقًا. استمتع بكل شيء باعتدال!
5. خطط مسبقًا: حضّر وجباتك أو وجباتك الخفيفة مسبقًا لتجنب اتخاذ قرارات غير صحية.
#أكل_صحي #نمط_حياة_صحي #تغذية #عشاق_الطعام #صحة_وعافية #نصائح_صحية #أكل_نظيف #خسارة_وزن #وصفات_صحية #نصائح_تغذية #صحة_فورية #طعام_صحي #تناول_بوعي #رحلة_صحية #مدرب_صحي
بالتأكيد، يمكننا أن نجعل الأمر أكثر تعقيدًا من خلال إنشاء طاقم مع وكلاء (agents) آخرين للبحث في قائمة مواقع الويب عن المحتوى، ومدقق المحتوى والمراجع، وآخر لإنشاء صورة للمنشور. لكني أعتقد أنك فهمت الفكرة العامة لكيفية إضافة tool
إلى Agent
.
نوع آخر من الأدوات التي يمكننا إضافتها هو أداة الوظيفة (function tool). يمكننا استخدام وظيفة Python لتكون بمثابة أداة لنموذج اللغة الكبير (LLM). فقط لا تنس إضافة تلميحات النوع مثل video_id:str
، حتى يعرف النموذج ما الذي سيستخدمه كمدخل للوظيفة. وإلا، فقد ترى خطأ.
دعونا نرى بإيجاز كيف يعمل ذلك.
نريد الآن أن يكون الوكيل (Agent) الخاص بنا قادرًا على الحصول على فيديو معين على YouTube وتلخيصه. لتنفيذ مثل هذه المهمة، نقوم ببساطة بإنشاء وظيفة تقوم بتنزيل نسخة الفيديو من YT وتمريرها إلى النموذج لتلخيصها.
# Imports
import os
from agno.agent import Agent
from agno.models.google import Gemini
from youtube_transcript_api import YouTubeTranscriptApi
# Get YT transcript
def get_yt_transcript(video_id:str) -> str:
"""
Use this function to get the transcript from a YouTube video using the video id.
Parameters
----------
video_id : str
The id of the YouTube video.
Returns
-------
str
The transcript of the video.
"""
# Instantiate
ytt_api = YouTubeTranscriptApi()
# Fetch
yt = ytt_api.fetch(video_id)
# Return
return ''.join([line.text for line in yt])
# Create agent
agent = Agent(
model= Gemini(id="gemini-1.5-flash",
api_key = os.environ.get("GEMINI_API_KEY")),
description= "You are an assistant that summarizes YouTube videos.",
tools=[get_yt_transcript],
expected_output= "A summary of the video with the 5 main points and 2 questions for me to test my understanding.",
markdown=True,
show_tool_calls=True)
# Run agent
agent.print_response("""Summarize the text of the video with the id 'hrZSfMly_Ck' """,
markdown=True)
ثم تحصل على نتيجة.
وكلاء يتمتعون بالقدرة على الاستدلال
من الخيارات الرائعة الأخرى التي توفرها حزمة Agno هي إمكانية إنشاء وكلاء يمكنهم تحليل الموقف قبل الإجابة على سؤال. هذه هي أداة الاستدلال. تحقق من أنواع وكلاء الذكاء الاصطناعي واستخداماتهم: شرح تفصيلي.
سنقوم بإنشاء وكيل استدلال باستخدام نموذج Qwen-qwq-32b من Alibaba. لاحظ أن الفرق الوحيد هنا، بالإضافة إلى النموذج، هو أننا نضيف الأداة ReasoningTools()
. هذه الأداة تمكن الوكيل من التفكير المنطقي قبل تقديم الإجابات.
تعني خاصية adding_instructions=True
تزويد الوكيل بتعليمات مفصلة، مما يعزز موثوقية ودقة استخدامه للأداة. بينما يؤدي تعيين هذه الخاصية إلى False
إلى إجبار الوكيل على الاعتماد على استدلاله الخاص، مما قد يكون أكثر عرضة للأخطاء. هذا يسمح بتقييم قدرات النموذج بشكل مستقل.
# Imports
import os
from agno.agent import Agent
from agno.models.groq import Groq
from agno.tools.reasoning import ReasoningTools
# Create agent with reasoning
agent = Agent(
model= Groq(id="qwen-qwq-32b",
api_key = os.environ.get("GROQ_API_KEY")),
description= "You are an experienced math teacher.",
tools=[ReasoningTools(add_instructions=True)],
show_tool_calls=True)
# Writing and saving a file
agent.print_response("""Explain the concept of sin and cosine in simple terms.""",
stream=True,
show_full_reasoning=True,
markdown=True)
فيما يلي المخرجات.
وكيل مزود بالمعرفة
تُعد هذه الأداة أسهل طريقة لإنشاء نظام استرجاع معزز بالتوليد (RAG). باستخدام هذه الميزة، يمكنك توجيه الوكيل إلى موقع ويب أو قائمة مواقع ويب، وسيقوم بإضافة المحتوى إلى قاعدة بيانات متجهات. بعد ذلك، يصبح المحتوى قابلاً للبحث. وعندما يُطلب منه ذلك، يمكن للوكيل استخدام المحتوى كجزء من الإجابة. هذه التقنية تعزز دقة وموثوقية إجابات الذكاء الاصطناعي.
في هذا المثال البسيط، أضفت صفحة واحدة من موقع الويب الخاص بي وسألت الوكيل عن الكتب المدرجة هناك. هذا يوضح كيف يمكن للوكيل الوصول إلى المعلومات واستخدامها.
# Imports
import os
from agno.agent import Agent
from agno.models.google import Gemini
from agno.knowledge.url import UrlKnowledge
from agno.vectordb.lancedb import LanceDb, SearchType
from agno.embedder.sentence_transformer import SentenceTransformerEmbedder
# Load webpage to the knowledge base
agent_knowledge = UrlKnowledge(
urls=["https://gustavorsantos.me/?page_id=47"],
vector_db=LanceDb(
uri="tmp/lancedb",
table_name="projects",
search_type=SearchType.hybrid,
# Use Sentence Transformer for embeddings
embedder=SentenceTransformerEmbedder(),
),
)
# Create agent
agent = Agent(
model=Gemini(id="gemini-2.0-flash", api_key=os.environ.get("GEMINI_API_KEY")),
instructions=[
"Use tables to display data.",
"Search your knowledge before answering the question.",
"Only inlcude the content from the agent_knowledge base table 'projects'",
"Only include the output in your response. No other text.",
],
knowledge=agent_knowledge,
add_datetime_to_instructions=True,
markdown=True,
)
if __name__ == "__main__":
# Load the knowledge base, you can comment out after first run
# Set recreate to True to recreate the knowledge base if needed
agent.knowledge.load(recreate=False)
agent.print_response(
"What are the two books listed in the 'agent_knowledge'",
stream=True,
show_full_reasoning=True,
stream_intermediate_steps=True,
)
الوكيل المُزوَّد بالذاكرة
النوع الأخير الذي سنتناوله في هذا المقال هو الوكيل المزود بالذاكرة، وهو مفهوم أساسي في مجال وكلاء الذكاء الاصطناعي.
يتمتع هذا النوع من الوكلاء بالقدرة على تخزين واسترجاع المعلومات المتعلقة بالمستخدمين من التفاعلات السابقة، مما يمكنه من فهم تفضيلات المستخدمين وتخصيص استجاباته. هذه الذاكرة تجعل الوكيل أكثر فعالية في التفاعلات اللاحقة.
دعونا نرى هذا المثال حيث سأخبر الوكيل ببعض الأشياء وأطلب توصيات بناءً على هذا التفاعل. هذا يوضح كيف يمكن للوكيل المزود بالذاكرة تحسين تجربة المستخدم.
# imports
import os
from agno.agent import Agent
from agno.memory.v2.db.sqlite import SqliteMemoryDb
from agno.memory.v2.memory import Memory
from agno.models.google import Gemini
from rich.pretty import pprint
# User Name
user_id = "data_scientist"
# Creating a memory database
memory = Memory(
db=SqliteMemoryDb(table_name="memory",
db_file="tmp/memory.db"),
model=Gemini(id="gemini-2.0-flash",
api_key=os.environ.get("GEMINI_API_KEY"))
)
# Clear the memory before start
memory.clear()
# Create the agent
agent = Agent(
model=Gemini(id="gemini-2.0-flash", api_key=os.environ.get("GEMINI_API_KEY")),
user_id=user_id,
memory=memory,
# Enable the Agent to dynamically create and manage user memories
enable_agentic_memory=True,
add_datetime_to_instructions=True,
markdown=True,
)
# Run the code
if __name__ == "__main__":
agent.print_response("My name is Gustavo and I am a Data Scientist learning about AI Agents.")
memories = memory.get_user_memories(user_id=user_id)
print(f"Memories about {user_id}:")
pprint(memories)
agent.print_response("What topic should I study about?")
agent.print_response("I write articles for Towards Data Science.")
print(f"Memories about {user_id}:")
pprint(memories)
agent.print_response("Where should I post my next article?")
وبهذا نختتم هذا المقال الأول حول وكلاء الذكاء الاصطناعي. نأمل أن يكون هذا قد قدم نظرة عامة مفيدة حول أنواع وكلاء الذكاء الاصطناعي المختلفة.
قبل المغادرة
هذا المقال يحتوي على الكثير من المعلومات. لقد صعدنا الخطوة الأولى في سلم تعلم وكلاء الذكاء الاصطناعي. أعلم أن الأمر قد يكون مربكًا، فهناك الكثير من المعلومات المتاحة مما يجعل من الصعب معرفة من أين تبدأ وماذا تدرس.
اقتراحي هو أن تسلك نفس الطريق الذي أسلكه. خطوة واحدة في كل مرة، اختر بضع حزم فقط مثل Agno و CrewAI، وتعمق في دراستها، وتعلم كيفية إنشاء وكلاء أكثر تعقيدًا في كل مرة. هذا النهج التدريجي هو الأفضل لاستيعاب مفاهيم الذكاء الاصطناعي المعقدة.
في هذا المقال، بدأنا من الصفر، وتعلمنا كيفية التفاعل ببساطة مع نموذج لغوي كبير (LLM)، وصولًا إلى إنشاء وكلاء بذاكرة، أو حتى إنشاء نظام استرجاع معزز (RAG) بسيط لوكيل ذكاء اصطناعي. هذه المهارات الأساسية ضرورية لفهم كيفية عمل وكلاء الذكاء الاصطناعي.
من الواضح أن هناك الكثير مما يمكنك فعله باستخدام وكيل واحد فقط. تحقق من المرجع [4] للحصول على أمثلة متقدمة.
بهذه المهارات البسيطة، تأكد من أنك متقدم على الكثير من الأشخاص، وهناك الكثير مما يمكنك القيام به بالفعل. ما عليك سوى استخدام إبداعك، ولماذا لا؟ اطلب المساعدة من نموذج لغوي كبير لبناء شيء رائع! استخدم أدوات الذكاء الاصطناعي لتعزيز قدراتك الإبداعية.
في المقال التالي، سنتعلم المزيد عن وكلاء الذكاء الاصطناعي وتقييمهم. ابقوا متابعين!
مستودع GitHub
https://github.com/gurezende/agno-ai-labs
المراجع
[1] https://docs.agno.com/introduction
[2] https://ai.google.dev/gemini-api/docs
[3] https://pypi.org/project/youtube-transcript-api/
[4] https://github.com/agno-agi/agno/tree/main/cookbook
[5] https://docs.agno.com/introduction/agents#agent-with-knowledge