بنية تكامل Pi
تصف هذه الوثيقة كيف يندمج OpenClaw مع pi-coding-agent والحزم الشقيقة له (pi-ai وpi-agent-core وpi-tui) لتشغيل قدرات وكيل الذكاء الاصطناعي لديه.
نظرة عامة
يستخدم OpenClaw حزمة pi SDK لتضمين وكيل ترميز بالذكاء الاصطناعي داخل بنية بوابة المراسلة الخاصة به. وبدلًا من تشغيل pi كعملية فرعية أو استخدام وضع RPC، يستورد OpenClaw مباشرة ويُنشئAgentSession الخاص بـ pi عبر createAgentSession(). ويوفر هذا النهج المضمن:
- تحكمًا كاملًا في دورة حياة الجلسة ومعالجة الأحداث
- حقن أدوات مخصصة (المراسلة، وsandbox، وإجراءات خاصة بكل قناة)
- تخصيص system prompt لكل قناة/سياق
- استمرارية الجلسة مع دعم التفرع/الضغط
- تدوير ملفات تعريف auth متعددة الحسابات مع الرجوع عند الفشل
- تبديل النماذج بشكل مستقل عن الموفّر
تبعيات الحزمة
| الحزمة | الغرض |
|---|---|
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، على سبيل المثال:
- ملفات وقت تشغيل إجراءات إضافة Discord
- ملف وقت تشغيل إجراءات إضافة Slack
- ملف وقت تشغيل إجراءات إضافة Telegram
- ملف وقت تشغيل إجراءات إضافة 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_endauto_compaction_start/auto_compaction_end
4. إرسال prompt
بعد الإعداد، يتم إرسال prompt إلى الجلسة: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:
بناء system prompt
يتم بناء system prompt فيbuildAgentSystemPrompt() (system-prompt.ts). وهو يجمع prompt كاملة مع أقسام تشمل Tooling، وTool Call Style، وحواجز الأمان، ومرجع OpenClaw CLI، وSkills، والوثائق، ومساحة العمل، وSandbox، والمراسلة، وReply Tags، والصوت، والردود الصامتة، وHeartbeats، وبيانات وقت التشغيل، بالإضافة إلى الذاكرة والتفاعلات عند تمكينها، وكذلك ملفات السياق الاختيارية ومحتوى system prompt الإضافي. وتُقص الأقسام في وضع prompt الأدنى المستخدم بواسطة الوكلاء الفرعيين.
تُطبَّق prompt على الجلسة بعد إنشائها عبر applySystemPromptOverrideToSession():
إدارة الجلسات
ملفات الجلسات
الجلسات عبارة عن ملفات JSONL ذات بنية شجرية (ربط عبر id/parentId). ويتولىSessionManager في Pi الاستمرارية:
guardSessionManager() من أجل أمان نتائج الأدوات.
التخزين المؤقت للجلسات
يقومsession-manager-cache.ts بتخزين مثيلات SessionManager مؤقتًا لتجنب تكرار تحليل الملفات:
تقييد السجل
تقومlimitHistoryTurns() بقص سجل المحادثة وفقًا لنوع القناة (رسائل خاصة مقابل مجموعة).
الضغط
يُفعَّل الضغط التلقائي عند تجاوز السياق. وتشمل تواقيع تجاوز السياق الشائعة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() معالجة
الضغط اليدوي:
المصادقة وحل النموذج
ملفات تعريف auth
يحافظ OpenClaw على مخزن لملفات تعريف auth مع عدة مفاتيح API لكل موفّر:حل النموذج
الرجوع عند الفشل
تؤديFailoverError إلى الرجوع إلى نموذج بديل عند الإعداد:
إضافات Pi
يحمّل OpenClaw إضافات pi مخصصة لسلوكيات متخصصة:حماية الضغط
تضيفsrc/agents/pi-hooks/compaction-safeguard.ts وسائل حماية إلى الضغط، بما في ذلك ضبط ميزانية الرموز بشكل تكيفي بالإضافة إلى ملخصات فشل الأدوات وعمليات الملفات:
تقليم السياق
تطبّقsrc/agents/pi-hooks/context-pruning.ts تقليم السياق المستند إلى Cache-TTL:
البث وردود الكتل
تقسيم الكتل
يديرEmbeddedBlockChunker بث النص إلى كتل رد منفصلة:
إزالة وسوم Thinking/Final
تُعالج مخرجات البث لإزالة كتل<think>/<thinking> واستخراج محتوى <final>:
توجيهات الرد
يتم تحليل توجيهات الرد مثل[[media:url]] و[[voice]] و[[reply:id]] واستخراجها:
معالجة الأخطاء
تصنيف الأخطاء
تقومpi-embedded-helpers.ts بتصنيف الأخطاء من أجل التعامل المناسب معها:
الرجوع في مستوى التفكير
إذا كان مستوى التفكير غير مدعوم، فيتم الرجوع:تكامل Sandbox
عند تمكين وضع sandbox، يتم تقييد الأدوات والمسارات:المعالجة الخاصة بكل موفّر
Anthropic
- تنظيف سلسلة الرفض السحرية
- التحقق من الأدوار المتتالية
- توافق معلمات Claude Code
Google/Gemini
- تنقية مخطط الأدوات المملوك للإضافات
OpenAI
- أداة
apply_patchلنماذج Codex - معالجة خفض مستوى التفكير
تكامل TUI
لدى OpenClaw أيضًا وضع TUI محلي يستخدم مكونات pi-tui مباشرة:الفروق الأساسية عن Pi CLI
| الجانب | Pi CLI | OpenClaw Embedded |
|---|---|---|
| الاستدعاء | أمر pi / RPC | SDK عبر createAgentSession() |
| الأدوات | أدوات الترميز الافتراضية | مجموعة أدوات OpenClaw المخصصة |
| system prompt | 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
- تغليف session manager: يضيف
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)