Pi Entegrasyon Mimarisi
Bu belge, OpenClaw’ın AI aracı yeteneklerini desteklemek için pi-coding-agent ve ona eşlik eden paketlerle (pi-ai, pi-agent-core, pi-tui) nasıl entegre olduğunu açıklar.
Genel bakış
OpenClaw, bir AI kodlama aracısını mesajlaşma ağ geçidi mimarisine gömmek için pi SDK’sını kullanır. Pi’yi bir alt süreç olarak başlatmak veya RPC kipini kullanmak yerine OpenClaw,createAgentSession() aracılığıyla doğrudan pi’nin AgentSession sınıfını içe aktarır ve örnekler. Bu gömülü yaklaşım şunları sağlar:
- Oturum yaşam döngüsü ve olay işleme üzerinde tam denetim
- Özel araç ekleme (mesajlaşma, sandbox, kanala özgü eylemler)
- Kanal/bağlam başına sistem prompt özelleştirmesi
- Dallanma/sıkıştırma desteğiyle oturum kalıcılığı
- Geri dönüş ile çok hesaplı kimlik doğrulama profili döndürme
- Sağlayıcıdan bağımsız model değiştirme
Paket bağımlılıkları
| Paket | Amaç |
|---|---|
pi-ai | Çekirdek LLM soyutlamaları: Model, streamSimple, mesaj türleri, sağlayıcı API’leri |
pi-agent-core | Aracı döngüsü, araç yürütme, AgentMessage türleri |
pi-coding-agent | Üst düzey SDK: createAgentSession, SessionManager, AuthStorage, ModelRegistry, yerleşik araçlar |
pi-tui | Uçbirim kullanıcı arayüzü bileşenleri (OpenClaw’ın yerel TUI kipinde kullanılır) |
Dosya yapısı
src/agents/tools altında değil,
eklentiye ait uzantı dizinlerinde bulunur; örneğin:
- Discord eklentisi eylem çalışma zamanı dosyaları
- Slack eklentisi eylem çalışma zamanı dosyası
- Telegram eklentisi eylem çalışma zamanı dosyası
- WhatsApp eklentisi eylem çalışma zamanı dosyası
Çekirdek entegrasyon akışı
1. Gömülü bir aracı çalıştırma
Ana giriş noktasıpi-embedded-runner/run.ts içindeki runEmbeddedPiAgent() fonksiyonudur:
2. Oturum oluşturma
runEmbeddedAttempt() içinde (runEmbeddedPiAgent() tarafından çağrılır), pi SDK kullanılır:
3. Olay aboneliği
subscribeEmbeddedPiSession(), pi’nin AgentSession olaylarına abone olur:
message_start/message_end/message_update(akış metni/düşünme)tool_execution_start/tool_execution_update/tool_execution_endturn_start/turn_endagent_start/agent_endauto_compaction_start/auto_compaction_end
4. Prompt gönderme
Kurulumdan sonra oturuma prompt gönderilir:images aracılığıyla geçirir. Eski geçmiş dönüşlerini yeniden tarayıp
görsel yüklerini yeniden eklemez.
Araç mimarisi
Araç hattı
- Temel araçlar: pi’nin
codingToolsaraçları (read, bash, edit, write) - Özel değiştirmeler: OpenClaw, bash’i
exec/processile değiştirir, read/edit/write araçlarını sandbox için özelleştirir - OpenClaw araçları: mesajlaşma, browser, canvas, sessions, cron, gateway vb.
- Kanal araçları: Discord/Telegram/Slack/WhatsApp’e özgü eylem araçları
- İlke filtreleme: Araçlar profil, sağlayıcı, aracı, grup ve sandbox ilkelerine göre filtrelenir
- Şema normalizasyonu: Şemalar Gemini/OpenAI farklılıkları için temizlenir
- AbortSignal sarmalama: Araçlar iptal sinyallerine uyacak şekilde sarılır
Araç tanımı bağdaştırıcısı
pi-agent-core’unAgentTool tipi, pi-coding-agent’in ToolDefinition tipinden farklı bir execute imzasına sahiptir. pi-tool-definition-adapter.ts içindeki bağdaştırıcı bunu köprüler:
Araç bölme stratejisi
splitSdkTools(), tüm araçları customTools aracılığıyla geçirir:
Sistem promptu oluşturma
Sistem promptubuildAgentSystemPrompt() içinde (system-prompt.ts) oluşturulur. Araçlar, Araç Çağrısı Stili, Güvenlik korkulukları, OpenClaw CLI başvurusu, Skills, Belgeler, Çalışma Alanı, Sandbox, Mesajlaşma, Yanıt Etiketleri, Ses, Sessiz Yanıtlar, Heartbeats, Çalışma Zamanı meta verileri ve etkin olduğunda Bellek ile Tepkiler dahil bölümlerle tam bir prompt derler; ayrıca isteğe bağlı bağlam dosyaları ve ek sistem prompt içeriği de eklenebilir. Alt aracılarda kullanılan en düşük prompt kipi için bölümler kırpılır.
Prompt, oturum oluşturulduktan sonra applySystemPromptOverrideToSession() ile uygulanır:
Oturum yönetimi
Oturum dosyaları
Oturumlar, ağaç yapısına sahip (id/parentId bağlantılı) JSONL dosyalarıdır. Pi’ninSessionManager sınıfı kalıcılığı yönetir:
guardSessionManager() ile sarar.
Oturum önbellekleme
session-manager-cache.ts, tekrarlayan dosya ayrıştırmasını önlemek için SessionManager örneklerini önbelleğe alır:
Geçmiş sınırlama
limitHistoryTurns(), konuşma geçmişini kanal türüne göre (DM ve grup) kırpar.
Sıkıştırma
Otomatik sıkıştırma, bağlam taşmasında tetiklenir. Yaygın taşma imzaları arasındarequest_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 ve ollama error: context length exceeded bulunur. compactEmbeddedPiSessionDirect(), el ile
sıkıştırmayı yönetir:
Kimlik doğrulama ve model çözümleme
Kimlik doğrulama profilleri
OpenClaw, sağlayıcı başına birden çok API anahtarı içeren bir kimlik doğrulama profili deposu tutar:Model çözümleme
Geri dönüş
YapılandırıldığındaFailoverError, model geri dönüşünü tetikler:
Pi eklentileri
OpenClaw, özel davranışlar için özel pi eklentileri yükler:Sıkıştırma koruması
src/agents/pi-hooks/compaction-safeguard.ts, uyarlanabilir belirteç bütçeleme ile araç başarısızlığı ve dosya işlemi özetleri dahil olmak üzere sıkıştırmaya korkuluklar ekler:
Bağlam budama
src/agents/pi-hooks/context-pruning.ts, önbellek TTL tabanlı bağlam budamayı uygular:
Akış ve blok yanıtlar
Blok parçalama
EmbeddedBlockChunker, akış metnini ayrı yanıt bloklarına dönüştürmeyi yönetir:
Düşünme/nihai etiket temizleme
Akış çıktısı,<think>/<thinking> bloklarını çıkarmak ve <final> içeriğini ayıklamak için işlenir:
Yanıt yönergeleri
[[media:url]], [[voice]], [[reply:id]] gibi yanıt yönergeleri ayrıştırılır ve çıkarılır:
Hata işleme
Hata sınıflandırma
pi-embedded-helpers.ts, uygun işleme için hataları sınıflandırır:
Düşünme seviyesi geri dönüşü
Bir düşünme seviyesi desteklenmiyorsa geri düşülür:Sandbox entegrasyonu
Sandbox kipi etkin olduğunda araçlar ve yollar kısıtlanır:Sağlayıcıya özgü işleme
Anthropic
- Ret sihirli dize temizleme
- Art arda gelen roller için dönüş doğrulaması
- Katı yukarı akış Pi araç parametresi doğrulaması
Google/Gemini
- Eklentiye ait araç şeması temizleme
OpenAI
- Codex modelleri için
apply_patcharacı - Düşünme seviyesi düşürme işleme
TUI entegrasyonu
OpenClaw ayrıca doğrudan pi-tui bileşenlerini kullanan yerel bir TUI kipine de sahiptir:Pi CLI’den temel farklar
| Özellik | Pi CLI | OpenClaw Gömülü |
|---|---|---|
| Çağırma | pi komutu / RPC | createAgentSession() aracılığıyla SDK |
| Araçlar | Varsayılan kodlama araçları | Özel OpenClaw araç paketi |
| Sistem promptu | AGENTS.md + promptlar | Kanal/bağlam başına dinamik |
| Oturum depolama | ~/.pi/agent/sessions/ | ~/.openclaw/agents/<agentId>/sessions/ (veya $OPENCLAW_STATE_DIR/agents/<agentId>/sessions/) |
| Kimlik doğrulama | Tek kimlik bilgisi | Döndürmeli çoklu profil |
| Eklentiler | Diskten yüklenir | Programatik + disk yolları |
| Olay işleme | TUI oluşturma | Geri çağırım tabanlı (onBlockReply vb.) |
Geleceğe yönelik değerlendirmeler
Olası yeniden çalışma alanları:- Araç imzası hizalaması: Şu anda pi-agent-core ile pi-coding-agent imzaları arasında uyarlama yapılıyor
- Oturum yöneticisi sarmalama:
guardSessionManagergüvenlik ekliyor ancak karmaşıklığı artırıyor - Eklenti yükleme: Pi’nin
ResourceLoaderyapısı daha doğrudan kullanılabilir - Akış işleyici karmaşıklığı:
subscribeEmbeddedPiSessionbüyüdü - Sağlayıcı farklılıkları: Pi’nin potansiyel olarak işleyebileceği çok sayıda sağlayıcıya özgü kod yolu var
Testler
Pi entegrasyonu kapsamı şu paketlere yayılır: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=1etkinleştirin)