ReAct 循环扩展点 + 用户中途打断
循环 = while(!done){ chat → execute → append },状态全在 messages 里。所以用户中途输入不是"中断循环",而是往消息流插一条新 user 消息——LLM 从头读到新指令,自己决定改道。可打断性是"状态外化在消息里"这个设计的自然结果。而"循环是壳、扩展是插件"——9 处可插扩展点,终止兜底 MAX_STEPS 必须在框架手里。
1x2x
待播放
循环骨架 → REASON → ACT → OBSERVE → 用户中途插话(消息流改道) → LLM 从头读到新指令决定改道
光点 = 当前环节 · 用户中途输入不是中断循环,是消息流改道
9 个扩展点:循环是壳,扩展是插件—
流式并发分派串行调工具太慢Claude Code
循环检测+记忆回路卡死循环×5×8 计数器
自动续推模型过早停止Agent 运行时
make-skill 元循环执行者→创造者Agent 运行时
多模型运行时路由单一模型不够规则引擎
三层协商+子循环Act 多次往返Codex
响应分类+纠正空响应OpenHands
Attachment 注入保护 CacheClaude Code
MAX_STEPS 兜底停不下来所有框架
就绪点 ▶ 播放,看查订单任务中途被用户插话改道。ReAct 扩展
⚡ 运行时动作:正在发生什么💡 知识讲解:为什么这么设计
知识点一句话总结:ReAct 循环 = while(!done){ chat → execute → append },状态全在 messages 里——LLM 无状态,框架每轮全量重发 messages,所以"可打断"是"状态外化在消息里"的自然结果。用户中途输入不是中断循环,是往消息流插一条新 user 消息,LLM 从头读到新指令自己决定改道(vs HITL 是框架 interruptBefore 存 Checkpoint 暂停等人审批,两者机制不同)。循环是壳、扩展是插件:9 个扩展点可组合(流式并发分派/循环检测×5×8/自动续推/make-skill 元循环/多模型路由/三层协商/响应分类/Attachment 注入/MAX_STEPS 兜底)。终止兜底 MAX_STEPS 必须在框架手里——模型可能停不下来,纯程序化计数模型无法绕过。