销售团队用了 AI 助手一个月,起初挺好,后面接连出事,一次价格误报、一次数据越权,排查完发现,问题出在两个没人提过的地方(hook和sandbox),跟 Skill 没关系,跟模型也没关系。
上篇文章聊过一件事:隔壁销售团队用 AI 工作台自己搞定了客户分析报告,从提需求到交付,中间没经过产品、没经过数据、没排期。
那篇发出去之后有人问:"然后呢?现在用得怎么样了?"
说实话,用得确实不错。至少一开始是这样。
蜜月期
一个月前,销售团队全员配上了 workbuddy。效果很快就出来了:
小张用它整理客户跟进记录,不用再花半小时写日报 小李让它帮忙筛线索,高意向的推过来,低意向的自动发一封培育邮件 小王最猛,让 workbuddy 直接帮他生成客户分析报告——调 CRM 数据、拉趋势图、出 PDF。以前排期两周的活,现在 20 分钟
那段时间销售群里每天都有人晒新用法,大家慢慢把自己最擅长的那套打法、话术、客户判断逻辑,变成 workbuddy 里可以反复调用的能力,大量沉淀 Skill。
我那时候也挺乐观的。
销售愿意用,数据能跑起来,大家还会主动把自己的经验沉淀进去。Memory 和 Skill 在真实场景里跑起来,Eval 也在持续补样本、看效果。看起来,Agent 这条路确实走通了。
这种状态持续了大概三周。
然后出了两件事,第一件让客户跑了,第二件差点让整个项目停掉。

第一次:不该报的价格
某天上午,销售总监在群里 @我:
"workbuddy 刚才直接给客户报了我们新方案的全年价格,客户回了一句'我再看看'就消失了。这个客户我跟进了一个月,本来计划这周面谈的。"
小张也很委屈:"我教过 workbuddy 的,价格问题要先判断客户阶段,不能直接报。"
我去查了对话记录。workbuddy 确实有一条 Skill,内容是"当客户问价格时,根据客户阶段决定回复策略"。这条 Skill 是小张自己写的,之前也管用。
但这次没管用。
Skill 内容本身没问题,规则里也写到了"价格相关场景"。我又翻了一遍对话记录,才看出来。
原因其实不复杂:这条 Skill 没有被系统强制触发,而是依赖模型在对话中识别到价格相关意图后,自己决定要不要调用。
模型每次都要临时判断,而临时判断的结果不稳定。上周它判断对了,这周客户措辞稍微变了变,它就跳过了 Skill 直接回答。
跟带新人差不多,你告诉一个新销售"客户问价格的时候先别急着报",他大多数时候记得,偶尔脑子一热就脱口而出了。你没法怪他,但也不能指望他每次都对。
后来我跟小张一起改了方案:不再依赖模型的临时判断,而是在系统层面加了一层——只要检测到客户消息里出现价格相关的关键词或意图,立刻触发一个预定义的流程。
这个流程不经过模型"想不想做"的决策,直接执行:先检查客户阶段,如果是初次咨询就不报价转人工,如果是老客户就按策略回复。
我把这个机制叫做 Hook。
Hook:Agent 的条件反射
Hook 是系统层面的条件反射,某个特定事件发生时,自动执行一段预定义逻辑,不经过模型的临时决策。

你每天用的产品里到处都有这东西,只是没这么叫。
iPhone 的快捷指令,到了公司自动静音,连上车载蓝牙自动播音乐。 企业微信的审批流,提交报销单后自动通知主管。这些都不是你每次手动点一下才发生的,而是条件满足后系统自动执行。
放到 Agent 里,Hook 解决的不是"Agent 会不会",而是"关键时候它会不会一定做"。
Skill 更像是 Agent 会什么,Hook 更像是什么时候必须做什么。Skill 是能力,Hook 是触发器。前者解决"会不会",后者解决"会不会在关键时刻稳定执行"。

在 Agent 系统里,Hook 可以挂在很多节点上。新对话开始的时候,可以加载客户画像、设对话策略;Agent 回复之后,可以检测情绪变化、判断是不是该转人工。调用工具之前,可以做权限检查和参数校验;要写入新记忆的时候,可以跑一遍去重和隐私过滤。
加了价格意图的 Hook 之后,类似的事没再发生。
关键判断不再依赖模型"记得住",而是系统"不可能忘"。
这是第一次出事。客户跑了,但没出大乱子。
然后是第二件。
第二次:不该碰的数据
这次比较严重。
某天下午,产品经理打电话过来,语气急:
"workbuddy 帮小王做客户分析的时候,调了 CRM 接口查客户历史数据。但查出来的不是小王自己的客户,是同行业所有客户的数据!报告里出现了一句话:'该行业客户平均首单金额约 XX 万。'"
"这份报告没发给客户吧?"
"没有,小王看了一眼觉得不对,先截住了。但如果他没注意到呢?"
如果报告直接发给客户,客户会看到同行业所有客户的平均首单金额——这个数字我们自己内部都不公开。轻则客户觉得我们数据管理混乱,重则行业价格体系暴露。
我查了一下,确认报告没有外发。但这件事让我后背发凉。
上线的时候赶进度,我们只做了接口级别的权限控制——workbuddy 能调哪些 API。但没做到数据行级的权限——能查哪些客户的数据。接口通了,边界没画。
这跟给实习生开了整个 CRM 的查看权限一样。他不是故意的,也不是想搞破坏。但他能看到所有人的数据,也就可能在认真工作的过程中,把不该看的东西带出去。
Agent 的风险,很多时候不是它会不会恶意,而是它会不会在权限过大的情况下,认真地做错一件事。

