核心只寫2000行,卻撐起23k Star——拆解Pi Agent三層架構(gòu)
你可能因?yàn)槿N原因點(diǎn)開了這篇文章想找個(gè)好用的編碼 Agent、想知道 Agent 怎么做的、要做自己的 Agent。這三個(gè)問題恰好對應(yīng)同一個(gè)框架的三個(gè)身份。一、三個(gè)身份一個(gè)項(xiàng)目先說清楚 Pi 是什么。它是Mario ZechnerlibGDX 游戲引擎作者GitHub ID: badlogic開發(fā)的開源 AI Agent 框架。MIT 協(xié)議TypeScript 寫的23.7k Star官網(wǎng) pi.dev。但 Pi 不是一個(gè)產(chǎn)品這么簡單。它同時(shí)是三件事?編碼 Agent CLI— 一個(gè)終端里的編程助手跟 Claude Code 同賽道?Agent 源碼教材— 核心只有 5 個(gè)文件約 2000 行讀它就能搞懂 Agent 怎么做?SDK 二開底座— 分層設(shè)計(jì)讓你能嵌進(jìn)自己的應(yīng)用長出完全不同的產(chǎn)品這三個(gè)身份指向同一個(gè)項(xiàng)目本身就值得好奇。二、三層架構(gòu)Pi 的核心設(shè)計(jì)決策Pi 最重要的架構(gòu)決策是三層分離設(shè)計(jì)原則只有一句話分離不穩(wěn)定的外部世界與穩(wěn)定的核心循環(huán)。┌─────────────────────────────────┐ │ 產(chǎn)品層 (coding-agent) │ │ CLI · 7工具 · Extension · TUI │ ├─────────────────────────────────┤ │ Agent運(yùn)行時(shí) (agent-core) │ │ Agent Loop · Steering · 狀態(tài) │ ├─────────────────────────────────┤ │ LLM通信層 (pi-ai) │ │ 22提供商 · EventStream · 轉(zhuǎn)換 │ └─────────────────────────────────┘每層只知道自己該知道的事?pi-ai只管和模型說話不知道 Agent 是什么?agent-core只管循環(huán)和狀態(tài)不知道工具具體干什么?coding-agent只管編碼業(yè)務(wù)不關(guān)心底層通信細(xì)節(jié)這里有兩個(gè)關(guān)鍵邊界需要記住LLM 邊界統(tǒng)一消息進(jìn)統(tǒng)一事件出和副作用邊界模型只能提議工具調(diào)用實(shí)際執(zhí)行在本地可被攔截。三、第一層 pi-aiLLM 通信的臟活3.1 為什么要單獨(dú)分一層用過多家 LLM API 的人都知道這個(gè)痛苦? OpenAI 的 tool call ID 可以有 450 字符帶管道符Anthropic 限制 64 字符且只允許特定字符? Anthropic 返回加密的 thinking signatureGoogle 有 thought signature格式完全不同? 每家上下文溢出的錯誤信息都不一樣Pi 用一個(gè)統(tǒng)一接口抹平這些差異。核心是一個(gè)自建的EventStream。3.2 EventStream不跟風(fēng)任何流框架Pi 沒用 RxJS、沒用 Node Stream、沒用回調(diào)自建了一個(gè)極簡異步可迭代流classimplementspushvoid// 生產(chǎn)者推事件asyncIterator// 消費(fèi)者 for-await-ofresult// 等最終結(jié)果LLM 的流式響應(yīng)被標(biāo)準(zhǔn)化為11 種細(xì)粒度事件text_delta、thinking_delta、toolcall_delta、done 等。最狠的是toolcall_delta——Pi 在流式傳輸過程中實(shí)時(shí)解析不完整的 JSON工具參數(shù)不用等傳完就能讀取。3.3 transformMessages最有工程價(jià)值的函數(shù)當(dāng)你在不同提供商之間切換模型時(shí)對話歷史需要轉(zhuǎn)換。這是全項(xiàng)目最臟但最有價(jià)值的代碼// OpenAI 的 tool call ID: 450 字符帶管道符// ↓ transformMessages()// Anthropic 能接受的: 64 字符以內(nèi)它還處理四件事thinking block 轉(zhuǎn)換加密的只對同模型有效切換時(shí)轉(zhuǎn)純文本、孤立 tool call 修補(bǔ)模型發(fā)了調(diào)用沒返回結(jié)果注入合成結(jié)果防報(bào)錯、thought signature 過濾、錯誤消息清理。這正是框架的價(jià)值把臟活集中到一個(gè)地方讓上層代碼保持干凈。3.4 ThinkingLevel 統(tǒng)一每家的思考實(shí)現(xiàn)不同Pi 用一個(gè)枚舉統(tǒng)一ThinkingLevel→Anthropicminimal budget:1024 / medium budget:8192 / high budget:16384ThinkingLevel→OpenAIminimal effort:“minimal” / medium effort:“medium” / high effort:“high”ThinkingLevel→Googleminimal LOW / medium MEDIUM / high HIGH上層代碼只需要說我要 high 級別思考不關(guān)心底層怎么映射。四、第二層 agent-coreAgent 運(yùn)行時(shí)4.1 不只是一個(gè) while 循環(huán)大多數(shù) Agent 教程里的循環(huán)是這樣的while現(xiàn)實(shí)中這不夠用。用戶在 Agent 執(zhí)行過程中改主意怎么辦多工具能并行要不要并行工具執(zhí)行一半出錯怎么恢復(fù)Pi 的解決方案是雙層循環(huán)外層循環(huán) (Follow-up) └── 內(nèi)層循環(huán) (Steering Tool Execution) ├── 調(diào) LLM → 發(fā)射 message events ├── 執(zhí)行工具 (可并行) ├── 檢查 Steering → 可中斷剩余工具 └── 注入新指令4.2 Steering用戶隨時(shí)改主意Steering轉(zhuǎn)向是關(guān)鍵創(chuàng)新。工具執(zhí)行過程中外部可以往隊(duì)列塞消息// Agent 正在執(zhí)行一系列工具...steeruser停不要部署。// → 當(dāng)前工具執(zhí)行完后跳過剩余工具Follow-up后續(xù)處理另一種場景——Agent 說完了但有后續(xù)消息要注入。4.3 并行工具執(zhí)行Pi 默認(rèn)并行執(zhí)行工具但做了精心設(shè)計(jì)?Preflight 串行— 先逐個(gè)校驗(yàn)參數(shù)、跑鉤子可阻止執(zhí)行?執(zhí)行并發(fā)— 通過校驗(yàn)的工具 Promise.all 并發(fā)?結(jié)果按原始順序返回— 不管哪個(gè)先完成順序和 LLM 發(fā)出的一致順序?yàn)槭裁粗匾驗(yàn)?LLM 看到的結(jié)果順序會影響它的推理。五、第三層 coding-agent產(chǎn)品層5.1 七個(gè)內(nèi)置工具read— 讀文件支持圖片自動縮放到 2000x2000bash— 執(zhí)行命令超時(shí)控制、流式輸出、退出碼追蹤edit— 精確編輯find-and-replace不是整文件覆蓋write— 寫文件創(chuàng)建或覆蓋自動建父目錄grep— 搜索內(nèi)容尊重 .gitignore截?cái)嗟?30KBfind— 搜索文件glob 模式ls— 列目錄POSIX 格式5.2 Operations 接口工具與環(huán)境解耦這是 Pi 工具設(shè)計(jì)里最聰明的部分。工具不直接調(diào)fs.readFile而是通過接口interfacereadFilestringstringstatstring// 本地執(zhí)行const// SSH 遠(yuǎn)程const同一個(gè) read 工具本地跑、SSH 遠(yuǎn)程跑、容器里跑——零代碼改動。5.3 Extension 系統(tǒng)不替你做決定Pi 明確不用 MCP用 TypeScript 原生擴(kuò)展export default functionregisterTooldeployontool_callasyncregisterCommandstatssetWidgetkeyLine 1擴(kuò)展有兩種能力監(jiān)聽并介入在 Agent 運(yùn)行任意節(jié)點(diǎn)插入邏輯和向核心注冊新能力注冊工具、命令、快捷鍵、UI。覆蓋了30 生命周期事件session_start、before_agent_start、tool_call、tool_result、compact 等。這意味著子代理、計(jì)劃模式、權(quán)限彈窗——全都可以通過擴(kuò)展實(shí)現(xiàn)核心不需要改一行代碼。5.4 會話管理JSONL 樹形 無損壓縮Pi 用 JSONL 格式存儲會話采用樹形結(jié)構(gòu)interfacestringstring// 父節(jié)點(diǎn)形成樹messagecompactionany關(guān)鍵概念leafId 決定模型看到的上下文路徑。模型只看到從根到葉子節(jié)點(diǎn)的路徑。這使得會話支持分支切換不需要復(fù)制整個(gè)歷史。壓縮是無損的——完整歷史保留在 JSONL 文件中壓縮只是創(chuàng)建摘要條目替代舊消息。六、TUI終端渲染的工程細(xì)節(jié)pi-tui 是獨(dú)立終端 UI 框架有兩個(gè)值得關(guān)注的技術(shù)點(diǎn)。差分渲染三種策略首次全量輸出、尺寸變化清屏重繪、增量更新只重繪變化區(qū)域。所有更新用CSI 2026 同步輸出協(xié)議包裹——零閃爍SSH 遠(yuǎn)程場景下減少網(wǎng)絡(luò)傳輸量。IME 支持用自定義 APC 序列精確告訴終端 IME 光標(biāo)位置中日韓輸入法候選窗口能正確定位——大多數(shù)終端 TUI 框架不處理這個(gè)。七、Pi vs Claude Code兩種哲學(xué)讀完源碼最明顯的感受是它和 Claude Code 代表兩種 Agent 構(gòu)建哲學(xué)理念Pi 最小內(nèi)核極致可擴(kuò)展 vs Claude Code 全功能內(nèi)置擴(kuò)展Pi TypeScript Extension vs Claude Code Hooks (shell)MCPPi 設(shè)計(jì)上排除 vs Claude Code 原生支持權(quán)限Pi 無內(nèi)置交給上層vs Claude Code 內(nèi)置審批計(jì)劃模式Pi 無可擴(kuò)展實(shí)現(xiàn)vs Claude Code 內(nèi)置工具后端Pi Operations可插拔 vs Claude Code 固定本地Pi 的哲學(xué)是不替你做決定。Claude Code 的哲學(xué)是開箱即用。兩種都有效取決于你要平臺還是要產(chǎn)品。八、OpenClaw架構(gòu)的實(shí)戰(zhàn)驗(yàn)證理解 Pi 架構(gòu)價(jià)值的最佳案例是OpenClaw——一個(gè)支持 46 個(gè)消息渠道WhatsApp、Telegram、Discord 等的多渠道 AI 助手。它不是 fork Pi 然后魔改而是把 Pi 當(dāng)引擎嵌入? 復(fù)用 Pi 的streamSimple()嵌入運(yùn)行 Agent 循環(huán)? 復(fù)用SessionManager做會話持久化? 復(fù)用codingTools選擇性引入工具? 復(fù)用 Extension 系統(tǒng)自建上下文修剪擴(kuò)展同一套 LLM 通信層和 Agent 運(yùn)行時(shí)長出了兩個(gè)完全不同形態(tài)的產(chǎn)品。這就是分層架構(gòu)的價(jià)值證明。九、寫在最后Pi 給我們的啟示不是怎么做 Agent而是怎么不做什么。核心 5 個(gè)文件 2000 行70 擴(kuò)展示例覆蓋遠(yuǎn)比核心豐富的功能場景。這種結(jié)構(gòu)傳遞了一個(gè)明確信息框架的作者不替開發(fā)者決定 Agent 應(yīng)該怎么工作。如果你要一個(gè)開箱即用的產(chǎn)品選 Claude Code。如果你要一個(gè)能嵌進(jìn)自己流程、能改模型、能改工具、能改權(quán)限策略的底座Pi 值得一讀。核心只做最必要的事。剩下的全部交給擴(kuò)展。學(xué)AI大模型的正確順序千萬不要搞錯了2026年AI風(fēng)口已來各行各業(yè)的AI滲透肉眼可見超多公司要么轉(zhuǎn)型做AI相關(guān)產(chǎn)品要么高薪挖AI技術(shù)人才機(jī)遇直接擺在眼前有往AI方向發(fā)展或者本身有后端編程基礎(chǔ)的朋友直接沖AI大模型應(yīng)用開發(fā)轉(zhuǎn)崗超合適就算暫時(shí)不打算轉(zhuǎn)崗了解大模型、RAG、Prompt、Agent這些熱門概念能上手做簡單項(xiàng)目也絕對是求職加分王給大家整理了超全最新的AI大模型應(yīng)用開發(fā)學(xué)習(xí)清單和資料手把手幫你快速入門學(xué)習(xí)路線:?大模型基礎(chǔ)認(rèn)知—大模型核心原理、發(fā)展歷程、主流模型GPT、文心一言等特點(diǎn)解析?核心技術(shù)模塊—RAG檢索增強(qiáng)生成、Prompt工程實(shí)戰(zhàn)、Agent智能體開發(fā)邏輯?開發(fā)基礎(chǔ)能力—Python進(jìn)階、API接口調(diào)用、大模型開發(fā)框架LangChain等實(shí)操?應(yīng)用場景開發(fā)—智能問答系統(tǒng)、企業(yè)知識庫、AIGC內(nèi)容生成工具、行業(yè)定制化大模型應(yīng)用?項(xiàng)目落地流程—需求拆解、技術(shù)選型、模型調(diào)優(yōu)、測試上線、運(yùn)維迭代?面試求職沖刺—崗位JD解析、簡歷AI項(xiàng)目包裝、高頻面試題匯總、模擬面經(jīng)以上6大模塊看似清晰好上手實(shí)則每個(gè)部分都有扎實(shí)的核心內(nèi)容需要吃透我把大模型的學(xué)習(xí)全流程已經(jīng)整理好了抓住AI時(shí)代風(fēng)口輕松解鎖職業(yè)新可能希望大家都能把握機(jī)遇實(shí)現(xiàn)薪資/職業(yè)躍遷這份完整版的大模型 AI 學(xué)習(xí)資料已經(jīng)上傳CSDN朋友們?nèi)绻枰梢晕⑿艗呙柘路紺SDN官方認(rèn)證二維碼免費(fèi)領(lǐng)取【保證100%免費(fèi)】

