Arsitektur Integrasi Pi
Dokumen ini menjelaskan bagaimana OpenClaw terintegrasi dengan pi-coding-agent dan package saudaranya (pi-ai, pi-agent-core, pi-tui) untuk mendukung kapabilitas agen AI-nya.
Gambaran umum
OpenClaw menggunakan SDK Pi untuk menanamkan agen coding AI ke dalam arsitektur gateway pesannya. Alih-alih menjalankan pi sebagai subprocess atau menggunakan mode RPC, OpenClaw langsung mengimpor dan membuat instanceAgentSession milik pi melalui createAgentSession(). Pendekatan tertanam ini memberikan:
- Kontrol penuh atas siklus hidup sesi dan penanganan event
- Injeksi tool kustom (pesan, sandbox, tindakan khusus channel)
- Kustomisasi system prompt per channel/konteks
- Persistensi sesi dengan dukungan branching/compaction
- Rotasi profil auth multi-akun dengan failover
- Peralihan model yang agnostik terhadap provider
Dependensi package
| Package | Tujuan |
|---|---|
pi-ai | Abstraksi LLM inti: Model, streamSimple, tipe pesan, API provider |
pi-agent-core | Loop agen, eksekusi tool, tipe AgentMessage |
pi-coding-agent | SDK tingkat tinggi: createAgentSession, SessionManager, AuthStorage, ModelRegistry, tool bawaan |
pi-tui | Komponen UI terminal (digunakan dalam mode TUI lokal OpenClaw) |
Struktur file
src/agents/tools, misalnya:
- file runtime tindakan plugin Discord
- file runtime tindakan plugin Slack
- file runtime tindakan plugin Telegram
- file runtime tindakan plugin WhatsApp
Alur Integrasi Inti
1. Menjalankan Agen Tertanam
Entrypoint utamanya adalahrunEmbeddedPiAgent() di pi-embedded-runner/run.ts:
2. Pembuatan Sesi
Di dalamrunEmbeddedAttempt() (dipanggil oleh runEmbeddedPiAgent()), SDK pi digunakan:
3. Subscription Event
subscribeEmbeddedPiSession() melakukan subscription ke event AgentSession milik pi:
message_start/message_end/message_update(teks/thinking streaming)tool_execution_start/tool_execution_update/tool_execution_endturn_start/turn_endagent_start/agent_endauto_compaction_start/auto_compaction_end
4. Prompting
Setelah penyiapan, sesi diberi prompt:images hanya untuk giliran itu. Ini tidak memindai ulang giliran riwayat yang lebih lama
untuk menyuntikkan ulang payload gambar.
Arsitektur Tool
Pipeline Tool
- Tool Dasar:
codingToolsmilik pi (read, bash, edit, write) - Pengganti Kustom: OpenClaw mengganti bash dengan
exec/process, menyesuaikan read/edit/write untuk sandbox - Tool OpenClaw: pesan, browser, canvas, sessions, cron, gateway, dll.
- Tool Channel: tool tindakan khusus Discord/Telegram/Slack/WhatsApp
- Pemfilteran Kebijakan: tool difilter berdasarkan kebijakan profil, provider, agen, grup, dan sandbox
- Normalisasi Skema: skema dibersihkan untuk keanehan Gemini/OpenAI
- Wrapping AbortSignal: tool dibungkus agar menghormati abort signal
Adapter Definisi Tool
AgentTool milik pi-agent-core memiliki signature execute yang berbeda dari ToolDefinition milik pi-coding-agent. Adapter di pi-tool-definition-adapter.ts menjembatani hal ini:
Strategi Pemisahan Tool
splitSdkTools() meneruskan semua tool melalui customTools:
Konstruksi System Prompt
System prompt dibangun dibuildAgentSystemPrompt() (system-prompt.ts). Ini menyusun prompt penuh dengan bagian yang mencakup Tooling, Tool Call Style, guardrail Safety, referensi CLI OpenClaw, Skills, Docs, Workspace, Sandbox, Messaging, Reply Tags, Voice, Silent Replies, Heartbeats, metadata Runtime, serta Memory dan Reactions saat diaktifkan, dan juga file konteks opsional serta konten system prompt tambahan. Bagian-bagian ini dipangkas untuk mode prompt minimal yang digunakan oleh subagent.
Prompt diterapkan setelah pembuatan sesi melalui applySystemPromptOverrideToSession():
Manajemen Sesi
File Sesi
Sesi adalah file JSONL dengan struktur tree (tautan id/parentId).SessionManager milik Pi menangani persistensi:
guardSessionManager() untuk keamanan hasil tool.
Caching Sesi
session-manager-cache.ts menyimpan cache instance SessionManager untuk menghindari parsing file berulang:
Pembatasan Riwayat
limitHistoryTurns() memangkas riwayat percakapan berdasarkan tipe channel (DM vs grup).
Compaction
Auto-compaction terpicu saat konteks meluap. Tanda tangan overflow umum mencakuprequest_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, dan ollama error: context length exceeded. compactEmbeddedPiSessionDirect() menangani
compaction manual:
Autentikasi & Resolusi Model
Profil Auth
OpenClaw memelihara penyimpanan profil auth dengan beberapa API key per provider:Resolusi Model
Failover
FailoverError memicu fallback model bila dikonfigurasi:
Extension Pi
OpenClaw memuat extension pi kustom untuk perilaku khusus:Safeguard Compaction
src/agents/pi-hooks/compaction-safeguard.ts menambahkan guardrail ke compaction, termasuk penganggaran token adaptif serta ringkasan kegagalan tool dan operasi file:
Pruning Konteks
src/agents/pi-hooks/context-pruning.ts mengimplementasikan pruning konteks berbasis cache-TTL:
Streaming & Balasan Blok
Chunking Blok
EmbeddedBlockChunker mengelola teks streaming menjadi blok balasan yang diskret:
Penghapusan Tag Thinking/Final
Output streaming diproses untuk menghapus blok<think>/<thinking> dan mengekstrak konten <final>:
Directive Balasan
Directive balasan seperti[[media:url]], [[voice]], [[reply:id]] diparse dan diekstrak:
Penanganan Error
Klasifikasi Error
pi-embedded-helpers.ts mengklasifikasikan error untuk penanganan yang sesuai:
Fallback Tingkat Thinking
Jika tingkat thinking tidak didukung, sistem akan fallback:Integrasi Sandbox
Saat mode sandbox diaktifkan, tool dan jalur dibatasi:Penanganan Khusus Provider
Anthropic
- Penghapusan magic string refusal
- Validasi giliran untuk peran berurutan
- Kompatibilitas parameter Claude Code
Google/Gemini
- Sanitasi skema tool milik plugin
OpenAI
- Tool
apply_patchuntuk model Codex - Penanganan penurunan tingkat thinking
Integrasi TUI
OpenClaw juga memiliki mode TUI lokal yang menggunakan komponen pi-tui secara langsung:Perbedaan Utama dari Pi CLI
| Aspek | Pi CLI | OpenClaw Embedded |
|---|---|---|
| Invocation | perintah pi / RPC | SDK melalui createAgentSession() |
| Tools | Tool coding default | Kumpulan tool OpenClaw kustom |
| System prompt | AGENTS.md + prompt | Dinamis per channel/konteks |
| Penyimpanan sesi | ~/.pi/agent/sessions/ | ~/.openclaw/agents/<agentId>/sessions/ (atau $OPENCLAW_STATE_DIR/agents/<agentId>/sessions/) |
| Auth | Kredensial tunggal | Multi-profil dengan rotasi |
| Extensions | Dimuat dari disk | Jalur terprogram + jalur disk |
| Penanganan event | Rendering TUI | Berbasis callback (onBlockReply, dll.) |
Pertimbangan Mendatang
Area untuk potensi pengerjaan ulang:- Penyelarasan signature tool: Saat ini sedang mengadaptasi antara signature pi-agent-core dan pi-coding-agent
- Pembungkusan session manager:
guardSessionManagermenambah keamanan tetapi meningkatkan kompleksitas - Pemuatan extension: Dapat menggunakan
ResourceLoadermilik pi secara lebih langsung - Kompleksitas handler streaming:
subscribeEmbeddedPiSessiontelah menjadi besar - Keanehan provider: Banyak codepath khusus provider yang berpotensi dapat ditangani oleh pi
Pengujian
Cakupan integrasi Pi mencakup suite berikut: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(aktifkanOPENCLAW_LIVE_TEST=1)