Skip to main content

Pi 整合架構

本文件描述 OpenClaw 如何與 pi-coding-agent 及其兄弟套件(pi-aipi-agent-corepi-tui)整合以支援其 AI 代理能力。

概述

OpenClaw 使用 pi SDK 將 AI 編碼代理嵌入到其訊息網關架構中。OpenClaw 不是生成 pi 作為子進程或使用 RPC 模式,而是直接導入並透過 createAgentSession() 實例化 pi 的 AgentSession。此嵌入式方法提供:
  • 對會話生命週期和事件處理的完全控制
  • 自訂工具注入(訊息、沙盒、頻道特定操作)
  • 系統提示詞按頻道/上下文自訂
  • 具有分支/壓縮支援的會話持續性
  • 具有容錯轉移的多帳戶認證檔案輪換
  • 提供商不知道的模型交換

套件相依性

檔案結構

核心整合流

1. 執行嵌入式代理

主入口點是 pi-embedded-runner/run.ts 中的 runEmbeddedPiAgent()

2. 會話建立

runEmbeddedAttempt()(由 runEmbeddedPiAgent() 呼叫)內,使用 pi SDK:

3. 事件訂閱

subscribeEmbeddedPiSession() 訂閱 pi 的 AgentSession 事件:
處理的事件包括:
  • message_start / message_end / message_update(串流文本/思考)
  • tool_execution_start / tool_execution_update / tool_execution_end
  • turn_start / turn_end
  • agent_start / agent_end
  • auto_compaction_start / auto_compaction_end

4. 提示詞

設定後,會話被提示:
SDK 處理完整代理迴圈:傳送到 LLM、執行工具呼叫、串流回應。 影像注入是提示詞本地的:OpenClaw 從當前提示詞加載影像參考,並僅為該轉向通過 images 傳遞。它不會重新掃描舊版歷史轉向以重新注入影像負載。

工具架構

工具管道

  1. 基本工具:pi 的 codingTools(read、bash、edit、write)
  2. 自訂替換:OpenClaw 使用 exec/process 替換 bash,為沙盒自訂 read/edit/write
  3. OpenClaw 工具:訊息、瀏覽器、畫布、會話、cron、網關等
  4. 頻道工具:Discord/Telegram/Slack/WhatsApp 特定操作工具
  5. 原則篩選:工具按檔案、提供商、代理、群組、沙盒原則篩選
  6. 架構規範化:為 Gemini/OpenAI 怪癖清理架構
  7. AbortSignal 包裝:包裝工具以尊重中止信號

工具定義適配器

pi-agent-core 的 AgentTool 具有與 pi-coding-agent 的 ToolDefinition 不同的 execute 簽章。pi-tool-definition-adapter.ts 中的適配器橋接:

工具分割策略

splitSdkTools() 通過 customTools 傳遞所有工具:
這確保 OpenClaw 的原則篩選、沙盒整合和延伸工具集在提供商間保持一致。

系統提示詞構造

系統提示詞在 buildAgentSystemPrompt()system-prompt.ts)中構建。它組裝一個完整提示詞,包含工具、工具呼叫風格、安全護欄、OpenClaw CLI 參考、技能、文件、工作區、沙盒、訊息、回覆標籤、語音、無聲回覆、心跳、運行時元數據、加記憶體和反應(啟用時)、加選擇性上下文檔案和額外系統提示詞內容。對子代理使用的最小提示詞模式調整部分。 提示詞在會話建立後通過 applySystemPromptOverrideToSession() 應用:

會話管理

會話檔案

會話是具有樹結構(id/parentId 連結)的 JSONL 檔案。Pi 的 SessionManager 處理持續性:
OpenClaw 用 guardSessionManager() 包裝此以確保工具結果安全。

會話快取

session-manager-cache.ts 快取 SessionManager 實例以避免重複檔案解析:

歷史限制

limitHistoryTurns() 根據頻道類型(DM vs 群組)修剪對話歷史。

壓縮

自動壓縮在上下文溢位時觸發。compactEmbeddedPiSessionDirect() 處理手動壓縮:

認證和模型解析

認證檔案

OpenClaw 維護認證檔案儲存,每個提供商有多個 API 金鑰:
檔案在失敗時帶冷卻追蹤輪換:

模型解析

容錯轉移

FailoverError 在配置時觸發模型降級:

Pi 延伸

OpenClaw 加載自訂 pi 延伸以實現專門行為:

壓縮保護

src/agents/pi-extensions/compaction-safeguard.ts 添加壓縮護欄,包括自適應 token 預算加工具失敗和檔案操作摘要:

上下文修剪

src/agents/pi-extensions/context-pruning.ts 實作快取 TTL 基礎上下文修剪:

串流和塊回覆

塊分塊

EmbeddedBlockChunker 管理串流文本到離散回覆塊:

思考/最終標籤剝離

串流輸出被處理以剝離 <think>/<thinking> 塊和提取 <final> 內容:

回覆指示

回覆指示如 [[media:url]][[voice]][[reply:id]] 被解析和提取:

錯誤處理

錯誤分類

pi-embedded-helpers.ts 分類錯誤以適當處理:

思考層級降級

如果思考層級不受支援,它會降級:

沙盒整合

啟用沙盒模式後,工具和路徑受限:

提供商特定處理

Anthropic

  • 拒絕魔法字符串清理
  • 連續角色轉向驗證
  • Claude Code 參數相容性

Google/Gemini

  • 轉向順序修復(applyGoogleTurnOrderingFix
  • 工具架構清理(sanitizeToolsForGoogle
  • 會話歷史清理(sanitizeSessionHistory

OpenAI

  • Codex 模型的 apply_patch 工具
  • 思考層級降級處理

TUI 整合

OpenClaw 也有直接使用 pi-tui 元件的本地 TUI 模式:
這提供了類似 pi 原生模式的互動式終端機體驗。

Pi CLI 的關鍵差異

未來考慮

潛在重做的領域:
  1. 工具簽章對齊:目前在 pi-agent-core 和 pi-coding-agent 簽章間調整
  2. 會話管理器包裝guardSessionManager 添加安全性但增加複雜性
  3. 延伸加載:可以更直接地使用 pi 的 ResourceLoader
  4. 串流處理程式複雜性subscribeEmbeddedPiSession 已變大
  5. 提供商怪癖:許多提供商特定代碼路徑 pi 可能能夠處理

測試

Pi 整合涵蓋範圍跨越這些套件:
  • src/agents/pi-*.test.ts
  • src/agents/pi-auth-json.test.ts
  • src/agents/pi-embedded-*.test.ts
  • src/agents/pi-embedded-helpers*.test.ts
  • src/agents/pi-embedded-runner*.test.ts
  • src/agents/pi-embedded-runner/**/*.test.ts
  • src/agents/pi-embedded-subscribe*.test.ts
  • src/agents/pi-tools*.test.ts
  • src/agents/pi-tool-definition-adapter*.test.ts
  • src/agents/pi-settings.test.ts
  • src/agents/pi-extensions/**/*.test.ts
即時/選擇加入:
  • src/agents/pi-embedded-runner-extraparams.live.test.ts(啟用 OPENCLAW_LIVE_TEST=1
有關當前運行命令,請查看 Pi 開發工作流