2025 年,大家嘴里都在说「Agent」,但真正能在生产环境里、帮团队稳定做完活的 Agent,其实并不多。
PostHog 用了一整年,从一个只有「生成趋势图」单一工具的小玩具,迭代到了今天上线的 PostHog AI——一个真正在产品里「驻场」的智能分析师:
- 它能自己写 SQL、跑多步分析
- 会搭建 feature flag 和实验
- 还能主动去排查高影响错误
- 整个过程在一个循环里跑完,自己检查、自己修正
我们在这个过程中,踩了很多坑,也收获了不少确定性的经验。下面就是这一年里,我们关于 Agent 的 8 个核心学习,希望对你正在做或准备做 Agent 的团队,有点参考价值。

01 模型升级是推土机:你以为改一点,其实会变一片
这一年里,唯一不变的事情就是:模型在疯狂进化。
12 个月前,「推理模型(reasoning models)」还算是实验品;今天,如果没有强推理能力,Agent 基本做不了什么严肃活。
我们自己的两个重要分水岭是:
- 用上了 OpenAI o4-mini 做性价比推理
复杂查询、需要先探索再下结论的分析任务,明显变得更简单、更可靠。 - 换到 Anthropic Claude 4 系列后,工具调用可靠性大幅提升
Agent 终于可以放心开放一大堆工具,而不是「用一个挂一个」。
目前我们的核心 Agent 循环用的是 Claude Sonnet 4.5,在质量、速度和成本之间比较均衡——但我们也很清楚:这也会很快过时。
👉 真正的教训是:
不要低估模型升级的影响面。
你以为只是「精度提升一点点」,实际上是整套架构、策略、prompt 和工具设计都要跟着重想一遍。
02 工作流输给 Agent:图再漂亮,也不如一个能自我纠偏的循环
在 GPT-4o 早期,我们和很多团队一样,最开始是迷恋「图形化工作流」的:
- 画一张节点图:先 A 工具,再 B 工具,再 C 工具
- 想象成一个完美的业务流程「蓝图」
但事实是:图是给人看的,不是给 LLM 干活用的。

在图式工作流里,LLM 有几个致命问题:
- 很难自我纠错
- 一旦丢上下文,就很难补回来
- 实际用户问题永远偏离「理想流程」
后来,模型升级之后,我们把架构大幅简化成:
一个 单一循环(single loop) 的 Agent,不断在同一套对话上下文里:
- 选择合适工具
- 执行
- 检查结果
- 计划下一步
看起来结构「土」了一点,但它能持续工作几十步,边走边修正,真实完成复杂任务——这才是关键。

很多人问图里那个奇怪的「switch mode tool」是什么?
简单说,它是我们的 「模式切换 / 工具搜索」能力,帮助 Agent 在 PostHog 庞大的产品面上,快速找到「现在最该用哪个工具」。这个细节之后会单独写一篇,我们就先卖个关子。
03 一个循环 > 一堆子 Agent:层层抽象,层层掉线
Agent 火了之后,大家很自然会想到「职能分工」:
CEO Agent → 派活给 Engineer Agent → Tester Agent 来验证 → PM Agent 提意见……
脑洞很大,现实却很骨感。
对 LLM 来说,最关键的资源是「上下文」:
- 每多一层「角色」和「抽象」,上下文就丢一层
- 工具调用之间的联系被切断,自我纠偏能力随之消失
- 最后看上去结构很优雅,实际表现却很「蠢」
这并不是说子 Agent 完全没用——当你需要并行执行一些「相对独立的任务」时,它们是有价值的。
但只要任务是强耦合、多步、需要频繁回头修正的,我们发现:
一个 LLM、一条消息链、一个循环,就够了。
Claude Code 的成功,某种程度上就是这个路线的最佳证明。
04 To-do 工具是隐藏大招:让 Agent「记得自己要干嘛」
前面说了这么多「单循环」,其实里面还有一个小秘密武器:todo_write 工具。

它本身非常简单:
- 每一步操作结束,LLM 用这个工具写下接下来要做什么
- 工具本身其实什么都不干,只是把「下一步计划」显式化
效果却非常夸张:
- Agent 不再「走着走着就忘了最初的目标」
- 出错后能自己回顾「我原本打算做什么」
- 多步任务可以跑得非常长,且方向感更强
写 To-do 对 Agent 来说,就像以前的 chain-of-thought 一样,是一种「自我约束 + 自我提醒」的超级能力。
05 上下文是生命线:你的 Agent 也需要一份「CLAUDE.md」
现实世界里的任务,几乎都长这样:
「帮我看看 cfmp 转化漏斗哪里掉得最多?」
如果你不知道:
- CFMP 是什么?
- 它在这家公司的产品矩阵里是什么位置?
- 用户大致路径长什么样?
这句话基本就是一堆拼错的字母。
我们发现,要让 Agent 执行真实任务,必须给它一个等价于 CLAUDE.md / PROJECT.md 的东西——一份持久、核心的上下文,永远挂在对话旁边:
- 公司是做什么的
- 主要产品线
- 关键事件 / 指标 / 命名
- 常见缩写和内部黑话
但问题也来了:
没人喜欢新工具上来就要求「写好几页配置文档」。
我们的做法是:
- 借鉴 Claude Code,做了一个 /init 命令
- Agent 会通过多步 Web 搜索(目前用的是 GPT-5-mini)自动去理解你的产品和业务
- 如果你的数据里缺少公开 URL,再少量地问你几个关键问题
- 最终生成一个项目级别的「记忆」,供后续所有任务使用

