Arsitektur Integrasi Pi
Dokumen ini menjelaskan bagaimana OpenClaw terintegrasi dengan pi-coding-agent dan paket saudaranya (pi-ai, pi-agent-core, pi-tui) untuk mendukung kemampuan agen AI-nya.
Ikhtisar
OpenClaw menggunakan Pi SDK untuk menyematkan agen coding AI ke dalam arsitektur gateway perpesanannya. Alih-alih menjalankan pi sebagai subprocess atau menggunakan mode RPC, OpenClaw langsung mengimpor dan membuat instanceAgentSession milik pi melalui createAgentSession(). Pendekatan tersemat ini memberikan:
- Kontrol penuh atas siklus hidup sesi dan penanganan event
- Injeksi tool kustom (perpesanan, sandbox, aksi 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 Paket
| 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, contohnya:
- file runtime aksi plugin Discord
- file runtime aksi plugin Slack
- file runtime aksi plugin Telegram
- file runtime aksi plugin WhatsApp
Alur Integrasi Inti
1. Menjalankan Agen Tersemat
Entrypoint utama adalahrunEmbeddedPiAgent() di pi-embedded-runner/run.ts:
2. Pembuatan Sesi
Di dalamrunEmbeddedAttempt() (dipanggil oleh runEmbeddedPiAgent()), Pi SDK digunakan:
3. Langganan Event
subscribeEmbeddedPiSession() berlangganan ke event AgentSession milik pi:
message_start/message_end/message_update(streaming teks/thinking)tool_execution_start/tool_execution_update/tool_execution_endturn_start/turn_endagent_start/agent_endauto_compaction_start/auto_compaction_end
4. Prompting
Setelah penyiapan, prompt dikirimkan ke sesi:images hanya untuk giliran tersebut. Sistem 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: perpesanan, browser, canvas, sessions, cron, gateway, dll.
- Tool Channel: tool aksi khusus Discord/Telegram/Slack/WhatsApp
- Pemfilteran Kebijakan: Tool difilter berdasarkan profil, provider, agen, grup, kebijakan sandbox
- Normalisasi Skema: Skema dibersihkan untuk quirk Gemini/OpenAI
- Pembungkusan AbortSignal: Tool dibungkus agar mematuhi 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 perbedaan ini:
Strategi Pemisahan Tool
splitSdkTools() meneruskan semua tool melalui customTools:
Konstruksi System Prompt
System prompt dibangun dibuildAgentSystemPrompt() (system-prompt.ts). Komponen ini menyusun prompt lengkap dengan bagian-bagian termasuk Tooling, Tool Call Style, guardrail Safety, referensi CLI OpenClaw, Skills, Dokumen, Workspace, Sandbox, Messaging, Reply Tags, Voice, Silent Replies, Heartbeats, metadata Runtime, serta Memory dan Reactions saat diaktifkan, dan file konteks opsional serta konten system prompt tambahan. Bagian-bagian 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 melakukan cache pada instance SessionManager untuk menghindari parsing file berulang:
Pembatasan Riwayat
limitHistoryTurns() memangkas riwayat percakapan berdasarkan jenis channel (DM vs grup).
Compaction
Compaction otomatis dipicu saat konteks meluap. Tanda tangan overflow yang 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:
Auth dan Resolusi Model
Profil Auth
OpenClaw memelihara penyimpanan profil auth dengan beberapa API key per provider:Resolusi Model
Failover
FailoverError memicu fallback model saat dikonfigurasi:
Pi Extensions
OpenClaw memuat extension pi kustom untuk perilaku khusus:Compaction Safeguard
src/agents/pi-hooks/compaction-safeguard.ts menambahkan guardrail ke compaction, termasuk penganggaran token adaptif plus ringkasan kegagalan tool dan operasi file:
Context Pruning
src/agents/pi-hooks/context-pruning.ts mengimplementasikan pruning konteks berbasis cache-TTL:
Streaming dan Balasan Blok
Chunking Blok
EmbeddedBlockChunker mengelola streaming teks menjadi blok balasan 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 suatu tingkat thinking tidak didukung, sistem akan melakukan fallback:Integrasi Sandbox
Saat mode sandbox diaktifkan, tool dan path dibatasi:Penanganan Khusus Provider
Anthropic
- Pembersihan magic string penolakan
- Validasi giliran untuk role yang berurutan
- Validasi parameter tool Pi upstream yang ketat
Google/Gemini
- Sanitasi skema tool milik plugin
OpenAI
- Tool
apply_patchuntuk model Codex - Penanganan downgrade 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 | Rangkaian 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 programatik + disk |
| Penanganan event | Rendering TUI | Berbasis callback (onBlockReply, dll.) |
Pertimbangan Masa Depan
Area yang berpotensi untuk dikerjakan ulang:- Penyelarasan signature tool: Saat ini masih mengadaptasi antara signature pi-agent-core dan pi-coding-agent
- Pembungkusan session manager:
guardSessionManagermenambahkan keamanan tetapi meningkatkan kompleksitas - Pemuatan extension: Dapat menggunakan
ResourceLoadermilik pi secara lebih langsung - Kompleksitas handler streaming:
subscribeEmbeddedPiSessionsemakin besar - Quirk 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)