ARTICLE · 1005690
(02)智能体时代软件工程师的自救:拆开 Agent 这只麻雀
(02)智能体时代软件工程师的自救:拆开 Agent 这只麻雀智能体时代软件工程师的自救第 02 篇 音频速读 拆开 Agent 这只麻雀——我抄了段几十行的代码,让机器第一次“自己知道下一步干啥” 上回说到,我被阿杰那十分钟照了回镜子,从"砌墙的"开始往"看风水的"挪((01)智能体时代软件工程师的自救:当砌墙不再值钱)。那篇是惊雷,这篇该下雨了——我打算真动手,拆一只Agent的麻雀,给你看它肚子里到底有几根骨头。 动手之前,得先交代清楚我那个"第一次"。 那天下午,我跟阿杰学完prompt,回来手痒。他说周哥你别把它想太高深,就是"把话说清楚"。我嘴上应着,心里不服:把话说清楚谁不会?我写了十二年需求文档。可转念一想,不对——我说的"清楚",是写给"人"看的;Agent 要的"清楚",是写给"机器自己下一步"看的。这两件事,差着一个"自主"的距离。 我决定不靠低代码平台,自己从零写一只最小的Agent。不为炫技,就为弄明白一件事:机器到底是怎么"自己知道下一步干啥"的。 这件事不搞懂,前面那篇全是感慨,落不了地。 我坐下来,打开编辑器,先写了一个最土的问题:"北京今天天气咋样。" 然后我让它,自己决定:要不要查、查哪个工具、查完说啥。不是我写死"如果问天气就调 get_weather",是让它自己走到那一步。 几十行代码跑起来那一刻,终端打印出:"Agent:北京今天晴,26度,西风3级。记下了,免得你再问。" 我盯着那行字,后背有点发热——不是因为代码多难,是因为那行字背后,机器第一次没等我下令,自己想了"该查天气→该调工具→该记一下"。 那一刻,我十二年的认知被轻轻撬了一下。原来"自主行动"不是科幻,是几十行代码就能摸到的边。 我把终端转给阿杰看。他凑近,眼睛瞪圆:周哥,这你自个儿写的?我说不然呢,你以为我只会学prompt。他挠头:我以为你顶多调调平台,没想到你连循环都自己撸了。我那一刻的得意,比当年上线支付系统还实——不是因为代码多牛,是因为我终于不是"被照镜子的人",是"举镜子的人"了。 小满正好端着杯子路过,瞥了眼屏幕:哟,这小东西能自己查天气还记着?我说对,刚跑通。她眼睛一亮:那你给我也整一个,我要它每天提醒我"用户会不会觉得温暖",暖了就发句人话。我乐:你这需求,得等后面几篇攒齐骨头才镇得住。她撇嘴:周哥你现在说话都带术语了。 你看,同一个玩具,三个人三种反应:阿杰惊讶"你竟会写",小满想要"给我干活",我自己在意"它第一次自己走了下一步"。这恰恰对应 Agent 的三个层次——有人还在看热闹(会写代码),有人只想用(要结果),有人得懂骨子里怎么转(看风水)。这篇,就是带你到第三层。 下面我把这只麻雀,一根骨头一根骨头拆给你看。 01 动手前,我犹豫了半天 跟阿杰聊完那天,我没立刻动手。我盯着编辑器,犹豫了小半天。 不是不会,是犯嘀咕:我一个写CRUD 十二年的老伙计,折腾这新玩意儿,算不算赶时髦?万一拆完发现就是个噱头呢?又想,当年学微服务、学容器、学云原生,哪回不是这心态——先质疑,再上手,上手了才发现门道不在表面。我最后给自己定了条:先当它是真东西,认真拆,拆完自有判断。结论不重要,这态度重要——你别先信也别先否,上手拆了再说。 这半天犹豫,后来救了我。因为我是"带着审视"进的代码,不是"带着崇拜"。所以后面看到 Agent 翻车(幻觉、循环、误发),我没幻灭,反而乐:翻车才说明我摸到真骨头了——玩具是不会翻车的,会翻车的才是活物。 我劝你也这样:别被"Agent 颠覆世界"的标题吓到去All in,也别被"都是噱头"的冷笑劝退。亲手拆一只,让事实替你下结论。那晚我最终敲下第一行def brain,窗外天已黑透。媳妇喊吃饭,我说等会儿,这东西我得先拆明白。她翻个白眼:又跟代码过不去。我没反驳——因为我知道,这回不是跟代码过不去,是跟自己的慌过不去。拆明白,就不慌了。 这篇就是你跟着我拆的过程。拆完你自会知道,哪句hype 该信,哪句该笑。 02 反过来说:什么时候别用Agent 五根骨头讲完,得泼盆冷水——不是啥都该 Agent 化。我给你三种情况,别上 Agent: 一是任务极简单且固定。 比如"每天八点拉个数发邮件",十行脚本稳稳搞定。你套个 Agent 上去,反而是杀鸡用牛刀——多耗 token、多出错概率、还多一层"它咋想的"你还得查。确定的事,用确定的代码。 二是任务容不得半点错且没法验证。 比如"直接改生产库的一批数据"。Agent 的"自主"在这种场景下是纯风险——它万一自作主张改错了,你拦都拦不住。老老实实写死逻辑 + 人工复核,比让它"灵活处理"靠谱一万倍。 三是你连需求都没想清。 Agent 是放大器:清楚的事它加速,糊涂的事它把你糊涂放大十倍。你自个儿还说不清"要啥",别指望它替你想。先想清,再谈自动化。 记住一句:Agent 留给"模糊、多步、要自主"的活;十行脚本能稳稳解决的,别请它。这不仅是技术判断,更是后面成本篇的底层逻辑——不是越智能越该用,是"值不值"才该用。我见过团队啥都 Agent 化,结果每月烧几万 token 干本来 cron 五块钱能干的活,纯属烧着玩。 03 第一次跑,它像个瘫子 别被前面"几十行跑通"的轻松骗了。真实情况是,我第一版跑起来,它像个瘫子——你问"北京天气",它回"这事我还没学会"。 我盯了半天。毛病出在笨地方:我的brain 函数要读 memory,可我在循环里压根没把 memory 传进去。函数在自己那层空转,记忆永远是空的,自然啥也不会。改了一行,把 memory 传进去了,它才"活"过来。 这破事让我笑自己:写了十二年代码,还会栽在"状态没传"这种幼儿园错误上。但也正是这破事,让我摸到了 Agent 最要命的一点——循环里的状态,必须一路带着走。 感知要带、规划要带、记忆更要带。你少传一样,它就瘫一样。大模型本身是无状态的(上篇说过),它自己记不住上句话。所以"带状态"这活,全得你这循环替它扛。 后来我想,人其实也一样。你跟人聊天,对方突然问"你刚说啥来着",你会烦——因为人自带记忆,默认带着状态。大模型不自带,得你喂。Agent 这套循环,本质就是"替无状态的大脑,把状态一路抱着走"。抱着走顺了,它才像活物;抱着摔了,它就瘫。 所以别小看那行"把 memory 传进去"。那是 Agent 的脊椎。脊椎断了,脑子再好使也站不起来。 04 先立公式:Agent 到底比大模型多了啥 我上篇说过,大模型是"无状态的概率文本生成器"——你给它一句话,它押出一段最像样的回答,然后就忘了。它聪明,但它是"瘫"着的:不会主动看环境,不会自己定计划,不会调工具,更不会在多步任务里保持连贯。 Agent 干的,就是把这个"瘫"着的大脑,扶起来,装上四肢、记性、和一股"自己琢磨"的劲。 业界有个特朴素的公式,我抄在笔记本扉页: Agent = 大模型(认知核心)+ 规划(Planning)+ 记忆(Memory)+ 工具(Tools)+ 行动循环(Action Loop) 这五个词,就是麻雀的五根主骨。大模型是脑子,规划是"想清楚再动手",记忆是"别像个金鱼",工具是"手脚",行动循环是把前四个串成一个圈、转起来。 你注意,大模型只是五分之一。可我们平时一提AI,满脑子都是大模型。这就好比一提汽车就只想着发动机——发动机重要,但没轮子、没方向盘、没油箱,它连停车场都出不去。Agent 就是那台完整的车。 我当初的误区也在这:以为"会用大模型"就等于"会做 Agent"。错了。大模型是原料,Agent 是拿原料做出来的活物。原料再好,不组装,它还是瘫的。 我后来想通一个更深的道理:为什么"五分之一的脑子",能撑起一整个活物?因为另外五分之四,是"让脑子有用的 surroundings"。这跟人一样——一个人再聪明,关在黑屋子里啥也不是;给他眼睛(感知)、手脚(工具)、记性(记忆)、和一股"自己琢磨"的劲(规划+反思),他才活成个人。我十二年写代码,本质上就是在当那个"黑屋子外的手":大脑(产品经理/架构师)想好了,我负责把想法变成能跑的。现在 Agent 把这"手"也内置了,大脑自己就能伸胳膊伸腿。这下我那个"手"的位置,得往更外面挪——挪到"决定让这具身体往哪走"。又是看风水。 所以别小看这公式。它不只是一张架构图,是告诉你:Agent 的难,不在脑子(大模型现成的),在 surrounding 那四根骨头怎么接、怎么调、怎么不让它抽风。后面每篇,拆一根。今天先总览,再逐根摸。 为什么偏偏是这五根,不是四根也不是六根 你准琢磨过:这公式谁拍的脑袋,凭啥是这五样?我琢磨完,觉得它不是随便列的,是照着"一个活物要能干成事"的最小配置来的。 你想,一个东西要"自主完成任务",最少得有哪些本事?它得能想(规划),得能动手(工具),得记得住(记忆),得知道自己错没错(反思),还得有个中枢做决定(大模型)。五样,少一样就残。 少规划,它就成了"接到啥干啥"的木偶,复杂活直接懵。少工具,它就是个嘴炮,永远摸不到真实世界。少记忆,它每轮都像失忆,重复劳动还容易前后矛盾。少反思,它一条错路走到黑,精致地犯蠢。少大模型,它连"想"的原材料都没有。 那为啥不多几根?比如"情感""创意"?因为那些是"加分项",不是"能不能干活"的底线。一个没有情感的 Agent,照样能查天气、筛告警、写报告——只是冷了点。所以五根是"底线配置",不是"天花板"。真要做成人形伴侣、做创意生成,你再加骨头,那是上层建筑,根还是这五根。 这给了我一个踏实感:学Agent,不用被花活晃花眼。万变不离这五根。你抓住底线,上面怎么长都认得。这跟我学架构一个理——底层范式就那几个,花哨框架都是它们的皮。看风水的人,先看地脉(五根),再看房梁(框架),次序不能反。 我甚至觉得,这五根对应着人干活最底层的五种本事:想(谋)、做(手)、记(经验)、省(复盘)、断(决断)。Agent 把人的这些本事,拆成了可组装的机制。所以理解 Agent,某种意义上是在理解"人到底靠啥把事做成"。这层觉悟,比学会写代码值钱——因为它让你看清自己的活法,也看清机器在学哪种活法。 05 拆第一根骨:认知核心(大模型),但得换个看法 先说脑子。这部分上篇提过,但这篇得换个角度看——因为你要写 Agent,得明白"该让脑子管什么,不该让脑子管什么"。 大模型在Agent 里只干三件事: 它不干的事,你得替它想好:它不负责"记住上次聊啥"(记忆归记忆系统),不负责"真去查数据库"(工具归工具层),不负责"结果对不对"(反思归反思层)。 我刚写Agent 时犯过一个典型的错:啥都扔给大模型。我问它"北京天气咋样,顺便记一下",它真给我回了一段"好的,北京今天晴,我已为您记录"——可它根本没调工具,也没真记,它只是在"演"一个查过的样子。这就是幻觉:它押了一段"最符合对话预期"的话,而不是"真干了"的话。 还有一回更离谱。我让它"查下广州天气,顺便说说适不适合晾晒"。它回:"广州今天晴,26度,适合晾晒。" 我一看,晴是它编的——我压根没让它真调工具,它自己顺嘴把"适合晾晒"也编了出来,因为"晴天+晾晒"在语料里总是绑一块出现。它把推测当成了事实往外吐。 这两回让我立下写Agent 的第一条军规:凡是涉及真动作、真数据,绝不让大模型自说自话,必须走"它说要干、代码真干、结果喂回"的回路。脑子可以提议,但不能伪造。伪造一次,信任就崩,后面全歪。 这军规落地有个拧巴处:大模型太会演了,演得你以为它真干了。所以工程上一般这么办——把能不能调工具的控制权攥在代码手里。模型只能返回"我想调 get_weather(北京)"这种结构化指令,真正的函数调用由你的代码执行。它说了不算,你执行了才算。这一道闸,就是后面安全篇要讲的权限校验的雏形。今天你先记住:Agent 里,大模型是参谋,不是司令。 这一下点醒我:脑子不能又当裁判又当运动员。Agent 的设计铁律是——让大模型"说"要干啥,但让代码"真"去干,再把结果喂回去。 大模型负责"决定",代码负责"执行",各管一摊。这套分工,后面每根骨头都要用到。 06 拆第二根骨:工具层,给脑子装上手脚 工具层是Agent 从"聊天"变"干活"的关键。没有工具,大模型永远是个嘴炮;有了工具,它能真去摸世界。 工具说白了,就是一个个函数:查天气的、查数据库的、发邮件的、读文件的。每个工具得有个"说明书"——告诉 Agent 这工具干啥用、要啥参数、返回啥。大模型读说明书,决定调不调、怎么调。 我那只迷你Agent,第一个工具就是查天气: 就这么简单。关键不在函数多难写,在于你"敢把世界交给它摸"。我后来给 Agent 加工具,加得越来越放肆:查日志的、读配置的、发钉钉的。每加一个,它就多一只手。但每加一只手,我就多一根缰绳——这是后话,安全那篇细讲。 说个真事给你提个醒。我第一次给Agent 加"发钉钉"工具时,得意忘形,没给它限范围。我测试问:"告诉大家我做好天气 Agent 了。" 它忠实地、把这条消息发到了公司大群——三百号人当场看见。我手机一震,群里领导回了句"?"。我脸瞬间红到耳根,赶紧撤回(还好能撤),私聊解释是测试。那天我学到工具层的第一课:工具越能"动手",越得给它画好"手能伸到哪"。 发消息这种不可逆操作,必须限定接收人、最好加一道人工确认。这跟 article 1 里我定的"缰绳规矩"是一个理——凡是不可逆,手得在键盘上。 所以工具层不是"能接多少接多少",是"接得住、管得严"。我现在的工具清单,每个都带一张"身份证":能干啥、要啥参数、谁来用、动不动生产。这张身份证,既是给大模型看的说明书,也是给我自己看的安全绳。你以后写 Agent,这张身份证比代码还重要。 扯回MCP。它要解决的,就是把"写适配代码"这步也省了。工具提供方按 MCP 标准暴露能力,你的 Agent 按标准接入,即插即用。我想象了一下将来:厂里陈工那台机床要是也能按 MCP 暴露"查振动、读温度"的接口,我的 Agent 就能直接摸机床的"风水"——不用陈工天天去听。那画面,挺带劲。 小满的"温暖 Agent",卡在哪根骨头 小满没忘她那茬。隔两天又来:周哥,你那麻雀跑通了,我的"温暖 Agent"啥时候整?我说你别急,我先跟你讲它卡哪。 我拿五根骨头给她过:查天气那套,脑子、工具、规划、记忆、反思都齐了,所以顺。你的"温暖",问题在于——它卡在"感知"这根上,而且是你给我的感知就糊。 她不服:我不要它查天气,我要它让用户觉得暖。我说对,可"暖"不是天气那种"查一下就有"的事实,它是一种"得先有人定义、机器才量得出来"的东西。我那天气 Agent,感知极清楚:句子里有没有"天气"、哪个城市,一眼提取。你的"暖",句子里没字段可提——它得先懂"暖=客诉降、复购涨、语气软"这些翻译,才动得了手。 她恍然:所以不是Agent 不行,是我没把"暖"翻译成它能吃的?我说 precisely。这恰恰说明:工具、规划那些骨头,我都能很快给你接上;真正难的是最前面那根"感知"——把你的糊涂话,翻译成机器嚼得动的任务。这根骨头我下篇专攻。 她走的时候嘟囔:敢情难的不是让机器动手,是让我自己先想清楚要啥。我冲她背影喊:你这句,够格写进下篇开头。 你看,一个"温暖"的需求,把五根骨头的轻重试出来了:动手的(工具)、想事的(规划)好补;最难的是最前面"想清楚要啥"的感知,和最里面"定标准"的判断。这两根,机器替不了,得你这个看风水的来。这也预告了后面两篇的主角:感知篇、和贯穿始终的"判断"。 这里有个特别重要的协议叫MCP(Model Context Protocol),是 Anthropic 提的,专门干一件事:把"工具怎么接"标准化。过去你每接一个工具,就得给每个 Agent 框架写一遍适配代码,累死。MCP 让工具像 USB 接口,插上就能用。我现在看 MCP,就像当年看 RESTful API——它不性感,但它让生态转起来。这玩意儿你先知道有这号东西,后面接工具那篇会重点拆。 07 拆第三根骨:规划,让机器"想清楚再动手" 规划是Agent 最像"人"的一根骨头。面对"帮我看看上周哪些服务不对劲,写个报告"这种活,大模型不会一上来就瞎干,它会先拆:先拉日志、再统计、再判断、再写报告。这一步步,就是规划。 主流规划有三招,我给你说人话: 我那只天气Agent 用的就是最朴素的 ReAct:用户问→想"该查天气"→调工具→看结果→想"该记一下"→回话。一个小循环,五脏俱全。 这三招你别死记,我给你三个生活镜头,一辈子忘不了: 你发现没,这三种规划,我十二年干活早就在用,只是没名字。Agent 把"人脑子里那点谋略",变成了可以写进循环的机制。区别是:我的谋略靠经验,它的谋略靠每次调用大模型现想——所以它特别依赖记忆(下一根骨头),不然每轮都像刚睡醒,谋略从头来。 我给你个实用建议:新手先拿ReAct 练手,它透明好调,错了能看见哪步歪;等任务复杂、步骤多,再上 Plan-and-Execute 省时间;真遇到"选错就完蛋"的决策,才请 Tree of Thoughts 出马。别一上来就堆最复杂的,杀鸡用牛刀,刀还容易崩。 规划这根骨头,跟我上篇说的"谋定后动"是一个理。我十二年写代码,最值钱的也是"先想清楚再写";Agent 把这套内化成了循环。区别是,我的"想"在脑子里,它的"想"在每次调用大模型时重生一次——所以它特别依赖记忆,不然每轮都像刚睡醒。这就引出下一根骨头。 08 拆第四根骨:记忆,别让机器当金鱼 记忆系统,是Agent 从"一次性对话"变成"长期搭档"的分水岭。 我上篇借陈工的话埋了伏笔:他每周听机床,是把"往事"记着比。Agent 的记忆也一样,得记。 记忆分几类: 写入有讲究:全量写太占地方,摘要写可能丢细节,选择性写(只存高分信息)最划算。检索也一样,不能只靠语义相似,得语义+关键词+时间混合,再重排,才找得准。 我那只Agent 的记忆特简陋,就一个 list 存"查过的城市"。但就是这一行,让它第二次被问"北京天气还记得不"时,能直接答"记得,晴26度",而不是又去查一遍。那一下的"我记得你",是它第一次有点"搭档"的意思,而不是"一次性工具"。 但记忆这骨头,偷懒就要栽。我有回故意让它记了"北京晴",过了一会儿北京真变雷阵雨了,数据库更新了,可记忆里还躺着那条旧的"晴"。我再问"北京带伞不",它从记忆掏出旧答案:"晴,不用带。" 结果我信了,出门淋成落汤鸡。这叫"陈旧记忆坑死人"——Agent 记得太死,忘了世界在变。 这事儿让我给记忆加了"新鲜度":存的时候盖个时间戳,取的时候先看是不是过期。过期的,宁可重新查,也不信旧账。我又去找陈工显摆:你那机床记忆,我能给 Agent 做成"带时间戳的听觉档案"。他听了直摇头:你记是记,可别记死了。去年这时候响,今年这时候响,未必一个毛病。老经验认新病,最害人。我一想,对——记忆不是越多越好,是"该信的才信,该疑的得疑"。这就是重要性衰减和过期清理的来由:陈工凭本能做的,Agent 得靠机制做。 所以记忆系统最忌两样:一是记太少(金鱼,重复劳动);二是记太死(老黄历,误导判断)。好的记忆,像陈工那本记满又常翻的笔记——记着,但每次都拿当下的声音校对一眼。这"校对",其实就是后面要讲的"反思"。你看,五根骨头根根勾连,拆开讲是为了你懂,真用起来是一体的。 陈工听我讲完,甩给我一个土比喻 我把五根骨头讲给陈工听,本想显摆。他听罢,吐口烟:你这玩意儿,不就是"带脑子的徒弟"吗? 我愣了下,越品越对。你想,一个好徒弟啥样?师傅教过的事(记忆),到现场自己掂量(感知),想好步骤再动手(规划),真去拧螺丝(工具),拧错了知道重来(反思),最后活干漂亮(输出)。Agent 这五根骨头,跟好徒弟的本事一一对上。区别是:真徒弟会长大、会跳槽;Agent 的"长大"靠你喂数据,"忠诚"靠你写配置。 陈工这比喻,一下把我从"高大上技术"拽回"人间常识"。原来 Agent 不是啥新物种,是人类几千年"带徒弟"这事的机器版。我们带徒弟,不就是希望他"自己知道下一步干啥"吗?Agent 把这愿望,用代码实现了。 他接着补一刀,更绝:你带徒弟,最怕两种。一种"不动脑",你不说他不动(这就是加壳,没规划没自主);一种"乱动脑",没看清就上手,拧错还嘴硬(这就是没反思没记忆)。你那 Agent,得往"好徒弟"方向养——既敢自己走,又肯认错、记得住教训。这养法,跟我带小伙计一个理。 我服了。陈工不懂一行代码,但"带出好徒弟"这件事,他门儿清。我拿他这比喻回头一照,前面所有骨头都活了:记忆=徒弟记笔记,规划=徒弟想步骤,工具=徒弟的手,反思=徒弟复盘,大模型=徒弟那点聪明劲。五根骨头,合起来就是一个"能自主干活、还肯学乖的徒弟"。 这下我踏实了。Agent 再玄,底色是"带人"的老智慧。我十二年是"被带"和"带人"过来的,这底色我熟。所谓学 Agent,不过是把"带徒弟"的经验,翻译成"装系统"的工序。看风水的人,本就是好师傅——懂地脉,也懂怎么带出看得懂地脉的徒弟。 遗忘也得有。人类记忆会淡,Agent 也得有 TTL(过期)、重要性衰减、容量上限。不然记一堆垃圾,反而干扰判断。我后来给记忆加了条规矩:超过七天的天气记录自动清。陈工要是懂,得说"跟我每周清一次机床灰一个理"。 09 拆第五根骨:行动循环,把前四根串成一圈 五根骨头单独摆着都没用,得串起来转。这就是行动循环:感知→规划→记忆→执行→反思→输出,一圈一圈,直到活干完。 我给你看我那只迷你Agent 的真身。为了让你"抄回去就能跑",大脑部分我用规则模拟(真实场景换成大模型的函数调用即可),但循环结构是真的: 跑出来是这样: 你盯着第三轮看——它没重新查,它从记忆里掏出来了。我顺手给你逐行拆一遍那只brain 函数,免得你抄完还懵: 你看,一个几十行函数,把五根骨头都演了一遍。理解这只"伪大脑"特别关键:你将来换成真大模型时,不过是把它干的"想"(感知意图、决定调哪个工具、判断结果)那步,交给模型;"执行、记忆"那几步,还是你的代码。分工不变,只是"想"的那步更聪明了。所以别被"换成真模型"吓住——骨架你已摸透,换的只是脑子。 这就是"感知→规划→执行→反思→记忆→输出"那一圈,在几十行里转了一遍。 真实场景里,brain 这个函数会被换成一次大模型调用。你把所有工具说明书、用户问题、历史记忆一股脑喂给模型,它返回一段带"我想调 get_weather(北京)"的结构化指令,你的代码真去执行,把结果喂回去,模型再决定下一步。循环一样,只是"想"的那步交给大模型了。 我给你看"真大脑"长啥样。下面是一个函数调用(function calling)骨架,逻辑是真的,API 名你按手里的模型换(GPT、Claude、通义、DeepSeek 都支持): 你看这个循环:模型返回toolcalls(想调工具)→ 你的代码执行 getweather → 把结果以 role:"tool" 喂回去 → 模型再生成最终回答。这就是 ReAct 在真实大模型上的样子。我那只迷你 Agent 的 brain 函数,本质上干的就是"模拟这一来一回"——只是把模型的智能换成了几条规则,方便你没 API key 也能跑通、看清结构。 记住一句话:Agent 的循环,永远是"模型提议、代码执行、结果回填"三轮转。 模型再聪明,也只在"提议"那半圈;"执行"那半圈,永远攥在你代码手里。这半圈,就是你的缰绳,也是你的价值。 10 那一刻:机器第一次"自己知道下一步" 说回我那个"第一次"。 代码刚跑通时,我没觉得多神。直到我改了问题,问它:"北京天气咋样,记一下,明早提醒我带伞如果下雨。" 它卡了一下——因为我这伪大脑没写"提醒"工具。它老老实实回:"提醒这事我还没学会,但天气我记了:北京晴,不用带伞。" 我没笑它笨,我背后一凉。你看它干的事:听懂了"记一下"(触发记忆)、判断了"提醒不会"(反思+诚实)、给出了"不用带伞"的建议(基于天气推理)。它没有等我一步步下令"先查、再存、再判断",它自己把这几步串了。虽然笨,但那股"自己往下一步走"的劲,是真的。 我突然懂了上篇埋的那句话——"看风水的人,先看懂这块地"。Agent 的"自主",本质上就是它自己去看"下一步该干啥",而不是等我去写死每一步。我十二年写的代码,绝大多数是"写死下一步";Agent 第一次让我看到,"下一步"可以交给循环自己去生。 这股劲,才是Agent 和"调个大模型 API"最根本的区别。后者是我推一下它动一下;前者是它自己转。 这股"自己转"的劲,让我联想到人。一个人长大的标志,不就是从"等指令"到"自己知道下一步"吗?小时候爸妈说"该写作业了"才写,后来自己知道"该写了";刚工作等领导派活,后来自己看活儿在哪。Agent 这"自己转",其实是把"成熟"那一步,写进了系统。 我自己的转折也在这:过去我等需求、等排期,写代码像接活儿;现在我开始自己定"要什么结果、边界在哪、出错了谁兜"——这不就是 Agent 的"自主"在我身上重演吗?陈工更绝,他听机床不用等谁下令,自己就去了。看风水的人,本就该自己拿主意,而不是等别人递图纸。 所以这篇拆的不是一只机器麻雀,是一种"活法"的雏形:让系统(和你)从"被推着走"变成"自己迈腿"。这劲头一旦上来,就回不去了——你也再不想回去当那个只等指令的砌墙匠。 11 真Agent 和"加壳",差在哪根骨头 上篇我们用了一招认"加壳"。这篇拆完骨头,你能看得更准了。 加壳货,通常只有"脑子+一张嘴",顶多接一两个写死的按钮。它不会规划(你问超出预设的,它就懵),没有记忆(你换个说法它就不认账),不会反思(错了也嘴硬)。我上篇那个 vendor 的"智能运维 Agent",就是典型——它把几个固定查询包了层聊天皮,你问"CPU 高是不是上游限流",它答"请联系运维",因为它根本没有"自己决定下一步查啥"的规划骨。 真Agent,五根骨头得齐:有脑子(大模型)、有手脚(工具)、会想(规划)、记得住(记忆)、肯认错(反思)。缺一根,就只是个聪明点的按钮。 你拿这把尺子去量市面上的东西,十有八九会露怯。这不是唱衰,是帮你别被"Agent"这词忽悠。再给你个例子,省得你被话术带跑。前阵子另一个团队秀"智能客服 Agent",我问"你们退款政策第几条说七天无理由",它秒回"根据官网政策,支持七天无理由退款"。听着对,但我让它"把那条原文贴出来",它卡壳了,扯了半天说"具体条款以官网为准"。这就露了——它根本没去查条款库,是拿语料里"七天无理由"的常识在糊弄。真 Agent 会先调"查政策"工具,把原文捞出来再答。辨别口诀就一句:凡结论,让它"拿出证据"。拿不出的,八成是演的。 你拿这五根骨头当尺,买东西、选工具、甚至面别人做的Agent,都好使。我给你列个口头自检,不用表格,你念一遍就懂: 五样里缺三样以上,基本是加壳;缺一两样,算半成品,能练;五样齐,才敢叫真Agent。你拿这尺子量市面九成"智能体",会发现大半卡在"会想"和"肯认错"两根上——这正是后面规划篇和反思篇要专攻的硬骨头。 也帮你自己定位:你学Agent,不是学"调个 API",是学"怎么把这五根骨头按场景组装起来"——这恰恰是你的"看风水"功夫,机器替不了。 12 一个能落地的场景:给运维当"初筛搭档" 光玩具不够,得说个真用得上的。 我们运维每天睁眼,几百条告警。大部分是噪音:某服务CPU 抖一下、某机器内存涨一点。真要命的,藏在里头。过去大刘他们人工扫,累。 我拿Agent 的思路,给他搭了个"初筛搭档":告警进来→Agent 感知(分类:网络/存储/应用)→规划(先聚合同类,再查历史同时段)→调工具(查日志、查监控)→反思(这波动正常吗?跟上周比异常吗?)→输出(给大刘一份"今天其实就三件事"的简报,附建议)。 有价值的不在"它能查"(这些 API 我早能写),在"它会自己决定先看啥、再查啥、最后说啥"。大刘从"扫几百条"变成"看三件事",效率翻几倍。但他拍板"重启不重启"的那一下,还是他的——缰绳没松。 这场景你换个行业照样成立:给销售当"客户初筛",给 HR 当"简历初筛",给老师当"作业初批"。Agent 不替代判断,它把"判断前要做的脏活"包了,把你托到"只看关键"的那层。这又是"看风水"——你不用亲自搬每块砖,你只看哪面墙歪。 一周后,我反过来教阿杰 一周后,阿杰反过来找我。他憋了半天:周哥,你那只Agent 我能跑,但没懂它咋"自己知道下一步"。我说来,我给你讲骨。 我拿天气那例子,把五根骨头给他过一遍:脑子(大模型想)、手脚(get_weather)、想(ReAct 拆步)、记(memory)、认错(反思加诚实)。他听一半眼睛亮:原来你不是调个 API,是把一套"活法"装进去了。我说对,调 API 谁都会,装活法得懂骨。他挠头:那我之前十分钟那套,算啥?我说算"会说话的加壳"——快,但不自主。他乐:那我得跟你学装骨头。我说不急,先把这篇看懂。 这下角色反过来了。上回他教我prompt,这回我教他骨。我突然觉得,所谓"看风水",不只是自己会,是能讲清楚让别人也会。讲清楚的那刻,这手艺就真成你的了——跟陈工把听机床的本事讲给我听,一个理。所以我劝你,看完这篇,也试着给同事讲一遍五根骨头。讲得通,才是真懂;讲不通,回头再看。 读者自搭清单:一下午跑通一只 想自己搭一只?别贪大,照这六步走,一下午能跑通: 每一步跑通再进下一步,别跳。你搭完这只,再看市面任何Agent,都能一眼看穿它几根骨头齐了。这本领,比背十个概念都值钱——因为那是你亲手摸过的。 一个真实的集成坑,省你头发 说个我真踩过的坑。第一次接真实大模型,Agent 偶尔抽风,陷入死循环——不停地调 get_weather,停不下来。查了半天才明白:模型某次返回了"再查一次确认",我的循环没设上限,它就真的一直查。我加了条铁律:循环最多转五轮,超了强制收尾并说明"我没搞定"。 这叫"步数护栏",多 Agent 系统里更是保命——一个 Agent 卡住,能把整条链路拖死。 另一次,模型返回的toolcalls 里 city 是空的(它没从句子里抽出来),我的 `getweather(None)` 直接报错崩了。我加了参数校验:city 为空就反问"你没说哪个城市",不让它带着残缺参数往下冲。这类"模型输出不靠谱"的防护,是 Agent 工程的一半体力活——你越信它,越得防它。这也正是后面反思篇和安全篇的用武之地。你今天先种一棵苗:凡模型给的东西,默认不可信,先验再信。 13 本篇记住三句话 写到这,给你拧三句,带回去了: 一,Agent 不是"更聪明的大模型",是"大模型加规划加记忆加工具加循环"装成的活物。缺一根,它就还是瘫的。 二,大模型是参谋不是司令;"执行"那半圈永远攥在你代码手里,这既是缰绳,也是你的价值。 三,学Agent 是学"组装活法",不是学"调 API";五根骨头齐了,你才从看热闹的,变成看风水的。 脑子挑哪个:大模型也分三六九等 五根骨头里,脑子(大模型)不是"一个"就完事。我得跟你透个底:脑子也分三六九等,挑错了,要么贵得肉疼,要么蠢得误事。 这事儿现在就得有根弦,叫"模型路由":简单任务路由给小模型,复杂任务才请大模型。别一上来全用最贵的,那叫烧钱;也别全用最便宜的,那叫智障。这意识你现在种下,后面成本篇会放大成一门"算账"的学问——老板问"这玩意儿一个月烧多少"时,你靠这意识能省下一大半。 我给你个土标准:凡是"看得见的模式匹配"(抽字段、分类、翻译),小模型;凡是"要拐几个弯的推理"(为什么、怎么办、怎么排),大模型。拿不准,先小后大——小模型搞不定的,再升级。这跟用人一个理:复印找实习生,定战略找老将,不至于啥都请 CEO。 人与Agent 的边界感:兴奋和害怕,是同一件事 写这篇时,我琢磨出一个拧巴的感受,跟你交个底。 Agent 让我兴奋的,是它"自己走",省我事。让我害怕的,也是它"自己走",怕它走歪。你看,兴奋和害怕,根源是同一个——"它自主了"。 这感觉我熟。当年我刚带徒弟,他第一次独立搞定一个模块,我既欣慰(终于不用我盯)又紧张(他会不会捅娄子)。Agent 就是个不会长大的徒弟,这紧张感被放大了——因为它动的是真实系统、真钱、真数据。 怎么化解?我摸索出的答案是:别因怕就全攥手里,那Agent 就没意义;也别因懒就全撒手,那迟早出事。中庸在"关键处攥,繁琐处放"。可逆的、低利害的,放给它自己转;不可逆的、高利害的,手必须自己在键盘上。这分寸,就是贯穿全系列的"缰绳"二字。 你接受这种张力,就不慌了。Agent 不是来抢你权的,是来接你烦的活的;你腾出手,去管那几下真正要命的拍板。带徒弟带熟了的人,都懂这滋味:你不是被取代了,是被"升"了——从干活的,成了看活干得对不对的。 小满的温暖Agent,后来真落地了 应个早前的楔子。小满那"温暖 Agent",我后来真给她搭了个极简版,用的还是那五根骨头,只是把"温暖"翻译透了。 我俩把"温暖"钉成两样机器嚼得动的东西:一是"下单后发句人话而非系统通知",二是"每周客诉率监控,跌了就提醒该暖一下"。Agent 每周拉客诉率,跌了就给小满发:"本周客诉涨了,建议发句人话安抚,拟了一句你看看:"然后附一句它写的人话文案,小满改改就能发。 她收到第一版,乐了:周哥,这下我真有温暖Agent 了。我说你别谢 Agent,谢你自个儿——是你把"温暖"翻译成它懂的,它才镇得住。它不懂温暖,它只懂"客诉率跌→发提醒→拟文案"。温暖是你给的定义,它只是执行。 这事儿我特想强调:别神话Agent 懂人。它不懂。它只懂你翻译过去的清晰指令。所以"看风水"的第一课,永远是"你自己先想清楚"——想清楚了,机器是你的快马;想不清楚,机器是你的扩音器,把你糊涂放大十倍。下篇感知,专攻这"想清楚"的翻译术。 大刘的上线插曲,照见分工 说个上线的小插曲,你更能品出味。大刘头回用我这初筛搭档,半信半疑。第一天,Agent 把三百条告警聚成"三件事",他照着处理,提前两小时下班,乐了。第二天出幺蛾子:Agent 把一条"数据库主从延迟"归到了"网络波动"那类,大刘一眼瞅出不对——主从延迟是数据层,不是网络层,归错类会带偏处理方向。他来找我:你这搭档也会犯浑啊。 我没慌,反而高兴:你看,它犯的错,恰恰是你这种老手一眼能纠的。这说明分工对了——脏活它包了,关键的"归类对不对"留给了你。我顺手给 Agent 加了个"分类置信度":低置信度的归类,标黄交大刘确认,不自动进简报。这又是缰绳。大刘后来总结得精辟:它不是替我干活,是替我"把活儿铺平了递到我手边"。我说对,铺平这词好,看风水的人,要的就是别人把地铺平,自己只看风水往哪摆。 你看,从阿杰的十分钟,到我这只麻雀,再到大刘的初筛搭档,一条线串下来:工具替人搬砖,人往上挪到"看风水"。挪上去的人,不是更闲,是更值钱——因为最后那一下拍板,离了他还真不行。 换个行当再练一次:简历初筛Agent 光说运维不过瘾,再给你个HR 场景,练手用。 HR 小妹每天收几百份简历,要筛出"跟岗位匹配、没硬伤"的。过去她肉眼扫,慢且累。我给她搭了个简历初筛 Agent:投一份简历+岗位说明进去,Agent 感知(抽取候选人技能、年限、空窗)、规划(先匹配再风险扫描)、调工具(查学历库、算匹配分)、记忆(记这岗位的历史偏好)、反思(这人匹配但频繁跳槽,标黄提醒)、输出(一份"推荐/待定/淘汰+理由"的简报)。 核心代码骨架长这样(节选): 你看,同样的五根骨头,换个工具(查学历库代替查天气)、换份记忆(岗位偏好代替城市天气),就长出个新Agent。这就是"组装活法"的意思——骨头就那五根,你换肉(工具+场景)就换物种。小妹从"扫几百份"变成"看 Agent 标黄的十几份",剩下的精力去面人、去聊,那才是人该干的。 我特意让这Agent "标黄不淘汰"——频繁跳槽这种事,它只能提示风险,判不判死刑得小妹定。又是缰绳。你记住这个套路:Agent 出"带证据的建议",人做"带责任的决定"。 这分工,放哪个行当都灵。 Agent 失败模式大全,省你踩坑 拆了一堆好处,也得把丑话说前头。Agent 这活物,坏了有固定的几种死法。我给你列全,免得你线上挨雷: 你把这五种死法背熟,线上出事一眼能认。而且你会发现,五种的解法,正好对应后面几篇:反思篇治幻觉、规划篇治循环、工具/执行篇治误用越界、记忆篇治污染。这篇是地图,后面是逐格的导航。你先有地图,走起来不慌。 五根骨头,古人早拆明白了 写完上面这些,我忽发奇想:这五根骨头,古人其实早拆明白了,只是那时是人,现在是机器。 你品:大模型像军师,出主意但不上阵;工具像手脚、像跑腿的学徒,主公说干啥它干啥;规划像谋士的锦囊,遇事先想三步;记忆像史官,把过往一字不漏记着供你查证;反思像谏臣,专挑主公的错,宁肯惹厌也要说"这仗打错了"。Agent 这套,不就是把军师、学徒、谋士、史官、谏臣五种角色,塞进一个身子,让它们自己转起来吗? 我刚入行时读《三国演义》,总奇怪:为啥主公自己不干,要养这一班子人?后来懂了——一个人兼不了五种角色还都干好。聪明人当不好史官(嫌烦),史官当不好谏臣(怕得罪人)。分工,是人类把"成事"拆细的老智慧。Agent 不过是把这智慧,从"养一班人"变成"装一套机制"。 这联想让我踏实。原来我不是在学什么颠覆性新技术,是在学"怎么调度这五种角色"——而这调度,本质是当那个"主公",也就是看风水的人。你不用自己当军师、当史官,你只要懂:啥时该听军师(大模型)、啥时该信史官(记忆)、啥时该纳谏臣(反思)。这分寸,跟带团队一个理。 所以别被"Agent"这洋词唬住。剥开皮,它就是你爷爷辈的"主公+班子"那套,只是班子换成硅做的,转得更快。看风水的人,古今都一样:看清地脉,调好人马,坐镇中军。 给不同读者的分支用法 你未必是后端。我给你按岗位,标一下五根骨头里你该先练哪根,免得力气用错地方: 你看,五根骨头不是人均全练。各人按自己的老本事,找一根最贴的往深里扎,就能跟Agent 接上头。这才是现实路——不是让你重念一遍计算机本科,是让你拿现有本事,跟新工具接个榫。 一个端到端例子:从一句话到交付 光拆骨头太抽象,我拿一个真实会发生的需求,把五根骨头串成一次完整循环,你看着它怎么转: 需求:"帮我准备周一晨会的项目风险简报。" 你盯这一圈:一句话进,一份能用的简报出。中间没有我写一行业务逻辑——我只在"感知"时定了对齐(简报给老板看),在"反思"时定了规矩(依据不足标黄),在"工具"时定了权限(只许读不许改)。其余,它自己转。 这,就是Agent。不是神话,是把"主公+班子"装进循环,让一句话自己长成交付。你体会下这股劲——它第一次让我觉得,"写代码"这件事,真的可以退成"定规矩"。 陈工给Agent 挑的刺:它缺根"直觉骨" 过了几天我又找陈工,把五根骨头显摆完。他沉默半天,说:你这徒弟,有一样不如真人——它没"手感"。 我愣:啥手感?他说:真徒弟干多了,会"感觉不对",不用道理,身体先警。机床响那一下,我不用分析,耳朵先皱眉。你那 Agent,全靠你写规则、写记忆,它自己长不出这直觉。 我一时语塞,因为他说对了。Agent 目前最缺的,正是这根"直觉骨"——它擅长"见过类似的",不擅长"凭空觉出不对"。我那"连接池满先查慢查询",是踩坑长出来的身体记忆,不是哪条规则能写尽的。Agent 没踩过坑,就没这记忆,自然没这直觉。 陈工补刀:所以你别全信它。它没那根骨,你就得把自己的骨借给它——你那"觉得不对劲",就是它的补缺。我点头。这恰恰解释了我为啥从头到尾念叨"缰绳不能松":因为 Agent 缺的那根,正是我最值钱的那根(直觉/判断)。人和 Agent,恰好互补:它有脑有手能自主,我有直觉有判断能兜底。合起来,才像个完整的"看风水的"——一个敢自主、一个敢担责。 这对话给我钉了个桩:别神话Agent 能替代人。它替代的是"手和脑的重复劳动",替代不了"直觉和担责"。而这俩,正是看风水的核心。你把这两样攥紧,Agent 就是你的快马;松了,它就是脱缰的驴。 写给还在犹豫的你 如果你跟当初的我一样,犹豫要不要碰这玩意儿,我跟你说句实在的:你不需要"全懂了再动手",你只需要"今天抄段代码跑一遍"。跑通那下,恐惧就少一半;跑通后试着改一个工具、加一句记忆,恐惧又少一半。剩下的,跟着这系列一篇篇拆,自然就通。 最怕的是"等我闲了再学"。你永远不闲,而潮水不等人。我十二年前错过一回:那会儿容器刚起,我想"以后再说",结果后来补课时,早入门的同事已经成了团队里定架构的。这次我不打算再"以后再说"。 你也别。哪怕今天只做一件事:把篇尾那段天气Agent 的代码,抄进你编辑器,跑一遍。跑通了,你就不再是"听说 Agent 的人",是"摸过 Agent 骨头的人"——这一步,比看十篇干货都值钱。 同事用Agent 写 SQL,清空了测试库 再给你个惊魂的真事,不是我的,是隔壁组老胡的。 老胡信了Agent,让它"写个脚本清理测试库过期订单"。Agent 生成了DELETE FROM orders WHERE create_time < '2024-01-01'。老胡没看,直接跑——结果字段名不对,条件没生效,全表清空。还好是测试库,但那一瞬间的冷汗,他记一辈子。 这事的教训,正好收束全篇:老胡犯的,就是我反复说的"缰绳松了"。他让 Agent 写了"改数据"的不可逆操作,还没复核就执行。工具层那根骨头,最忌"自动动生产"。正确做法:凡 DELETE/UPDATE/DROP, Agent 只能"拟",人点"确认"才执行;而且执行前,代码强制加一道"影响行数预估",超过阈值直接拦下问人。 我后来帮老胡加了这道闸,他再让Agent 写 SQL,出来的都是"拟执行版+影响行数预估",他扫一眼确认才跑。他说这下踏实了:Agent 当参谋,他当司令,分工清楚,谁也不越位。 你看,从阿杰的十分钟,到我那只麻雀,到老胡的翻车——一条暗线串着:工具越能动手,缰绳越不能松。这缰绳,不是不信任 Agent,是信任它的"自主",但守住自己的"责任"。写这系列,我就想把这分寸,一层层拆给你。 顺带厘清:Agent 不是 RPA,也不是工作流 市面上还俩词老跟Agent 混:RPA 和工作流自动化。我给你一刀划清,省得你被概念绕晕。 一句话:RPA 和工作流是"你定死路,它走";Agent 是"你定目标,它找路"。 前者适合极固定、极重复的活;后者适合模糊、多步、要临场判断的活。别拿 RPA 当 Agent 吹,也别拿 Agent 干 RPA 的活(杀鸡用牛刀)。各归各的位,才不浪费。 五根骨头速查口诀,存手机里 给你拧一段能存手机便签的速查,读完这篇记不住别的,记住这段也够用: 七样,麻雀全身,也是你判断任何"智能体"的尺。下次谁跟你吹 Agent,你拿这七样量,缺三样以上,笑一笑就好。 闭环还有最后一段:输出 我通篇讲五根骨头,你若细看推文原图,会发现人家列的是"感知→规划→记忆→执行→反思→输出"六阶段。我说的五根,是把"执行"归到工具、把循环当串绳,那"输出"跑哪去了? 输出不是第六根独立骨头,是循环转完那一圈的"收口"——把满地碎片,拼成对方看得懂的样子。它极容易被忽略,却极要命:同样的活儿,给老板三句话(结论+风险+建议),给同事三十页(指标+根因+操作),给 API 调用方一段 JSON,给聊天框一段带图的话。同一份原料,按角色自适应拼盘,才是真交付。 我那只天气Agent,"输出"糙得很——只会一句"北京晴26度"。真实场景里,这一步最见"看风水"的功力:你知道对面是谁、要啥、怕啥,才拼得对他胃口。小满要"温暖"是输出,大刘要"三件事"是输出,老板要"决策建议"也是输出。Agent 能不能把活干到人心坎上,最后这道拼盘定生死。 这根骨头我单开一篇讲(系列里"输出层"那讲)。今天你先种个苗:别以为活干完就完了,"怎么说"和"干没干"一样重要。一个不会输出的 Agent,像匠人打了把好椅子却塞进仓库——活干了,没人用,等于白干。你以后写 Agent,最后这道拼盘,多花心思,值。 常被问:Agent 会取代程序员吗 写这系列,最多人甩我这句。我的答案就一句:它取代的是"只会写代码的手",取代不了"知道往哪使劲的脑"。 你回看这两篇拆的——工具层把"写"自动化了,可感知(想清要啥)、反思(校验对错)、判断(拍板)这三根,机器替不了,且越往后越值钱。一个能写代码的 Agent 满地跑,反而让"会定义问题、会验结果、会担责"的人稀缺。所以别问"会不会被取代",改问"我手里那根脑够不够硬"。够硬,Agent 是快马;不够,它先替你搬砖,再替你思考,那才真慌。 这问题太大,收官篇我会再收一刀。今天你先记住:慌不慌,不取决于Agent 多强,取决于你把自己活成了"手"还是"脑"。看风水的人,从来是脑。手会老,脑不老;砖会替,风水不会,地脉更不会。这话我十二年前该懂,现在才算真懂。 14 下篇预告:下一根,是"感知" 这篇把麻雀拆了,五根骨头你摸过了,还跑通了一只最小的。但你会发现,我那只Agent 的"感知"特糙——它只能认"北京/上海/广州"三个词,你换个说法"帝都今天咋样",它就懵。 真实需求哪有那么乖。"我要用户觉得温暖""帮我把这摊乱账理理",全是糊涂话。Agent 要是听不懂人话里的真意,后面规划全歪。 所以下一篇,我专攻第一根、也是最被低估的一根:感知。我会讲怎么把"温暖""理理"这种糊涂需求,翻译成 Agent 吃得下的结构化任务;讲多模态(图、声、表)怎么喂进去;讲为什么"听懂没说出口的话",才是看风水的真本事。篇名我都想好了:《感知:你以为在写代码,其实在读懂人心》。 临了,给你把五根骨头拧成一句好记的:脑子想(大模型)、手脚干(工具)、提前谋(规划)、用心记(记忆)、事后省(反思)。十个字,麻雀全身。你以后看任何Agent,拿这十个数,缺哪个一目了然。 我也得跟你交个底:这篇拆得再细,终究是"看骨架"。骨架立住了,肉(场景)和魂(判断)得你往里填。我写这系列,不是要你背下五根骨头去考试,是要你下次面对一个"智能体"时,不再被词忽悠,能蹲下来,像老师傅看机床那样,摸摸它的骨,说一句"嗯,这根齐,那根还缺"。那刻,你就不是看热闹的,是看风水的。 我关掉编辑器时,阿杰发来微信:周哥,我把你那只天气Agent 改成能查股票了。我回:挺好,记得给它上缰绳,别让它乱买。他回个呲牙。我笑了。这小子,开始自己往骨架上长肉了。 写这两篇,我自己也变了样。从前碰新东西,我第一反应是"有啥用",带着点老江湖的挑剔;现在第一反应是"它咋转"——先拆骨架,再下结论。这"先拆后判"四个字,是 Agent 教我的:别被表象吓着,也别被 hype 带着跑,蹲下来摸骨。 我也真开始拿它干活了:周报初稿让Agent 起,文献让我初筛,连给孩子讲题都让它出个思路我再改。它不是替我思考,是替我搬那些不值得我搬的砖,把我腾出来想更值当的。这种"腾出来"的爽,比多写几行代码实在。我十二年前入行,师父说"好好垒砖";现在我跟自己说"腾出手,去看风水"。两句话不矛盾,是同一个人才有的进阶。下一篇见。(本篇完)
听懂人话(自然语言理解); 推理判断(这活该咋拆); 决定调哪个工具、传什么参数(这步叫 function calling,大模型原生支持)。
defget_weather(city):db = {"北京": "晴, 26度, 西风3级","上海": "多云, 30度, 湿度大","广州": "雷阵雨, 28度"}return db.get(city, f"{city} 天气未知")TOOLS = {"get_weather": {"desc": "查询某城市天气,参数为 city(城市名)","func": get_weather,"params": ["city"]}}
ReAct(推理+行动交替):边想边干。想一步,干一步,看结果,再想下一步。像你修水管,拧一下看看漏不漏,再拧下一处。优点是每一步都看得见,好调试;缺点是慢,得一步一步走。 Plan-and-Execute(先计划后执行):先一口气把完整计划列出来,再一步步执行。像出门旅游先做攻略再走。优点是全局清楚、能并行;缺点是计划一开始定错了,后面全歪。 Tree of Thoughts(思维树):每步都岔出几个可能,挑最好的走。像下棋算好几步。适合那种"一步错满盘皆输"的难活,但最费算力。
ReAct 像修水管。 老师傅拎着扳手上门,不先画图纸,拧一下总阀看看漏不漏,再拧下一处,边干边看。好处是哪儿漏一眼见,坏处是慢——适合"过程里才知道咋回事"的活。我排查线上故障就是 ReAct:先看监控,再猜一处,查了再猜下一处。 Plan-and-Execute 像出旅游攻略。 出发前先把每天去哪、住哪、吃啥列清楚,到了照走。好处是全局在胸、能提前订票并行准备;坏处是一旦"第一天暴雨景点关闭",后面全乱,得推倒重来。我写大项目的技术方案就是这路:先出设计文档,再分步实施。 Tree of Thoughts 像下棋。 每步都算好几条后续,挑胜率高的。适合"一步错满盘皆输"的难活,但最烧脑(烧算力)。我选型技术栈时会这么想:选 A 的话后续咋样,选 B 呢,各岔几句再定。
短期记忆(工作记忆):这一轮任务上下文,干完就清,像你手头那张草稿纸。 长期记忆(知识记忆):跨会话存的东西,比如"用户偏好简洁报告""北京天气查过是晴"。靠向量库+检索实现。 主体记忆:关于"你是谁、用户在哪"的持久设定。
import jsondefget_weather(city):db = {"北京": "晴, 26度, 西风3级","上海": "多云, 30度, 湿度大","广州": "雷阵雨, 28度"}return db.get(city, f"{city} 天气未知")TOOLS = {"get_weather": get_weather}# 极简"大脑":真实场景换成大模型 function callingdefbrain(question, memory):# —— 感知:识别意图 + 抽取实体(城市)——city = next((c for c in ["北京","上海","广州"] if c in question), None)if"天气"notin question ornot city:return"这事我还没学会,先记着。"# 反思:超出能力,老实认# —— 规划+执行:决定调工具 ——result = TOOLS["get_weather"](city)# —— 反思:结果合理吗 ——if"未知"in result:returnf"没查到{city}的天气,可能不在库里。"# —— 记忆:存下来 ——memory.append({"city": city, "info": result})# —— 输出 ——returnf"{city}今天{result}。记下了,免得你再问。"defagent_run(question, memory):print(f"用户:{question}")ans = brain(question, memory)print(f"Agent:{ans}\n")return ansmemory = []agent_run("北京今天天气咋样", memory)agent_run("那上海呢", memory)agent_run("北京天气还记得不", memory)
用户:北京今天天气咋样Agent:北京今天晴, 26度, 西风3级。记下了,免得你再问。用户:那上海呢Agent:上海今天多云, 30度, 湿度大。记下了,免得你再问。用户:北京天气还记得不Agent:北京今天晴, 26度, 西风3级。记下了,免得你再问。
city = next((c for c in [...] if c in question), None) 是感知:从句子里捞城市名,捞不到就 None。这一步决定后面能不能动。 if "天气" not in question or not city 是边界+反思:不在能力内,老实说"没学会",绝不硬编。这是防幻觉的第一道闸。 result = TOOLS["get_weather"](city) 是执行:真去调函数,不是嘴上说"已查"。模型提议、代码动手,分工在这行。 if "未知" in result 是反思:结果合理吗?不合理就坦白"可能不在库里",不假装知道。 memory.append({"city": city, "info": result}) 是记忆:把这次存下,供以后掏。 return f"{city}今天{result}。记下了..." 是输出:给人话,顺带提醒"记下了",把记忆亮出来。
from openai import OpenAI # 换成你用的 SDKclient = OpenAI()tools_schema = [{"type": "function","function": {"name": "get_weather","description": "查询某城市天气","parameters": {"type": "object","properties": {"city": {"type": "string"}},"required": ["city"]}}}]defrun_agent(question, memory):messages = [{"role": "system", "content": "你是助手,需要时用工具。"}]messages += memorymessages.append({"role": "user", "content": question})# 第一轮:让模型决定要不要调工具resp = client.chat.completions.create(model="your-model", messages=messages, tools=tools_schema)msg = resp.choices[0].messageif msg.tool_calls: # 模型说:我想调 get_weatherfor call in msg.tool_calls:args = json.loads(call.function.arguments)result = get_weather(args["city"]) # 代码真去执行messages.append(msg)messages.append({"role": "tool", # 结果喂回去"content": result,"tool_call_id": call.id})# 第二轮:模型拿到结果,决定怎么答resp2 = client.chat.completions.create(model="your-model", messages=messages)return resp2.choices[0].message.contentreturn msg.content
有脑子吗——是真大模型在推理,还是关键词匹配的老把式? 有手脚吗——能调真实工具摸世界,还是只动嘴? 会想吗——复杂任务能拆成步骤自己走,还是一问一答? 记得住吗——跨会话有记忆,还是转头就忘? 肯认错吗——干错了能自己发现,还是嘴硬到底?
第一步,定一个最小任务。 别一上来"做个智能管家",先"查天气加记一下"。任务越小,循环越清晰,你越容易看懂"它咋自己走"。 第二步,写一到两个工具函数。 纯Python,跟 Agent 无关,先保证函数本身对。工具不对,Agent 再聪明也白搭。 第三步,跑通循环。 没API key 用我那只伪大脑,有 key 用真实 function calling 骨架。重点是看清"模型提议、代码执行、结果回填"三轮转。 第四步,加记忆。 先一个list 凑合,后换向量库。让它能"记得你上次问啥",体验一下"搭档感"怎么来的。 第五步,加反思。 让它在给答案前,先问自己"这结果靠谱吗",不靠谱就重查或干脆认错。这一下,它从"执行器"变"有点自知之明的执行器"。 第六步,上缰绳。 给不可逆操作加确认,给循环加最大轮数,给记忆加过期。这一步不做,前面都悬。
简单活——查天气、做分类、抽字段——用个小模型就够了(像 GPT-4o-mini、千问小模型那类)。它们便宜、快、够用。我那天气 Agent,塞个小模型,效果跟大模型差不了多少,成本零头都不到。 复杂活——多步排障、长文推理、写带逻辑的报告——得请大模型(GPT-4 级、Claude、DeepSeek-V3 这类)。它们贵,但脑子够使,规划不歪。
defscreen_resume(resume, jd, memory):# 感知+规划:让模型抽取关键信息并定步骤plan = llm(f"读简历和岗位,抽取:技能/年限/空窗/跳槽频次。步骤:1匹配 2风险")# 执行:算匹配分(这里用规则模拟,真实可换模型)score = match_score(resume, jd)risks = []if resume.get("job_hops", 0) >= 4:risks.append("频繁跳槽,稳定性存疑") # 反思:标黄不淘汰if resume.get("gap_months", 0) > 12:risks.append("空窗超一年,需确认原因")# 记忆:本岗位历史偏好if jd["role"] in memory:tips = memory[jd["role"]]# 输出:给人看的简报,关键结论附证据returnf"匹配分{score},风险:{risks or'无'}。建议:{'优先面'if score>80andnot risks else'待定'}"
第一种,幻觉编造。 它编工具返回的结果、编根本不存在的政策条款,一本正经。死法:拿不出证据。解法:凡结论让它"出示来源",接独立验证器交叉核对。这叫反思层的"自我确证偏差"克制,后面专篇讲。 第二种,循环失控。 它卡在某步不停调工具,或反复问自己,停不下来。死法:没步数护栏。解法:循环封顶(我设的五轮),超时强制收尾并坦白"没搞定"。 第三种,工具误用。 调错工具,或参数抽错(city 为空那种)。死法:过度信任模型输出。解法:工具白名单(只让调注册过的)+ 参数校验(缺参反问,不硬闯)。 第四种,记忆污染。 记了陈旧或错误的旧信息,反过来误导新判断(我那"带伞"淋雨就是)。死法:记忆只进不出、不信当下。解法:新鲜度时间戳 + 重要性衰减,过期重查不轻信。 第五种,权限越界。 它手伸太长,动了生产、群发了消息(我那钉钉事故就是)。死法:工具没画边界。解法:权限最小化 + 高风险操作人工审批,不可逆的坚决不自动。
后端兄弟: 你本就熟工具层(调API、读写库),这根不用练。重点练"感知"——把业务方的糊涂话翻成结构化任务;再练"反思"——别信模型给的查询结果,加道校验。你转型最顺,因为工具和循环你门儿清。 前端兄弟: 你熟交互和呈现,重点练"输出"——同一份结果,给老板三句话、给同事三十页,这自适应呈现是你的强项;再练"规划",把复杂界面拆成步骤。你跟 Agent 的"输出层"天然亲近。 测试兄弟: 你干的活本来就是"反思"——找边界、挑错。直接把你那套"边界用例"写成 Agent 的验证器,你从"手动点"变成"设计怎么让机器自己挑错"。你转型最该偷着乐。 产品同学(小满这类): 你最该练"感知"的输入端——把"温暖""顺畅"这种词,翻译成能度量、能翻成任务的东西。你不用学写代码,你学"说清楚要啥",剩下的交给会组装的人。你越能翻译人心,Agent 越听你的。 非技术读者: 你只练一件事——"把我要啥说清楚"。其余四根,找会组装的人(或现成平台)帮你接。你的值钱不在会装骨头,在"地脉看得准"(知道业务真要啥)。这恰是看风水的核心。
感知: Agent 把这句话翻成结构化任务——意图=生成简报,实体=时间(周一晨会)、对象(各项目)、维度(风险),约束=给老板看的要简。 规划: 它拆成步骤——1 拉各项目本周进度;2 查延期任务;3 查生产告警;4 聚成风险点;5 写简报。先全局后执行(Plan-and-Execute 路数)。 工具: 依次调Jira 接口(进度)、监控接口(告警)、Git 接口(提交活跃度)。每调一个,代码真执行,结果喂回。 记忆: 它调出"张总视觉型,简报要三段式:结论、风险、建议",这是上周存的主体记忆,这次自动套用。 反思: 它发现"项目 C 风险"这条,依据只有一条告警,不够硬,于是标黄"待确认",不写死"项目 C 高危"。 输出: 给老板三句话(结论+Top3 风险+建议),给 PM 三十页详情(指标+根因+操作)。同一份原料,按角色自适应拼盘。
RPA(机器人流程自动化): 你"录一遍",它"照做一遍"。比如你录下"打开邮箱、下载附件、存到文件夹",它以后照这固定步骤跑。它快,但没自主——步骤一变(附件名改了),它就傻。它是"复读机",不是"思考者"。 工作流自动化: 你用图形把步骤连起来(A 完了走 B,条件 X 走 Y),系统按图跑。比 RPA 灵活点,但图还是你画的,它照图走,不会自己改图。 Agent: 它不照你录的、也不照你画的。它听你一句目标,自己想步骤、自己调工具、自己纠错。它是"思考者",不是"复读机"。
脑(大模型):参谋,不是司令。只管"想",不动手。 手(工具):函数集合。它摸世界,你画边界。 谋(规划):想清楚再动。ReAct 边走边看,Plan 先谋后动,ToT 多算几步。 记(记忆):记该记的,忘该忘的。带时间戳,别记死。 省(反思):干完问自己"对不对"。不对就认、就改。 环(循环):模型提议→代码执行→结果回填,三轮转。超五轮强制收。 缰(护栏):不可逆操作人工批,模型输出先验再信。
欢迎朋友们阅读、转发,提一提建议,在讨论区展开更深入讨论。

本公众号合集,欢迎点击阅读
欢迎关注公众号“大眼鱼”





