当天我就让团队加了隔离:
workbuddy 只能查分配给当前销售的客户数据,不能查其他销售的客户 跑分析脚本的环境是独立沙箱,跑完自动销毁,不能直接碰生产数据库 客户数据默认不能出安全域;如果分析确实需要调用外部模型或第三方服务,必须先脱敏,再做权限校验和审计 如果 1 分钟内查询超过 50 条客户记录(远超正常范围),系统自动熔断,通知人工介入
这就引出了第二个机制————Sandbox。
Sandbox:Agent 的安全围栏
Sandbox 划定了 Agent 能访问什么资源、能执行什么操作、边界在哪。
你每天都在用 Sandbox。微信小程序跑在微信的沙箱里,不能随便访问你的通讯录。浏览器的同源策略、银行柜台的审批机制,本质上都是同一个道理——给你能力,但画好线。
Chatbot 时代 Sandbox 不太需要。因为它只会"说话",最多说错话。Agent 时代它会做事:调 API、执行代码、访问数据库、发消息。每一次操作都是真实的影响。
所以 Sandbox 不只是简单的权限控制。
权限控制解决的是"能不能访问",Sandbox 解决的是"在什么环境、什么范围、什么速率、什么审计条件下访问"。
Sandbox 的关键也不只是技术实现,更是产品决策。比如,Agent 能自动做什么、什么必须人来确认?报价可以自动吗,还是必须人工审批?能看哪些数据,只看自己的客户还是看全团队的?哪些操作需要留痕、谁来看?什么行为算异常,1 分钟查 50 条记录算异常吗,触发之后是熔断还是告警?
这些问题没有标准答案,不同业务场景下边界完全不同。但必须有人来回答,而且必须在 Agent 上线之前回答好。
两次出事之后复盘
两次排查,两次修复。我后来反复想这两件事,觉得有意思的地方在于:第一次出事,Agent 知道该怎么做但没做,缺少自动触发机制。第二次出事,没人告诉它什么不能做,缺少安全边界。

而且这两次都不是 Memory 本身的问题,Agent 确实记住了价格策略。不是 Skill 内容本身的问题,Agent 确实有生成报告的能力。也不是传统效果评测能完全覆盖的问题,因为测试集上的表现不错,不代表真实业务里每一次触发时机、每一次数据边界都安全。
问题全出在更底层的地方。
Memory、Skill、Eval 解决的是 Agent 怎么变聪明。 Hook 和 Sandbox 解决的是 Agent 怎么变可靠。
或者说得更直白一点:
聪明解决的是"能不能做"。 可靠解决的是"什么时候必须做"和"什么绝对不能做"。
聪明不等于靠谱。靠谱才有人愿意付钱。
销售团队那边,加了这两个机制之后,AI 工作台运行稳定了不少。小张不再担心价格报错,产品经理也不用每天盯着数据安全提心吊胆。
上周我问销售总监感觉怎么样,他想了想说:
"以前总觉得得盯着它,怕它乱来。现在不用操那个心了,知道什么该做什么不该做。"
停了一下又补了句:"虽然偶尔还是得看一眼。"
我笑了笑。毕竟带人也是这样。
Agent 从 Demo 到生产环境,最大的变化不是能力变多,而是它开始真的影响业务。
一旦它会调接口、查数据、发消息、生成报告,就不能只讨论"聪不聪明",还要讨论:关键时刻能不能稳定触发,危险边界能不能自动拦住。
Hook 听起来高级,实际并不复杂。一些 Agent 工具已经开始支持类似能力。
比如在 Claude Code 里,可以通过配置 Notification Hook,在特定事件发生时触发 macOS 桌面通知。你可以让它在需要你注意、任务完成、工具调用结束等节点发出提醒。


类似的,在 Hermes 这类 Agent 工作台里,也可以把终端命令审计、会话日志、工具调用记录做成 Hook 或插件。
比如你可以设计一个终端命令审计插件:
做一个终端命令审计插件(Terminal Audit Hook):在每次 terminal 工具执行完毕后,自动把命令内容、执行结果、时间戳、会话 ID 追加到日志。具体配置方式会因为工具版本、运行环境不同而有差异,但核心思路是一样的:不要把关键动作完全交给模型临时想,而是让系统在关键节点自动触发。


Sandbox 的配置会稍复杂一些,但核心问题也很简单:
你的 Agent 能访问什么、不能访问什么?能自动做什么、什么必须人工确认?出了异常之后,是继续跑、发告警,还是立刻熔断?
上线之前想清楚这件事,比上线之后擦屁股省心得多。
夜雨聆风