بنية تكامل Pi
يصف هذا المستند كيف يدمج OpenClaw مع pi-coding-agent والحزم الشقيقة له (pi-ai وpi-agent-core وpi-tui) لتشغيل قدرات عامل الذكاء الاصطناعي فيه.
نظرة عامة
يستخدم OpenClaw حزمة pi SDK لتضمين عامل برمجة بالذكاء الاصطناعي داخل بنية gateway الخاصة بالمراسلة. وبدلًا من تشغيل pi كعملية فرعية أو استخدام وضع RPC، يقوم OpenClaw مباشرة باستيرادAgentSession الخاص بـ pi وإنشائه عبر createAgentSession(). ويوفر هذا النهج المضمّن ما يلي:
- تحكم كامل في دورة حياة الجلسة ومعالجة الأحداث
- حقن أدوات مخصصة (المراسلة، وsandbox، والإجراءات الخاصة بكل قناة)
- تخصيص موجّه النظام لكل قناة/سياق
- استمرارية الجلسة مع دعم التفرع وCompaction
- تدوير ملفات تعريف المصادقة متعددة الحسابات مع الرجوع الاحتياطي
- تبديل النماذج بشكل مستقل عن الموفّر
تبعيات الحزم
| الحزمة | الغرض |
|---|---|
pi-ai | تجريدات LLM الأساسية: Model، وstreamSimple، وأنواع الرسائل، وواجهات API الخاصة بالموفّر |
pi-agent-core | حلقة العامل، وتنفيذ الأدوات، وأنواع AgentMessage |
pi-coding-agent | SDK عالي المستوى: createAgentSession، وSessionManager، وAuthStorage، وModelRegistry، والأدوات المضمّنة |
pi-tui | مكونات واجهة الطرفية (تُستخدم في وضع TUI المحلي في OpenClaw) |
بنية الملفات
src/agents/tools، على سبيل المثال:
- ملفات بيئة تشغيل إجراءات Plugin الخاص بـ Discord
- ملف بيئة تشغيل إجراء Plugin الخاص بـ Slack
- ملف بيئة تشغيل إجراء Plugin الخاص بـ Telegram
- ملف بيئة تشغيل إجراء Plugin الخاص بـ WhatsApp
تدفق التكامل الأساسي
1. تشغيل عامل مضمّن
نقطة الإدخال الرئيسية هيrunEmbeddedPiAgent() في pi-embedded-runner/run.ts:
2. إنشاء الجلسة
داخلrunEmbeddedAttempt() (التي تستدعيها runEmbeddedPiAgent())، تُستخدم حزمة pi SDK:
3. الاشتراك في الأحداث
تقومsubscribeEmbeddedPiSession() بالاشتراك في أحداث AgentSession الخاصة بـ pi:
message_start/message_end/message_update(بث النص/التفكير)tool_execution_start/tool_execution_update/tool_execution_endturn_start/turn_endagent_start/agent_endcompaction_start/compaction_end
4. إرسال الموجّه
بعد الإعداد، يُرسل الموجّه إلى الجلسة:images لتلك الدورة فقط. وهو لا يعيد فحص الدورات الأقدم في السجل
لإعادة حقن حمولات الصور.
بنية الأدوات
خط معالجة الأدوات
- الأدوات الأساسية:
codingToolsالخاصة بـ pi (read,bash,edit,write) - البدائل المخصصة: يستبدل OpenClaw
bashبـexec/process، ويخصص read/edit/write لأجل sandbox - أدوات OpenClaw: المراسلة، والمتصفح، وcanvas، والجلسات، وcron، وgateway، وغير ذلك
- أدوات القنوات: أدوات الإجراءات الخاصة بـ Discord/Telegram/Slack/WhatsApp
- تصفية السياسات: تُصفّى الأدوات حسب ملفات التعريف، والموفّر، والعامل، والمجموعة، وسياسات sandbox
- تطبيع المخطط: تُنظَّف المخططات لمعالجة خصائص Gemini/OpenAI
- تغليف AbortSignal: تُغلَّف الأدوات لاحترام إشارات الإلغاء
محوّل تعريف الأداة
يحتويAgentTool في pi-agent-core على توقيع execute مختلف عن ToolDefinition في pi-coding-agent. ويجسر المحوّل في pi-tool-definition-adapter.ts هذه الفجوة:
استراتيجية تقسيم الأدوات
تقومsplitSdkTools() بتمرير جميع الأدوات عبر customTools:
بناء موجّه النظام
يُبنى موجّه النظام فيbuildAgentSystemPrompt() (system-prompt.ts). إذ يجمع موجّهًا كاملًا يضم أقسامًا تشمل الأدوات، وأسلوب استدعاء الأدوات، وضوابط الأمان، ومرجع CLI الخاص بـ OpenClaw، وSkills، والمستندات، ومساحة العمل، وSandbox، والمراسلة، ووسوم الرد، والصوت، والردود الصامتة، وHeartbeats، وبيانات وقت التشغيل الوصفية، بالإضافة إلى الذاكرة وReactions عند تفعيلهما، وكذلك ملفات السياق الاختيارية ومحتوى موجّه النظام الإضافي. وتُقص هذه الأقسام لاستخدام وضع الموجّه الأدنى المستخدم بواسطة العاملات الفرعيات.
يُطبّق الموجّه بعد إنشاء الجلسة عبر applySystemPromptOverrideToSession():
إدارة الجلسة
ملفات الجلسة
الجلسات هي ملفات JSONL ذات بنية شجرية (روابط id/parentId). ويتولىSessionManager الخاص بـ Pi الاستمرارية:
guardSessionManager() لأمان نتائج الأدوات.
التخزين المؤقت للجلسات
يقومsession-manager-cache.ts بتخزين مثيلات SessionManager مؤقتًا لتجنب تحليل الملفات بشكل متكرر:
تحديد السجل
تقومlimitHistoryTurns() بقص سجل المحادثة بناءً على نوع القناة (رسالة مباشرة مقابل مجموعة).
Compaction
يُفعَّل Compaction التلقائي عند تجاوز السياق. وتشمل أنماط تجاوز السياق الشائعةrequest_too_large، وcontext length exceeded، وinput exceeds the maximum number of tokens، وinput token count exceeds the maximum number of input tokens، وinput is too long for the model، وollama error: context length exceeded. ويتولى compactEmbeddedPiSessionDirect() تنفيذ
Compaction اليدوي:
المصادقة وحل النموذج
ملفات تعريف المصادقة
يحافظ OpenClaw على مخزن لملفات تعريف المصادقة مع عدة مفاتيح API لكل موفّر:حل النموذج
الرجوع الاحتياطي
يؤديFailoverError إلى تشغيل الرجوع الاحتياطي للنموذج عند تكوينه:
امتدادات Pi
يقوم OpenClaw بتحميل امتدادات Pi مخصصة لسلوكيات متخصصة:حماية Compaction
يضيفsrc/agents/pi-hooks/compaction-safeguard.ts ضوابط حماية إلى Compaction، بما في ذلك الميزانية التكيفية للرموز بالإضافة إلى ملخصات إخفاقات الأدوات وعمليات الملفات:
تقليم السياق
ينفذsrc/agents/pi-hooks/context-pruning.ts تقليم السياق المعتمد على Cache TTL:
البث وردود الكتل
تقطيع الكتل
يتولىEmbeddedBlockChunker إدارة النص المتدفق إلى كتل رد منفصلة:
إزالة وسوم التفكير/النهائي
تُعالج المخرجات المتدفقة لإزالة كتل<think>/<thinking> واستخراج محتوى <final>:
توجيهات الرد
تُحلل توجيهات الرد مثل[[media:url]]، و[[voice]]، و[[reply:id]] وتُستخرج:
معالجة الأخطاء
تصنيف الأخطاء
يقومpi-embedded-helpers.ts بتصنيف الأخطاء لمعالجتها بالشكل المناسب:
الرجوع الاحتياطي لمستوى التفكير
إذا كان مستوى التفكير غير مدعوم، فسيتم الرجوع الاحتياطي:تكامل Sandbox
عند تفعيل وضع sandbox، تُقيَّد الأدوات والمسارات:المعالجة الخاصة بكل موفّر
Anthropic
- تنظيف سلسلة الرفض السحرية
- التحقق من الدور عند تتابع الأدوار
- تحقق صارم من معاملات أدوات Pi في المنبع
Google/Gemini
- تنقية مخطط الأدوات المملوكة من Plugin
OpenAI
- أداة
apply_patchلنماذج Codex - معالجة خفض مستوى التفكير
تكامل TUI
يحتوي OpenClaw أيضًا على وضع TUI محلي يستخدم مكونات pi-tui مباشرة:الفروق الأساسية عن Pi CLI
| الجانب | Pi CLI | OpenClaw المضمّن |
|---|---|---|
| الاستدعاء | أمر pi / RPC | SDK عبر createAgentSession() |
| الأدوات | أدوات البرمجة الافتراضية | مجموعة أدوات OpenClaw المخصصة |
| موجّه النظام | AGENTS.md + prompts | ديناميكي بحسب القناة/السياق |
| تخزين الجلسات | ~/.pi/agent/sessions/ | ~/.openclaw/agents/<agentId>/sessions/ (أو $OPENCLAW_STATE_DIR/agents/<agentId>/sessions/) |
| المصادقة | بيانات اعتماد واحدة | عدة ملفات تعريف مع تدوير |
| الامتدادات | تُحمّل من القرص | برمجيًا + مسارات قرص |
| معالجة الأحداث | عرض TUI | قائمة على callbacks (onBlockReply، وما إلى ذلك) |
اعتبارات مستقبلية
مجالات يمكن إعادة العمل عليها لاحقًا:- محاذاة توقيع الأدوات: يوجد حاليًا تكييف بين توقيعات pi-agent-core وpi-coding-agent
- تغليف مدير الجلسة: يضيف
guardSessionManagerأمانًا لكنه يزيد التعقيد - تحميل الامتدادات: يمكن استخدام
ResourceLoaderالخاص بـ Pi بشكل أكثر مباشرة - تعقيد معالج البث: أصبح
subscribeEmbeddedPiSessionكبيرًا - خصائص الموفّرين: توجد مسارات كود خاصة بكثير من الموفّرين ويمكن أن يتولاها Pi مستقبلًا
الاختبارات
تغطي اختبارات تكامل Pi هذه المجموعات:src/agents/pi-*.test.tssrc/agents/pi-auth-json.test.tssrc/agents/pi-embedded-*.test.tssrc/agents/pi-embedded-helpers*.test.tssrc/agents/pi-embedded-runner*.test.tssrc/agents/pi-embedded-runner/**/*.test.tssrc/agents/pi-embedded-subscribe*.test.tssrc/agents/pi-tools*.test.tssrc/agents/pi-tool-definition-adapter*.test.tssrc/agents/pi-settings.test.tssrc/agents/pi-hooks/**/*.test.ts
src/agents/pi-embedded-runner-extraparams.live.test.ts(فعّلOPENCLAW_LIVE_TEST=1)