相關(guān)新聞

# 鴻蒙 HarmonyOS 應(yīng)用開發(fā)實(shí)戰(zhàn)(第25期)|骰子(Dice Roller)— Unicode 符號與動畫渲染精講

# 鴻蒙 HarmonyOS 應(yīng)用開發(fā)實(shí)戰(zhàn)(第25期)|骰子(Dice Roller)— Unicode 符號與動畫渲染精講

一、應(yīng)用概述 骰子(Dice Roller) 是一款經(jīng)典的休閑娛樂應(yīng)用,模擬了真實(shí)擲骰子的過程。應(yīng)用投擲兩個(gè)骰子(六面標(biāo)準(zhǔn)骰),使用 Unicode 骰面符號直觀展示每個(gè)骰子的點(diǎn)數(shù),并伴有快速滾動的動畫效果。…

2026/7/29 0:15:24 閱讀更多
面試官大笑:“一個(gè)任務(wù)拆給 5 個(gè) Subagent 并行跑,不比 1 個(gè)快 5 倍?“我搖頭:“快不了,還可能更慢“

面試官大笑:“一個(gè)任務(wù)拆給 5 個(gè) Subagent 并行跑,不比 1 個(gè)快 5 倍?“我搖頭:“快不了,還可能更慢“

前兩個(gè)月,我在重構(gòu) AlgoMooc 網(wǎng)站過程中,發(fā)現(xiàn)一個(gè)問題:在 Claude Code 里把一個(gè)任務(wù)拆給 5 個(gè) Subagent 并行跑,結(jié)果可能比 1 個(gè) agent 從頭干到尾還慢? 大多數(shù)人的第一反應(yīng)是反過來的:活是并行干的&#…

