当前位置: 首页 > news >正文

2026年AI Agent实战(一):用200行Python从零搭建一个能自主完成任务的智能体

本文是AI Agent实战系列的第一篇。我们将从零开始,用Python实现一个基于ReAct框架的智能体,它能自主思考、调用工具、完成任务。全文含完整可运行代码,约3500字。


目录

  • 一、什么是AI Agent
  • 二、ReAct框架:思考-行动-观察循环
  • 三、核心架构设计
  • 四、从零实现:完整代码
  • 五、运行效果演示
  • 六、局限性讨论
  • 总结

一、什么是AI Agent

普通的AI对话是这样的:你问一个问题,AI回答一个答案。一问一答,AI不会主动做任何事情。

AI Agent的区别在于:它能自主规划和执行多步骤任务

举个例子:

普通AI对话: 用户:今天北京天气怎么样? AI:我无法获取实时天气数据,建议你查看天气应用。 AI Agent: 用户:今天北京天气怎么样? Agent思考:我需要调用天气API获取北京的天气数据 Agent行动:调用get_weather("北京") Agent观察:{"temp": 28, "condition": "晴", "humidity": 45} Agent回答:北京今天晴天,气温28°C,湿度45%,适合出行。

关键区别:Agent有工具使用能力自主决策能力

需要说明的是,Agent不是万能的。它受限于工具的能力和大模型的推理水平。本文实现的是一个基础但完整的Agent框架,后续文章会逐步增强能力。


二、ReAct框架:思考-行动-观察循环

ReAct(Reasoning + Acting)是目前最主流的Agent框架,核心思路很简单:

循环 { Thought(思考):分析当前状态,决定下一步 Action(行动):调用一个工具 Observation(观察):获取工具返回结果 } 直到任务完成

为什么这个框架有效?因为它模拟了人类解决问题的过程:

  1. 你先想想要做什么(Thought)
  2. 你去做某个动作(Action)
  3. 你看结果怎么样(Observation)
  4. 基于结果继续思考下一步

与纯推理的区别

方式特点适用场景
纯推理(CoT)只思考不行动数学题、逻辑分析
纯行动只执行不思考简单脚本
ReAct思考+行动结合需要外部信息的复杂任务

三、核心架构设计

我们的Agent由4个核心组件构成:

┌─────────────────────────────────┐ │ Agent Core │ │ ┌───────────┐ ┌─────────────┐ │ │ │ Planner │ │ Executor │ │ │ │ (思考规划) │ │ (执行动作) │ │ │ └───────────┘ └─────────────┘ │ │ ┌───────────┐ ┌─────────────┐ │ │ │ Memory │ │ Tools │ │ │ │ (记忆存储) │ │ (工具集) │ │ │ └───────────┘ └─────────────┘ │ └─────────────────────────────────┘
  • Planner:调用大模型进行推理,生成Thought和Action
  • Executor:执行工具调用,返回Observation
  • Memory:保存对话历史和中间结果
  • Tools:可供调用的工具集合

四、从零实现:完整代码

4.1 定义工具基类

# tools/base.pyfromabcimportABC,abstractmethodfromtypingimportAnyclassTool(ABC):"""工具基类,所有工具必须实现name、description和run方法"""@property@abstractmethoddefname(self)->str:"""工具名称,Agent通过名称调用"""...@property@abstractmethoddefdescription(self)->str:"""工具描述,告诉Agent什么时候该用这个工具"""...@abstractmethoddefrun(self,**kwargs)->str:"""执行工具,返回字符串结果"""...defget_prompt(self)->str:"""生成工具描述供大模型理解"""returnf"-{self.name}:{self.description}"

4.2 实现具体工具

