“GABOR” · 近30天声量数据
作品数作品数趋势作品数分布
互动数互动数趋势互动数分布
- 公众号3554/24%
- 抖音1692/11%
- B站828/6%
- 微博457/3%
- 快手0/0%
代表作品
作品导出
深度报告
| 内容 | 评论 | 分享 | 收藏 | 获赞 | 操作 |
|---|---|---|---|---|---|
![]() ![]() 2025 我的年度播客|做家务时也能成长 这是我 2025 年反复在听的 4 个播客,陪我度过了不少做家务的时刻。香喷喷的饭做好了,屋子收拾完了,心里也感觉满满当当的✨
▫️ The Tim Ferriss Show
▫️ The Mel Robbins Podcast
▫️ On Purpose with Jay Shetty
▫️ The Diary of a CEO
它们不需要整块时间,却在很多碎片时刻里,悄悄放进了一些关于选择、成长和人生的经验。
🎧 入坑必听 · 四个播客各分享2期
▫️ The Tim Ferriss Show
• Ray Dalio on Principles
• Naval Ravikant on Wealth & Happiness
Tim 最强的不是访谈,而是把高手的底层原则拆出来。这两集几乎奠定了他整个播客的“方法论气质”,适合反复听。
▫️ The Mel Robbins Podcast
• The 5 Second Rule (Why It Works)
• How to Stop Letting Other People’s Opinions Control You
Mel 的优势是立刻可用。这两集能快速感受到:不是安慰你,而是给你一个能立刻行动的小杠杆。
▫️ On Purpose with Jay Shetty
• How to Stop Overthinking
• Finding Purpose Without Burning Out
Jay 最好的状态,是把灵性语言翻译成日常可理解的表达。这两集很温和,适合在情绪需要安定的时候听。
▫️ The Diary of a CEO
• Jordan Peterson: Responsibility, Meaning & Suffering
• Dr. Gabor Maté on Trauma & Healing
这两集代表了最打动人的部分:不谈成功技巧,而是直面痛苦、创伤和人的复杂性,共鸣感很强。
#张静初 #播客推荐 #碎片化时间 #自我成长 #复利成长之路 张静初 发布时间2025/12/29 09:40:34 | 77 | 40 | 329 | 1080 | 更多 |
![]() 贝拉·塔尔去世,他完成了自己的语言 深焦艺文志 发布时间2026/01/06 12:45:06 | 11 | - | - | 507 | 更多 |
![]() 赶紧通知你朋友,出现这3种症状可能是轻微智障! 好奇博士实验室 发布时间2025/12/27 10:00:27 | 24 | - | - | 330 | 更多 |
![]() ![]() 2025 我的年度播客|做家务时也能成长 张静初 发布时间2025/12/29 09:57:36 | 13 | 2 | 38 | 300 | 更多 |
![]() ![]() #模型时代# 斯坦福CS229课程:替代人类工程师,Agent设计指南
最近比较关注Agent。这堂斯坦福CS229课程由Resolve AI的三位创始工程师授课,分享他们过去几年构建"能替代人类软件工程师"的Agent系统的实战经验。Resolve AI专注于生产环境运维自动化,Spiros Xanthos曾管理大型生产系统和工程团队,Gabor Angeli和Bharat Khandelwal负责Agent架构设计。
核心观点:不是每个问题都需要多Agent系统,关键是找到恰到好处的复杂度。 三人从最简单的单次LLM调用出发,逐层递进到多Agent架构,每一层都解释能解决什么问题、解决不了什么问题。
一、为什么软件工程是Agent的理想战场
Spiros开场讲了个切身体会:"在我上一个角色,我管理一个大型生产系统和工程团队。时间久了我们发现,绝大部分精力都花在维护现有系统、保持可靠性上,而不是开发新功能。而且没有用户会因为你延迟发布某个功能而投诉,但系统一宕机他们就炸了。"
软件工程的工具生态本身就很复杂:代码工具、基础设施(AWS、GCP)、可观测性平台(Datadog、Splunk)、代码仓库、告警系统……每类工具可能还有好几个选择。传统模式是人类成为所有工具之间的"胶水",一个一个查,再手动综合结果。
现在的Agent进化路径是这样的:
• 第一阶段:AI辅助单个任务(比如代码补全)
• 第二阶段:人类成为Agent之间的胶水(每个Agent负责一类任务)
• 第三阶段:多Agent系统自主协作,人类只需给高层指令
Resolve AI的Demo展示了第三阶段的样子:用户说"今早UI很慢",Agent自动检查dashboard、日志、代码变更、feature flag,发现是混沌工程测试的定时任务触发了故障注入,最后给出修复命令。整个过程人类只问了一句话。
二、5个复杂度层级:从简单到足够复杂
Bharat接过话筒,强调一个设计原则:"保持简单。不是所有问题都需要多Agent系统,如果简单方案能解决,就用简单方案。"他用一个支付系统故障的例子,逐层演示什么时候该升级复杂度。
1、单次LLM调用:能解决的问题比你想象的多
最基础的方案:给LLM一个prompt,拿到一个response,结束。
用户半夜2点被页面叫醒,支付系统出问题。手动查PagerDuty的告警、看dashboard找异常指标、检查最近部署、写几条日志查询,最后把大约1000行日志贴给LLM问"为什么支付失败了"。LLM扫描日志,找到一条"card expired",回答"看起来是卡过期了"。
问题来了:如果80%的失败其实是网络超时,而那条"卡过期"只是噪音呢?LLM不知道该追问什么,没法验证假设,也不会对照所有失败案例做交叉验证。它只是发现了一个pattern,回答了你问的问题,然后收工。
单次LLM调用的三个局限:
• 没有内部反馈循环,无法评估或优化自己的回答
• 没有迭代推理机制,一旦跑偏就没法自我纠正
• 没有不确定性感知,不知道自己到底有多大把握
2、Actor-Critic系统:加入反馈循环
缺什么就补什么。加一个Critic LLM来审核答案。
工作流程变成这样:Actor根据输入和之前的反馈提出候选答案,Critic审核这个答案是否合理,如果通过就返回,不通过就把反馈发回给Actor重新生成。
同样是支付故障的例子,Actor说"支付失败是因为卡过期",Critic回应"卡过期只有一条日志,而且卡过期通常是单独事件,不太可能导致大规模故障。"于是Actor调整回答:"我发现了卡过期的日志,但我认为不是根本原因,可能需要检查其他地方。"
这就比第一版聪明。但还有局限:
• 输入受限:只能处理用户最初贴进来的日志,没法自己去查新数据
• 没有持久记忆:如果Actor和Critic迭代10轮、20轮、100轮,它们可能会忘记第一轮的结论,陷入死循环
• 基础能力受限:上下文窗口有限、数学能力弱、可能产生幻觉
• 无法获取外部知识:不能搜索、不能查最新的Stack Overflow
3、LLM + 工具调用:打破输入的天花板
工具(Tool)是什么?任何LLM可以用来与环境交互的外部函数:查数据库、调计算器、甚至向用户追问。
对LLM来说,工具定义为结构化接口,包含名称、描述、输入参数schema。LLM想用工具时,输出一个结构化的调用请求(比如JSON),执行引擎运行工具并返回结果,LLM再决定下一步。
现在用户不用贴日志,只需说"我查了dashboard,支付一直失败,帮我看看日志"。LLM自己决定查哪些日志、怎么写查询语句(Loki的语法),发送工具调用,拿到结果分析,发现网络问题导致Stripe连接超时。
关键进步:LLM能主动获取它需要的信息了。
仍有局限:
• 没有状态追踪:难以管理演化中的任务状态
• 工具失败处理有限:虽然可以在prompt里做一些容错,但不可能覆盖所有错误场景
• 没有真正的规划:更像是reactive模式,"我要解决这个问题,有哪些工具,调一下,看结果,下一步",缺乏对全局目标的规划
• 工具调用效率低:可能调用不必要的工具,只是为了"覆盖全面"
4、单Agent系统:加入规划与记忆
什么才算Agent?在LLM工具调用的基础上,加两个关键能力:
• 规划循环(Planning Loop):LLM能够推理任务、拆解步骤、自我反馈
• 自主执行:能独立完成长时间运行的任务,而不是每一步都等人确认
Agent有记忆、能反思、能设定内部子目标。它不只是reactive地响应,而是战略性地执行计划。
Agent的工作循环是:接收指令 → 推理 → 行动(工具调用)→ 观察结果 → 重新规划 → 循环直到达成目标。
Bharat强调了Agent的关键组件:推理能力、工具集、执行循环、记忆,以及护栏(Guardrails)。"LLM今天还不够好,没法完全自主做所有事情。比如你只是想查日志,结果它开始写代码修bug了,你得有护栏限制它的行为边界。"
现在的支付故障场景变成这样:用户只说"支付一直失败"。Agent自己决定先查dashboard看哪个服务有问题(这本身可能要迭代好几次),找到问题服务后再决定查哪些日志,写查询语句,第一次查询没结果就调整参数再查,最终定位到Stripe网络超时。
但单Agent系统也有天花板:
• 广度vs深度困境:一个Agent不可能精通所有领域,"我们希望LLM是万事通,但现实是它什么都不精"
• 规划脆弱性:LLM很容易在子任务中迷失主目标。比如陷入"怎么写好这个日志查询"的死循环,忘了用户真正关心的是"支付为什么失败"
• 中心化瓶颈:所有决策都经过一个LLM,速度受限于API响应时间
• 错误传播:一个错误判断可能毁掉整个推理链
• 工具过载:复杂任务需要几百个工具,从查时间到查日志都得有,一个Agent管理这么多工具会崩溃
5、多Agent系统:像团队一样分工协作
现实世界的团队有专家分工。多Agent系统也是这个逻辑。
分拆的好处:
• 专业化:一个Agent专精日志,一个专精dashboard,一个专精代码,prompt和工具集都可以针对性优化
• 长上下文分摊:每个子Agent只处理自己领域的上下文,不用把所有信息都塞进一个窗口
• 去中心化决策:每个子Agent只看10个工具,orchestrator只看10个子Agent,认知负担大大降低
• 多层错误防护:任务分布意味着更多审核节点,错误更难一路传播到用户
• 工具管理简化:100个工具分给10个Agent,每个只管10个
支付故障场景的多Agent版本:用户说"支付一直失败",orchestrator同时调用logs Agent和dashboard Agent。Logs Agent自己决定怎么写查询,返回"可能是Stripe超时"。Dashboard Agent返回"checkout服务有问题"。Orchestrator综合两边结果:"checkout服务的Stripe调用超时"。然后调用code Agent:"请增加checkout服务的Stripe超时配置"。Code Agent去改代码,返回修复方案。
接口变得极其简洁:用户只需要说"有问题,去修",多Agent系统完成所有工作,返回解决方案。
三、多Agent系统的架构模式
Gabor接过话筒,用了一个类比:"如果把Agent想象成函数,多Agent系统就是程序。如果把Agent想象成服务,多Agent系统就是分布式系统。"
他回忆起学分布式系统时的建议:"第一步,别做。第二步,好吧,认真想想复杂度。"多Agent系统也是一样的道理。
三种常见架构模式:
Scatter-Gather(分发-收集)
类似MapReduce。一个Agent发起多个子任务,收集结果,汇总返回。
可观测性场景:一个(甚至可以是确定性的)Agent说"调用我能访问的所有系统,所有dashboard,所有日志,收集所有证据",子Agent各自完成任务返回,再由一个汇总Agent说"根据证据,问题可能是这个"。
Orchestrator Loop(编排循环)
Gabor说这是他个人最喜欢的模式。Orchestrator决定调用哪些Agent,拿到结果后判断"我还没完成,需要再调用这些Agent",拿到结果,继续判断……本质是链式的Scatter-Gather。
极端情况是每次只调一个Agent(链式),进阶情况是并行调多个。
Free-for-all(自由协作)
Agent之间可以随意互相调用。类似Actor模型,有共享上下文,Agent之间通过handoff传递控制权。
这种模式最灵活,也最难管理。
四、多Agent系统的核心设计问题
1、上下文传递:每个Agent该看到什么?
这是Gabor花大量时间思考的问题。
极端一:全局可见
每个子Agent都能看到整个对话trace和所有Agent的内部状态。好处是信息零丢失,坏处是上下文爆炸。代码Agent为什么要关心dashboard Agent的完整输出?
这种模式在free-for-all架构中效果较好,在orchestrator loop中往往不必要。
极端二:只看自己的输入
每个Agent像RPC一样,只看请求内容,不知道请求从哪来、系统里还在发生什么。调试简单,但请求必须包含Agent完成任务所需的所有信息。如果某个上游Agent漏传了关键信息,下游就抓瞎了。
中间方案:调用栈可见
每个Agent能看到"谁调用了我",也就是调用链上的所有信息,但看不到系统其他部分发生的事情。深度有限,但比全局可见更可控。
2、状态管理:有状态还是无状态?
两种思路:
有状态Agent:像人一样,你问我一个问题,再问follow-up,我记得你第一个问题。适合free-for-all和Actor模型。
无状态Agent:像RPC或函数,每次请求都是独立的。适合orchestrator-worker模式。
当涉及异步并发时(这对用户体验很重要,因为你不想让所有Agent串行执行),问题更复杂:如果要传递全局上下文但某些任务还在运行怎么办?如果有状态Agent被并发调用两次怎么办?
Gabor的建议是:参考分布式系统的成熟方案,很多思路可以直接迁移过来。
五、Agent如何学习:后训练 vs 记忆
一个关键问题:如果昨天2点收到告警,今天2点又收到同样的告警,Agent能不能记住昨天的处理方式,今天做得更好?
这触及LLM的根本局限:它们本质上是"纯函数",相同输入产生相同输出。
两种学习策略:
后训练(Post-training)
添加新的训练数据,重新训练模型。传统ML方法。
优点:一致性高,因为知识直接烘焙进权重;可以教模型一些"怪异"的行为,只要数据足够。
缺点:成本高(人力时间+GPU成本);难以跨模型迁移;最难的是"如何只教新东西而不让模型忘记旧能力"。
记忆(Memory)
保持外部数据库,存储"已知事实"和"过去经验",在运行时动态拉取相关记忆注入prompt。
例如,添加一条记忆:"当看到这个告警时,应该查这个dashboard"。下次运行时,系统检索到这条记忆并注入上下文,模型遵循这条指令。
优点:迭代快、灵活、模型无关。
缺点:能教的东西有限,无法让模型偏离其自然行为太远。
Gabor用软件开发类比:后训练相当于改代码,记忆相当于改配置。
六、当前Agent的局限与开放问题
问题:"你们在座有没有人用LLM用久了之后开始讨厌它的?"
当前的核心局限包括:
• 推理能力衰减:长链调用和复杂指令后,推理质量明显下降
• 上下文窗口:虽然新模型号称支持几十万token,但长上下文的实际性能会稳步下滑
• 长时间任务:还做不好真正的持续运行任务
• 人类工具不适配Agent:很多工具没有API,只有GUI;吞吐量设计是给人用的,对Agent来说太慢
• 人类成为瓶颈:Agent可以7×24工作,但如果流程中需要人类确认某个步骤,人反而成了卡点
几个开放的研究问题:
如何微调模型而不丧失通用能力:你只想教5个新事实,但不想让它忘了怎么写诗、怎么遵循指令
Prompt工程缺乏科学基础:有些人特别擅长写prompt,但他们不知道为什么管用,你也不知道。这不应该是黑魔法
为什么同一个prompt在不同模型上效果差异巨大:哪些是模型特异性的,哪些是通用的好实践?
如何让模型学会说"我不确定":LLM天生喜欢自信地胡说八道,这对构建可靠系统是致命的
预判:模型会继续进步,能处理更长的任务链;人类会持续向更高抽象层移动,从写代码到管理Agent;专门为Agent设计的工具会取代为人类设计的工具;人类的角色从执行转向"设定目标、评判质量、做品味决策"。 http://t.cn/AXUBJjmR ![]() 高飞 发布时间2025/12/21 10:43:47 | 5 | 147 | - | 106 | - |