2026/7/29 0:15:24 閱讀更多
SQL注入四種類型詳解:原理、利用與防御

SQL注入四種類型詳解:原理、利用與防御

1. 什么是 SQL 注入?SQL 注入是指攻擊者將惡意 SQL 代碼插入到輸入?yún)?shù)中,應(yīng)用程序未進(jìn)行過濾便將其拼接到 SQL 查詢語句中,導(dǎo)致數(shù)據(jù)庫執(zhí)行了非預(yù)期的命令。一句話解釋就是你輸入的內(nèi)容被直接當(dāng)作代碼執(zhí)行了2. 四種常見類型2.1 聯(lián)合查詢注入 …

2026/7/29 6:06:06 閱讀更多
Node.js C++擴(kuò)展開發(fā):突破性能瓶頸,構(gòu)建高性能數(shù)據(jù)處理架構(gòu)

Node.js C++擴(kuò)展開發(fā):突破性能瓶頸,構(gòu)建高性能數(shù)據(jù)處理架構(gòu)

1. 項(xiàng)目概述:為什么要在Node.js里“嵌入”C?如果你是一個(gè)Node.js開發(fā)者,尤其是涉足后端服務(wù)、數(shù)據(jù)處理或者工具鏈開發(fā),大概率會遇到過這樣的瓶頸:某個(gè)計(jì)算密集型的任務(wù),用純JavaScript寫出來,性…

