# AI能不能帮网站自动发现新功能？

URL: https://caijiao.org/posts/190
Source: docs/posts/190.md
Description: 收集信号这一步它做得比人好，筛选它做不到——Cakedesk 的作者一年收到 44 个功能请求只完成 13 个，难的是排序。难点在于它不知道提需求的人有没有付过钱，而 Data Fetcher 的付费决策恰恰来自这 600 家客户。

去年我做的一件准备工作是把三个来源的原始记录归拢起来：用户发来的邮件、站内搜索框里没结果的词、表单里验证失败的畸形输入。总共几千条，之前一直堆着没看。

丢进去让它聚类，几分钟出了二十几个簇。这个环节它有明显的优势——我没有的那部分是耐心，它正好有。

## 三个信号里，最值钱的是第三个

**用户邮件**是最容易处理的：文字表述完整，意图清楚，聚类效果好。缺点是这类人已经是愿意花时间写信给你的少数人。

**站内搜索的零结果词**很有意思，因为它是"在我们这儿没找到"的直接记录。这里面混杂大量无关词，但挑出来的部分非常准：有人在一个图片工具站里搜某个具体格式名，说明他期待这个格式被支持。

零结果词的清洗有个小技巧：把长度为一两个字的词和明显串台的搜索直接滤掉，剩下的才是真的"想找没找到"。过滤前几千条，过滤完通常只剩几十条，而这几十条一条比一条值钱。

**验证失败的输入**是三个里面最被低估的。用户在工具里填了一个格式不对的东西然后报错离开，这条记录写的是"他本来想干什么"。我用这批数据发现过一个真实缺口：一批用户反复提交某种输出格式，而这个格式当时根本不支持，表单直接拒绝了。这不是"反馈"，这是行为证据。

三个来源共同的前提是你**先把它存下来**。

## 存下来的格式比存什么更重要

这件事我踩过坑。最开始只把原始字符串写进日志，事后完全没法用——不知道那是一次搜索还是一次失败提交，也没有时间和上下文。

后来改成一条记录带上来源、当时所在页面、以及脱敏后的原始输入。多存这几个字段的成本几乎为零，事后能不能追查全靠它们。

这类数据适合放在本地的单文件库里，跑一个查询就能拉出来，[轻量存储](/sqlite/)这一套够用。

## 收集之后就到它做不到的地方了

Cakedesk 是这一节的答案。作者 Max Schmitt 一个人做 Electron + React + Node.js 的桌面应用，一次性付费 €69，2025 年卖出 239 份新授权、约 €16000 毛收入。

![Cakedesk 官网首页截图](/images/2026-09/cakedesk.app.png)

*Cakedesk 首页把 Watch demo 放在评价旁边，没装过的用户先看演示再下单。*

同一年他收到 44 个功能请求，**完成 13 个**。

31 个没做的并不是"没时间做"，是判断不值得做。而判断的依据完全在 AI 的视野之外：提这个请求的人买过没有、他在邮件里描述的场景有多少人会遇到、这个改动会不会让某个平台的打包出问题。

Data Fetcher 更说明问题。Andy Cloak 一个人在伦敦运营，MRR 23000 美元、600 家付费客户，产品是 Airtable 上的扩展。这个量级的付费密度意味着每个功能决策的代价都很高——600 家人的工作流依赖它。

哪个请求来自这 600 家、哪个来自没付过钱的路过者——这一条 AI 永远拿不到，而这恰恰是排序的全部依据。

44 到 13 的筛选里还有一层更难处理的：一部分请求互相冲突。有人要更简洁的入口，有人要更多选项，同时满足是不可能的。这类取舍它完全没有立场参与，而取舍本身就是产品方向。

## 因此我把它定位到「生成候选」而非「给出结论」

现在的具体用法是：每周把它跑出来的簇丢给我，我在里面挑。它负责不遗漏，我负责不错误。

它在这个位置上还多做一件事：把每个候选项翻译成"如果做，要动哪些文件"。这部分的价值同样不小。它可以顺着引用关系把受影响的模块列出来，我据此估算一次改动的波及面；更进一步，拿到它给的清单之后我都会手工验一遍相关调用链，顺序可以参考[前端调试](/javascript/)里那套做法。

每周的原始记录我也会自己翻一遍——聚类会平滑掉异常值，而异常值有时候才是真正值钱的那一条。

## 一个「自动化发现」的完整例子

验证失败的输入里有一簇提交：用户反复粘贴某种带前缀的格式串。

顺着这条线追下去发现，那是另一种工具导出的默认格式。我们当时没有兼容它，用户不会写信说"请支持某某导出格式"，他只会粘进去、报错、然后走掉。

加上兼容只花了一小段解析代码，但如果在几千条记录里用眼睛看，这条线索大概永远浮不出来。

补完兼容之后我还做了一件事：把这个格式写进首页可接受的格式说明里。它是从用户行为里发现的，但也得让后来的人看见——很多犹豫的人不是觉得不能处理，是不知道能处理。

做工具站的时候这条经验被复用得最多：每个工具的失败输入是它自己最好的需求文档。而要把成千上万条这类记录组织成可执行的东西，站点本身的形态最好是那种每个入口各自独立的 [在线工具集合](/tool/)结构——工具和工具之间不共享状态，每个入口才能各自长出独立的候选清单。

每周花二十分钟看一遍它整理出来的簇，是我目前在获新功能方向上投入产出比最高的一个动作。

---

*Cakedesk 数据来自作者 Max Schmitt 的 2025 年度总结；Data Fetcher 数据来自作者 Andy Cloak 公开分享。*
