متقدم
⏱ ٤٠ دقيقة قراءة
© بوابة الذكاء الاصطناعي ٢٠٢٦
تعلم كيفية بناء وكيل ذكاء اصطناعي مزدوج المحرك باستخدام Python يقوم بتوجيه المهام تلقائيًا بين GPT-4o وGemini 2.5 مع دعم الذاكرة.
المتطلبات الأساسية
- Python ٣.١٠ أو أعلى
- مفتاح API لـ OpenAI و Google Gemini
- فهم أساسي للغة Python والتعامل مع الـ APIs
ما ستتعلمه في هذا الدرس
- كيفية تهيئة عملاء OpenAI و Google GenAI الحديثين
- توجيه المهام بذكاء بين نموذجين مختلفين
- تنفيذ نظام ذاكرة بسيط للاحتفاظ بالسياق
- إدارة مفاتيح API بشكل آمن باستخدام ملف .env
ما الذي نبنيه؟
في هذا الدرس، سنقوم ببناء وكيل ذكاء اصطناعي مزدوج المحرك قادر على اختيار النموذج المناسب تلقائيًا بين GPT-4o وGemini 2.5 Flash حسب طبيعة المهمة.
بدلاً من الاعتماد على نموذج واحد فقط، سيقوم الوكيل بتحليل المهمة وتوجيهها إلى النموذج الأنسب. كما سنضيف له نظام ذاكرة بسيط يساعده على تذكر المهام السابقة وتحسين أدائه مع الوقت.
الإعداد والتثبيت
قم بتثبيت المكتبات المطلوبة أولاً:
pip install openai google-genai python-dotenvثم أنشئ ملف .env لحفظ مفاتيح الـ API بشكل آمن:
# .env
OPENAI_API_KEY=sk-...
GEMINI_API_KEY=AIza...الخطوة ١: تهيئة الوكيل المزدوج
نبدأ بإنشاء كلاس الوكيل وتهيئة عملاء OpenAI و Google GenAI باستخدام أحدث إصدارات المكتبات.
import os
from dotenv import load_dotenv
from openai import OpenAI
from google import genai
load_dotenv()
class DualEngineAgent:
def init(self):
self.memory = []
self.openai_client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
self.gemini_client = genai.Client(api_key=os.getenv("GEMINI_API_KEY"))
def query_openai(self, prompt: str) -> str:
response = self.openai_client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": prompt}],
max_tokens=800
)
return response.choices[0].message.content.strip()
def query_gemini(self, prompt: str) -> str:
response = self.gemini_client.models.generate_content(
model="gemini-2.5-flash",
contents=prompt,
)
return response.text.strip()
agent = DualEngineAgent()كيفية توجيه المهام بين GPT-4o و Gemini
بدلاً من استخدام كلمة “complex”، سنستخدم طريقة أكثر ذكاءً لتحديد النموذج المناسب بناءً على نوع المهمة.
def process_task(self, task_description: str) -> str:
task_lower = task_description.lower()
# توجيه المهام التحليلية أو المعقدة إلى Gemini
if any(word in task_lower for word in ["analyze", "compare", "research", "summarize", "evaluate", "review"]):
model_used = "gemini"
result = self.query_gemini(task_description)
else:
model_used = "openai"
result = self.query_openai(task_description)
self.memory.append({
"task": task_description,
"model_used": model_used,
"result": result
})
return result
DualEngineAgent.process_task = process_task
مثال على الاستخدام
result = agent.process_task("Analyze the impact of AI on software development")
print(result)كيفية إضافة ذاكرة للوكيل
نضيف نظام ذاكرة بسيط يسمح للوكيل بالرجوع إلى المهام السابقة واستخدامها لتحسين النتائج.
def enhance_with_memory(self, context: str) -> str:
matches = [entry for entry in self.memory if context.lower() in entry['task'].lower()]
if matches:
last = matches[-1]
return f"بناءً على مهمة سابقة ({last['model_used']}):\n\n{last['result']}"
return "لم يتم العثور على ذاكرة ذات صلة."
DualEngineAgent.enhance_with_memory = enhance_with_memory
مثال
agent.process_task("Review Q2 marketing performance")
print(agent.enhance_with_memory("marketing"))تأكد من إعادة تشغيل الطرفية أو بيئة التطوير بعد تحديث ملف
.env. هذا من أكثر الأخطاء شيوعًا التي تمنع تحميل مفاتيح الـ API.اختبار الوكيل
# اختبار النماذج بشكل منفصل
print(agent.query_openai("Explain RAG in simple terms"))
print(agent.query_gemini("Compare Claude and Gemini for coding"))
اختبار النظام الكامل مع الذاكرة
agent.process_task("Summarize recent AI agent trends")
print(agent.enhance_with_memory("trends"))ما يمكن بناؤه بعد ذلك؟
- تطوير نظام توجيه أكثر ذكاءً باستخدام نموذج لغوي لاختيار النموذج
- إضافة ذاكرة محادثة كاملة بدلاً من ذاكرة المهام فقط
- دعم المزيد من النماذج مثل Claude و Llama
- بناء واجهة سطر أوامر أو واجهة ويب للتفاعل مع الوكيل