2026/7/29 6:06:06 閱讀更多
機(jī)器學(xué)習(xí)與深度學(xué)習(xí):核心差異與實(shí)戰(zhàn)應(yīng)用指南

機(jī)器學(xué)習(xí)與深度學(xué)習(xí):核心差異與實(shí)戰(zhàn)應(yīng)用指南

1. 機(jī)器學(xué)習(xí)與深度學(xué)習(xí):從理論到實(shí)戰(zhàn)的全方位解析 在數(shù)據(jù)爆炸的時(shí)代,機(jī)器學(xué)習(xí)(Machine Learning)和深度學(xué)習(xí)(Deep Learning)已經(jīng)成為推動技術(shù)進(jìn)步的核心引擎。作為一名從業(yè)多年的數(shù)據(jù)科學(xué)家,我見…

2026/7/29 6:06:06 閱讀更多
NSAIDs藥物全解析:從作用機(jī)制到安全使用指南

NSAIDs藥物全解析:從作用機(jī)制到安全使用指南

1. 從“止痛藥”到“抗炎藥”:重新認(rèn)識NSAIDs 在藥柜里,布洛芬、阿司匹林、雙氯芬酸鈉這些名字你一定不陌生。頭疼腦熱、關(guān)節(jié)酸痛、運(yùn)動拉傷,我們總會習(xí)慣性地求助于它們。但你是否想過,這些被我們籠統(tǒng)稱為“止痛藥”的家伙&#…

