AI Agent工作流编排:ReAct模式深度解析与实现 AI Agent工作流编排:ReActæ¨¡å¼æ·±åº¦è§£æžä¸Žå®žçŽ°å¼•è¨€å¤§è¯­è¨€æ¨¡åž‹è™½ç„¶å ·å¤‡å¼ºå¤§çš„æŽ¨ç†èƒ½åŠ›ï¼Œä½†é¢å¯¹å¤æ‚ä»»åŠ¡æ—¶ï¼Œå¦‚æžœä» ä¾èµ–ä¸€æ¬¡æ€§çš„è¾“å ¥è¾“å‡ºï¼Œå¾€å¾€éš¾ä»¥ä¿è¯ç­”æ¡ˆçš„å‡†ç¡®æ€§å’Œå¯é æ€§ã€‚å¦‚ä½•è®©æ¨¡åž‹åƒäººç±»ä¸€æ ·å ˆæ€è€ƒã€å†è¡ŒåŠ¨ã€å†è§‚å¯Ÿã€å†è°ƒæ•´ï¼ŸReAct(Reasoning Actingï¼‰æ¨¡å¼ç»™å‡ºäº†ä¸€ç§ä¼˜é› çš„è§£å†³æ–¹æ¡ˆã€‚æœ¬æ–‡å°†æ·±å ¥è§£æž ReAct çš„æ ¸å¿ƒæœºåˆ¶ï¼Œå¹¶å¸¦ä½ ä»Žé›¶å®žçŽ°ä¸€ä¸ªåŸºäºŽ ReAct 的 AI Agent。一、ReAct 模式概述ReAct 是由普林斯顿大学和 Google çš„ç ”ç©¶è€ åœ¨ 2022 å¹´æå‡ºçš„ä¸€ä¸ªæ¡†æž¶ï¼Œå ¶æ ¸å¿ƒæ€æƒ³æ˜¯å°†**推理(Reasoning)与行动(Acting)**äº¤æ›¿è¿›è¡Œï¼Œå½¢æˆä¸€ä¸ªå¾ªçŽ¯è¿­ä»£çš„å·¥ä½œæµã€‚ä¸Žä¼ ç»Ÿçš„ Chain-of-Thought(CoTï¼Œæ€ç»´é“¾ï¼‰ä» è®©æ¨¡åž‹å±•ç¤ºæŽ¨ç†è¿‡ç¨‹ä¸åŒï¼ŒReAct 让模型在推理过程中主动决定是否需要采取行动,获取外部信息后再继续推理。这种设计让 Agent èƒ½å¤Ÿï¼šåˆ†è§£å¤æ‚ä»»åŠ¡ï¼Œé€æ­¥è§£å†³åœ¨çŸ¥è¯†ä¸è¶³æ—¶ä¸»åŠ¨æŸ¥è¯¢å¤–éƒ¨å·¥å ·æ ¹æ®è¡ŒåŠ¨ç»“æžœåŠ¨æ€è°ƒæ•´åŽç»­ç­–ç•¥é¿å å¹»è§‰ï¼Œæå‡ç­”æ¡ˆå¯ä¿¡åº¦äºŒã€ReAct çš„æ ¸å¿ƒå¾ªçŽ¯ï¼šæ€è€ƒ-观察-行动ReAct 的工作流可以抽象为一个不断循环的三阶段模式:┌─────────┐ ┌─────────┐ ┌─────────┐ │ Thought │ → │ Action │ → │ Observation │ → (循环) │ (思考) │ │ (行动) │ │ (观察) │ └─────────┘ └─────────┘ └─────────┘2.1 思考(Thoughtï¼‰æ¨¡åž‹åˆ†æžå½“å‰çŠ¶æ€ï¼Œåˆ¤æ–­æ˜¯å¦éœ€è¦å¤–éƒ¨ä¿¡æ¯ã€‚å ¸åž‹çš„æ€è€ƒå† å®¹å¯èƒ½æ˜¯ï¼šç”¨æˆ·é—®çš„æ˜¯ 2024 年诺贝尔物理学奖得主,我的知识截止日期是 2024 å¹´ 4 月,我需要搜索最新信息上一步计算结果是 42,接下来我需要验证这个结果是否正确2.2 行动(Actionï¼‰å¦‚æžœæ€è€ƒåŽå†³å®šéœ€è¦å¤–éƒ¨ä¿¡æ¯ï¼Œæ¨¡åž‹è¾“å‡ºä¸€ä¸ªç»“æž„åŒ–çš„è¡ŒåŠ¨æŒ‡ä»¤ï¼Œé€šå¸¸åŒ å«ä¸¤éƒ¨åˆ†ï¼šAction:要执行的操作名称(如search、calculate、lookup)Action Input:操作所需的参数2.3 观察(Observation)执行行动后,将结果以Observationçš„å½¢å¼å›žä¼ ç»™æ¨¡åž‹ã€‚æ¨¡åž‹åŸºäºŽè¿™ä¸ªè§‚å¯Ÿç»“æžœè¿›å ¥ä¸‹ä¸€è½®æ€è€ƒï¼Œå†³å®šç»§ç»­è¡ŒåŠ¨è¿˜æ˜¯ç»™å‡ºæœ€ç»ˆç­”æ¡ˆã€‚è¿™ä¸ªå¾ªçŽ¯ä¼šæŒç»­è¿›è¡Œï¼Œç›´åˆ°æ¨¡åž‹è®¤ä¸ºå·²ç»èŽ·å–äº†è¶³å¤Ÿä¿¡æ¯ï¼Œè¾“å‡ºFinal Answer结束任务。三、实战:从零实现 ReAct Agent下面我们用 Python 从零实现一个支持 ReAct 模式的 Agentã€‚ä¸ºäº†ç®€åŒ–ï¼Œæˆ‘ä»¬æä¾›ä¸¤ä¸ªå·¥å ·ï¼šsearch(搜索)和calculate(计算)。3.1 å®šä¹‰å·¥å ·import re def search(query: str) - str: æ¨¡æ‹Ÿæœç´¢å·¥å ·ï¼ˆå®žé™ é¡¹ç›®ä¸­å¯æŽ¥å ¥ Bing/Google Search API) knowledge_base { 2024年诺贝尔物理学奖: 2024年诺贝尔物理学奖授予了约翰·霍普菲尔德(John Hopfield)和杰弗里·辛顿(Geoffrey Hintonï¼‰ï¼Œä»¥è¡¨å½°ä»–ä»¬åœ¨äººå·¥ç¥žç»ç½‘ç»œå’Œæœºå™¨å­¦ä¹ é¢†åŸŸçš„å¼€åˆ›æ€§è´¡çŒ®ã€‚, çˆ±å› æ–¯å¦å‡ºç”Ÿåœ°: çˆ±å› æ–¯å¦å‡ºç”ŸäºŽå¾·å›½ä¹Œå°”å§†å¸‚ã€‚, Pythonå‘æ˜Žè€ : Python 由 Guido van Rossum 于 1991 年发明。 } return knowledge_base.get(query, fæœªæ‰¾åˆ°å ³äºŽ{query}的信息。) def calculate(expression: str) - str: å®‰å ¨è®¡ç®—å·¥å ·ï¼Œä» æ”¯æŒåŸºæœ¬æ•°å­¦è¿ç®— try: # åªå è®¸æ•°å­—å’ŒåŸºæœ¬è¿ç®—ç¬¦ï¼Œé˜²æ­¢ä»£ç æ³¨å ¥ allowed set(0123456789-*/.() ) if not all(c in allowed for c in expression): return é”™è¯¯ï¼šè¡¨è¾¾å¼åŒ å«éžæ³•å­—ç¬¦ result eval(expression) return str(result) except Exception as e: return f计算错误:{str(e)} # å·¥å ·æ³¨å†Œè¡¨ TOOLS { search: search, calculate: calculate }3.2 构建 ReAct Prompt 模板REACT_PROMPT ä½ æ˜¯ä¸€ä¸ªæ™ºèƒ½åŠ©æ‰‹ï¼Œå¯ä»¥è®¿é—®ä»¥ä¸‹å·¥å ·ï¼š {tools_description} è¯·ä½¿ç”¨ä»¥ä¸‹æ ¼å¼å›žç­”é—®é¢˜ï¼š Question: 用户的问题 Thought: ä½ éœ€è¦åˆ†æžå½“å‰æƒ å†µï¼Œåˆ¤æ–­æ˜¯å¦éœ€è¦ä½¿ç”¨å·¥å · Action: å·¥å ·åç§°ï¼ˆå¯é€‰ï¼š{tool_names}) Action Input: å·¥å ·è¾“å ¥å‚æ•°