
你有没有好奇过一个问题:
那些号称"自主决策"的AI Agent,到底是怎么决定什么时候该查数据、什么时候该分析、什么时候该出结论的?
不是靠运气,不是靠直觉,而是靠一套机制——ReAct。
01
为什么需要ReAct
假设你让Agent解决一个问题:"帮我分析一下张三最近的消费情况,如果有异常就标记出来。"
纯推理模式:Agent一顿分析,从用户画像到消费心理学全扯了一遍,但没查任何实际数据。结论是"建议关注消费异常"——全是废话,因为它根本没看数据。
纯行动模式:Agent上来就疯狂调API:查订单、查支付记录、查退款记录、查登录日志……调了一大堆,但没有分析,最后扔给你一堆原始数据:"这是张三的所有记录,你自己看吧。"
显然,纯推理是纸上谈兵,纯行动是无头苍蝇。Agent需要的是边想边干、干了再想——这就是ReAct存在的意义。
02
ReAct是什么
ReAct = Reasoning(推理)+ Acting(行动)
它定义了一个循环:
思考 → 行动 → 观察 → 思考 → 行动 → 观察 → ... → 最终答案
循环直到Agent认为任务完成了,给出最终答案。下面我们看一个完整的例子👇
用户输入:
"帮我分析一下张三最近的消费情况,如果有异常就标记出来。"
第1轮
思考:用户想分析张三的消费。我需要先获取张三最近一个月的消费记录。
行动:调用 query_user_transactions(user="张三", period="最近30天")
观察:返回了87条交易记录,总金额¥12,430。其中有一笔¥5,000的支出,备注是"未知商户"。
第2轮
思考:87笔交易,总金额¥12,430。有一笔¥5,000的"未知商户"支出,这个比较可疑。我需要查一下这笔交易的详情。
行动:调用 get_transaction_detail(transaction_id="T20240515-0089")
观察:交易时间凌晨3:15,IP地址来自境外,支付方式为信用卡。
第3轮
思考:凌晨3点、境外IP、¥5,000、未知商户——这四个条件同时满足,基本可以判定是异常交易。我还需要确认这是不是张三本人的操作。
行动:调用 check_user_login_log(user="张三", time="2024-05-15 03:00-04:00")
观察:该时段没有张三的登录记录。
第4轮
思考:登录记录显示张三当时没有操作,这笔交易很可能是盗刷。分析已经完成,汇总结果。
最终回答:
张三最近30天消费共87笔,总金额¥12,430。发现1笔异常:5月15日凌晨3:15,¥5,000,未知商户,境外IP操作,且该时段张三没有登录记录。高度疑似盗刷,建议立即冻结卡片并联系张三确认。
看到了吗?Agent不是一次性把所有数据查出来,而是查一步、分析一步、再决定下一步查什么。这个"边想边干"的过程,就是ReAct。
当然,ReAct不是一成不变的,实际使用中有几种常见变体:
1. 标准ReAct
最基本的循环:思考 → 行动 → 观察 → 继续或结束。
适合:简单明确的任务,一两轮就能搞定。
2. 带规划的ReAct
在循环开始前先做一个整体规划:"我需要1.查消费记录 2.分析异常 3.确认身份 4.出报告",然后按计划执行。
适合:长链路任务,防止Agent跑偏。
3. 带反思的ReAct
在观察之后加了一个"反思"环节:刚才的结论对吗?要不要换个方法再试试?
比如Agent查了消费记录,发现结果为空。反思环节会想:"可能是时间范围不对?要不要扩大查询范围?"
适合:结果不确定、可能需要调整策略的场景。
03
Skills + ReAct:1+1>2
ReAct + Skill的组合威力在于:
举个例子,一个客服Agent可能有这些Skill:

用户问"我的订单到哪了,如果还没发货就帮我退款"——这个任务跨了两个Skill(订单+退款),Agent通过ReAct循环自动切换:
Agent自动在多个Skill之间跳转,这就是Skills + ReAct的威力。
ReAct不是让Agent"更强",而是让Agent"更聪明"——知道什么时候该想、什么时候该干、什么时候该停。