让AI像管家一样聪明:揭秘ReAct模式的"思考-行动"秘诀

179 阅读5分钟

前言:AI也需要"工具箱"

想象你家有个超级聪明的管家,他能回答各种问题,但遇到需要查资料的事情时,他会自己翻书、用手机搜索。这就是Agent智能体的概念——让AI不仅能思考,还能调用工具解决问题。而ReAct模式就是这个管家的"工作手册",教他如何像人类一样"边想边做"。

拆解ReAct模式:AI的"四步工作法"

我们用订外卖来类比ReAct的工作流程:

  1. 动脑子想清楚(推理)
    就像你打开外卖软件前,先想"今天想吃麻辣烫还是披萨",AI会先分析问题:"用户要比较股价,我需要先查数据"。
  2. 动手调用工具(行动)
    确定想吃麻辣烫后,你会在软件里搜索店铺。AI则会调用"股价查询器",输入"青岛啤酒"开始搜索。
  3. 看结果调整(观察)
    搜到麻辣烫店铺后,你可能想"这家评分太低,换一家"。AI获取到青岛啤酒股价(67.92元)后,也会想:"还需要贵州茅台的数据才能比较"。
  4. 循环直到满意(迭代)
    最终你选好餐厅下单,就像AI比较完两家股价(1488.21元 vs 67.92元)后,给出结论:"贵州茅台更贵"。
graph TD
    A[用户提问] --> B{LLM分析}
    B -->|需工具调用| C[调用外部工具]
    C --> D[获取工具结果]
    D --> B
    B -->|最终答案| E[返回结果]

真实案例:AI如何像你一样查股价

用户问:"青岛啤酒和贵州茅台哪个股价更高?"
AI的思考过程(用外卖场景类比):

  1. 第一步:想清楚要干啥
    "用户要比较股价,但我家没有实时股价表,得用手机查!"(就像你决定点外卖前,先确认家里有没有食材)

  2. 第二步:动手查资料

    • 第一次行动:"先查青岛啤酒" → 调用工具 → 得到67.92元
      (就像你打开外卖软件,先搜"麻辣烫")
    • 第二次行动:"再查贵州茅台" → 调用工具 → 得到1488.21元
      (就像你接着搜"披萨"做比较)
  3. 第三步:看结果调整
    "1488元比67元高太多了,结论很明显!"(就像你对比完两家外卖的价格和评分后,决定选披萨)

  4. 第四步:用大白话汇报
    "贵州茅台的收盘价更高,比青岛啤酒贵二十多倍呢!"(就像你告诉朋友:"今天咱们吃披萨吧,这家评分高还打折")


代码实现:AI管家的"工具包"

以下是用Python实现的股票查询核心代码:


	# 1. 初始化设置:告诉AI它的角色和任务

	instructions = "你是一个股票助手"

	query = "青岛啤酒和贵州茅台的收盘价哪个贵?"

	 

	# 2. 构建"工作手册"模板:教AI如何格式化回答

	prompt = f"""

	请按照以下格式回答:

	思考:问题分解步骤

	Action:调用的工具名

	Action Input:工具参数(JSON格式)

	Observation:工具返回结果

	...(重复直至得出答案)

	最终答案:最终结论

	 

	你现在的任务是:{query}

	可用工具:{json.dumps(tools)}

	"""

	 

	# 3. 主循环:AI"思考-行动"工作流

	messages = [{"role": "user", "content": prompt}]

	while True:

	    # 发送消息到LLM(类似将任务单交给AI管家)

	    response = client.chat.completions.create(

	        model="deepseek-chat",

	        messages=messages,

	        temperature=0.1  # 保持回答确定性

	    )

	    

	    # 解析AI的回复

	    response_text = response.choices[0].message.content

	    if "最终答案" in response_text:

	        break  # 任务完成

	    

	    # 提取工具调用指令(类似读取任务单上的下一步)

	    tool_name = re.search(r'Action:\s*(\w+)', response_text).group(1)

	    params = json.loads(re.search(r'Action Input:\s*({.*?})', response_text).group(1))

	    

	    # 执行工具调用(AI实际使用工具的过程)

	    if tool_name == "get_closing_price":

	        stock_name = params["name"]

	        observation = get_closing_price(stock_name)  # 调用股价查询函数

	        messages.append({"role": "user", "content": f"Observation: {observation}"})

关键组件解析

1. 工具定义:AI的"手机APP"

	tools = [{

	    "name": "get_closing_price",  # 工具名称

	    "description": "获取股票收盘价",  # 工具功能说明

	    "parameters": {  # 参数要求

	        "type": "object",

	        "properties": {"name": {"type": "string"}},  # 需要股票名称

	        "required": ["name"]

	    }

	}]

总的流程:

  1. 第一轮循环

    • LLM输出:
    思考:需要分别获取两家公司的收盘价  
    Action: get_closing_price  
    Action Input: {"name": "青岛啤酒"}
    
  2. 第二轮循环

    • LLM输出:
    思考:获取贵州茅台价格  
    Action: get_closing_price  
    Action Input: {"name": "贵州茅台"}
    
  3. 最终轮

    思考:比较1488.21和67.92  
    最终答案:贵州茅台的收盘价更高
    

2. 工具实现:模拟股票数据服务

	def get_closing_price(name):

	    # 模拟实时股价数据

	    stock_data = {

	        "贵州茅台": "1488.21",

	        "青岛啤酒": "67.92"

	    }

	    return stock_data.get(name, "未搜索到该股票")

技术优势:为什么ReAct模式更实用?

  1. 分步骤解决问题
    就像你装修房子会先设计图纸→买材料→找工人,AI也会把大问题拆成小任务。
  2. 透明化思考过程
    你会告诉朋友:"我查了A公司XX元,B公司YY元,所以选B",AI也会展示它的思考步骤。
  3. 自我学习能力
    每次调用工具后,AI都会积累经验。比如首次查"青啤"失败,下次可能自动尝试"青岛啤酒"全称,就像你记住正确店名后不再点错外卖。
  4. 灵活应对变化
    如果用户追加问题:"那和五粮液比呢?",AI会像你一样调整计划:"需要再查五粮液的股价"。

结语:AI正在"人类化"

ReAct模式让AI不再像机器人一样生硬,而是:

  • 会规划:像你制定旅行计划一样分步骤
  • 懂求助:像你遇到问题会查手机一样调用工具
  • 能调整:像你做错事会修正一样动态优化

下次当你和AI聊天时,不妨观察它的思考过程——你会发现,它越来越像你身边那个爱动脑筋、会找外援、还能把结果讲得明明白白的好朋友了!