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: å·¥å ·è¾å ¥åæ°