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



所有评论(0)