LangChain 学习笔记 09:从对话表单到 BabyAGI,看状态怎样驱动下一步
第 9 章后半放了两个看起来很不一样的案例:对话式表单负责把信息一点点收齐,BabyAGI 则围绕目标不断创建和执行任务。
一个很克制,一个很开放。但把它们放在一起看,会发现两者都在处理同一个核心问题:当前状态是什么,下一步应该怎样由状态产生?
对话式表单的目标不是“聊得自然”
假设系统要帮用户预约会议室,需要收集日期、开始时间、时长、人数和设备需求。
用户可能一次说完,也可能先说“明天下午”,过几轮又改成“还是周五上午”。这时系统不能只保存聊天文本,而要维护明确状态:
{
"date": "2026-07-31",
"start_time": null,
"duration_minutes": 60,
"attendees": 8,
"projector": true,
"confirmed": false
}
模型适合理解自然语言并抽取候选字段,程序则负责日期解析、必填校验、冲突检测和最终提交。
每轮更新都要区分几种情况
“没提到时间”“听不懂时间”“用户清除了原时间”不能都表示成空字符串。至少要区分:没有变化、设置新值、删除旧值、无法判断。
更新状态后,系统根据缺失字段决定下一问;字段齐全以后,也不要立刻提交,而应把标准化后的结果展示给用户确认。
理解本轮输入 -> 生成字段变更 -> 业务校验 -> 更新状态
-> 询问缺失字段或展示确认页 -> 用户确认后提交
这类流程说明,LLM 可以让表单交互更自然,但表单规则仍然属于确定性程序。
BabyAGI 把状态扩展成任务队列
书中的 BabyAGI 思路可以概括为:给定一个目标,执行当前任务,根据结果创建新任务,再为任务排序。
目标 -> 任务队列 -> 执行任务 -> 保存结果
-> 创建新任务 -> 重新排序 -> 下一轮
它看上去比表单自由很多,但依旧离不开结构化状态:总目标、待办任务、已完成任务、执行结果、优先级和终止原因。
名字里虽然有 AGI,这个系统也不会因此拥有通用智能。它更像一个由模型参与规划和调度的任务循环。
开放循环为什么容易失控
模型可以不断提出“再研究一下”“补充更多资料”之类的新任务。如果没有限制,任务队列会膨胀,同义任务会反复出现,成本和时间都难以预测。
因此至少需要:
- 最大轮数、总耗时和 token 预算;
- 任务去重与相似度检查;
- 失败重试上限;
- 高风险工具的人工确认;
- 明确的完成标准和停止原因。
一个目标如果无法定义“做到什么算结束”,Agent 循环通常也很难自己找到可靠终点。
两个案例其实共享同一套骨架
对话表单根据字段状态决定下一问,BabyAGI 根据任务状态决定下一项。前者的状态空间小、规则明确,后者的状态空间开放、更多依赖模型判断。
它们都需要把“模型给出的建议”和“系统确认后的状态”分开。模型可以建议把会议改到周五,也可以建议新增一个研究任务;真正写入状态之前,仍应经过解析、校验和权限控制。
这章给我的启发
LLM 应用的连续性不来自模型自动记住一切,而来自状态被明确保存、更新并驱动下一步。
对话式表单提醒我把自然语言收敛成可验证字段;BabyAGI 则提醒我,任务越开放,越需要预算、终止条件和人工边界。两者之间的差别,本质上是系统愿意交给模型多少控制权。

浙公网安备 33010602011771号