← 返回目录
a1.2概念⏱ 约 8 分钟

ReAct:教小雅"想一步、做一步、看结果"

给它装上「侦探脑」——智能体真正的核心

🔎 最后验证 2026-06📚 来源:ReAct: Synergizing Reasoning and Acting in Language Models (Yao et al., 2022)🧰 扣子 Coze✅ 53 人学过👁 131 次阅读
为什么学这个

上一节,小雅查天气靠"编"。这一节,我们给它换一套脑回路——侦探脑

好侦探破案,从不张口就说凶手是谁。他一条线索 → 去一次验证 → 结果 → 再下一步……一步步逼近真相。

这套"边想边做"的功夫,就是智能体真正的核心,它有个名字:ReAct。装上它,你会第一次看见小雅真的去查、再回答

ReAct = Reason(想)+ Act(做)

ReAct 是 2022 年由普林斯顿大学和 Google 的研究者提出的方法,现在几乎是所有智能体的"标配脑回路"。它的循环只有三步,转个不停:

想(Reason)做(Act)看(Observe) → 回到"想"……直到任务完成。

  • :它先在心里盘算"我现在缺什么信息、下一步该干嘛"
  • :根据盘算,选一个工具去执行(比如"查天气")
  • :拿到工具返回的真实结果
  • 然后带着新结果再想一轮,而不是凭空下结论
💡 打个比方

对比一下两种答题方式:

  • 没有 ReAct(上一节的小雅):闭卷考试还硬答——凭记忆瞎写,容易编。
  • 有了 ReAct:开卷考试——"这题我不确定 → 翻到相关那页 → 看到答案 → 再下笔"。

这正是 ReAct 最大的好处:它把"凭空想"和"真实信息"连了起来,显著减少幻觉——它不再需要编,因为它可以去查

看一眼小雅的"侦探脑"在转(注意:它转了好几圈)

ReAct 的威力,要在需要好几步的任务上才看得出来。我们换个稍复杂的问题——"明天适不适合去爬香山",看小雅怎么一圈一圈逼近答案:

🧠 小雅的 ReAct 循环(两轮「想→做→看」)想 · 做 · 看
帮我看看明天适不适合去爬香山?
小雅
🤔 想:这得看两件事——明天天气好不好、香山开不开放。先查天气。
⚙ 第 1 轮
小雅
✋ 做:查询天气(北京, 明天)
⚙ 调用 天气工具
小雅
👀 看:返回「晴,15–22°C,微风」
小雅
🤔 想:天气挺合适。但还没确认香山开不开放,不能下结论,再查一步。
⚙ 第 2 轮
小雅
✋ 做:联网搜索(「香山公园 明天 开放时间」)
⚙ 调用 联网搜索

看清楚没?它没有一口气答,而是:查到天气好 → 但意识到还差一个信息 → 再去查开放时间 → 两件事都齐了才下结论。这种"看到结果、发现还差点、再去补"的循环,正是 ReAct 比"一次性联想"强的地方。 一个普通聊天机器人会直接说"应该可以吧"——因为它既不会查,也不会"想想还缺啥"。

❓ 测验
ReAct 循环里,紧跟在「做(调用了工具)」之后的,应该是哪一步?

🙌 动手:在扣子里打开小雅的"侦探脑"

不用写代码,低代码平台已经把 ReAct 这套循环内置好了,你只要给它"装上手"并允许它多步执行:

  1. 打开你在扣子里建的 小雅,进编排/编辑页。
  2. 给它添加「联网搜索」插件(这就是它"查"的那只手)。
  3. 允许它走多步:在编排里启用平台的智能体/规划能力,让它能"查完再想、想完再查",而不是答一句就停(扣子 2.0 提供了这类多步规划能力;具体入口名称以官网当前界面为准)。
  4. 问它一句需要现查、还得查不止一处的话,比如"明天适不适合去香山"或"今天有什么和 AI 相关的大新闻"。
  5. 观察执行步骤:它会先搜、看结果、再决定要不要补一刀,最后才回答

✅ 你会亲眼看到:小雅不再张口就编,而是一步步查清楚再答。这就是 ReAct 在干活。

