Agent 运行循环
理解消息上下文、继续执行与工具调用。
先读 Agent 对外接口,再读 agent-loop。当前精选练习只覆盖继续执行前的两项检查,不代表完整 Agent 实现。
Pi 源码精读
基于固定提交 a13d35a这一文件同时包含启动、继续、模型请求和工具结果回写;只看精选的几行会错过真正的循环。
- 01
- 02
- 03
从哪里追到哪里
- 01看对外状态与事件
先读 Agent 接口,确认调用者如何提交消息、订阅事件和管理运行状态。
- 02拆开两种启动方式
agentLoop 会加入新提示;agentLoopContinue 沿现有上下文继续。对照入口理解何时需要新消息。
- 03跟踪一轮执行
继续往下读 runLoop:模型输出、工具调用、工具结果与下一轮请求在这里连接。
参考文件
继续执行的两项前置检查只防住空消息和末尾 assistant;源码注释还提醒,转换成模型消息后的角色合法性并未在这里完整验证。
这一段为什么值得停下来
继续 Agent 时,空消息列表与末尾是 assistant 的上下文都会抛错。源码注释也说明:转成模型消息后仍可能不符合要求;这两项检查不是完整验证。
检验理解
为什么末尾是 assistant 时不能直接继续?
继续执行需要能够转换成模型输入的当前上下文;源码对此角色直接抛错,避免把 assistant 输出当成新的用户或工具结果。
本页练习覆盖了整个 Agent 循环吗?
没有。它只复现两项前置检查;流式模型响应、工具执行、状态更新和错误处理仍在真实循环中。