pi Agent 在 Agent 里的定位
pi Agent 是 可二次开发的 Agent 平台内核,不是“只能开箱即用的单体产品”。
核心特征:
- 前后端解耦:CLI / Web / 其他入口可复用同一套 Agent 内核
- 模型与 Provider 解耦:不被单一模型服务商绑死
- 扩展机制解耦:
Skills直接引入官方插件生态 Extensions 自定义tools
pi Agent 与其他 Agent 的主要区别
pi Agent提供了什么?
- 核心loop
- 基本工具 bash edit write read
- 丰富的SKILLS生态 定制想要的tool
- 将Agent与provider解耦 方便对接各个模型
- 提供了compact等基础功能
- 不同的前端支持 TUI GUI(Web)
对比
以opencode为代表的coding Agent封装了太多tool(比如LSP tool) 有些tool只用于变成场景 对于其他类型的Agent来说过于笨重
Loop 实现:双层循环驱动
循环分两层:外循环(调度) + 内循环(执行)。
外循环做什么
外循环主要负责“是否继续下一波任务”的调度:
- 判断当前波次结束后,是否有 follow-up 要进入下一波
- 判断 Agent 是否可以真正结束
- 做收尾与异常终止
外循环本身不直接承担“工具规划与执行细节”,它更像 orchestrator(调度器)。
再直白一点:
- 外循环像“任务总控层”,决定“要不要再来一轮”
- 它不关心具体用哪个工具改了哪一行代码
内循环做什么
内循环是真正“干活”的执行层。它会持续推进当前任务,直到可收敛。
典型步骤:
- 开一个
turn - 注入 pending messages(如 steering/follow-up)
- 调一次 LLM,拿到一个
AssistantMessage - 解析其中是否包含 tool calls
- 如果有工具调用,就执行工具并写回
toolResult - 进入下一 turn,直到“无新 tool call + 无 pending message”
关键理解:
- 一次 turn 只会产出一条主要的 assistant 决策消息
- 但整个内循环会有多个 turn
- 所以“用户一句话”不一定只调用一次 LLM,复杂任务会多次迭代
AssistantMessage 到底是什么
AssistantMessage 是LLM 调用返回的结构化结果。
这个信息有两个作用:
- 面向用户的内容(文本/思考片段)
- 面向系统的执行信号(tool calls、stop reason 等)