2026/7/29 6:06:06 閱讀更多
51單片機(jī)LED點(diǎn)陣廣告牌設(shè)計(jì):從硬件驅(qū)動到軟件掃描全解析

51單片機(jī)LED點(diǎn)陣廣告牌設(shè)計(jì):從硬件驅(qū)動到軟件掃描全解析

1. 項(xiàng)目概述:從零到一,打造一個(gè)會“說話”的LED點(diǎn)陣廣告牌最近在帶學(xué)生做單片機(jī)課設(shè),發(fā)現(xiàn)“LED點(diǎn)陣廣告牌設(shè)計(jì)”這個(gè)題目真是經(jīng)久不衰。它麻雀雖小,五臟俱全,幾乎涵蓋了單片機(jī)應(yīng)用開發(fā)的所有核心環(huán)節(jié):從硬件…

2026/7/29 6:06:06 閱讀更多
Spring Security OAuth2 Scope驗(yàn)證全流程解析與實(shí)戰(zhàn)

Spring Security OAuth2 Scope驗(yàn)證全流程解析與實(shí)戰(zhàn)

1. 項(xiàng)目概述:為什么我們需要深入理解OAuth2的scope驗(yàn)證? 如果你正在開發(fā)或維護(hù)一個(gè)基于Spring Security OAuth2的授權(quán)服務(wù)器或資源服務(wù)器,那么“scope驗(yàn)證”這個(gè)環(huán)節(jié),很可能就是你系統(tǒng)安全防線上最容易被忽視,卻又至關(guān)…

2026/7/29 5:56:05 閱讀更多
面試官大笑:“一個(gè)任務(wù)拆給 5 個(gè) Subagent 并行跑,不比 1 個(gè)快 5 倍?“我搖頭:“快不了,還可能更慢“

面試官大笑:“一個(gè)任務(wù)拆給 5 個(gè) Subagent 并行跑,不比 1 個(gè)快 5 倍?“我搖頭:“快不了,還可能更慢“

前兩個(gè)月,我在重構(gòu) AlgoMooc 網(wǎng)站過程中,發(fā)現(xiàn)一個(gè)問題:在 Claude Code 里把一個(gè)任務(wù)拆給 5 個(gè) Subagent 并行跑,結(jié)果可能比 1 個(gè) agent 從頭干到尾還慢? 大多數(shù)人的第一反應(yīng)是反過來的:活是并行干的&#…

2026/7/29 0:15:24 閱讀更多
# 鴻蒙 HarmonyOS 應(yīng)用開發(fā)實(shí)戰(zhàn)(第25期)|骰子(Dice Roller)— Unicode 符號與動畫渲染精講

# 鴻蒙 HarmonyOS 應(yīng)用開發(fā)實(shí)戰(zhàn)(第25期)|骰子(Dice Roller)— Unicode 符號與動畫渲染精講

一、應(yīng)用概述 骰子(Dice Roller) 是一款經(jīng)典的休閑娛樂應(yīng)用,模擬了真實(shí)擲骰子的過程。應(yīng)用投擲兩個(gè)骰子(六面標(biāo)準(zhǔn)骰),使用 Unicode 骰面符號直觀展示每個(gè)骰子的點(diǎn)數(shù),并伴有快速滾動的動畫效果?!?/p>

2026/7/29 0:15:24 閱讀更多