100行Python代码,搭一个能干活的AI Agent
100行Python代码搭一个能干活的AI Agent原文首发于点这里查看跟大模型聊天人人都会但你有没有想过——为什么ChatGPT能帮你订餐、查航班、写代码而你调用API只会一问一答差别就两个字Agent。大模型是大脑但没手没脚没记忆。你问它北京天气怎么样它只会说我无法访问实时数据。Agent就是给大脑装上四肢、记忆和执行力——让它自己判断该用什么工具执行完再思考下一步。听起来很复杂其实核心就一个公式Agent LLM大脑 Tools双手 Memory记忆 Loop循环今天用100行Python代码把这四个模块从零搭一遍。不依赖任何框架跑完你就明白Agent到底是怎么回事。00 环境准备pipinstallopenai用OpenAI SDK兼容DeepSeek、智谱等国产API改个base_url就行。这篇用DeepSeek做demo——便宜而且支持按量付费。你需要去https://platform.deepseek.com/注册拿一个API Key。01 LLM调用 —— 给Agent装个大脑第一块拼图能跟大模型对话。fromopenaiimportOpenAIfromdotenvimportload_dotenvimportos load_dotenv()clientOpenAI(# api_keyyour-api-key, # 换成你的DeepSeek API Keyapi_keyos.getenv(DEEPSEEK_API_KEY),# 或使用env方式存储apikeybase_urlhttps://api.deepseek.com)defask_llm(messages,toolsNone):responseclient.chat.completions.create(modeldeepseek-v4-flash,messagesmessages,toolstools,tool_choiceauto,)returnresponse.choices[0].message resask_llm([{role:user,content:你好}])print(res)这段代码本身没什么特别的就是标准的API调用。但注意tools这个参数——这是Agent和普通聊天的核心分界线。不传tools模型只能聊天。传了tools模型就知道我还有这些工具可以用在需要的时候会主动要求调用。tool_choiceauto的意思是让模型自己判断这个问题我直接答还是得用工具⚠️ 踩坑提示 DeepSeek的deepseek-chat模型已废弃对应deepseek-v4-flash模型中的非思考模式02 工具定义 —— 给Agent装双手工具就是普通的Python函数外加一份给LLM看的说明书。defcalculator(expression:str)-str:try:returnstr(eval(expression))except:return计算错误defget_weather(city:str)-str:mock{北京:晴 25℃,上海:多云 28℃,深圳:雷阵雨 30℃}returnmock.get(city,f暂无{city}天气数据)TOOLS[{type:function,function:{name:calculator,description:执行数学计算输入数学表达式,parameters:{type:object,properties:{expression:{type:string,description:数学表达式如 23*4}},required:[expression]}}},{type:function,function:{name:get_weather,description:查询指定城市的天气,parameters:{type:object,properties:{city:{type:string,description:城市名称}},required:[city]}}}]TOOL_MAP{calculator:calculator,get_weather:get_weather}这里有个关键认知LLM****不直接执行代码。它只做一件事——输出一段JSON告诉你我想调用calculator工具参数是123 * 456 789。真正执行计算的是你的代码。LLM的角色更像一个调度员决定调用什么工具、传什么参数但脏活累活都是你的程序干。description字段很重要写得越清晰模型调用越准确。模型是靠读这个描述来理解工具用途的——你说执行数学计算它就知道算术题该找这个工具。03 记忆 —— 让Agent记住上下文classMemory:def__init__(self):self.messages[]defadd(self,role,content,**kwargs):msg{role:role,content:content}msg.update(kwargs)self.messages.append(msg)defget_messages(self):returnself.messages.copy()就这就这么简单。很多人觉得Agent的记忆很高深其实本质就是维护一个messages列表。每次调用LLM时把完整的对话历史传过去——LLM本身没有状态所谓的记住上下文就是每轮都把历史消息全部塞进请求里。这也解释了为什么聊天越长API费用越高——因为每次请求都带着之前所有的对话。04 Agent循环 —— 让Agent会思考这是整个Agent的心脏。核心思路叫ReAct****模式思考→行动→观察→重复直到任务完成。defrun_agent(user_input,max_steps10):memoryMemory()memory.add(system,你是一个有用的助手可以调用工具回答问题。)memory.add(user,user_input)forstepinrange(max_steps):print(f\n--- 第{step1}步 ---)responseask_llm(memory.get_messages(),toolsTOOLS)ifnotresponse.tool_calls:print(fAgent回答{response.content})returnresponse.content memory.add(assistant,response.contentor,tool_callsresponse.tool_calls)fortool_callinresponse.tool_calls:nametool_call.function.name argsjson.loads(tool_call.function.arguments)print(f调用工具{name}({args}))resultTOOL_MAP[name](**args)print(f工具返回{result})memory.add(tool,result,tool_call_idtool_call.id)return达到最大步数Agent停止拆解这个循环思考把对话历史和工具列表发给LLMLLM决定下一步干什么判断如果LLM没有请求调用工具说明它觉得可以直接回答了循环结束行动LLM说我要查北京天气你的代码就执行get_weather(北京)观察把工具执行结果塞回messages让LLM看到结果重复LLM拿到结果后再思考可能还需要调别的工具也可能可以直接回答了max_steps是安全阀防止Agent陷入死循环。实际使用中10步足够处理大部分任务。跑起来看效果# 测试1简单计算run_agent(帮我算一下 123 * 456 789)输出两步完成第一步调计算器第二步直接回答。# 测试2多步骤任务run_agent(北京和上海哪个温度高并帮我算一下高多少)输出Silas说写完这100行代码最大的感受是Agent一点都不神秘。网上铺天盖地的Agent框架——LangChain、AutoGen、CrewAI——把这件事包装得很复杂。但你把核心扒开看就是一个while循环LLM决定调什么工具你的代码执行结果传回去循环直到完成。框架做的事无非是帮你把这个循环封装好再加上一些工程化的东西重试、超时、日志。我的建议先手写一遍再用框架。不是框架不好是你不理解原理直接用框架出了问题完全不知道怎么排查。你不知道tool_calls的格式长什么样不知道messages里每条消息的role有什么讲究调试的时候就是两眼一抹黑。还有一点别急着给Agent加复杂的Planning和Multi-Agent协作。先把这个最小闭环跑通加一个你自己业务场景需要的工具比如查数据库、调内部API让它真正干一件有用的事。能稳定跑一周再考虑扩展。Agent的价值不在于架构多精巧在于它能不能稳定地把一件事干好。跑通代码后可以试试这些扩展方向换个工具把get_weather换成查数据库、调内部API、发邮件——只要是个Python函数就能当工具加RAG给Agent接一个知识库让它能查文档回答问题多Agent协作多个Agent分工合作比如一个负责搜索、一个负责写作试试框架理解原理后再用LangChain或CrewAI你会发现它们其实就是帮你封装了这套循环完整代码我已经整理好了复制就能跑。你给Agent加了什么有意思的工具评论区聊聊。觉得有用的话转给也在折腾AI的朋友。关注我持续分享AI实操和踩坑记录。 最小AI Agent实现 —— 100行代码搞定 Agent LLM Tools Memory Loop fromopenaiimportOpenAIimportjsonfromdotenvimportload_dotenvimportos load_dotenv()# 1. LLM调用大脑clientOpenAI(# api_keyyour-api-key, # 换成你的DeepSeek API Keyapi_keyos.getenv(DEEPSEEK_API_KEY),# 或使用env方式存储apikeybase_urlhttps://api.deepseek.com)defask_llm(messages,toolsNone):responseclient.chat.completions.create(modeldeepseek-v4-flash,messagesmessages,toolstools,tool_choiceauto,)returnresponse.choices[0].message# 2. 工具定义双手defcalculator(expression:str)-str:try:returnstr(eval(expression))except:return计算错误defget_weather(city:str)-str:mock{北京:晴 25℃,上海:多云 28℃,深圳:雷阵雨 30℃}returnmock.get(city,f暂无{city}天气数据)TOOLS[{type:function,function:{name:calculator,description:执行数学计算输入数学表达式,parameters:{type:object,properties:{expression:{type:string,description:数学表达式如 23*4}},required:[expression]}}},{type:function,function:{name:get_weather,description:查询指定城市的天气,parameters:{type:object,properties:{city:{type:string,description:城市名称}},required:[city]}}}]TOOL_MAP{calculator:calculator,get_weather:get_weather}# 3. 记忆对话历史classMemory:def__init__(self):self.messages[]defadd(self,role,content,**kwargs):msg{role:role,content:content}msg.update(kwargs)self.messages.append(msg)defget_messages(self):returnself.messages.copy()# 4. Agent循环心脏defrun_agent(user_input,max_steps10):memoryMemory()memory.add(system,你是一个有用的助手可以调用工具回答问题。)memory.add(user,user_input)forstepinrange(max_steps):print(f\n--- 第{step1}步 ---)responseask_llm(memory.get_messages(),toolsTOOLS)ifnotresponse.tool_calls:print(fAgent回答{response.content})returnresponse.content memory.add(assistant,response.contentor,tool_callsresponse.tool_calls)fortool_callinresponse.tool_calls:nametool_call.function.name argsjson.loads(tool_call.function.arguments)print(f调用工具{name}({args}))resultTOOL_MAP[name](**args)print(f工具返回{result})memory.add(tool,result,tool_call_idtool_call.id)return达到最大步数Agent停止# 5. 测试 if__name____main__:run_agent(北京和上海哪个温度高并帮我算一下高多少)THE ENDRAG知识库搭建大揭秘原来这么简单还能这么有趣大模型到底怎么思考一篇看懂 Prompt、思维链、思维树Python数据分析入门从零开始玩转数据简明教程实现OpenCLaw轻量级应用服务器部署及Ollama大模型本地化DifyOllama模型搭建攻略本地环境实战指南

