LLM
模型本身。它接收消息和工具描述,然后输出文本、thinking 或 toolCall。
00 · 基础概念
这一章不读源码,先建立 Pi agent 的基本心智模型:模型只会生成文本或 toolCall,本地工具执行后产生 toolResult,agent loop 把这些结果回填上下文并继续推理。
agent 的关键不是“模型更聪明”,而是模型、工具、上下文和循环被组织到了一起。
后面的源码会反复出现这些词。先把边界分清,比一开始追函数更重要。
模型本身。它接收消息和工具描述,然后输出文本、thinking 或 toolCall。
本轮要发给 provider 的输入包,核心是 systemPrompt、messages、tools。
模型提出的工具调用请求。它不是执行结果,也不代表工具已经跑完。
本地工具执行后的观察结果。必须回填上下文,模型下一轮才知道发生了什么。
反复执行模型生成、工具调用、工具结果回填和继续生成的核心循环。
长期历史存储。保存 user、assistant、toolResult、分支和压缩边界。
普通聊天只有一次模型回答;agent 多了本地动作、观察结果和下一轮推理。
user -> model -> assistant textuser -> model -> toolCall -> toolResult -> model -> final text这张图是后面 01 到 07 的总主线:所有章节都在解释这条链路里的某个环节。
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);
}
读源码不要从所有文件一起看。先按模型层、agent runtime、coding-agent 产品层分开。
这些误解后面读 01、02、03、04 时最容易反复出现。
不对。toolCall 是模型请求。本地 agent loop 才负责校验参数、鉴权、执行工具。
不对。toolResult 是模型下一轮推理需要的上下文。UI 可以展示它,但核心作用是喂回模型。
不对。session 是历史存储;Context 是本轮要交给模型的输入视图。
不对。AgentSession 是产品会话层,Agent 是运行控制器,agent loop 是执行引擎。
不用背术语,能用自己的话讲清这些问题就够了。
00 章只建立概念。01 章开始用真实 Pi 输出验证这条链路。
下一章先跑一次 Pi,观察一次 prompt 如何进入 AgentSession、Agent 和 runAgentLoop()。