跳到正文

PRINCIPLE MAP · 完整執行鏈路

Pi 工作原理:從一條 Prompt 到一次完整 Agent Loop ​

前面的課程分別講過工作階段(Session)、上下文(Context)、System Prompt、Tool、技能(Skill)、壓縮(Compaction)和 Cache。單獨看,每個詞都不難;真正容易卡住的是:當你提交一條任務以後,它們究竟怎樣連在一起?

這一篇只做一件事:把一次請求從輸入到完成完整跑通。讀完以後,你應該能看著 Pi 介面裡的模型回覆、工具呼叫和工具結果,說清它現在位於哪一步,以及下一步為什麼還會再次呼叫模型。

先記住一句話

Pi 是組織執行過程的代理框架(Agent Harness)。模型負責判斷下一步,工具負責接觸真實環境,工作階段儲存過程,上下文是某一次模型呼叫真正收到的輸入。

先看完整執行鏈 ​

Pi 從一條 Prompt 到一次完整 Agent Loop:Pi 從當前工作階段組裝上下文,呼叫模型;模型可以反覆呼叫工具並讀取結果,最後回覆使用者並把過程寫回工作階段;上下文過長時才進入壓縮。

圖裡最重要的不是箭頭數量,而是中間那一圈:

text
模型 → Tool Call → 工具執行 → Tool Result → 模型再次推理

只要模型仍然需要外部資訊或動作,這個迴圈就可以繼續。模型可能先讀取檔案,再搜尋內容,再修改檔案,最後執行檢查;每次工具返回的結果都會成為下一次模型判斷的依據。模型不再請求工具、而是給出普通回覆時,這一輪 Agent Loop 才結束。

圖中的壓縮使用虛線,因為它不是每條 Prompt 都會經過的固定步驟。只有上下文接近限額、手動執行 /compact,或相應機制被觸發時,Pi 才會把較早內容整理成摘要,再帶著保留的近期訊息繼續。

不要把所有術語排成一條流水線 ​

下面這條寫法適合記憶大方向:

text
輸入任務 → 讀取 Session → 構建 Context → 調模型 → 調工具 → 返回結果
→ 再次推理 → 回覆使用者 → 寫入 Session → 必要時 Compaction → 繼續

但真實結構裡有三個需要修正的地方。

1. System Prompt、Tool 和技能共同參與上下文組裝 ​

它們不是三個依次執行的站點。

  • System Prompt 規定 Pi 以什麼身份工作、有哪些基礎規則,並列出當前能力。
  • Tool 定義 告訴模型有哪些工具、每個工具能做什麼、需要哪些引數;工具本身要等模型發出 Tool Call 才會執行。
  • 技能 通常先以名稱和描述出現在系統提示中。任務匹配時,模型再透過讀取工具載入完整 SKILL.md,其內容從那一刻開始參與後續判斷。
  • 上下文檔案和專案規則、當前工作目錄、活動工作階段分支中的訊息與壓縮摘要,也會一起構成這一輪模型可見的輸入。

所以更準確的說法是:Pi 先組裝上下文,再把 System Prompt、訊息和可用工具等資訊一起交給模型。

2. 工作階段不等於上下文 ​

工作階段是儲存在磁碟上的工作歷史,包含使用者訊息、模型回覆、Tool Call、Tool Result、分支與壓縮記錄。上下文則是 Pi 從當前活動分支重建出來、準備交給模型的本輪輸入。

你可以把工作階段想成完整工作檔案,把上下文想成這一次擺到模型桌面上的材料。檔案還在,不代表所有舊內容每一輪都完整放在桌面上。

3. Cache 不負責決定下一步 ​

提示快取不是 Agent Loop 中一個新的執行節點。它是模型服務商(Provider)對重複字首的一種複用機制,可能影響延遲和費用,但不會替 Pi 儲存工作階段,也不會替模型執行 Tool Call。

因此圖裡沒有單獨畫 Cache。需要理解快取命中與上下文變化時,再回到提示快取入門。

一次 Agent Loop,逐步發生了什麼 ​

第 0 步:Pi 先準備本次執行環境 ​

啟動 Pi 時,它會確定工作目錄、模型、可用工具,並載入允許使用的專案資源。可用技能的名稱與描述會進入系統提示;擴充功能(Extension)還可以註冊新工具,或在 Agent Loop 開始前調整系統提示和上下文。

這一步決定的是“模型稍後能看到什麼、能呼叫什麼”,還沒有替使用者完成任務。

第 1 步:使用者提交 Prompt ​

你在編輯區提交任務。Pi 把這條使用者訊息加入當前工作階段的活動分支,然後準備第一次模型呼叫。

Prompt 不需要把所有背景重複一遍。當前工作階段、專案規則和你明確引用的檔案,會由 Pi 按當前執行狀態參與上下文組裝。但沒有實際讀入上下文的材料,不能假設模型已經知道。

第 2 步:Pi 構建本輪上下文 ​

Pi 從當前工作階段分支重建訊息歷史,並組合系統提示、專案上下文檔案、可用工具說明、技能索引和當前工作目錄等資訊。若之前發生過壓縮,較早訊息可能以摘要形式進入當前上下文,較近訊息繼續保留。

上下文是一次模型呼叫的輸入快照。下一次呼叫時,因為新 Tool Result 或新訊息已經加入,它會隨之變化。

第 3 步:模型做第一次判斷 ​

模型讀取當前上下文後,通常會返回兩類結果之一:

  1. 已經可以回答,直接生成普通回覆。
  2. 還需要讀取資訊或執行動作,返回一個或多個 Tool Call。

