Agent Loop:Agent 的心跳
普通聊天机器人的工作方式很简单:你问一句,它答一句。每次对话都是独立的,模型看不到之前的上下文(或者只看最近几轮),更不会主动推进任务。
但真实的工作不是这样的。
假设你去看医生,你描述了症状,医生不会听完就给你开药。他会先查看病历,然后可能说“我需要看一下你的验血报告”,你去做检查,拿到结果后医生再综合判断。如果结果不够明确,他可能还会让你做进一步检查。这是一个循环的过程:收集信息、做出判断、采取行动、观察结果、再继续调整。
什么让 Agent 从“一问一答”变成“持续推进”
Agent 区别于普通聊天机器人的关键是:
Agent Loop 让大语言模型围绕目标持续思考、行动、观察,不断循环直到任务结束。
Agent Loop 的核心本质是一个 while (true) 循环,直到模型认为任务完成才退出。
可以用一段伪代码来概括:
text
循环开始:
消息历史 = [用户的任务描述]
重复执行:
本轮快照 = 复制当前消息历史 ← 封存对话历史,每轮迭代产生新对象,不修改旧状态
① 整理上下文
检查本轮快照是否过长
如果过长,进行压缩或摘要,保留关键信息
② 思考 (Thought)
模型阅读本轮快照,决定下一步做什么
③ 行动 (Action)
模型选择一个动作:
- 调用一个工具(如搜索、读写文件、执行代码)
- 直接给出最终回答
④ 观察 (Observation)
如果调用了工具,获取执行结果
将结果写入一份新的消息历史(不修改本轮快照)
如果 模型给出了最终回答:
循环结束,返回结果循环什么时候停下来
循环不能永远跑下去。Agent Loop 有三种主要的终止情况:
任务完成:最理想的退出方式。模型认为目标已经达成,直接给出最终回答,不再调用任何工具。这是正常流程的终点。
达到上限:循环次数或资源消耗超出了预设的阈值。比如设置了“最多循环 10 次”的保护机制、上下文超限等
出错中断:用户主动停止(比如觉得方向不对,按下了中断键),或者系统遇到了无法恢复的错误(比如网络断开、工具执行失败且无法重试)。