π Pi Agent Study

00 Agent 基础概念学习记录

这一章是给第一遍学习 Pi agent 的前置缓冲层。目标不是读源码,而是先把几个核心词讲清楚:LLM、Context、toolCall、toolResult、agent loop、session。

本章一句话

agent 不是“问模型一次”。agent 是一个循环:把上下文交给模型,模型可能返回文本,也可能返回 toolCall;本地执行工具后把 toolResult 回填上下文,再让模型继续推理,直到没有下一步动作。

为什么要有 00 章

如果直接从 01 的 CLI 入口开始,很多概念会混在一起:

00 章先建立这些词的边界,后面读源码会更稳。

基础词表

LLM

LLM 是模型本身。它接收一批输入消息和工具描述,然后输出文本、思考片段或 tool call。

在 Pi 里,模型不是直接面对 CLI、TUI、session 文件或扩展系统。它看到的是 provider adapter 转换后的请求。

Context

Context 是 Pi 发给 provider 的统一模型请求格式,可以理解为“本轮模型调用的输入包”。

核心内容:

Context 不是磁盘上的完整 session,也不是 UI transcript。它是 agent 根据当前状态整理出来、准备交给模型的一次输入。

toolCall

toolCall 是模型提出的动作请求,比如:

我要调用 read(path="README.md")

它只表示模型想调用工具,不表示工具已经执行。尤其在流式输出里,tool call 参数可能是逐段生成的,必须等参数完整后才能校验和执行。

toolResult

toolResult 是 Pi 本地执行工具后的结果,比如:

README.md 的内容是 ...

模型不会天然知道这个结果。Pi 必须把 toolResult 回填进上下文,模型下一轮才能基于观察结果继续推理。

agent loop

agent loop 是把模型和工具串起来的执行循环。

极简版:

while (true) {
  const assistant = await model(context);
  context.messages.push(assistant);

  if (!assistant.toolCalls.length) break;

  const results = await executeTools(assistant.toolCalls);
  context.messages.push(...results);
}

真实 Pi 里还会多出 streaming、hooks、steering、follow-up、abort、terminate、parallel/sequential tools、session 持久化等逻辑。

session

session 保存一次长期对话的历史。它不只保存用户和 assistant 文本,也保存 toolResult、分支、压缩等信息。

如果只保存 assistant 的 toolCall,不保存 toolResult,恢复后模型就不知道工具实际返回了什么,历史会断。

普通聊天 vs agent

普通聊天:

user -> model -> assistant text

agent:

user -> agent -> model -> toolCall -> local tool -> toolResult -> model -> final text

区别在于:agent 有本地动作、外部观察结果和循环状态。

主线图

flowchart TD
  U[用户输入] --> S[AgentSession]
  S --> L[Agent loop]
  L --> M[模型]
  M -->|text| R[最终回答]
  M -->|toolCall| T[本地工具]
  T --> TR[toolResult]
  TR --> L

Pi 的三层结构

packages/ai

模型/provider 层。

负责:

不负责:

packages/agent

通用 agent runtime。

负责:

不负责:

packages/coding-agent

Pi 产品层。

负责:

常见误解

误解 1:toolCall 等于工具已经执行

不对。toolCall 是模型请求。真正执行发生在本地 agent loop 里。

误解 2:toolResult 是给 UI 看的日志

不对。toolResult 是模型下一步推理的必要上下文。UI 可以展示它,但它最重要的作用是回填给模型。

误解 3:Context 就是完整 session

不对。session 是历史存储;Context 是本轮要交给模型的输入视图。

误解 4:AgentSession 和 Agent 是一回事

不对。AgentSession 是产品会话层,Agent 是运行控制器,agent loop 是执行引擎。

自测题

本章验收

学完 00 后,应该能说清:

下一章

进入 01:先把 Pi 跑起来,观察一次真实 prompt 如何从 CLI 进入 AgentSessionAgentrunAgentLoop()

Source: 00-agent-basics-notes.md