模型只是在提出工具呼叫請求。真正讀取檔案、執行命令或寫入內容的是 Pi 提供的工具。

第 4 步:Pi 執行 Tool Call ​

Pi 按工具名稱和引數呼叫對應能力。例如 read 讀取檔案,write 寫入檔案,bash 執行命令。介面會顯示 Tool Call 與隨後的 Tool Result,讓你知道它碰了什麼物件、返回了什麼。

Tool Result 可能是檔案內容、命令輸出、變更差異,也可能是明確的錯誤。無論成功還是失敗,它都不是最終回答,而是下一次推理的新證據。

第 5 步:Tool Result 回到模型 ​

Pi 把 Tool Result 加入訊息歷史,再次呼叫模型。模型此時可以根據真實結果決定:

  • 繼續呼叫另一個工具;
  • 修正上一次失敗的引數;
  • 檢查剛寫入的結果;
  • 或停止呼叫工具,給出最終回覆。

這就是 Agent Loop 的核心。一次使用者 Prompt 可以觸發多次模型呼叫,也可以包含多輪 Tool Call 與 Tool Result。

第 6 步:Pi 儲存過程並結束本輪 ​

當模型不再請求工具而是給出普通回覆,Pi 會把回覆繼續寫入工作階段。使用者訊息、模型訊息、Tool Call 和 Tool Result 共同構成可恢復的工作階段歷史。

這裡的“結束”只表示 Agent 已經回到等待輸入狀態,不等於業務結果必然正確。檔案是否存在、內容是否完整、網頁是否上線,仍要回到真實環境獨立驗收。

第 7 步:上下文變長,必要時進行壓縮 ​

隨著訊息和工具結果增加,當前上下文會逐漸佔用更多空間。接近模型上下文限額時,Pi 可以總結較早內容、保留較近訊息,並在同一個任務中繼續執行;你也可以用 /compact 手動觸發。

壓縮以後,新的摘要會參與後續上下文重建。它能幫助任務繼續,但不是無損記憶,也不會替你恢復磁碟檔案。關鍵目標、決定和驗收結果仍應寫進專案檔案。

用真實任務走一遍:把會議記錄整理成行動清單 ​

沿用第一次任務和 CASE 01 的練習:讀取 input/專案會議記錄.md,生成 output/行動清單.md,保留事項、負責人、日期和風險提醒。

下面描述的是這項可復現任務的典型可觀察路徑。不同模型可能合併呼叫、增加檢查步驟或採用不同順序;看不見的模型內部思考不會被當成已驗證事實。

環節這項任務裡發生什麼你能觀察什麼
Prompt使用者指定輸入、輸出、四個欄位和不可越過的範圍工作階段中出現完整使用者訊息
上下文Pi 組合系統提示、工作目錄、活動工具、當前工作階段歷史與使用者任務啟動區能看到已載入資源;底部能看到當前目錄與模型
第一次模型呼叫模型判斷必須先取得會議記錄內容出現讀取 input/專案會議記錄.md 的 Tool Call
Tool Result讀取工具把三條事項返回給模型介面顯示被讀取路徑與返回內容
再次模型呼叫模型根據原文組織四類欄位,並決定寫入目標檔案出現寫入 output/行動清單.md 的 Tool Call
再次 Tool Result寫入工具報告成功或返回錯誤介面顯示實際寫入路徑;報錯時模型可以繼續修正
結束本輪模型不再呼叫工具,報告產物和建議的驗收方法Pi 回到可輸入狀態,最終回覆寫入工作階段
獨立驗收使用者離開模型總結,核對輸入指紋、輸出路徑和三條內容input 未變,輸出檔案存在,四類欄位逐項對應

這個例子裡不需要為了展示概念而強行加入技能。若後來把“每次都按四個欄位檢查行動清單”固化成技能,變化發生在上下文組裝階段:系統提示會先列出該技能;模型按需讀取完整說明後,再沿用同一個工具迴圈完成任務。

遇到問題時,從鏈路上定位 ​

現象先檢查哪一段
模型像是不知道專案規則上下文檔案是否被載入,工作目錄是否正確
模型說讀過檔案,但介面沒有讀取記錄是否真的產生並執行了 Tool Call
工具報錯後任務停止Tool Result 的錯誤內容,以及模型是否獲得下一次推理機會
回覆看起來正確,但檔案沒有變化實際寫入 Tool Call、目標路徑和磁碟檔案
長任務開始遺漏早期要求上下文佔用、壓縮摘要和專案交接檔案
Cache 命中下降系統提示、工具定義或歷史字首是否發生變化;不要把它當成記憶丟失

本篇驗收 ​

讀完後,不看前文,嘗試說清下面四件事:

  1. 為什麼 Tool Call 之後還要再次呼叫模型?
  2. 為什麼工作階段中儲存了舊訊息,模型仍可能遺漏舊細節?
  3. System Prompt、Tool 和技能為什麼不是三個順序執行的步驟?
  4. 為什麼 Pi 回覆“完成”以後,仍要獨立檢查真實檔案或線上結果?

如果能回答,你已經把前面分散的術語接成了一套工作模型。下一步不是記更多詞,而是在 CASE 01 中盯著一次真實工具迴圈,再去上下文與壓縮觀察長任務如何改變上下文。

本篇依據 ​

以上動態行為核驗於 2026-09-11。Pi 的資源載入、事件和壓縮機制可能繼續更新,以官方 Latest 文件和對應原始碼為準。