📸 低代码平台界面会更新,按"找到对应功能"的思路操作即可;上线版本会配当前截图。

🔧 手写一个迷你 ReAct(可运行)

撕开所有框架,ReAct 的内核朴素得惊人——就是一个循环:让模型反复"想 + 选工具",你来执行、把结果喂回去,直到它能回答。下面这段 Python 可以直接复制运行(用 DeepSeek 或任意 OpenAI 兼容接口,pip install openai,把 你的KEY 换掉):

# pip install "openai>=1.0"
import json
from openai import OpenAI

client = OpenAI(api_key="你的KEY", base_url="https://api.deepseek.com")
MODEL = "deepseek-chat"

# 给它一个工具:联网搜索(这里用假数据演示,真实项目换成搜索 API)
def web_search(query: str) -> str:
    return f"(示例结果)关于「{query}」:明天北京晴,15–22℃;香山正常开放 8:00–17:00。"

SYSTEM = """你是一个按 ReAct 方式工作的智能体。每一步只回复一行 JSON:
- 需要查信息时:{"thought": "你的思考", "action": "web_search", "action_input": "查询词"}
- 已经能回答时:{"thought": "你的思考", "answer": "给用户的最终回答"}
可用工具:web_search(查询词) —— 联网搜索实时信息。"""

def react(question: str, max_steps: int = 5) -> str:
    messages = [{"role": "system", "content": SYSTEM},
                {"role": "user", "content": question}]
    for _ in range(max_steps):                      # ← 步数上限,防止它绕圈子
        reply = client.chat.completions.create(
            model=MODEL, messages=messages,
            response_format={"type": "json_object"},
        ).choices[0].message.content
        try:
            data = json.loads(reply)                 # JSON 模式偶尔会返回空/截断,兜一下底
        except (json.JSONDecodeError, TypeError):
            return f"(模型这步没给出规范 JSON,原文:{str(reply)[:80]}…)"
        print("🤔 想:", data["thought"])
        if   data:                        
             data[]
        obs = web_search(data[])      
        (, data[], , obs)
        messages.append({: , : reply})
        messages.append({: , : })   
     

 __name__ == :
    (, react())

运行后你会看到它一圈圈地想→做→看:

🤔 想: 我需要明天的天气和香山的开放情况,先查一下
✋ 做: web_search  → 👀 看: (示例结果)…明天北京晴…香山 8:00–17:00…
🤔 想: 信息够了,可以回答了
💬 答: 适合去!明天北京晴、15–22℃,香山 8:00–17:00 正常开放,记得带件外套。

对照前面那张思考轨迹图——for 循环就是"反复想做看",max_steps 就是给它的"别绕圈子"刹车。所谓"智能体框架",很大程度就是把这个循环 + 工具管理包装得更顺手。看懂这 30 行,你就再也不会觉得智能体神秘了。

⚠️ 避坑ReAct 不是万能:当心它「绕圈子」

有时小雅会陷进死循环——反复查同一个东西、或越想越偏。所以工程上一定会设一个步数上限(比如最多想做 6 轮),到了就停下来给出当前最好的答案。放手让它想,但别让它无限转。

🤖 给小雅设计一段 ReAct 思路
任务是『帮我决定周末去哪个城市玩更划算』。请你用 ReAct 的『想→做→看』格式,写出一个智能体大概会怎么一步步思考和调用工具(比如查天气、查票价、查景点),每一步标明是 想/做/看。
✅ 小结

小雅终于学会了像侦探一样想一步、做一步、看结果——这是它从"联想机"进化成"智能体"的关键一跳,也是这门课最重要的一节之一。

但你可能注意到了:刚才它能查天气,靠的是我们给它装的那一个"联网搜索"。可这只"手"到底是怎么装上去的?

下一节,我们彻底搞懂"给智能体装手"的原理——还会给你一份能直接复制运行的代码,亲手让小雅学会调用工具(比如用计算器精确算账)。

下一节 → 给小雅装「手」:工具调用(含完整可运行代码)
智图软件的赞赏码
都看到这了,打个赏呗!
接下来 · a1.3
给小雅装"手":工具调用(含完整可运行代码)
继续读下一节 →