相关新闻

数学建模论文写作指南:从结构框架到核心模块的完整解析

数学建模论文写作指南:从结构框架到核心模块的完整解析

1. 项目概述:一份让数学建模“小白”也能上手的论文写作指南 如果你是一名刚接触数学建模的大学生,或者是一位需要快速完成建模任务但苦于论文无从下手的职场新人,看到“史上最棒”、“让小白也能写论文”这样的标题,是不是瞬间感…

2026/9/17 17:28:26 阅读更多 →
G-Helper 免费替代奥创全攻略:5 分钟完成安装,轻松掌控华硕笔记本性能与风扇

G-Helper 免费替代奥创全攻略:5 分钟完成安装,轻松掌控华硕笔记本性能与风扇

G-Helper 免费替代奥创全攻略:5 分钟完成安装,轻松掌控华硕笔记本性能与风扇 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Sca…

2026/9/18 9:57:12 阅读更多 →
IntelliJ IDEA内存占用过高?JVM调优与性能优化全攻略

IntelliJ IDEA内存占用过高?JVM调优与性能优化全攻略

1. 问题定位:你的IDEA为什么“吃”内存?如果你是一名Java或全栈开发者,IntelliJ IDEA(以下简称IDEA)大概率是你的主力武器。但用久了,你可能会发现它变得越来越“臃肿”,启动慢、编辑卡顿、甚至…

