Pi Entegrasyon Mimarisi
Bu belge, OpenClaw’ın AI ajan yeteneklerini desteklemek için pi-coding-agent ve onun eş paketleri olan (pi-ai, pi-agent-core, pi-tui) ile nasıl entegre olduğunu açıklar.
Genel Bakış
OpenClaw, bir AI kodlama ajanını mesajlaşma ağ geçidi mimarisine gömmek için pi SDK’sını kullanır. OpenClaw, pi’yi bir alt süreç olarak başlatmak veya RPC modunu kullanmak yerine, pi’ninAgentSession bileşenini doğrudan içe aktarır ve createAgentSession() aracılığıyla örneğini oluşturur. 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ü işlemler)
- Kanal/bağlam başına sistem istemi özelleştirmesi
- Dallanma/sıkıştırma desteğiyle oturum kalıcılığı
- Hata durumunda devreye giren çok hesaplı kimlik doğrulama profili rotasyonu
- Sağlayıcıdan bağımsız model değiştirme
Paket Bağımlılıkları
| Paket | Amaç |
|---|---|
pi-ai | Temel LLM soyutlamaları: Model, streamSimple, mesaj türleri, sağlayıcı API’leri |
pi-agent-core | Ajan 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 | Terminal UI bileşenleri (OpenClaw’ın yerel TUI modunda kullanılır) |
Dosya Yapısı
src/agents/tools altında değil, eklentiye ait uzantı dizinlerinde bulunuyor; örneğin:
- Discord eklentisi işlem çalışma zamanı dosyaları
- Slack eklentisi işlem çalışma zamanı dosyası
- Telegram eklentisi işlem çalışma zamanı dosyası
- WhatsApp eklentisi işlem çalışma zamanı dosyası
Temel Entegrasyon Akışı
1. Gömülü Bir Ajanı Çalıştırma
Ana giriş noktası,pi-embedded-runner/run.ts içindeki runEmbeddedPiAgent() işlevsidir:
2. Oturum Oluşturma
runEmbeddedPiAgent() tarafından çağrılan runEmbeddedAttempt() içinde 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. İstem Gönderme
Kurulumdan sonra oturuma istem gönderilir:images üzerinden geçirir. Görsel payload’larını yeniden eklemek için eski geçmiş turlarını tekrar taramaz.
Araç Mimarisi
Araç Hattı
- Temel Araçlar: pi’nin
codingToolsaraçları (read,bash,edit,write) - Özel Değiştirmeler: OpenClaw,
bashyerineexec/processkullanır,read/edit/writearaçlarını sandbox için özelleştirir - OpenClaw Araçları: mesajlaşma, browser, canvas, oturumlar, cron, gateway vb.
- Kanal Araçları: Discord/Telegram/Slack/WhatsApp’e özgü işlem araçları
- İlke Filtreleme: Araçlar profil, sağlayıcı, ajan, grup ve sandbox ilkelerine göre filtrelenir
- Şema Normalleştirme: Şemalar Gemini/OpenAI tuhaflı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 türü, pi-coding-agent’ın ToolDefinition türünden farklı bir execute imzasına sahiptir. pi-tool-definition-adapter.ts içindeki bağdaştırıcı bu farkı köprüler:
Araç Bölme Stratejisi
splitSdkTools(), tüm araçları customTools üzerinden geçirir:
Sistem İstemi Oluşturma
Sistem istemi,buildAgentSystemPrompt() içinde (system-prompt.ts) oluşturulur. Araç kullanımı, Araç Çağrısı Tarzı, Güvenlik korumaları, OpenClaw CLI başvurusu, Skills, Belgeler, Çalışma Alanı, Sandbox, Mesajlaşma, Yanıt Etiketleri, Ses, Sessiz Yanıtlar, Heartbeat’ler, Çalışma zamanı meta verileri ile etkin olduğunda Bellek ve Reactions ve isteğe bağlı bağlam dosyaları ve ek sistem istemi içeriği gibi bölümlerden oluşan tam bir istem derler. Alt ajanlar için kullanılan minimal istem modunda bölümler kırpılır.
İstem, oturum oluşturulduktan sonra applySystemPromptOverrideToSession() aracılığıyla uygulanır:
Oturum Yönetimi
Oturum Dosyaları
Oturumlar, ağaç yapısına sahip JSONL dosyalarıdır (id/parentId bağlantıları). Pi’nin SessionManager bileşeni kalıcılığı yönetir:
guardSessionManager() ile sarar.
Oturum Önbellekleme
session-manager-cache.ts, tekrarlanan dosya ayrıştırmasını önlemek için SessionManager örneklerini önbelleğe alır:
Geçmiş Sınırlandırma
limitHistoryTurns(), kanal türüne göre (DM ile grup) konuşma geçmişini kırpar.
Sıkıştırma
Bağlam taşması olduğunda otomatik sıkıştırma 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 fazla API anahtarı içeren bir kimlik doğrulama profili deposu tutar:Model Çözümleme
Hata Sonrası Devreye Girme
FailoverError, yapılandırıldığında model geri dönüşünü tetikler:
Pi Uzantıları
OpenClaw, özel davranışlar için özel pi uzantıları yükler:Sıkıştırma Koruması
src/agents/pi-hooks/compaction-safeguard.ts, uyarlanabilir token bütçeleme ile araç başarısızlığı ve dosya işlemi özetleri dahil olmak üzere sıkıştırmaya korumalar 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ık yanıt blokları halinde yönetir:
Thinking/Final Etiketlerini Kaldırma
Akış çıktısı,<think>/<thinking> bloklarını kaldırmak ve <final> içeriğini çıkarmak 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 İşleme
Hata Sınıflandırması
pi-embedded-helpers.ts, uygun işleme için hataları sınıflandırır:
Thinking Seviyesi Geri Dönüşü
Bir thinking seviyesi desteklenmiyorsa geri dönüş yapılır:Sandbox Entegrasyonu
Sandbox modu etkin olduğunda araçlar ve yollar sınırlandırılır:Sağlayıcıya Özgü İşleme
Anthropic
- Reddetme sihirli dizesinin temizlenmesi
- Ardışık roller için tur doğrulaması
- Claude Code parametre uyumluluğu
Google/Gemini
- Eklentiye ait araç şeması temizleme
OpenAI
- Codex modelleri için
apply_patcharacı - Thinking seviyesi düşürme işleme
TUI Entegrasyonu
OpenClaw ayrıca doğrudan pi-tui bileşenlerini kullanan yerel bir TUI moduna da sahiptir:Pi CLI’dan Temel Farklar
| Özellik | Pi CLI | OpenClaw Embedded |
|---|---|---|
| Çağırma | pi komutu / RPC | createAgentSession() üzerinden SDK |
| Araçlar | Varsayılan kodlama araçları | Özel OpenClaw araç paketi |
| Sistem istemi | AGENTS.md + istemler | 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 |
| Uzantılar | 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 ve pi-coding-agent imzaları arasında uyarlama yapılıyor
- Session manager sarmalama:
guardSessionManagergüvenlik ekliyor ancak karmaşıklığı artırıyor - Uzantı yükleme: pi’nin
ResourceLoaderbileşeni daha doğrudan kullanılabilir - Akış işleyici karmaşıklığı:
subscribeEmbeddedPiSessionbüyüdü - Sağlayıcı tuhaflıkları: pi’nin potansiyel olarak ele alabileceği birçok sağlayıcıya özgü kod yolu var
Testler
Pi entegrasyon kapsamı şu paketleri içerir: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)