# tools/calculator.pyfromtools.baseimportToolimportmathclassCalculatorTool(Tool):"""计算器工具:执行数学运算"""@propertydefname(self)->str:return"calculator"@propertydefdescription(self)->str:return"执行数学计算。输入一个数学表达式(如 '2+3*4'),返回计算结果。"defrun(self,expression:str="",**kwargs)->str:try:allowed=set("0123456789+-*/.() ")ifnotall(cinallowedforcinexpression):return"错误:表达式包含不允许的字符"result=eval(expression,{"__builtins__":{}},{"math":math})returnf"{expression}={result}"exceptExceptionase:returnf"计算错误:{e}"classWeatherTool(Tool):"""天气工具:模拟天气查询(实际项目中替换为真实API)"""@propertydefname(self)->str:return"get_weather"@propertydefdescription(self)->str:return"查询指定城市的天气。输入城市名称,返回天气信息。"defrun(self,city:str="",**kwargs)->str:mock_data={"北京":"晴天,28°C,湿度45%","上海":"多云,25°C,湿度60%","深圳":"阵雨,30°C,湿度75%",}returnmock_data.get(city,f"未找到{city}的天气数据")classSearchTool(Tool):"""搜索工具:模拟搜索(实际项目中替换为真实搜索API)"""@propertydefname(self)->str:return"search"@propertydefdescription(self)->str:return"搜索互联网信息。输入搜索关键词,返回相关结果摘要。"defrun(self,query:str="",**kwargs)->str:returnf"[模拟搜索结果] 关于'{query}'的信息"

4.3 Agent核心实现

# agent.pyfromopenaiimportOpenAIfromdotenvimportload_dotenvfromtypingimportOptionalimportre load_dotenv()classReActAgent:"""基于ReAct框架的AI Agent"""def__init__(self,tools:list,model:str="deepseek-chat",max_steps:int=5):self.tools={tool.name:toolfortoolintools}self.model=model self.max_steps=max_steps self.client=OpenAI()tools_desc="\n".join(tool.get_prompt()fortoolintools)self.system_prompt=f"""你是一个AI智能体,能够通过思考和调用工具来完成任务。 可用工具:{tools_desc}请严格按照以下格式回复: Thought: 分析当前情况,决定下一步行动 Action: tool_name(query) 当你认为已经获得足够信息时: Thought: 我已经获得了足够的信息 Answer: 你的最终回答 注意: - 每次只调用一个工具 - 仔细分析观察结果后再决定下一步 - 不要编造工具返回的数据"""self.conversation=[]def_parse_action(self,response:str)->Optional[tuple]:match=re.search(r'Action:\s*(\w+)\(([^)]*)\)',response)ifmatch:returnmatch.group(1),match.group(2).strip().strip('"').strip("'")returnNonedef_is_final_answer(self,response:str)->Optional[str]:match=re.search(r'Answer:\s*(.+)',response,re.DOTALL)returnmatch.group(1).strip()ifmatchelseNonedefrun(self,task:str)->str:self.conversation=[{"role":"system","content":self.system_prompt},{"role":"user","content":task},]forstepinrange(self.max_steps):response=self.client.chat.completions.create(model=self.model,messages=self.conversation,temperature=0.3,max_tokens=1000,)reply=response.choices[0].message.content final_answer=self._is_final_answer(reply)iffinal_answer:returnfinal_answer action=self._parse_action(reply)ifnotaction:self.conversation.append({"role":"assistant","content":reply})self.conversation.append({"role":"user","content":"请使用Thought和Action格式继续。"})continuetool_name,argument=action tool=self.tools.get(tool_name)observation=tool.run(query=argument)iftoolelsef"工具'{tool_name}'不存在"self.conversation.append({"role":"assistant","content":reply})self.conversation.append({"role":"user","content":f"Observation:{observation}"})return"达到最大步数限制,任务未完成。"if__name__=="__main__":fromtools.calculatorimportCalculatorTool,WeatherTool,SearchTool agent=ReActAgent(tools=[CalculatorTool(),WeatherTool(),SearchTool()],max_steps=5,)result=agent.run("北京今天天气怎么样?如果出去玩需要带伞吗?")print(f"最终结果:{result}")

五、运行效果演示

执行上面的代码,你会看到类似这样的输出:

============================================================ 任务: 北京今天天气怎么样?如果出去玩需要带伞吗? ============================================================ --- 步骤 1 --- 模型回复: Thought: 用户想知道北京的天气情况,我需要调用天气查询工具 Action: get_weather(北京) 工具调用: get_weather(北京) 观察结果: 晴天,28°C,湿度45% --- 步骤 2 --- 模型回复: Thought: 已经获取到北京天气数据,晴天28°C,不需要带伞 Answer: 北京今天是晴天,气温28°C,湿度45%。天气很好, 不需要带伞,可以放心出门!建议做好防晒。 最终答案: 北京今天是晴天,气温28°C,湿度45%。天气很好, 不需要带伞,可以放心出门!建议做好防晒。

