![]()
الدرس السابق قام بتوسيع الوكلاء للسحابة. هذا الدرس يُنزلهم إلى كمبيوتر واحد. بنهاية هذا الدرس سيكون لديك مساعد هندسي يعمل يفكر، يستدعي الأدوات، يقرأ ملفاتك، ويبحث في توثيقاتك — دون أي طلب استدلال للسحابة.
لماذا تريد ذلك؟ هناك ثلاثة أسباب تتكرر باستمرار في العمل الهندسي الحقيقي:
التحدي هو أنك تستبدل نموذج سحابي متقدم بـ نموذج لغة صغير (SLM) يعمل على معالجك المركزي، أو معالج الرسوميات، أو معالج الشبكة العصبية. هذا الدرس يركز على بناء وكلاء جيدين ضمن هذا القيد بدلاً من التظاهر بأن القيد غير موجود.
هذا الدرس سيغطي:
بعد إكمال الدرس، ستعرف كيف:
يفترض هذا الدرس أنك أتممت الدروس السابقة وتشعر بالراحة مع:
ستحتاج أيضًا إلى:
requirements.txt، بالإضافة إلى foundry-local-sdk، openai، و chromadb لهذا الدرس.نموذج سحابي متقدم يحتوي على مئات المليارات من المعاملات ويتطلب مركز بيانات ضخم. النموذج الصغير (SLM) يحتوي على بضعة مليارات معاملات ويجب أن يتناسب مع رام الحاسوب المحمول لديك. هذا الفرق يحدد توقعات واضحة.
نماذج SLM جيدة في:
نماذج SLM أضعف في:
الإستراتيجية الفائزة للوكلاء المحليين هي: دع SLM ينسق، ودع الأدوات تقوم بالعمل الشاق. النموذج لا يحتاج لأن يعرف قاعدة شيفرتك — يحتاج أن يعرف متى يستدعي read_file وsearch_docs. هذا يلعب مباشرة على نقاط قوة الـ SLM.
flowchart LR
U[مطور] --> A[وكيل SLM محلي]
A -->|يقرر الأداة المناسبة| T1[قراءة_الملف]
A -->|يقرر الأداة المناسبة| T2[بحث_المستندات RAG]
A -->|يقرر الأداة المناسبة| T3[تحليل_الكود]
T1 --> A
T2 --> A
T3 --> A
A --> R[الإجابة، كلها على الجهاز]
Microsoft Foundry Local هو بيئة تشغيل خفيفة تقوم بتنزيل وإدارة وخدمة النماذج بالكامل على جهازك. أهم ميزته لنا أنه يفتح نقطة نهاية HTTP متوافقة مع OpenAI — مما يعني أن SDK الخاص بـ OpenAI وعميل OpenAI في إطار عمل Microsoft Agent يعملان ضده بتغيير بسيط في base_url. كل ما تعلمته حول بناء الوكلاء يُنقل مباشرة؛ فقط نقطة النهاية تنتقل من السحابة إلى localhost.
يقوم Foundry Local أيضًا باختيار أفضل نسخة نموذج مناسبة لهاردويرك تلقائيًا — نسخة لمعالج مركزي، أو نسخة CUDA/GPU، أو نسخة NPU — لتجنب تحسينات يدوية لكل جهاز.
قم بتثبيت Foundry Local (راجع التوثيق لنظام التشغيل الخاص بك)، ثم تحقق من عمله:
# التثبيت (مثال؛ اتبع المستندات الخاصة بمنصتك)
winget install Microsoft.FoundryLocal # ويندوز
# brew install microsoft/foundrylocal/foundrylocal # ماك أو إس
# قم بتنزيل وتشغيل نموذج Qwen، ثم ابدأ الخدمة المحلية
foundry model run qwen2.5-7b-instruct
foundry service status
بمجرد تشغيل الخدمة ستحصل على نقطة نهاية متوافقة مع OpenAI محليًا (عادة http://localhost:PORT/v1). يستخدم الكود foundry-local-sdk لاكتشاف نقطة النهاية تلقائياً، لذا لا تحتاج إلى ترميز المنفذ بشكل يدوي.
لا يكون الوكيل وكيلًا إلا إذا كان يستطيع استدعاء الأدوات. العديد من نماذج SLM يمكنها الدردشة لكن تنتج استدعاءات أدوات غير موثوقة أو مشوهة. نماذج Qwen مدرّبة لاستدعاء الدوال وتصدر بنى استدعاء أدوات صحيحة باستمرار — وهذا بالضبط ما يحول نموذج دردشة محلي إلى وكيل محلي.
التدفق هو حلقة استدعاء أدوات قياسية تعرفها، فقط تعمل على الجهاز:
sequenceDiagram
participant U as المستخدم
participant A as وكيل كوين (محلي)
participant T as أداة محلية
U->>A: "ماذا يفعل auth.py؟"
A->>A: قرار: استدعاء read_file
A->>T: read_file("auth.py")
T-->>A: محتويات الملف
A->>A: التفكير في المحتويات
A-->>U: شرح
البحث في التوثيق هو حيث يكسب الوكلاء المحليين مكانتهم. بدلاً من الاعتماد على حفظ SLM لتوثيق إطارات العمل، تقوم بتضمين هذه الوثائق في قاعدة بيانات متجهية محلية وتسمح للوكيل باسترجاع الأجزاء ذات الصلة عند الطلب.
نستخدم Chroma، مخزن متجهات مضمن يعمل ضمن العملية بدون إدارة خادم. العملية بالكامل محلية: نموذج التضمين المحلي → المتجهات المحلية → الاسترجاع المحلي → SLM محلي.
flowchart TB
D[مستنداتك / الشفرة] --> E[نموذج التضمين المحلي]
E --> V[(قاعدة بيانات متجهات Chroma - على القرص)]
Q[استعلام الوكيل] --> QE[تضمين الاستعلام محليًا]
QE --> V
V -->|أفضل قطع k| A[وكيل Qwen]
A --> Ans[إجابة مؤيدة]
هذا هو نفس نمط Agentic RAG من الدرس 5 — التغيير الوحيد هو أن كل مكون يعمل على جهازك.
MCP هو بروتوكول نقل، وليس خدمة سحابية. يمكن تشغيل خادم MCP كعملية محلية على stdio، ليكشف أدوات لوكيلك عبر البروتوكول القياسي. هذا يسمح لك بإعادة استخدام النظام البيئي المتزايد من خوادم MCP — وصول إلى نظام الملفات، عمليات git، استعلامات قواعد البيانات — بالكامل دون اتصال.
وضع الأمان يختلف عن السحابة، لكنه ليس غائبًا: خادم MCP محلي لا يزال يعمل بصلاحيات المستخدم الخاص بك، لذلك قيد ما يمكن أن يلمسه (مجلد مشروع، وليس مجلد المنزل بأكمله) وتعامل مع مخرجاته كمدخلات للتحقق منها.
“محلي أولاً” لا يعني “محلي فقط”. الأنظمة المتطورة توجه حسب الحساسية والصعوبة:
| الحالة | أين تعمل |
|---|---|
| شيفرة/بيانات حساسة، أو بدون اتصال | SLM محلي |
| مهمة بسيطة ومحدودة | SLM محلي (رخيص وسريع) |
| استدلال صعب متعدد القفزات على بيانات غير حساسة | نموذج سحابي |
| كل شيء، أثناء الانقطاع | SLM محلي (تدهور تدريجي مهذب) |
هذا يعكس فكرة توجيه النموذج من الدرس 16 — باستثناء أن أحد “النماذج” هو جهازك الخاص. تصميم قوي يعود إلى المحلي إذا كانت السحابة غير متاحة، فتتحلل جودة الوكيل بدلاً من أن يفشل تمامًا.
flowchart LR
Q[طلب] --> S{هل هو حساس أم غير متصل؟}
S -->|نعم| L[SLM محلي]
S -->|لا| C{هل يحتاج إلى تفكير عميق؟}
C -->|لا| L
C -->|نعم| Cloud[نموذج سحابي]
L --> Out[استجابة]
Cloud --> Out
افتح code_samples/17-local-agent-foundry-local.ipynb واتبعه خطوة بخطوة. ستبني مساعد هندسي محلي يعمل بالكامل على محطة العمل الخاصة بك ويستطيع:
لا يُستخدم أي استدلال سحابي في أي نقطة.
يتصل المساعد بـ Foundry Local عبر نقطة نهاية متوافقة مع OpenAI، لذا يبدو كود الوكيل مشابهًا جدًا لدروس السحابة — فقط يتغير العميل:
from foundry_local import FoundryLocalManager
from openai import OpenAI
# يكتشف / ينزل نموذج Foundry Local ويعطينا نقطة نهاية محلية.
manager = FoundryLocalManager(\"qwen2.5-7b-instruct\")
client = OpenAI(base_url=manager.endpoint, api_key=manager.api_key) # api_key هو عنصر نائب محلي
الأدوات هي دوال بايثون عادية مخصصة لمجلد مشروع:
def read_file(path: str) -> str:
\"\"\"Read a file, but only inside the sandboxed project directory.\"\"\"
full = (PROJECT_ROOT / path).resolve()
if PROJECT_ROOT not in full.parents and full != PROJECT_ROOT:
return \"Access denied: path is outside the project directory.\"
return full.read_text(encoding=\"utf-8\")
لاحظ التحقق من البيئة المعزولة — حتى محلياً، أداة تقرأ مسارات عشوائية تمثل خطراً. يحتفظ الدفتر بكل أداة مقيدة لجذر مشروع واحد.
اختبر فهمك قبل الانتقال إلى التمرين.
1. قدم سببين محددين لتشغيل وكيل محلي بدلاً من السحابة.
2. ما هو تقسيم العمل الموصى به بين SLM وأدواته في وكيل محلي، ولماذا؟
3. ما الذي يجعل من الممكن إعادة استخدام كود الوكيل السحابي مع Foundry Local؟
4. لماذا نستخدم تحديدًا نموذج استدعاء دوال Qwen وليس أي SLM؟
5. في مسار RAG المحلي، أي المكونات تعمل على الجهاز؟
6. خادم MCP محلي يعمل على جهازك. هل هذا يجعله آمنًا تلقائيًا؟ ما الاحتياطات التي يجب اتخاذها؟
7. صف قاعدة توجيه هجينة منطقية تتضمن نموذجًا محليًا.
8. ما هو الحد الأدنى الواقعي للذاكرة العشوائية (RAM) لتشغيل الوكيل المحلي في هذا الدرس، وماذا تجلب لك المزيد من الذاكرة؟
قم بتوسيع المساعد الهندسي المحلي إلى مراجع توثيق محلي لمشروع صغير تختاره (يمكنك استخدام أحد مجلدات الدروس في هذا المستودع إذا أردت).
يجب أن يتضمن تسليمك:
إضافة أداة find_todos تفحص المشروع عن تعليقات TODO/FIXME وتُرجعها مع اسم الملف ورقم السطر — مع الحفاظ على التحقق من البيئة المعزولة نفس read_file.
ثم اكتب فقرة قصيرة عن ما الذي ستنقله إلى السحابة وما الذي ستحتفظ به محليًا لهذا المراجع، ولماذا. يتم تقييمك بناءً على ما إذا كانت المكونات المحلية متصلة بشكل صحيح وما إذا كان استدلالك المختلط منطقيًا — وليس على جودة النموذج.
في هذا الدرس قمت ببناء وكيل يعمل بالكامل على جهازك الخاص:
يُكمل هذا قوس النشر: الدرس 16 وسّع الوكلاء داخل Microsoft Foundry، وهذا الدرس قلصهم إلى محطة عمل واحدة. الدرس التالي يتجه إلى الحفاظ على أمان الوكلاء المنشورين.
تنويه: تمت ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي Co-op Translator. بينما نسعى للدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي والمعتمد. للمعلومات الهامة، يُنصح بالاستعانة بترجمة بشرية محترفة. نحن غير مسؤولين عن أي سوء فهم أو تفسير ناتج عن استخدام هذه الترجمة.