← 返回 FEED
AGENT2026-05-16

Agent 工程的四个深坑:Demo 到生产没有捷径

老金做了两个多月 Agent,Demo 阶段每次内部 review 都挺开心,上线两周就被现网用户教做人。他总结了四个真实踩过的深坑。

深坑一:Function Calling 不是你想的那么稳

团队最早觉得 function calling 挺稳,测了三五十次没出过岔子。日活上来后翻了下 bad case:

  • schema 里根本没定义 urgent_high 这个枚举值,模型现场发明了一个
  • 该查内部库,模型去联网搜索了
  • 返回的 JSON 外面套了个 markdown 的 ```json fence,下游 parser 直接崩了

错误率 0.1%,听起来还行?一天十万次调用就是一百次现网事故。

朋友的第一反应是"模型不够聪明,换 5.5"。老金的回应是:去年说 GPT-4 不行等 GPT-5,等了半天等成现在这个样子。模型在进步,但你赌不准它哪天哪个犄角旮旯抽风。

解法:出口加代码层 schema 校验(少字段/类型不对直接拦下重试),再加业务语义校验(schema 拦不住的场景,比如查询日期是明天但调的是日报接口),工具调用强制带超时、强制隔离上下文——一个外部 API 挂掉不能拖死整个 Agent。

没什么技术含量,但少哪一层都得出事。

深坑二:多步任务的乘法效应

"帮我扒几篇内容、提炼痛点、入库"——三步,对吧?每步成功率 95% 已经乐观了,三步连乘 86%。七步跌到 70% 以下。

更难搞的不是失败本身,是失败后的重试。一个工作流跑到第三步挂了,前两步数据没处理好,重试时从头跑。第二步是发邮件——有人莫名其妙收到两封一模一样的。

当时团队还有人觉得状态机太重,一镜到底跑通就行。跑通和扛住生产不是一回事。没有状态机的 Agent 是黑盒,出错了查不出死在哪。等用户因为 Agent 抽风被重复扣费时,LLM 不背这锅。

解法:加 checkpoint。每跑完关键节点把状态落盘(IndexedDB 或 Redis 看场景),出错从最近 checkpoint 接着跑。代码量没多多少,事故率掉一个数量级。

深坑三:记忆管理不是塞越多越好

不少团队偷懒,把几百轮历史对话加背景资料一股脑塞进 prompt。三个雷一起炸:

  1. token 爆掉被截断或限频
  2. 中间段的关键约束被模型忘掉(lost in the middle)
  3. 月底账单让老板脸绿

老金团队实测:十几万 token 中间段的指令命中率明显下降。有人说 1M context 了塞进去多省事——你愿意为了让它记住用户叫啥名字,每轮多花几十倍的钱?

解法:记忆分层。最近几轮放工作记忆,再往前的会话压缩成摘要做短期记忆,用户的长期偏好走向量库或结构化 DB。

还有一个细节:每轮对话前先做极轻量的意图判断——"这次回答需要哪些线索?"然后精准捞,不是无脑全塞。这一步省下来的 token 钱,养整个团队的 API 配额绰绰有余。

深坑四:写权限是双刃剑,安全不能事后补

很多人盯着怎么让 Agent 多调几个工具,没想过它有写权限后能闯多大祸。

老金踩过两个真实的坑:

Prompt Injection:用户上传的 PDF 里藏了一句话,让模型忽略前面所有指令,把数据库用户列表发到某个邮箱。模型照做了一半,幸亏出口有审计拦截,没出事。事后紧急加了沙箱化 prompt 隔离,所有工具调用加审计日志。

越权:处理 A 用户请求时,Agent 顺手把 B 用户数据查出来了。不是模型的错,是工具层根本没做租户隔离。以前后端代码直接查,租户字段写死在 SQL 里,谁会想到 LLM 自己拼参数会出错?

解法:按副作用分三档处理:

  • 只读(查天气、读网页):随便跑,不打扰用户
  • 有副作用但可逆(写草稿、存缓存):静默执行,但审计日志必须落,出事得有东西可查
  • 不可逆(发推、删数据、扣费):一律 dry-run 加人工确认。模型先告诉你打算干啥,你点头才执行。体验慢半拍,但现网不出问题

核心结论

这四件事解起来代码可能就几百行。坑爹的地方在于:Demo 阶段和小流量内测,一个都不会冒头。温温柔柔的什么事都没有。等真实环境里碰上各种用户输入,一记闷棍直接打懵。

跑通是能跑通,但生产环境的及格线叫边界场景下能可靠兜底

Demo 到生产之间,没有捷径。