2026/9/18 2:27:23 阅读更多 →

最新新闻

KC 60227-1标准解析:韩国KC认证与PVC电缆关键

KC 60227-1标准解析:韩国KC认证与PVC电缆关键

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/21 2:46:31 阅读更多 →
ccusage Droid 适配器深度解析:从 Factory Droid 会话文件到用量报告

ccusage Droid 适配器深度解析:从 Factory Droid 会话文件到用量报告

ccusage Droid 适配器深度解析:从 Factory Droid 会话文件到用量报告 【免费下载链接】ccusage npx ccusage 项目地址: https://gitcode.com/gh_mirrors/cc/ccusage 本指南以 ccusage-adapter-droid(位于 rust/adapters/droid/README.md&#xff…

2026/9/21 2:46:31 阅读更多 →
CANN ops-math 中 aclnnPowTensorTensor 与 aclnnInplacePowTensorTensor 两段式接口完全指南

CANN ops-math 中 aclnnPowTensorTensor 与 aclnnInplacePowTensorTensor 两段式接口完全指南

算子库人工智能CANN 【免费下载链接】ops-math 本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。 项目地址: https://gitcode.com/cann/ops-math 点击查看 免费下载 本文是 CANN/ops-math 仓库中 Pow 数学算子的实战指南,…

2026/9/21 2:46:31 阅读更多 →
电视直播程序源码分析:从ZIP到运行的完整实战指南

电视直播程序源码分析:从ZIP到运行的完整实战指南

简介:一份面向ASP初学者与直播类网站开发者的电视直播程序完整源代码包,涵盖前台播放、后台管理、用户与广告等模块,可帮助读者理解动态站点前后台协作逻辑,并快速搭建可运行的电视直播示例。压缩包共76个文件,以asp动…

2026/9/21 2:46:31 阅读更多 →
深入解析HWiNFO64:从传感器数据到硬件健康监测的完整指南

深入解析HWiNFO64:从传感器数据到硬件健康监测的完整指南

简介:HWiNFO64 v6.32.4270 是一款面向 64 位 Windows 系统的专业硬件信息检测与性能测试工具,适合普通用户、装机维护人员与硬件爱好者快速查看整机配置、确认硬件状态。它能够显示处理器、主板、芯片组、PCMCIA 接口、BIOS 版本、内存等核心硬件信息&am…

2026/9/21 2:46:31 阅读更多 →
FPGA动态部分重配置(DFX)原理与工程实践指南

FPGA动态部分重配置(DFX)原理与工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/21 2:45:31 阅读更多 →

日新闻

agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程

agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程

agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程 【免费下载链接】agentic-awesome-skills AAS Core is the local, agent-first control plane for complete catalog discovery, agent-owned selection, stack validation, and …

2026/9/21 0:00:01 阅读更多 →
gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析

gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析

gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析 【免费下载链接】gin-vue-admin 🚀ViteVue3Gin拥有AI辅助的基础开发平台,企业级业务AI开发解决方案,内置mcp辅助服务,内置skills管理,…

2026/9/21 0:00:01 阅读更多 →
Wox 全功能插件开发实战指南:基于 Python / Node.js 宿主与 WebSocket 的持久化插件体系

Wox 全功能插件开发实战指南:基于 Python / Node.js 宿主与 WebSocket 的持久化插件体系

桌面应用AI 应用插件系统 【免费下载链接】Wox A cross-platform launcher that simply works 项目地址: https://gitcode.com/gh_mirrors/wo/Wox 点击查看 免费下载 全功能插件(Full-featured Plugin)是 Wox 三类插件实现方式中能力最完整的…

2026/9/21 0:00:01 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/20 0:00:46 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/21 2:19:36 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/20 0:00:46 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/19 23:01:36 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/19 17:50:38 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/19 23:35:34 阅读更多 →