GMT+8 SG --:-- 0000 X 0000 Y /
← 全部文章← All writing

产品

做工具,不做功能

同一个能力,做成功能和做成工具,长期价值差一个量级。

**功能只能被点击。**它长在某个页面的某个位置,有自己的按钮、表单和结果区。用户必须先知道它在哪,走到那里,然后用。

**工具能被调用。**它有名字、有参数、有明确的返回,谁都能调——你自己的 Agent、用户装的别的助手、合作方的系统。它不要求任何人先找到它。

在 Agent 时代,这个区别决定了你的能力能走多远。

一套定义,两个出口

做工具最容易犯的错,是内外两套实现。

内部 Agent 用一套,对外开放时另写一套接口,两边慢慢各说各话——参数含义漂了,边界条件不一致,改一边忘一边。半年后没人敢动其中任何一边。

正确的做法是同一套定义,两个出口。工具只定义一次:它做什么、要什么参数、返回什么结构、什么情况下报什么错。内部编排调它,对外协议也暴露它。

这件事的附带好处很实在:因为对外要面对陌生的调用方,你被迫把每个工具的语义写清楚。而这份清楚,反过来让你自己的 Agent 用得更准——含糊的工具描述是 Agent 调错工具的头号原因。

按读写分级,不按重要性分级

对外开放不等于全部放开。

我的分法很简单:**读类工具可以开放,写类工具留在自己的权限环里。**查询历史、搜索、估算、分析——这些开放出去,最坏情况是被人多查几次。创建订单、修改状态、发送消息——这些不开放,或者只在完整的授权链路里开放。

不要按「重要性」分级。重要的工具往往正是最该开放的那些,因为它们最能证明你的数据价值。真正的分界线是这次调用会不会改变世界

不是所有问题都值得走深度链路

有了一堆工具之后,下一个问题是什么时候用它们。

全部问题都进多工具深度链路,成本和延迟会立刻失控;全部走轻量直答,复杂任务就废了。所以要做轻重路由:简单问题直接回答,复杂任务才展开规划、并行取数、整合交付。

路由本身是个产品决策,不只是技术优化。它决定了用户问一句话要等三秒还是三十秒,而这两种体验对应的是完全不同的使用场景——三秒的那种会被随手用,三十秒的那种必须值回票价。

记忆:跨会话,只增,按人隔离

工具让 Agent 能做事,记忆让它不必每次从零开始。

三条我认为没得商量的原则:

  • **跨会话。**记忆的价值全在会话之间。同一个用户第二次来,系统该知道他上次关心什么、习惯什么格式、用哪种语言。
  • **只增不改。**新的偏好覆盖旧的,但不要让系统去「修正」历史记录。改历史的系统没法解释自己。
  • **按人隔离。**读写边界严格按用户身份划。这条在多租户场景下是红线,不是优化。

还有一条经验:记忆要有滚动窗口。无限累积的上下文不是更聪明,是更贵、更容易被无关信息带偏。

边界

**不是所有能力都该做成工具。**只被用过一次的、逻辑高度耦合在某个页面里的、语义说不清楚的——硬做成工具只会让工具列表变长。工具列表越长,Agent 选错的概率越高,这是实打实的成本。

**开放是要运营的。**放出去之后要有账号授权、订阅校验、额度管理和调用记录,否则你不知道谁在用、用得对不对、是不是该收费。把工具扔出去就不管,跟没做一样——只是多了一个你无法解释的流量来源。