更长远来看,我们认为:
上下文不只在 Web 上,也在你的 Slack、邮箱、文档和代码里。
这是一个已经有很多解决方案、但还远没被真正「解决干净」的问题,我们也在继续探索。
06 把每一步都摊开:黑盒再“准”,用户也会不放心
一开始,我们也尝试过「把细节藏起来」:
- 不展示推理过程
- 不展示失败的工具调用
- 不展示调用参数,只给最终结果
用户反馈非常一致:
「看结果还不错,但就是有点不踏实,不知道它到底干了什么。」
后来我们反其道而行之:
- 流式展示每一次工具调用、参数、返回结果
- 连推理 token 也实时展示

结果很有意思
只要用户能看到 Agent 在「纠错、反思、重试」,即便有时候多绕两步路,信任感也明显增加了。
可以说,人和 LLM 在这点上很像:
一个完全不透明的黑盒,会让人下意识地不信任。
而暴露细节,反而能让大家更愿意长期依赖它。
07 框架有时是阻力:在战场上,越底层越安全
我们从一开始的 OpenAI Python SDK,迁到了 LangChain + LangGraph。
如果是今天再做选择,我们大概率就不会这么做了。
原因有几个:
- 你会被框架的「世界观」锁死。
LangGraph 的抽象非常优雅,但当模型能力、产品需求快速变化时,你会发现很多「原本看起来合理的边界」变成了束缚,重构成本极高。 - LLM 进化速度远大于框架更新速度。
新模型、新能力(比如不同家的 Web search、tool calling 格式)一出来,抽象层很容易「崩」: - 想统一 OpenAI 和 Anthropic 的搜索结果格式?对框架来说是噩梦。
- 你只想用某家模型的新特性,却发现框架还没跟上。
- 生态太碎片,沉没成本太高。
今天选了 A 框架,明天 B 出了个 killer feature,你要不要换?
每一次切换,都是一笔不小的工程债。
当然,轻量封装还是有价值的,但我们的结论是:
在 Agent 这种快速演化的赛道上,
尽量保持中立、低耦合,
当成「就是在调用一个函数」来设计系统,会更安全。
08 Evals 重要,但远不够:真相藏在用户的真实使用里
很多人会说:「只要 eval 做得好,Agent 质量自然就上去了。」
我们同意 eval 很重要,尤其是对基础模型来说。
但在 Agent 场景 下,情况要复杂得多:
- 想要构造一个「足够真实」的多步任务环境,本身就是一个巨大工程
- 你必须支持「所有 Agent 可能调用的工具」,才能真正评估表现
- 大部分 eval 只能覆盖「你想到的 happy path」,而真实用户总会走你没想到的路
我们最后发现,比起「一上来就设计一堆 eval」,更有效的路径是:
- 先把 Agent 真正放进生产环境
- 设立固定的「Traces Hour」
- 我们团队每周会拿出一段时间,只做一件事:
逐条看真实用户的 LLM 调用轨迹(trace) - 找出哪些地方 Agent 工作得好,哪些地方明显「走歪」了
- 再基于这些真实问题,反过来设计 eval
- 把真实场景抽象出来,变成可回放、可对比的测试
这套方法带来的好处是:
工程投入都精准砸在「真用户真的在痛」的地方,
而不是停留在我们自己想象的 demo 上。
我们现在用 PostHog AI 在做什么?
在 PostHog 内部,我们已经用 PostHog AI 好几个月了。
它不是完美的,但已经能稳稳接住很多原本要人肉做的事情:
- 调试复杂 SQL
- 看用户行为路径,找 drop-off、关键行为
- 搭建实验、评估结果
- 沿着 session 和 error 追查问题来源
真实世界的产品数据,其实就是一碗打结的面条:
- 事件串成会话
- 会话分支到错误
- 点击穿过多条路径……
PostHog AI 的价值,就是帮我们把这碗面条顺成一条可理解的「故事线」。
如果你已经在用 PostHog,可以这么试:
- 打开 PostHog
- 右上角点「PostHog AI」
- 授权它访问数据(需要管理员权限)
- 运行 /init,让它先了解你的业务
- 然后,开始直接「派活」给它