关键观察

  1. 第一步:Agent正确选择了天气工具
  2. 第二步:基于观察结果(晴天),给出了合理的回答
  3. 自主决策:没有人工指定先查天气再分析,Agent自己规划了步骤

六、局限性讨论

老实说,这个基础Agent有不少限制:

  1. 工具调用解析依赖正则:如果模型输出格式不规范就会失败。生产环境建议用Function Calling API
  2. 没有长期记忆:每次对话都是独立的,不记得上次交互
  3. 错误处理简单:工具失败时缺乏重试和恢复机制
  4. 单工具调用:每步只能调用一个工具,复杂任务效率不高
  5. 成本不可控:没有token计数和预算限制

这些问题会在本系列后续文章中逐步解决。


总结

本文实现了一个基于ReAct框架的AI Agent,核心要素:

  1. Thought-Action-Observation循环:Agent的核心运行模式
  2. 工具抽象:统一的工具接口,方便扩展
  3. 对话历史管理:通过messages维护上下文

代码量不到200行,但包含了Agent的核心要素。理解这个基础框架比直接用LangChain等框架更有价值——因为你知道底层在做什么。

下一篇《AI Agent实战(二):给智能体加上工具使用和记忆能力》将实现Function Calling集成和持久化记忆系统。


本文由AI辅助整理,经作者亲自验证和编辑。代码在Python 3.12 + DeepSeek API环境下测试通过。如有问题欢迎评论区交流。

最后更新:2026年5月

http://www.jsqmd.com/news/749152/

相关文章:

  • Firecrawl技能实战:OpenClaw网页抓取与结构化数据提取指南
  • Claude IDE工具集:让AI编程助手从代码生成到自主执行
  • 【小沐学WebGIS】基于Cesium.JS与jsbsim联动三维飞行仿真(OpenGL、Cesium.js、Three.js)
  • Semtech LR2021 LoRa Plus芯片的多协议兼容与低功耗设计解析
  • py每日spider案例之某湖bei工ye大学登录接口逆向(rsa算法 难度一般)
  • 使用Nodejs构建服务端应用并接入Taotoken大模型API
  • MCP服务器开发调试利器:mcp-doctor工具详解与实战指南
  • 直接序列扩频技术原理与PSoC实现详解
  • 多模态对话系统中的记忆压缩与策略内化技术
  • PETS框架:动态优化机器学习模型自一致性测试
  • 构建生产级AI智能体:从原型到高可用的工程化实战指南
  • AI应用-用代码调用大模型
  • 2026年纸杯供货商标杆名录:纸杯批发厂家/纸杯源头厂家/纸杯生产厂家/纸杯生产商/纸杯企业/纸杯优质厂家/纸杯公司推荐/选择指南 - 优质品牌商家
  • 5分钟掌握1Fichier下载管理器:轻松突破下载限制的终极解决方案
  • 2026年集团电话交换机专业厂家TOP5名录:餐厅茶楼对讲机/IP电话交换机/北峰对讲机/好攀宜佳对讲机/宝锋对讲机/选择指南 - 优质品牌商家
  • 刀片服务器高可用架构与Carrier Grade Linux核心技术解析
  • 【maaath】Flutter for OpenHarmony 短信管理应用实战
  • 模块化神经图像处理框架:医疗与工业检测的AI解决方案
  • 5步搭建Sunshine游戏串流服务器:从零构建个人云游戏平台的完整方案
  • 深度对话应用框架deep-chat:快速构建AI聊天界面的开源利器
  • Betaflight Configurator:无人机飞控配置的终极解决方案
  • CPPM与SCMP证书详情对比(到底该怎么选) - 众智商学院课程中心
  • 能源点对点交易程序,颠覆电网垄断,家庭余电直接卖给邻居,链上自动结算。
  • 主动边坡防护网GAR2型技术拆解:西南主动边坡防护网厂家、边坡防护网厂家推荐、边坡防护网哪家好、主动边坡防护网推荐选择指南 - 优质品牌商家
  • 无人机群5D感知技术:毫米波通信与雷达融合创新
  • PartNeXt:3D部件理解与层级化标注技术解析
  • 如何在Photoshop中一键生成AI图像?SD-PPP插件完整使用指南
  • 从‘过河拆桥’到‘踩着石头过河’:深入聊聊迁移学习里的负迁移与领域自适应
  • 使用 curl 命令直接测试 Taotoken 的聊天补全接口
  • LangGraph构建数据分析智能体:从工作流编排到生产级实践