
书名:《Agent Runtime 工程化:从工具调用循环到可恢复执行系统》
作者:陈堂会
章节:第二章 TypeScript / Node Runtime 基础 / 2.2 async iterator 与流式输出
电子版系列:查看完整目录
第二章 TypeScript / Node Runtime 基础:2.2 async iterator 与流式输出
Agent 产品喜欢流式输出,主要是为了降低用户等待的不确定性,也让 runtime 更早看见模型意图。炫技排在很后面。
模型流可能先返回解释文字,再返回工具调用片段。工具执行也可能先输出日志,再最终退出。统一处理这些事件,最自然的接口是 async iterator:
type RuntimeEvent =
| { type: "model_delta"; text: string }
| { type: "tool_call"; name: string; args: unknown }
| { type: "tool_stdout"; text: string }
| { type: "tool_stderr"; text: string }
| { type: "step_done"; stepId: string };
async function* runAgent(input: string): AsyncGenerator<RuntimeEvent> {
yield { type: "model_delta", text: "我先检查项目结构。" };
yield { type: "tool_call", name: "list_files", args: { path: "." } };
yield { type: "tool_stdout", text: "src/index.ts\npackage.json\n" };
yield { type: "step_done", stepId: "step_1" };
}
事件流的好处是前端、CLI、trace、测试都能订阅同一套语义。不要让每个通道各写一套'半成品日志解析器'。
系列导航
前 5 篇
- 第二章 TypeScript / Node Runtime 基础:2.1 Promise 不是全部
- 第二章 TypeScript / Node Runtime 基础:导读
- 第一章 Agent Runtime 全景:1.7 验收标准
- 第一章 Agent Runtime 全景:1.6 动手任务
- 第一章 Agent Runtime 全景:1.5 为什么岗位强调'能稳定跑'
