تواجه المؤسسات التي تطبّق وكلاء الذكاء الاصطناعي تحدياً مشتركاً: كل طلب، سواء كان فحص حالة روتينياً أو تحليلاً معقداً، يُوجَّه عادةً إلى نموذج واحد كبير ومكلف. هذا النهج الموحّد للجميع يمكن أن يرفع تكاليف واجهات برمجة التطبيقات (API)، ويُدخل زمن استجابة غير متوقّع، ويزيل إمكانية التشغيل دون اتصال. حتى الاستعلامات الروتينية التي يمكن حلها محلياً تنتهي إلى المطالبة برحلة ذهاب وإياب كاملة عبر الشبكة إلى نموذج لغوي كبير (LLM) مستضاف في السحابة.
يتبع إطار العمل التكيفي للذكاء الوكيلي (AAIF)، المبني باستخدام Strands Agents، نهجًا مختلفًا. فبدلاً من توجيه جميع الطلبات إلى نموذج كبير واحد، يستخدم AAIF نماذج اللغة الصغيرة (SLMs) للتعامل مع المهام الروتينية محليًا، بينما تُوجَّه الطلبات الأكثر تعقيدًا إلى النماذج المستضافة في السحابة عبر Amazon Bedrock. يعتمد هذا النهج على الموقف البحثي الوارد من بلتش وآخرون في إنفيديا. ويزعمون أن نماذج اللغة الصغيرة «قوية بما يكفي، وأكثر ملاءمة بطبيعتها، وأكثر اقتصادا بالضرورة للعديد من الاستدعاءات في الأنظمة الوكيلة». والفريمورك المبني على Strands Agents يوضح كيف يمكن لتنسيق النماذج الذكي أن يساعد في خفض التكاليف مع الحفاظ على زمن استجابة منخفض للعمليات المحلية.
في هذه التدوينة، نستعرض المكونات الرئيسية لـ AAIF باستخدام Strands Agents مع نماذج SLM محلية عبر Ollama ونماذج سحابية عبر Amazon Bedrock. نستخدم سيناريو مراقبة إنترنت الأشياء (IoT) كتنفيذ مرجعي.
نظرة عامة على الحل
تنظم AAIF معالجة الذكاء الاصطناعي في ثلاث طبقات، كل منها مُحسَّنة لأنواع مهام مختلفة، كما يوضح الشكل 1:
- تستخدم التنسيق الذكي نموذج SLM خفيفًا (llama3.2:1b) كطبقة لاتخاذ القرارات. يصنّف هذا المنسّق الطلبات الواردة ويوجهها إلى طبقة المعالجة المناسبة دون قواعد مبرمجة مسبقًا.
- تتولى المعالجة المحلية المهام الروتينية مثل استرجاع القياسات عن بُعد للأجهزة وتحليل الصور باستخدام نماذج اللغة الصغيرة (SLMs) التي تعمل على الأجهزة المحلية من خلال Ollama. تكتمل هذه المهام بزمن استجابة منخفض وبدون الاعتماد على السحابة.
- تتولى المعالجة السحابية تحليل الأنماط المعقد والتوصيات الاستراتيجية عبر النماذج المتطورة في Amazon Bedrock. وتتطلب هذه الطلبات سياقاً أوسع واستدلالاً متعدد الخطوات لا تستطيع نماذج اللغة الصغيرة توفيره بشكل موثوق.
الشكل 1: طبقات المعالجة الثلاث في AAIF للتنسيق الذكي والمعالجة المحلية والمعالجة السحابية
يوضح الشكل 1 البنية الكاملة لنظام AAIF. في المركز يجد وكيل Strands، الذي يتصل ببيئة تشغيل Ollama تستضيف كلاً من نموذج التنسيق ذي الـ1B من المعاملات ونموذج الرؤية. يوفر الوكيل ثلاث أدوات: get_device_telemetry لاسترجاع بيانات المستشعرات المحلية، وanalyze_camera_feed لمعالجة الرؤية على الجهاز عبر llama3.2-vision، وget_expert_insights التي تستدعي Amazon Bedrock من خلال boto3 لإجراء تحليلات معقدة. تتدفق طلبات المستخدمين الواردة عبر منسّق SLM، الذي يصنف كل طلب ويوجهه إما إلى أداة محلية أو إلى نقطة النهاية السحابية بناءً على مدى تعقيد المهمة.
الشكل 2: البنية الكاملة لنظام AAIF موضحًا فيها وكيل Strands وبيئة تشغيل Ollama وتكاملات الأدوات والاتصال بـ Amazon Bedrock
يتكيّف هذا الإطار مع قيود النشر لديك بدلاً من أن يفرض عليك إعادة هيكلة بنيتك التحتية من حوله. تعمل هذه البنية على أجهزة طرفية مثل Raspberry Pi بذاكرة سعة 8 جيجابايت، أو في عمليات نشر سحابية كاملة تُوجَّه فيها جميع عمليات الاستدلال إلى Amazon Bedrock، أو في تكوينات هجينة تجمع بين السرعة المحلية والاستدلال السحابي. وتنبع المرونة من فصل منطق التوجيه (منسّق SLM) عن أدوات المعالجة، بحيث يمكنك استبدالها أو إعادة تهيئتها بشكل مستقل حسب العتاد المتاح وجودة الاتصال بالشبكة.
المتطلبات الأساسية
لكي تتمكن من اتباع هذا الدليل التوضيحي، يجب أن تتوفر لديك المتطلبات التالية:
- أ حساب AWS.
- Amazon Bedrock إمكانية الوصول إلى النموذج مُهيّأة في المنطقة المطلوبة.
- بايثون 3.10+ مثبت.
- Ollama تم تثبيته مع سحب النماذج التالية:
ollama pull llama3.2:1b(المنسِّق).ollama pull llama3.2-vision(تحليل الرؤية).
- Strands Agents مثبَّتة:
pip install strands-agents strands-agents-tools. - واجهة سطر الأوامر من AWS (AWS CLI) مُهيَّأة بالبيانات الاعتماد المناسبة.
- Boto3 مثبَّتة:
pip install boto3.
إعداد البيئة
أنشئ مجلد مشروع وابدأ خادم Ollama:
mkdir aaif-demo && cd aaif-demo
ollama serve
اسحب النماذج المطلوبة:
ollama pull llama3.2:1b
ollama pull llama3.2-vision
أنشئ ملفًا باسم aaif_agent.py وأضف المكونات التالية.
تنفيذ أدوات المعالجة المحلية
يستخدم Strands Agents الـ @tool decorator لتعريف القدرات التي يمكن للوكلاء استدعاؤها. ابدأ بإنشاء أدوات للمعالجة المحلية.
تسترجع الأداة الأولى بيانات القياس عن بُعد (telemetry) من الجهاز. في بيئة إنتاجية، ستتصل هذه الأداة بمستشعرات إنترنت الأشياء الفعلية. ولأغراض هذا الشرح التطبيقي، تستخدم بيانات جهاز محاكاة:
from strands import Agent, tool
import random
DEVICE_TELEMETRY = {
"sensor-001": {
"device_type": "Temperature Sensor",
"location": "Building A - Floor 2",
"temperature": 72.5,
"humidity": 45.2,
"status": "normal"
},
"camera-001": {
"device_type": "Security Camera",
"location": "Main Entrance",
"fps": 30,
"resolution": "1080p",
"status": "recording"
},
"hvac-001": {
"device_type": "HVAC Controller",
"location": "Building A - Central",
"set_temp": 71.0,
"current_temp": 72.5,
"mode": "cooling",
"status": "active"
}
}
@tool
def get_device_telemetry() -> str:
"""Retrieve current telemetry data from connected IoT devices."""
device_id = random.choice(list(DEVICE_TELEMETRY.keys()))
device_data = DEVICE_TELEMETRY[device_id]
report = f"Device: {device_id} ({device_data['device_type']})\n"
report += f"Location: {device_data['location']}\n"
report += f"Status: {device_data['status']}\n"
for key, value in device_data.items():
if key not in ['device_type', 'location', 'status']:
report += f"{key}: {value}\n"
return report
تقوم الأداة الثانية بتحليل الرؤية باستخدام نموذج لغوي صغير (SLM) محلي. يعمل نموذج llama3.2-vision بالكامل على العتاد المحلي، مما يعني أن بثقات الكاميرا الحساسة لا تغادر الجهاز:
import ollama
@tool
def analyze_camera_feed(image_path: str) -> str:
"""Analyze visual data from cameras using local vision model."""
stream = ollama.chat(
model='llama3.2-vision',
messages=[{
'role': 'user',
'content': 'Describe this image in one sentence. '
'What are the 3 most important things you see?',
'images': [image_path]
}],
stream=True,
)
full_response = ""
for chunk in stream:
chunk_content = chunk['message']['content']
print(chunk_content, end='', flush=True)
full_response += chunk_content
return f"Object Detection Report:\n{full_response}"
تنفيذ المعالجة السحابية
بالنسبة للتحليلات المعقدة التي تتطلب استدلالاً أوسع، أنشئ أداة تستدعي Amazon Bedrock. تُستدعى هذه الأداة فقط عندما يحدد المنسّق أن النماذج المحلية لا يمكنها التعامل مع الطلب:
import boto3
@tool
def get_expert_insights(context_data: str, question: str) -> str:
"""Get advanced analysis and expert recommendations
for complex questions via Amazon Bedrock."""
client = boto3.client("bedrock-runtime", region_name="us-east-1")
conversation = [
{
"role": "user",
"content": [
{"text": f"Context: {context_data}\n\nQuestion: {question}"}
],
}
]
response = client.converse(
modelId="<<model_id>", //Refer model id [details](https://docs.aws.amazon.com/bedrock/latest/userguide/foundation-models-reference.html)
messages=conversation,
inferenceConfig={
"maxTokens": 512,
"temperature": 0.5,
"topP": 0.9
}
)
response_text = response["output"]["message"]["content"][0]["text"]
return f"Expert Analysis:\n{response_text}"
تهيئة وكيل Strands مع التنسيق الذكي
جوهر AAIF هو تهيئة وكيل Strands. يستخدم الوكيل نموذج SLM محلي (llama3.2:1b) كمنسّق له. يدعم Strands Agents عدة مزودي نماذج، وهنا نستخدم مزود Ollama لتشغيل المنسّق محلياً:
from strands.models.ollama import OllamaModel
model = OllamaModel(
model_id="llama3.2:1b",
host="http://localhost:11434",
params={
"max_tokens": 300,
"temperature": 0.3,
},
)
system_prompt = """You are a monitoring assistant for operational facilities.
You have access to device telemetry tools, analysis capabilities,
and expert insights to help monitor operations effectively.
When users ask for:
- Device status or telemetry: use get_device_telemetry
- Image or data analysis: use analyze_camera_feed
- Expert advice or complex questions: use get_expert_insights
Always return the complete tool results directly to the user."""
agent = Agent(
model=model,
system_prompt=system_prompt,
tools=[
get_device_telemetry,
analyze_camera_feed,
get_expert_insights,
],
)
يحلل المنسّق المدعوم بنموذج SLM كل طلب ويوجهه إلى الأداة المناسبة دون مطابقة كلمات مفتاحية مبرمجة مسبقاً. يتم التوجيه من خلال فهم النموذج للطلب:
| الطلب | التوجيه | زمن الاستجابة |
| «تحقق من حالة الجهاز» | نموذج SLM محلي | منخفض (استدلال محلي) |
| «حلّل هذه الصورة» | ذكاء اصطناعي للرؤية محلي | منخفض (استدلال محلي) |
| «ما استراتيجيات التحسين التي توصي بها؟» | سحابي (Amazon Bedrock) | أعلى (رحلة ذهاب وعودة عبر الشبكة) |
الجدول 1: تقديرات الطلب والتوجيه وزمن الاستجابة للاستدلال المحلي مقارنةً بالسحابي
تشغيل الوكيل
بعد تهيئة الوكيل، يمكنك التفاعل معه مباشرة:
# Local processing - device telemetry
response = agent("What's the current status of our devices?")
print(response)
# Local processing - vision analysis
response = agent("Analyze the camera feed from camera-001")
print(response)
# Cloud processing - complex analysis
response = agent(
"Based on current telemetry patterns, "
"what optimization strategies do you recommend?"
)
print(response)
يصنف الوكيل كل طلب تلقائياً ويوجهه إلى طبقة المعالجة المناسبة. لا توجد حاجة لأي قواعد توجيه صريحة.
التكيف مع سيناريوهات نشر مختلفة
تتكيف بنية AAIF مع متطلبات بنية تحتية مختلفة عن طريق تغيير تهيئة النموذج:
عندما يعمل عبء العمل الخاص بك بالكامل في السحابة ولا يتوفر عتاد طرفي (edge)، استبدل تهيئة نموذج Ollama بـ Amazon Bedrock لجميع عمليات المعالجة. يؤدي هذا إلى توجيه كل طلب عبر الاستدلال السحابي المُدار، مما يمنحك التوسع التلقائي دون الحاجة إلى موارد GPU محلية. تستفيد الفرق التي لديها اتصال موثوق منخفض زمن الاستجابة ولا توجد لديها قيود على مكان وجود البيانات من هذه التهيئة بشكل أكبر:
from strands.models import BedrockModel
model = BedrockModel(
model_id="<<model_id>", //Refer model id [details](https://docs.aws.amazon.com/bedrock/latest/userguide/foundation-models-reference.html)
region_name="us-east-1"
)
تحافظ التهيئة الهجينة على المنسّق المحلي بنموذج SLM كما هو مع إضافة نماذج سحابية للطلبات التي تتجاوز قدرات النموذج المحلي. هذه هي تهيئة AAIF الافتراضية المعروضة في هذا الشرح التطبيقي. وهي مناسبة للبيئات التي تكون فيها معظم الطلبات روتينية بما يكفي لحلها محلياً، لكن بعضها يتطلب الاستدلال الأوسع لنموذج أكبر. يمكن تحقيق وفورات في التكلفة من حوالي 80 بالمئة من حركة المرور التي لا تصل إلى نقطة نهاية API مدفوعة.
بالنسبة للبيئات المعزولة تماماً عن الإنترنت (air-gapped) أو التي لديها متطلبات صارمة لسيادة البيانات، استبدل الأداة السحابية بنموذج محلي أكبر وشغّل جميع عمليات المعالجة على الجهاز نفسه. يمكن لنموذج بمعاملات 3B يعمل على عتاد بذاكرة كافية أن يتعامل مع المهام متوسطة التعقيد التي كان المنسّق ذو 1B سيصعدها وإلا. المقايضة هي انخفاض عمق الاستدلال في أصعب الاستعلامات، لكن الفائدة هي عدم مغادرة البيانات للموقع:
model = OllamaModel(
model_id="llama3.2:3b", # Larger local model for complex tasks
host="http://localhost:11434",
)
نظرة مستقبلية: استدعاء الأدوات المركزي عبر خوادم MCP
يستخدم التنفيذ في هذه المقالة استدعاءات أدوات محلية معرّفة مباشرة في كود الوكيل. بالنسبة لنشرات الإنتاج التي فيها وكلاء متعددون يشاركون الأدوات عبر الخدمات، اكشف هذه الأدوات كخوادم بروتوكول سياق النموذج (MCP). يوفر MCP واجهة موحدة لاكتشاف الأدوات واستدعائها، بحيث يمكنك مركزية إدارة الأدوات وإعادة استخدامها عبر وكلاء وبيئات مختلفة. في الشكل 3، نوضح كيفية تحويل أدوات AAIF إلى خوادم MCP لاستدعاء أدوات موزع ومركزي.
في التهيئة الموزعة كما هو موضح في الشكل 3، يعمل الجهاز 1 كمركز منسّق، يشغّل وكيل Strands مع موجّه SLM وأداة قياس عن بُعد محلية. يتصل عبر بروتوكول MCP بالجهاز 2، الذي يشغّل خادم معالجة رؤية طرفي بنموذج llama3.2-vision. يعمل الجهاز 3 كبوابة تحليلات سحابية متصلة بـ Amazon Bedrock. من منظور المنسّق، تظهر جميع الأدوات البعيدة كاستدعاءات دوال محلية لأن طبقة نقل MCP تتولى التسلسل والاتصال الشبكي بشفافية.
الشكل 3: الذكاء الموزع مع خوادم MCP
التنظيف
لتجنب تكبّد رسوم مستقبلية، أكمل خطوات التنظيف التالية:
- تعطيل الوصول إلى نماذج Amazon Bedrock: افتح وحدة تحكم Amazon Bedrock، واختر Model accessثم ألغِ الوصول إلى Amazon Nova Lite. للاطلاع على الخطوات التفصيلية، راجع Manage model access في دليل مستخدم Amazon Bedrock.
- أوقف خادم Ollama وأزل النماذج لتحرير مساحة القرص المحلي (حوالي 2 GB):
ollama stop ollama rm llama3.2:1b ollama rm llama3.2-vision - احذف مجلد المشروع إذا لم تعد بحاجة إلى نموذج الشيفرة البرمجية:
rm -rf aaif-demo
الخاتمة
عرضنا كيفية بناء وكلاء ذكاء اصطناعي فعالين من حيث التكلفة باستخدام إطار Adaptive Agentic Intelligence Framework مع Strands Agents. فمن خلال توجيه الطلبات الروتينية إلى نماذج SLM المحلية وحجز النماذج السحابية على Amazon Bedrock للتحليلات المعقدة، يمكن لـ AAIF أن يساعد في تقليل تكاليف واجهات برمجة التطبيقات API مع الحفاظ على زمن استجابة منخفض للعمليات الروتينية.
قبل تشغيل هذا النمط في بيئة الإنتاج، أضف ضوابط الذكاء الاصطناعي المسؤول إلى مسار الاستدلال السحابي، لأن تلك الطلبات تتضمن مخرجات الأدوات والبيانات المسترجعة ومدخلات المستخدم. يمكنك إرفاق Amazon Bedrock Guardrails بـ Strands BedrockModel باستخدام معرّف guardrail وإصدار. يطبّق بعد ذلك عوامل تصفية المحتوى للفئات الضارة، وعوامل تصفية حقن الأوامر، وفحوصات التأسيس السياقي التي تحظر الاستجابات غير المدعومة من البيانات المصدرية. لتطبيق السياسات نفسها على طبقة SLM المحلية، استدعِ واجهة API المستقلة ApplyGuardrail على مدخلاتها ومخرجاتها. وبهذه الطريقة، يتبع كل طلب معيار أمان واحدًا بغض النظر عن النموذج الذي يعالجه.
ينطبق هذا النمط المعماري على ما هو أبعد من مراقبة إنترنت الأشياء IoT. يمكن لمنظمة رعاية صحية تشغيل مراقبة المرضى محليًا مع توجيه دعم التشخيص إلى النماذج السحابية. ويمكن لشركة خدمات مالية معالجة المعاملات داخل مقرها وحجز السعة السحابية لتحليل المخاطر. ويمكن لفريق تصنيع تشغيل نماذج الرؤية للرقابة على الجودة عند الحافة مع إرسال طلبات التحسين إلى السحابة.
لمعرفة المزيد حول بناء الوكلاء باستخدام Strands Agents، تفضل بزيارة وثائق Strands Agents. للحصول على معلومات حول النماذج الأساسية المتاحة، راجع Amazon Bedrock.