10.2 块流(Block Streaming)
10.2.1 EmbeddedBlockChunker 算法(src/agents/pi-embedded-block-chunker.ts)
src/agents/pi-embedded-block-chunker.ts)BlockReplyChunking 配置
// src/agents/pi-embedded-block-chunker.ts
export type BlockReplyChunking = {
minChars: number; // 最小块大小
maxChars: number; // 最大块大小
breakPreference?: "paragraph" | "newline" | "sentence";
flushOnParagraph?: boolean; // 遇到段落边界立即刷新
};核心类结构
export class EmbeddedBlockChunker {
#buffer = ""; // 文本缓冲区
readonly #chunking: BlockReplyChunking; // 配置
append(text: string) { // 追加文本
this.#buffer += text;
}
reset() { // 重置缓冲区
this.#buffer = "";
}
hasBuffered(): boolean { // 是否有未发送的内容
return this.#buffer.length > 0;
}
drain(params: { // 排出缓冲区
force: boolean; // 是否强制(忽略 minChars)
emit: (chunk: string) => void; // 发射回调
}) { ... }
}drain 方法的执行流程
10.2.2 低水位线 / 高水位线分块策略
10.2.3 断点偏好:段落 → 换行 → 句子 → 空白 → 硬断
段落急切刷新模式
10.2.4 代码围栏(Fenced Block)安全拆分:关闭 + 重开
本节小结
Last updated