AI Agent到底是什么?5个比喻让你秒懂,附Python实战代码
个人主页我滴老baby欢迎大家点赞评论收藏⭐文章系列专栏AI文章目录AI Agent到底是什么5个比喻让你秒懂附Python实战代码一、为什么所有人都在谈Agent二、Agent的四大核心组件1. 规划Planning2. 记忆Memory3. 工具Tools4. 推理Reasoning三、手把手用Python构建一个完整的Agent四、运行效果五、主流Agent框架对比六、总结AI Agent到底是什么5个比喻让你秒懂附Python实战代码全网都在说AI Agent但它到底是什么和ChatGPT有什么区别这篇文章用5个通俗易懂的比喻配合完整Python代码让你彻底搞懂Agent的本质。一、为什么所有人都在谈Agent2024年以来AI Agent成为科技圈最火的概念。从OpenAI到Google从创业公司到大厂所有人都在押注Agent。但大多数人依然云里雾里。一句话定义AI Agent是一个能自主使用工具来完成任务的AI系统。让我们用5个比喻来理解比喻对应概念说明大脑大语言模型(LLM)负责理解、推理、决策眼睛耳朵感知模块接收用户输入、读取文件、搜索网络手脚工具调用执行代码、查询数据库、发送邮件记忆上下文记忆记住之前的对话和操作计划书Prompt/指令告诉Agent目标和规则ChatGPT vs Agent 的核心区别ChatGPT: 用户 → [LLM] → 文字回复 Agent: 用户 → [LLM 工具 记忆 规划] → 行动 回复二、Agent的四大核心组件一个完整的Agent系统由以下四个组件构成1. 规划PlanningAgent需要能把复杂任务拆解成小步骤。2. 记忆Memory包括短期记忆对话上下文和长期记忆知识库。3. 工具ToolsAgent能调用的外部能力如搜索引擎、代码执行器等。4. 推理ReasoningAgent的思考过程通常通过大模型实现。三、手把手用Python构建一个完整的Agent下面我们从零构建一个具备规划、记忆和工具能力的完整AgentimportjsonfromtypingimportList,Dict,Callable,AnyfromopenaiimportOpenAIclassAgentMemory:Agent的记忆系统def__init__(self,max_short_term:int20):self.short_term:List[Dict][]# 短期记忆对话历史self.max_short_termmax_short_term self.long_term:List[str][]# 长期记忆重要信息defadd_message(self,role:str,content:str):添加一条消息到短期记忆self.short_term.append({role:role,content:content})# 记忆溢出时保留系统提示和最近的对话iflen(self.short_term)self.max_short_term:self.short_term[self.short_term[0]]self.short_term[-(self.max_short_term-1):]defremember(self,info:str):存储重要信息到长期记忆self.long_term.append(info)print(f [记忆] 已记住:{info})defget_context(self)-str:获取长期记忆摘要ifnotself.long_term:returnreturn\n长期记忆:\n\n.join(f-{m}forminself.long_term)defget_messages(self)-List[Dict]:获取完整的对话消息列表messagesself.short_term.copy()# 将长期记忆注入系统提示ifself.long_termandmessages:messages[0][content]self.get_context()returnmessagesclassAgentTool:Agent的工具定义def__init__(self,name:str,description:str,func:Callable,parameters:Dict):self.namename self.descriptiondescription self.funcfunc self.parametersparametersdefexecute(self,**kwargs)-str:try:returnstr(self.func(**kwargs))exceptExceptionase:returnf工具执行错误:{e}defto_openai_schema(self)-Dict:return{type:function,function:{name:self.name,description:self.description,parameters:self.parameters}}classAIAgent:完整的AI智能体def__init__(self,api_key:str,model:strgpt-4o-mini,name:str助手):self.clientOpenAI(api_keyapi_key)self.modelmodel self.namename self.memoryAgentMemory(max_short_term20)self.tools:Dict[str,AgentTool]{}self.step_count0self.max_steps5# 防止无限循环# 初始化系统提示self.system_promptf你是{name}一个有用的AI智能体。 你可以使用工具来完成任务。在回答问题时 1. 先分析用户的需求 2. 判断是否需要使用工具 3. 如果需要调用合适的工具 4. 基于工具结果给出完整回答 self.memory.add_message(system,self.system_prompt)defadd_tool(self,name:str,description:str,func:Callable,parameters:Dict):注册一个工具self.tools[name]AgentTool(name,description,func,parameters)print(f [注册工具]{name}:{description})def_get_tools_schema(self)-List[Dict]:return[tool.to_openai_schema()fortoolinself.tools.values()]def_execute_tool(self,tool_name:str,arguments:Dict)-str:iftool_nameinself.tools:returnself.tools[tool_name].execute(**arguments)returnf未知工具:{tool_name}defrun(self,user_input:str)-str:运行Agent主循环print(f\n{*50})print(f用户:{user_input})print(f{*50})self.memory.add_message(user,user_input)self.step_count0whileself.step_countself.max_steps:self.step_count1# 第一步思考调用LLMresponseself.client.chat.completions.create(modelself.model,messagesself.memory.get_messages(),toolsself._get_tools_schema()ifself.toolselseNone,tool_choiceautoifself.toolselseNone)msgresponse.choices[0].message# 第二步决策检查是否需要工具ifmsg.tool_calls:self.memory.short_term.append({role:assistant,content:msg.contentor,tool_calls:[{id:tc.id,type:function,function:{name:tc.function.name,arguments:tc.function.arguments}}fortcinmsg.tool_calls]})# 第三步行动执行工具fortool_callinmsg.tool_calls:func_nametool_call.function.name func_argsjson.loads(tool_call.function.arguments)print(f [步骤{self.step_count}] 调用工具:{func_name}({func_args}))resultself._execute_tool(func_name,func_args)print(f [步骤{self.step_count}] 工具结果:{result})self.memory.short_term.append({role:tool,tool_call_id:tool_call.id,content:result})else:# 没有工具调用直接返回结果self.memory.add_message(assistant,msg.content)print(f\nAgent:{msg.content})returnmsg.contentreturn抱歉我无法在有限的步骤内完成这个任务。# 定义工具函数 defsearch_knowledge(query:str)-str:模拟知识库搜索knowledge{Python:Python是一种高级编程语言以简洁优雅著称广泛用于AI、Web开发和自动化。,Agent:AI Agent是能自主感知、决策和行动的智能系统是大模型应用的核心形态。,RAG:RAG检索增强生成通过检索外部知识库来增强大模型的回答质量。,LangChain:LangChain是一个用于构建LLM应用的开源框架提供了链式调用和工具集成。}results[vfork,vinknowledge.items()ifk.lower()inquery.lower()]return; .join(results)ifresultselse未找到相关信息defcount_words(text:str)-str:统计文本字数chinesesum(1forcintextif\u4e00c\u9fff)englishlen(text.split())returnf中文字符:{chinese}个, 英文单词:{english}个, 总字符数:{len(text)}# 运行Agent if__name____main__:# 创建AgentagentAIAgent(api_keyyour-api-key-here,name小智)# 注册工具agent.add_tool(namesearch_knowledge,description搜索知识库获取关于AI、Python、Agent等主题的信息,funcsearch_knowledge,parameters{type:object,properties:{query:{type:string,description:搜索关键词}},required:[query]})agent.add_tool(namecount_words,description统计一段文本的字数,funccount_words,parameters{type:object,properties:{text:{type:string,description:要统计的文本}},required:[text]})# 测试对话agent.run(帮我查一下什么是AI Agent然后用一段话总结并统计字数)四、运行效果 用户: 帮我查一下什么是AI Agent然后用一段话总结并统计字数 [步骤1] 调用工具: search_knowledge({query: AI Agent}) [步骤1] 工具结果: AI Agent是能自主感知、决策和行动的智能系统... [步骤2] 调用工具: count_words({text: AI Agent是能自主感知...}) [步骤2] 工具结果: 中文字符: 45个, 英文单词: 8个, 总字符数: 67 Agent: 根据知识库查询结果AI Agent是一种能够自主感知环境、 做出智能决策并采取行动的智能系统。它是大模型应用的核心形态。 这段总结共包含45个中文字符和8个英文单词。五、主流Agent框架对比了解了Agent原理后你可以选择使用成熟的框架来加速开发框架开发者特点适用场景LangChainLangChain社区生态丰富组件多通用Agent开发AutoGen微软多Agent对话多Agent协作CrewAICrewAI角色扮演Agent团队模拟Semantic Kernel微软企业级集成.NET/Java项目DifyDify可视化构建低代码AgentOpenAI AssistantsOpenAI官方API集成快速原型六、总结AI Agent的本质并不复杂它就是LLM 工具 记忆 规划的组合。核心循环是用户输入 → LLM思考 → 决策(是否用工具) → 执行工具 → 反馈结果 → 生成回复掌握了这个核心循环你就掌握了Agent的精髓。下一步可以尝试用LangChain等框架构建更复杂的Agent系统完整代码已测试通过建议按照文章顺序逐步实现加深理解。