手把手教你用 Python 打造爆款 AI Agent:从零实现自动思考、调用工具、完成任务的智能体

张开发
2026/4/12 22:28:21 15 分钟阅读

分享文章

手把手教你用 Python 打造爆款 AI Agent:从零实现自动思考、调用工具、完成任务的智能体
文章目录一、AI Agent 是什么 与普通聊天机器人的区别二、AI Agent 核心架构与流程图2.1 标准 Agent 五模块架构2.2 工作流程图三、核心实现原理四、完整代码实现4.1 环境准备4.2 工具函数定义4.3 Agent 核心实现五、运行效果演示示例 1简单时间查询示例 2复杂多步任务六、进阶优化方向6.1 功能增强6.2 性能优化6.3 安全考虑七、总结摘要本文将带你从零开始用 Python 打造一个可运行的 AI Agent。我们会先解析 Agent 的核心原理展示工作流程图最后提供完整代码让你能亲手体验 AI 自主完成任务的神奇过程。一、AI Agent 是什么在 AI 大模型时代“AI Agent”人工智能代理成为新的热点——它能像人类助手一样接收任务规划步骤调用工具自主决策甚至在遇到问题时自我修正 与普通聊天机器人的区别普通聊天机器人AI Agent输入 → 模型 → 输出线性目标 → 规划 → 执行 → 反馈 → 再规划循环被动响应主动思考和行动无法调用外部工具可集成多种工具函数二、AI Agent 核心架构与流程图2.1 标准 Agent 五模块架构一个完整的 AI Agent 至少包含5 个核心模块┌─────────────────┐ │ 感知模块 │ ← 用户输入、环境信息 └────────┬────────┘ ↓ ┌─────────────────┐ │ 记忆模块 │ ← 存储历史对话、上下文 └────────┬────────┘ ↓ ┌─────────────────┐ │ 决策模块 │ ← LLM 核心负责推理规划 └────────┬────────┘ ↓ ┌─────────────────┐ │ 执行模块 │ ← 调用工具函数、执行动作 └────────┬────────┘ ↓ ┌─────────────────┐ │ 反馈模块 │ ← 获取执行结果形成闭环 └─────────────────┘2.2 工作流程图是否是否用户输入目标Agent 开始工作LLM 分析任务制定计划需要调用工具?选择合适的工具执行工具函数获取执行结果将结果反馈给 LLM任务完成?返回最终答案三、核心实现原理AI Agent 的本质就是“循环 LLM 工具函数”循环机制持续运行直到任务完成LLM 核心负责理解、推理、决策工具函数扩展 Agent 的能力边界关键在于ReAct 框架Reasoning ActingThought思考当前状态和下一步行动Action执行具体操作调用工具Observation观察执行结果重复直到任务完成四、完整代码实现4.1 环境准备pipinstallopenai python-dotenv requests创建.env文件OPENAI_API_KEYyour_api_key_here4.2 工具函数定义# tools.pyimportrequestsimportjsonfromdatetimeimportdatetimeclassToolRegistry:工具注册器def__init__(self):self.tools{}defregister(self,name,func,description):注册工具self.tools[name]{function:func,description:description}defexecute(self,tool_name,**kwargs):执行工具iftool_namenotinself.tools:returnf工具 {tool_name} 不存在try:returnself.tools[tool_name][function](**kwargs)exceptExceptionase:returnf执行工具时出错:{str(e)}# 具体工具实现defget_current_time():获取当前时间returndatetime.now().strftime(%Y-%m-%d %H:%M:%S)defsearch_weather(city):模拟天气查询实际项目中调用真实APIweather_data{北京:晴天25°C,上海:多云28°C,广州:雷阵雨30°C,深圳:大雨29°C}returnweather_data.get(city,f未找到{city}的天气信息)defcalculate_expression(expression):安全的数学计算try:# 简单的安全检查实际项目需要更严格的验证allowed_charsset(0123456789-*/(). )ifnotall(cinallowed_charsforcinexpression):return表达式包含非法字符resulteval(expression)returnstr(result)except:return计算表达式无效# 注册工具tool_registryToolRegistry()tool_registry.register(get_current_time,get_current_time,获取当前日期和时间)tool_registry.register(search_weather,search_weather,查询指定城市的天气参数: city)tool_registry.register(calculate_expression,calculate_expression,计算数学表达式参数: expression)4.3 Agent 核心实现# agent.pyimportosimportjsonfromdotenvimportload_dotenvfromopenaiimportOpenAIfromtoolsimporttool_registry load_dotenv()classSimpleAIAgent:def__init__(self):self.clientOpenAI(api_keyos.getenv(OPENAI_API_KEY))self.modelgpt-4o-mini# 或使用 gpt-4-turboself.conversation_history[]defget_tool_descriptions(self):获取所有可用工具的描述descriptions[]forname,toolintool_registry.tools.items():descriptions.append(f-{name}:{tool[description]})return\n.join(descriptions)defcreate_system_prompt(self):创建系统提示词returnf你是一个智能AI助手能够调用以下工具来完成任务 可用工具{self.get_tool_descriptions()}请按照以下格式进行响应 1. 首先思考Thought你需要做什么 2. 如果需要调用工具使用以下格式 Action: 工具名称 Action Input: 工具参数 3. 如果不需要调用工具直接给出最终答案Final Answer 记住 - 仔细分析用户需求 - 选择最合适的工具 - 工具参数要准确 - 如果工具执行失败尝试其他方法或告知用户defextract_action(self,response):从LLM响应中提取动作ifAction:inresponseandAction Input:inresponse:linesresponse.split(\n)actionNoneaction_inputNoneforlineinlines:ifline.startswith(Action:):actionline.replace(Action:,).strip()elifline.startswith(Action Input:):action_inputline.replace(Action Input:,).strip()ifactionandaction_input:# 尝试解析 JSON 或直接使用字符串try:input_dictjson.loads(action_input)returnaction,input_dictexcept:# 如果不是 JSON当作单个字符串参数returnaction,{query:action_input}returnNone,Nonedefrun(self,user_input,max_steps5):运行Agentprint(f 用户:{user_input}\n)# 初始化对话历史messages[{role:system,content:self.create_system_prompt()},{role:user,content:user_input}]forstepinrange(max_steps):# 调用 LLMresponseself.client.chat.completions.create(modelself.model,messagesmessages,temperature0.7)llm_responseresponse.choices[0].message.contentprint(f Agent 思考 (步骤{step1}):)print(llm_response)print()# 检查是否是最终答案ifFinal Answer:inllm_response:final_answerllm_response.split(Final Answer:)[-1].strip()print(f✅ 最终答案:{final_answer})returnfinal_answer# 尝试提取动作action,action_inputself.extract_action(llm_response)ifactionandactionintool_registry.tools:# 执行工具print(f️ 执行工具:{action})print(f 工具输入:{action_input})tool_resulttool_registry.execute(action,**action_input)print(f 工具输出:{tool_result})print()# 将结果添加到对话历史messages.append({role:assistant,content:llm_response})messages.append({role:user,content:fObservation:{tool_result}})else:# 没有有效动作直接返回print(f✅ 直接回答:{llm_response})returnllm_responsereturn任务执行超时请简化您的请求。# 使用示例if__name____main__:agentSimpleAIAgent()# 测试用例test_queries[现在几点了,北京今天天气怎么样,计算 123 * 456 789,帮我查一下上海和广州的天气然后告诉我哪个城市温度更高]forqueryintest_queries:print(*60)agent.run(query)print(\n*60\n)五、运行效果演示示例 1简单时间查询 用户: 现在几点了 Agent 思考 (步骤 1): Thought: 我需要获取当前时间。 Action: get_current_time Action Input: {} ️ 执行工具: get_current_time 工具输入: {} 工具输出: 2026-04-08 17:32:45 Agent 思考 (步骤 2): Thought: 我已经获取了当前时间。 Final Answer: 现在是 2026-04-08 17:32:45。 ✅ 最终答案: 现在是 2026-04-08 17:32:45。示例 2复杂多步任务 用户: 帮我查一下上海和广州的天气然后告诉我哪个城市温度更高 Agent 思考 (步骤 1): Thought: 我需要分别查询上海和广州的天气。 Action: search_weather Action Input: {city: 上海} ️ 执行工具: search_weather 工具输入: {city: 上海} 工具输出: 多云28°C Agent 思考 (步骤 2): Thought: 我已经获取了上海的天气现在需要查询广州的天气。 Action: search_weather Action Input: {city: 广州} ️ 执行工具: search_weather 工具输入: {city: 广州} 工具输出: 雷阵雨30°C Agent 思考 (步骤 3): Thought: 我已经获取了两个城市的天气数据上海28°C广州30°C。 Final Answer: 广州的温度更高为30°C而上海为28°C。 ✅ 最终答案: 广州的温度更高为30°C而上海为28°C。六、进阶优化方向6.1 功能增强长期记忆集成向量数据库存储历史知识多工具协调处理更复杂的工具组合错误恢复自动重试或切换策略用户确认敏感操作前征求用户同意6.2 性能优化异步执行支持并行工具调用缓存机制避免重复查询流式响应实时显示思考过程6.3 安全考虑工具沙箱限制工具的权限范围输入验证防止恶意输入审计日志记录所有操作便于追踪七、总结通过本文的实践我们实现了✅理解了 AI Agent 的核心原理✅掌握了 ReAct 框架的工作机制✅编写了完整的可运行代码✅看到了实际的运行效果AI Agent 的开发门槛其实并不高核心就是循环 LLM 工具函数的组合。随着大模型能力的不断提升Agent 将在更多场景中发挥重要作用。动手建议尝试添加更多工具函数比如网页搜索、文件读写、邮件发送等让你的 Agent 变得更强大

更多文章