同一个引擎,五种用法
agentLoop 是无状态引擎,AgentSession 是门面——在它们之上,pi 暴露出五种运行模式,对应五种使用场景。从「人盯着终端聊」到「程序之间对接」,覆盖全谱。
人在看 程序在看 ┌────────────┬────────────┬────────────┬───────┬───────┐ │ interactive │ print │ JSON │ RPC │ SDK │ │ 交互式 TUI │ 单次输出 │ 结构化流 │ 长连接 │ 库调用 │ └────────────┴────────────┴────────────┴───────┴───────┘
五种模式
- interactive:默认的 TUI 对话,人坐在终端前,实时看思考与工具调用。
- print:
pi -p "问题",跑完打印结果就退出——适合脚本、CI、一次性任务。 - JSON:把 AgentEvent 流以 JSON 逐行输出,给别的程序解析。
- RPC:长连接、双向通信,宿主程序能边发指令边收事件。
- SDK:直接以库的形式
import,在你自己的 Node 程序里嵌入一个 agent。
同一引擎,不同出口(AgentSession 真实 API)
// 订阅事件,再提交消息:subscribe 返回一个取消订阅函数
const unsubscribe = session.subscribe((ev) => {
// print 模式:实时打印文字
if (ev.type === "text_delta") process.stdout.write(ev.delta)
// JSON 模式:把每个事件原样吐成一行 JSON
// console.log(JSON.stringify(ev))
})
await session.submitMessage(prompt)
unsubscribe()五种模式共享同一套核心——区别只在「事件流怎么进、怎么出」。这正是前面「引擎 / 门面」分层的回报:一次实现,五处复用。