AI Agent多轮执行:怎样靠历史记忆串起连续任务?
本文探讨AI Agent如何通过记忆机制实现多轮任务的连续执行。从ReAct循环原理到代码实现,分析企业文档自动化等实际案例,指出过度自动化的陷阱,并提供模型选型与成本控制的实用建议,帮助开发者构建更稳定的智能代理系统。
为什么AI Agent需要"记性"
现在的AI聊天机器人多半像金鱼,上一句聊完,下一句该干什么就忘了。可真正的AI Agent(智能代理)不是这样,它得像个老练的项目经理:接到复杂任务后先拆步骤,干完一步记一步,再拿上一步的结果决定下一步往哪走。
这正是"多轮执行:基于历史的连续任务处理"的关键所在。它并非简单的问答,而是让AI具备"状态感"。比如你让它"整理桌面上的PDF并总结内容",它不能只扔给你一个总结,而得先找到文件,读取内容,再生成摘要,最后把结果存好。中间任何一步出错,它都得知道回退或调整,而不是从头再来。
2023年AutoGPT一出来,不少人很激动,以为AI可以自己把活干了。热闹散去之后却发现,这东西时常"幻觉",或者陷进死循环。症结多半在于:它对执行过程的历史缺少精细管理,也没法依据历史随时调整。今天聊聊如何让Agent把任务连续、可靠地跑下去。
核心概念:不只是聊天,是执行
要理解多轮执行,得先分清两个概念:传统AI和執行式AI。
过去的AI是等着人发话的:问一句答一句,不推就不动。上下文窗口确实能记住前面的对话,可那只是为了把回答接得更顺,并不是拿来指挥行动的。
执行式AI反过来,是自己往前走的。它带着目标、握着工具,还存着记忆。这里的"记忆"跟背了多少书没关系,说的是任务推进过程中形成的"短期工作记忆"。比如:
- 已执行的操作:刚才调用了搜索API,结果是空的。
- 当前状态:正在等待用户确认是否删除文件。
- 中间结果:已经提取了前三个PDF的关键信息。
要按历史连续处理,Agent每做一次决策都得回头确认"上一刻发生了什么"。历史一旦被丢开,Agent就会到处乱撞:同一个错误动作反复做,或者任务已经做完了还在漫无目的地找。
技术底层:Agent是怎么思考的
一个能连续执行任务的Agent,架构上通常分四层。别被术语吓到,逻辑其实很直观。
- 应用层:用户界面。你输入任务,它展示进度条或日志。
- Agent层(大脑):整个系统的核心所在,管的是读懂意图、拆解步骤、挑选工具。它得留出一块"记忆缓冲区",把每一步的思考、动作和观察结果都记下来。
- 工具层(手脚):具体的执行能力。比如读写文件、发HTTP请求、查数据库。Agent本身不干活,它指挥工具干活。
- 模型层(知识库):大语言模型(LLM)。提供推理能力和常识,但它不知道你的文件系统里有什么,所以需要工具层配合。
ReAct循环:思考-行动-观察
目前最主流的执行范式是ReAct(Reasoning + Acting)。它的逻辑很简单,就是一个循环:
- 思考(Thought):根据当前任务和历史信息,判断下一步该做什么。
- 行动(Action):选择一个工具并传入参数。
- 观察(Observation):获取工具执行的结果。
- 更新历史:把这次"思考-行动-观察"打包存入记忆,进入下一轮循环。
下面这段简化的Python代码,能看清这个循环是怎么转起来的:
class ReActAgent:
def __init__(self, llm, tools):
self.llm = llm
self.tools = tools
self.history = [] # 关键:存储执行历史
def run(self, task):
context = f"任务: {task}\n"
for i in range(10): # 设置最大步数,防止死循环
# 1. 思考:基于历史和当前上下文
thought = self.llm.generate(context + "\n请思考下一步:")
# 2. 判断是否结束
if "完成" in thought:
return thought
# 3. 行动:解析出要用的工具和参数
action, params = self.parse_action(thought)
# 4. 观察:执行工具并获取结果
observation = self.tools[action].execute(params)
# 5. 更新历史:这是连续执行的关键
step_log = f"\n思考: {thought}\n行动: {action}({params})\n观察: {observation}"
context += step_log
self.history.append(step_log)
return "任务超时"关键在于[[保留2]]不断堆起来。每转一轮,LLM拿到的不只是最初的任务,前面每一步的反馈也都在眼前。第一步搜索没成,第二步“思考”时就会看到“观察: 搜索结果为空”,于是换关键词再搜,不会在同一个地方摔两次。context
落地时会踩的坑和几条经验
理论上说得通,真做起来到处是坑。几个项目下来,我攒了几条血泪教训。
1. 别贪大,先从小场景下手
不少团队一上来就想做“全能助理”,Agent能力边界一模糊,张口就胡说。稳妥的路子是限定场景。举个例子,先做一个只负责“整理特定格式发票”的Agent。场景越窄,提示词越好写;工具越少,出错的机会也越小。
2. 提示词是灵魂,但别当万能药
别以为甩一句“你是个聪明的助手”就万事大吉。提示词得把下面几件事说清楚:
- 角色:你是一个文件处理专家。
- 边界:你只能操作.pdf文件,严禁删除任何文件。
- 格式:输出必须包含JSON格式的行动指令。
- 示例:给出一个完整的成功执行案例和一个失败重试案例。
尤其是“失败重试”那个示例,Agent碰到错误时的崩溃率能降下来不少。
3. 人工兜底不能省
眼下完全无人值守的Agent还不成熟。设计流程时,删除文件、发送邮件、支付这类关键节点必须安排人工确认。也可以设一个“置信度阈值”,Agent对下一步操作没把握时,自己停下来请人接手。
4. 监控和评估
Agent干得好不好,靠感觉判断可不行。得把指标立起来:
- 成功率:任务最终完成的比例。
- 平均步数:步数越多,成本越高,出错概率越大。
- Token消耗:直接关联成本。
案例复盘:文档自动化Agent
有家科技公司每天收到上百份技术文档,要分类、摘要再入库。过去靠两个实习生手工处理,又慢又容易漏。
他们做了个DocumentAgent,流程是这样:
- 监听环节,盯住指定文件夹里新出现的PDF。
- 接着读取文件,用OCR工具把文字提取出来。
- 然后交给LLM做分类,依据是标题加上开头两段的内容,类别可能是「API文档」,也可能是「内部规范」。
- 摘要这一步,生成200字的内容概览。
- 最后一步是索引,把结果写进向量数据库。
这套流程跑下来,处理时间从4小时缩短到30分钟,准确率从70%提升到95%。
教训来自初期没做「异常处理」。扫描版PDF画面模糊时,OCR吐出一堆乱码,Agent拿着乱码去分类,结果全错。后来他们加了前置校验:OCR置信度低于80%的,直接标记为「需人工审核」,后续流程不再往下走。只改了这一处,90%的脏数据问题就解决了。
另一个反面案例,是某企业想把客服流程全部交给Agent自动化。上线后Agent碰到用户情绪化的表达,只会机械重复标准话术,投诉量猛增。问题出在它没有记住和分析「对话历史情感状态」,一门心思执行「回答问题」的任务,把「安抚用户」这个隐性需求漏掉了。
常见问题与成本控制
怎么选模型?
- 分类、提取字段这类简单任务,GPT-3.5 Turbo或者国产高性价比模型就够用,速度快,价格也低。
- 多步规划、代码生成这类复杂推理,选GPT-4o或Claude 3.5 Sonnet,贵是贵些,但脑子清楚,返工少。
- 数据敏感的场景,可以考虑本地部署Llama 3或Qwen,数据不出域。
怎么省钱?
- 缓存这一招:同样的查询再来,直接把上次的结果返回。
- 上下文也得精简,历史记忆别一股脑全塞给LLM。只留最近N步,或者另找一个小模型把历史总结成摘要,再把摘要传给主模型。
- 工具优先能用代码逻辑判断的事,就别让LLM去猜。比如文件在不在,直接用Python
os.path.exists这比问LLM「你觉得这个文件在吗」既靠谱又便宜。
安全怎么保?
- 输入要做过滤,挡住Prompt注入攻击。
- 权限按最小化给:Agent用的API Key只开必要权限,比如只读,写入或删除权限绝不能给,除非经过严格确认。
- 审计日志要记录每一步的输入输出,出了事方便追溯。
未来展望:更自主,更端侧
短期内Agent还变不成科幻片里的贾维斯,不过在垂直领域会越扎越深。趋势有两个:
其一是多模态融合。眼下Agent主要处理文本,以后能直接看懂截图、听懂语音指令,还能操作图形界面(GUI Agent)。比如你说「把这张图里的表格填到Excel里」,Agent就能识别图像内容并动手操作Excel。
另一条路是端侧部署。手机和PC芯片的算力在往上走,小型化的Agent会直接跑在本地。响应更快,数据隐私风险更低,个人的事不用联网也能办。
开发者现在进场并不算迟,只是别再盯着“大而全”的通用Agent不放。挑准一个痛点,把“记忆-规划-执行”这条链打磨到稳定,才是真正落地的关键。说到底,一个能稳稳当当帮你整理发票的Agent,比一个只会聊天的天才更有价值。