有人看到我简历上的一个项目,问了我一个很简单的问题:
这个软件真的解决了你的问题吗?
这个问题问得很好。
那个项目是一款播客摘要工具。
源代码公开在这里:yanqian/podcast-summarizer。
最初的想法很直接。
听完一段长音频,要花不少时间。
如果能先把一期节目转成文字,再生成摘要,我也许只需读一遍摘要,不必花一个小时收听,就能理解整期内容。
当时的产品假设是这样的:
长内容
-> 转写文本
-> 摘要
-> 理解
真正做完以后,我才意识到,这个假设并不成立。
倒也不是全错。
但它偏偏错在最关键的地方。
这个软件确实能生成摘要。
它也完整展示了一套 AI 工作流。
它能导入播客、处理音频、生成转写片段和摘要片段,还能显示两者之间的对应关系。
作为工程演示,它是成功的。
但作为帮助人理解内容的工具,它没有解决真正的问题。
最初的问题并不是内容太长 链接到标题
一开始,我以为问题就在于内容太长。
一期播客很长。
一篇博客文章也可能很长。
会议转写同样可能很长。
于是,最自然的产品思路就是压缩:
把内容变短
摘要承诺的正是这件事。
它减少篇幅。
删去重复。
把散漫的对话梳理出结构。
看起来很高效。
但真正读过生成的摘要后,我发现了一件不太对劲的事。
摘要读完了,我还是不知道那场谈话究竟是怎样展开的。
我知道他们谈了什么。
知道大致结论。
也记住了几个要点。
但我并没有真正理解整段对话。
摘要丢掉了:
- 一个观点是怎样被引出来的
- 是什么问题触发了这个观点
- 哪些地方仍有疑问
- 有哪些例子支撑它
- 讨论过哪些取舍
- 哪些情绪或现实背景很重要
- 说话者在哪里改变了思路
摘要并没有说错。
它只是不够。
摘要会抹掉通往结论的过程 链接到标题
好的摘要保留了终点。
却留不住抵达终点的那条路。
这正是问题的核心。
很多时候,我们恰恰要沿着这条路走一遍,才能真正理解一个观点。
人们讨论一个想法时,重要的不只是最后那句话。
更重要的是思路如何一步步推进:
问题
-> 背景
-> 例子
-> 质疑
-> 澄清
-> 结论
摘要往往把整个过程压成一段干净利落的文字。
结果确实更方便扫读。
但许多帮助我们理解观点的线索,也随之消失了。
在探索性内容里,这个问题尤其明显。
播客、访谈、随笔、设计讨论和技术对话中,常常会冒出一些尚未完全成形的想法。
它们的价值不只在最终答案。
一个答案如何从问题和讨论中逐渐浮现,本身也是价值的一部分。
摘要可以告诉我:
说话者认为 X 很重要。
但我通常还需要知道:
为什么 X 在这里成了关键问题?
他们当时想解决什么问题?
他们排除了哪些可能?
什么证据让这个观点变得可信?
这已经不只是摘要了。
这是带着上下文阅读。
这个项目真正证明了什么 链接到标题
不过,作为一个软件项目,它依然很有价值。
它迫使我搭建出一套完整的本地工作流:
播客 URL
-> 查询元数据
-> 下载音频
-> 切分音频
-> 语音转写
-> 转写片段
-> 摘要片段
-> 来源映射
-> 前端阅读器
这些工作很重要。
整个实现并不只是给一条提示词套上用户界面。
系统有持久化机制。
支持幂等导入。
使用本地存储。
有后端处理流水线。
也有前端阅读器,把摘要放在对应的原始转写片段旁边。
最后这一点尤其重要。
建立摘要与转写文本之间的对应关系,已经比单纯生成摘要多走了一步。
它隐约指向了一种更好的交互方式:
摘要 -> 原始转写文本
但这个设计停得太早了。
它只是把来源摆了出来。
却没有把原始材料变成一个可以操作、可以深入探索的阅读界面。
缺少的是在全局与细节之间缩放 链接到标题
更合理的产品模式不是:
内容 -> 摘要
而应该是:
拉远看全局
-> 检视
-> 拉近看细节
-> 提问
-> 核实
-> 再次拉远
摘要适合用来拉远视角。
它能让我先看见整张地图。
但碰到真正重要的内容时,我还需要拉近细看。
我希望能点开某个片段,然后继续问:
- 这里的背景是什么?
- 说话者这句话究竟是什么意思?
- 在这之前发生了什么?
- 有哪些例子支持这个说法?
- 这里涉及哪些取舍?
- 他们有没有提到其他方案?
- 你能检验一下我是否真的理解了这部分吗?
一旦加入这些交互,产品的性质就变了。
它不再只是一款摘要工具。
它会变成一个以原始材料为基础的阅读与推理界面。
摘要只是其中一层。
原始内容始终可查,也始终可以继续追问。
让问答始终有证据可查 链接到标题
最自然的下一项功能,不是继续改进摘要提示词。
而是加入以证据为依据、结合上下文的问答。
交互过程可以是这样:
选中一个摘要片段
-> 展开对应的转写片段
-> 提出问题
-> 给出带引用的回答
-> 高亮原始片段
答案不应该脱离来源,悬在原始内容之上。
它必须牢牢依附于证据。
每次回答时,系统都应该返回:
- 使用了哪些转写片段 ID
- 对应的时间戳范围
- 原文摘录,或对证据的准确转述
- 回答只使用了选中片段,还是也参考了相邻上下文
- 哪些地方无法确定,或原始材料中根本没有提到
这一点很重要,因为人很容易过早相信 AI 给出的答案。
一段流畅的回答,很容易制造出已经理解的错觉。
但真正的理解必须有依据。
用户应该随时可以追问:
这个答案是从哪里来的?
产品不必绕弯子,只要回答:
就在这里。
然后直接展示原始材料。
合理分段比切得更碎更重要 链接到标题
我也曾想过,调整音频切分方式能不能改善产品。
也许音频块切得更小,产出的样本会更好。
也许切得更细,摘要质量也会提高。
但这只对了一部分。
音频切分主要解决的是流水线运行中的问题:
- 文件大小限制
- 重试机制
- 本地存储
- 转写边界
- 运行中断后的恢复
它不会自动带来更好的理解。
真正重要的分段,发生在转写完成之后。
内容单元不应该是:
为了方便 Whisper 处理而切出的某个音频块
更合理的单位应该接近:
一次连贯、完整的话题推进
这就需要按主题分段。
更好的流水线可以从较小的转写单元开始:
单句发言或较短的转写片段
然后再识别主题边界。
一种可行的方法是:
转写单元
-> 向量嵌入
-> 相邻窗口相似度
-> 候选主题边界
-> LLM 修正边界
-> 输出结构化章节
向量嵌入可以找出相邻内容在语义上逐渐拉开距离的位置。
但只靠向量嵌入还不够。
它适合提出候选切分点,却不适合直接决定最终边界。
随后可以让语言模型结合话语中的信号修正边界,例如:
- 提出新问题
- 转向新话题
- 开始回顾总结
- 发言者切换
- 得出结论
- 引入新例子
- 提出新的反对意见
最终结果应该采用结构化格式:
章节标题
起始片段
结束片段
摘要
关键词
划分边界的理由
这比按固定大小分组更合理。
固定分组很容易实现。
但真实对话从来不会按照固定长度展开。
为什么 NotebookLM 更接近我想要的产品 链接到标题
后来我发现,NotebookLM 更接近我真正想要的产品。
不是因为它能生成一份完美的摘要。
而是因为原始材料在其中始终可供查询。
我可以继续追问。
可以查看某个具体段落。
可以在整体认识和局部细节之间来回移动。
也可以检验自己是否真的读懂了某一部分。
这种工作流更接近用户真正要完成的事:
不是压缩信息
而是在信息中穿行
这也改变了我对 AI 摘要工具的看法。
最好的工具,并不是能生成最短准确摘要的那个工具。
真正好的工具,应该帮助我围绕原始材料建立一套稳固的认知框架。
有时,这需要压缩。
有时,需要展开。
有时,需要查看证据。
有时,需要提出问题。
有时,则必须回到原文。
真正的产品教训 链接到标题
这个项目让我学到了一条关于 AI 产品的重要经验。
我们很容易从模型能力出发:
AI 可以生成摘要。
然后围绕这种能力搭建产品:
那就做一个摘要工具吧。
但用户真正的问题可能是:
我需要高效理解篇幅很长的材料。
这两件事不是一回事。
摘要是一种能力。
理解是一套工作流。
这个区别很重要。
一种能力可以在演示中显得很惊艳。
一套工作流却必须经得住真实使用。
我的工具确实压缩了内容。
但真正需要的工作流,是让人能在不同层次的信息之间来回穿梭:
整体概览
-> 证据
-> 局部解释
-> 继续追问
-> 回到来源核实
-> 综合形成理解
意识到这一点后,产品方向也随之改变了。
真正重要的功能不再是:
把摘要做得更好
而变成了:
让原始材料可以被探索
如果继续做,我会增加什么 链接到标题
如果继续这个项目,我不会先去修改提示词。
我会做四件事。
第一,按主题生成章节。
应用应该识别转写文本中真正有意义的内容区段,而不只是沿用音频块或固定大小的片段组。
第二,加入有证据支撑的问答。
每个答案都应该能指回具体的转写片段和时间戳。
第三,支持可缩放阅读。
用户界面应该允许人从整期摘要逐层深入到章节、片段和原始文本,也能随时返回上一层。
第四,加入主动回忆。
系统应该针对用户选中的内容生成问题,用来检验用户是否真正理解了这一部分。
最后这一点很容易被低估。
读完一份摘要,可能会让人产生已经理解的感觉。
回答问题,则能暴露自己到底懂没懂。
为什么我也会选择停下来 链接到标题
不过,我现在大概不会继续做这个项目。
这同样是这次经历带来的教训。
一个项目不必发展成一家公司,才算有价值。
这个项目已经完成了它的使命。
它展示了一套由 AI 驱动的软件流水线。
它也让我练习了本地优先架构、前后端边界、持久化、模型适配器和可恢复处理。
更重要的是,它让我发现,最初的产品假设并不完整。
这本身就是一个很好的结果。
最坦诚的结论是:
这个软件完成了工程演示。
但它没有解决理解问题。
这一点值得明确说出来。
因为成熟的工程能力,不只是让软件成功运行。
还包括看清一个正常运行的软件,究竟有没有解决对的问题。
更准确的项目表述 链接到标题
现在,我会换一种方式介绍这个项目。
不再说:
我做了一款播客摘要工具。
而会说:
我搭建了一套用于播客转写和摘要的本地 AI 流水线,
随后意识到,摘要只是更深层阅读工作流中的一层。
这是一种更准确的讲法。
它既体现了实现能力。
也体现了产品判断。
继续演进的技术路径已经很清楚:
语义分段
-> 有依据的问答
-> 来源引用
-> 可缩放阅读
-> 理解程度检查
但更深层的教训其实很简单:
不要把文字变短误认为理解变深。
摘要当然有用。
但摘要不等于理解。
理解需要在不同层次之间不断移动:
拉远
拉近
核实
提问
返回
这才是我真正想要的产品。