AI Agent开发实战:从零构建一个能自主规划任务的智能体引言2025年被许多人称为AI Agentåƒå¹´ã€‚ä¸åŒäºŽä¼ ç»Ÿçš„èŠå¤©æœºå™¨äººï¼ŒAI Agent是一个能够自主感知环境、制定计划、使用工å·å¹¶æ‰§è¡Œå¤æ‚任务的智能系统。从AutoGPT的爆火到Claudeçš„Computer Use,Agent正在重新定义我们与AIçš„äº¤äº’æ–¹å¼ã€‚æœ¬æ–‡å°†ä»Žé›¶å¼€å§‹ï¼Œå¸¦ä½ æž„å»ºä¸€ä¸ªå·å¤‡è§„划、工å·è°ƒç”¨å’Œè®°å¿†åŠŸèƒ½çš„AI Agentï¼Œå®Œæ•´è¦†ç›–æž¶æž„è®¾è®¡ã€æ ¸å¿ƒå®žçŽ°å’Œç”Ÿäº§åŒ–éƒ¨ç½²ã€‚ä¸€ã€ä»€ä¹ˆæ˜¯AI Agent?1.1 Agentçš„æ ¸å¿ƒå®šä¹‰AI Agentä¸æ˜¯ä¸€ä¸ªå•ç‹¬çš„æ¨¡åž‹ï¼Œè€Œæ˜¯ä¸€ä¸ªç³»ç»Ÿæž¶æž„ã€‚å®ƒç”±å››ä¸ªæ ¸å¿ƒç»„ä»¶æž„æˆã€‚å¤§è„‘ç»„ä»¶é€šå¸¸æ˜¯LLM,负责推理和决策,决定了Agentçš„æ™ºèƒ½ä¸Šé™ã€‚è§„åˆ’ç»„ä»¶å°†å¤æ‚ä»»åŠ¡åˆ†è§£ä¸ºå¯æ‰§è¡Œçš„å­æ­¥éª¤ï¼Œå¸¸ç”¨æŠ€æœ¯åŒæ‹¬ReAct、Plan-and-Solveå’ŒTree of Thought。工å·ç»„件是Agent与外部世界交互的接口,可以是APIè°ƒç”¨ã€ä»£ç æ‰§è¡Œã€æµè§ˆå™¨æ“ä½œã€æ–‡ä»¶è¯»å†™ç­‰ã€‚è®°å¿†ç»„ä»¶åˆ†ä¸ºçŸ­æœŸè®°å¿†å¦‚å¯¹è¯ä¸Šä¸‹æ–‡çª—å£ã€é•¿æœŸè®°å¿†å¦‚å‘é‡æ•°æ®åº“å­˜å‚¨çš„çŸ¥è¯†ã€å·¥ä½œè®°å¿†å¦‚å½“å‰ä»»åŠ¡çš„çŠ¶æ€è·Ÿè¸ªã€‚1.2 Agent vs ä¼ ç»ŸChatBot维度ChatBotAI Agent交互模式单轮问答多轮自主执行工å·ä½¿ç”¨æ—可调用API/ä»£ç /浏览器任务复杂度简单问答复杂多步骤任务记忆能力上下文窗口短期长期工作记忆自主性被动响应主动规划执行二、Agent架构设计2.1 ReAct模式ReAct(Reasoning Acting)是目前最主流的AgentæŽ¨ç†æ¨¡å¼ã€‚æ ¸å¿ƒå¾ªçŽ¯åˆ†ä¸ºå››æ­¥ã€‚ç¬¬ä¸€æ­¥Thought:分析当前状态,思考下一步行动。第二步Action:执行å·ä½“操作如调用工å·ã€‚第三步Observationï¼šè§‚å¯Ÿæ“ä½œç»“æžœã€‚ç¬¬å››æ­¥å¾ªçŽ¯ï¼Œæ ¹æ®è§‚å¯Ÿç»“æžœæ›´æ–°çŠ¶æ€å¹¶ç»§ç»­æ€è€ƒä¸‹ä¸€æ­¥ã€‚è¿™ä¸ªå¾ªçŽ¯æŒç»­è¿›è¡Œç›´åˆ°ä»»åŠ¡å®Œæˆæˆ–è¾¾åˆ°ç»ˆæ­¢æ¡ä»¶ã€‚ç”¨æˆ·: 帮我查一下北京今天天气,如果下雨就提醒我带伞 Agent Thought: éœ€è¦å ˆèŽ·å–åŒ—äº¬å¤©æ°”ä¿¡æ¯ Agent Action: call_weather_api(北京) Observation: {city: 北京, weather: 小雨, temp: 18} Agent Thought: 天气是小雨,需要提醒用户带伞 Agent Action: respond(北京今天小雨,气温18℃,记得带伞哦!)2.2 系统架构图整体架构分为三层。应用层定义Agent角色、任务、约束,是面向用户的接口。编排层是ReAct循环引擎,管理规划、执行、观察的完整流程,是Agentçš„å¤§è„‘ã€‚åŸºç¡€è®¾æ–½å±‚åŒæ‹¬LLMæœåŠ¡ï¼ˆæ¨¡åž‹æŽ¨ç†ï¼‰ã€å·¥å·æ³¨å†Œä¸­å¿ƒï¼ˆå·¥å·å‘çŽ°å’Œè°ƒç”¨ï¼‰ã€è®°å¿†ç³»ç»Ÿï¼ˆçŸ­æœŸå’Œé•¿æœŸè®°å¿†ç®¡ç†ï¼‰ã€‚ä¸‰ã€æ ¸å¿ƒå®žçŽ°3.1 ReAct引擎实现importjsonfromtypingimportAnyfromdataclassesimportdataclassdataclassclassAgentStep:thought:straction:straction_input:dictobservation:strclassReActAgent:def__init__(self,llm,tools,max_steps10):self.llmllm self.tools{t.name:tfortintools}self.max_stepsmax_steps self.history:list[AgentStep][]defrun(self,task:str)-str:promptself._build_prompt(task)forstep_numinrange(self.max_steps):responseself.llm.generate(prompt)thought,action,action_inputself._parse(response)resultself._execute_action(action,action_input)stepAgentStep(thoughtthought,actionaction,action_inputaction_input,observationstr(result))self.history.append(step)ifactionFINISH:returnaction_input.get(answer,str(result))promptself._format_step(step)return达到最大步数限制def_build_prompt(self,task:str)-str:tools_desc\n.join(f-{t.name}:{t.description}fortinself.tools.values())returnfä½ æ˜¯ä¸€ä¸ªAI Agent。 ## å¯ç”¨å·¥å ·{tools_desc}## 任务{task}## å“åº”æ ¼å¼ Thought: [ä½ çš„æ€è€ƒ] Action: [å·¥å ·åæˆ–FINISH] Action Input: [JSONæ ¼å¼å‚æ•°] 3.2 å·¥å·ç³»ç»Ÿè®¾è®¡classTool:def__init__(self,name:str,description:str,func):self.namename self.descriptiondescription self.funcfuncdefexecute(self,**kwargs)-Any:returnself.func(**kwargs)# 定义工å·defsearch_web(query:str)-str:搜索网络信息returnf搜索结果:å ³äºŽ{query}çš„ç›¸å ³ä¿¡æ¯...defexecute_code(code:str)-str:执行Pythonä»£ç try:resulteval(code)returnf执行结果:{result}exceptExceptionase:returnf执行错误:{e}defread_file(path:str)-str:è¯»å–æ–‡ä»¶å† å®¹withopen(path,r)asf:returnf.read()tools[Tool(search,搜索网络信息,参数: query,search_web),Tool(run_code,执行Pythonä»£ç ï¼Œå‚æ•°: code,execute_code),Tool(read_file,读取文件,参数: path,read_file),]3.3 记忆系统实现fromcollectionsimportdequeimportchromadbclassMemorySystem:def__init__(self,short_term_size20):self.short_termdeque(maxlenshort_term_size)self.working{}# 当前任务状态self.long_termchromadb.Client()defadd_short_term(self,message:dict):self.short_term.append(message)defget_context(self)-list:returnlist(self.short_term)defstore_long_term(self,key:str,value:str):collectionself.long_term.get_or_create(knowledge)collection.add(documents[value],ids[key])defquery_long_term(self,query:str,k5):collectionself.long_term.get_collection(knowledge)returncollection.query(query_texts[query],n_resultsk)四、Prompt工程在Agent中的特殊应用4.1 结构化输出约束Agent中Promptæœ€é‡è¦çš„æ˜¯çº¦æŸè¾“å‡ºæ ¼å¼ï¼Œä¾¿äºŽè§£æžã€‚ä½ å¿ é¡»ä¸¥æ ¼æŒ‰ç §ä»¥ä¸‹JSONæ ¼å¼å›žå¤ï¼Œä¸è¦åŒ å«ä»»ä½•å ¶ä»–å† å®¹ï¼š { thought: ä½ çš„æŽ¨ç†è¿‡ç¨‹, action: å·¥å ·åç§°æˆ–FINISH, action_input: {key: value} }4.2 错误恢复Prompt在Agentçš„Promptä¸­åŠ å¥é”™è¯¯å¤„理逻辑至å³é‡è¦ã€‚å¦‚æžœå·¥å ·è¿”å›žé”™è¯¯ï¼Œè¯·ï¼š 1. åˆ†æžé”™è¯¯åŽŸå› 2. 尝试修正参数后重试(最多3次) 3. 如果3次仍失败,换用替代方案 4. å¦‚æ— æ›¿ä»£æ–¹æ¡ˆï¼Œå‘ç”¨æˆ·è¯´æ˜Žæƒ å†µäº”ã€ç”Ÿäº§åŒ–éƒ¨ç½²è€ƒé‡5.1 安卿²™ç®±Agentæ‰§è¡Œä»£ç å’ŒShell命令å¿é¡»æœ‰å®‰å¨æ²™ç®±ã€‚推荐使用Dockerå®¹å™¨éš”ç¦»ã€é™åˆ¶ç½‘ç»œè®¿é—®ã€è®¾ç½®æ‰§è¡Œè¶æ—¶ã€ç¦æ­¢å±é™©ç³»ç»Ÿè°ƒç”¨ã€‚5.2 成本控制Agent可能产生大量LLMè°ƒç”¨ã€‚ä¼˜åŒ–ç­–ç•¥åŒæ‹¬ï¼šå¯¹ç®€å•任务使用mini模型(如GPT-4o-mini),ä»å¤æ‚推理使用强模型;设置最大步数和总Token预算;缓存相同或相似的子任务结果;对工å·è°ƒç”¨ç»“果进行摘要压缩后再放å¥ä¸Šä¸‹æ–‡ã€‚5.3 可观测性importloggingclassObservableAgent(ReActAgent):defrun(self,task:str)-str:logging.info(fAgent开始执行:{task})forstepinself.history:logging.info(fStep: thought{step.thought}, faction{step.action})returnsuper().run(task)å­ã€å®žæˆ˜æ¡ˆä¾‹ï¼šè‡ªåŠ¨ç ”ç©¶åŠ©æ‰‹ç»¼åˆä»¥ä¸Šå†å®¹å®žçŽ°ä¸€ä¸ªèƒ½æœç´¢ã€åˆ†æžã€æ€»ç»“çš„è‡ªåŠ¨ç ”ç©¶åŠ©æ‰‹ã€‚æµç¨‹ä¸ºï¼šæŽ¥æ”¶ç ”ç©¶ä¸»é¢˜ï¼Œæœç´¢ç›¸å³èµ„料,提取å³é”®ä¿¡æ¯ï¼Œç»¼åˆåˆ†æžç”ŸæˆæŠ¥å‘Šï¼Œä¿å­˜åˆ°æœ¬åœ°ã€‚这个Agent展示了完整的感知-规划-执行-反馈闭环。七、未来展望Agentå‘å±•æ–¹å‘ä¸»è¦åŒæ‹¬ä¸‰ä¸ªæ–¹é¢ã€‚多Agent协作,多个专用Agent通过消息总线协作完成è¶å¤æ‚任务,类似AutoGençš„è®¾è®¡æ€è·¯ã€‚è‡ªä¸»å­¦ä¹ ï¼ŒAgentä»Žæ‰§è¡ŒåŽ†å²ä¸­å­¦ä¹ ï¼Œä¼˜åŒ–Prompt和策略,减少重复错误。多模态Agent,整合视觉、语音等多模态输å¥ï¼Œå®žçŽ°æ›´ä¸°å¯Œçš„çŽ¯å¢ƒæ„ŸçŸ¥èƒ½åŠ›ã€‚æ€»ç»“æž„å»ºç”Ÿäº§çº§AI Agentéœ€è¦å³æ³¨å››ä¸ªå³é”®ç‚¹ã€‚第一,稳健的ReAct循环,这是Agentèƒ½è‡ªä¸»æ‰§è¡Œå¤šæ­¥ä»»åŠ¡çš„æ ¸å¿ƒå¼•æ“Žã€‚ç¬¬äºŒï¼Œçµæ´»çš„å·¥å·ç³»ç»Ÿï¼Œå·¥å·æ˜¯Agentèƒ½åŠ›çš„å»¶ä¼¸ï¼Œè®¾è®¡å¥½å·¥å·æŽ¥å£æ˜¯æˆåŠŸçš„ä¸€åŠã€‚ç¬¬ä¸‰ï¼Œæœ‰æ•ˆçš„è®°å¿†ç®¡ç†ï¼ŒçŸ­æœŸã€é•¿æœŸã€å·¥ä½œè®°å¿†ä¸‰è€ç¼ºä¸€ä¸å¯ã€‚第四,完善的错误处理,生产环境中错误不可避åï¼Œä¼˜é›é™çº§æ˜¯å³é”®ã€‚Agentä»Žä¸€ä¸ªæ¦‚å¿µåˆ°å¯ç”¨çš„äº§å“ï¼Œä¸­é—´æœ‰å¤§é‡çš„å·¥ç¨‹ç»†èŠ‚éœ€è¦æ‰“ç£¨ã€‚å¸Œæœ›æœ¬æ–‡èƒ½ä¸ºä½ æ­å»ºè‡ªå·±çš„Agentç³»ç»Ÿæä¾›æ¸æ™°çš„æŠ€æœ¯è·¯çº¿å›¾ã€‚本文约2800字,完整覆盖了AI Agentä»Žæ¦‚å¿µåˆ°å®žçŽ°çš„å¨æµç¨‹ã€‚