ThinkTrace:让 AI 当思考的催化剂,而不是收藏夹的管家
ThinkTrace:让 AI 当思考的催化剂,而不是收藏夹的管家
一、收藏的那一刻,就是知识的巅峰
先坦白一个数字:我的收藏夹里躺着几百篇文章,笔记应用里躺着几千条摘录。它们有一个共同点——收藏的那一刻就是知识的巅峰,之后从未被想起。
这个体验你多半也有:刷到一篇好文章,指尖一划,星星点亮,多巴胺到账。感觉自己学到了。三个月后翻到这条收藏,标题陌生得像第一次见。问题出在哪?想了很久,我的结论是问题不出在我的自律,出在工具的优化目标上:
所有笔记工具都在优化「存」和「整理」,没有任何一个在优化「想」。
收藏夹比拼的是容量和检索,笔记应用比拼的是标签、文件夹、双链、图谱。这些都在降低"存"的成本——于是存得更多,想得更少。工具替你把知识的入口修得越来越宽,却没有一条路通向"变成你的观点"。
记了一堆别人的观点,却没有一条长成自己的。这不是知识管理失败,这是知识管理太成功——它成功地把"拥有信息的错觉"做成了产品。
二、病灶再往深挖一层
光说"要多思考"没有用,得看清思考在工具链里是怎么被杀死的。拆成三步:
**第一步:存的动作太快了。**划线、收藏、剪藏,一秒完成。而思考是慢的——你得停下来问自己"我同意吗?这让我想到什么?"。快动作天然碾压慢动作,于是每次阅读的结束时态都是"存了"而不是"想了"。
**第二步:摘录天然冒充思考。**摘抄一段精彩原文时,手指付出的劳动制造了一种认知的错觉——我加工过了。其实你只是搬运。书摘搬运得越漂亮,越不需要思考。
**第三步:回看时没有抓手。**就算你真的想回看,面对一堆别人写的金句,你能做什么?同意?不同意?没有任何设计邀请你回应它们。收藏夹是档案馆,档案馆不跟你辩论。
所以这个工具要解决的,不是"帮你记更多",而是在"存"的瞬间强行插入一个"想"的环节,并且让"想"这个动作有地方落地、有回声、能积累。
三、一手思考,二手知识
把病灶再抽象一层,就到了这个产品的底层判断:AI 时代的核心竞争力是一手思考能力。
信息世界里所有东西可以分成两类。二手知识:别人想好的观点、别人整理的框架、别人讲过的故事——它们的获取成本正在趋近于零,AI 一秒钟可以给你综述一百个。一手思考:你自己从经验、观察、困惑里长出来的判断——它的生产成本没有任何变化,还是那个古老的过程:停下来,想。
剪刀差拉开之后,结论很不舒服:**收藏二手知识的行为本身,正在快速贬值。**你摘抄的深度好文,AI 摘得比你全;你整理的思维导图,AI 三秒出十张。你的收藏夹规模不再代表你的知识储量,只代表你的囤积癖。
而一手思考恰恰是 AI 给不了的——不是技术上给不了,是逻辑上给不了。思考的"一手性"来自你的具体处境:你的项目、你的家人、你踩过的坑。AI 没有你的处境,它能给你的是通用观点;通用观点在这个时代的供给已经泛滥。
设计文档里为这个判断写了三条用户哲学,后来成为所有功能的过滤器:
- 思考留痕才是你的东西,看过的二手资料都会遗忘——所以产品记录的核心单位是"你的想法",不是"别人的原文";
- 要做内化的思考沉淀,不是信息的收集搬运工——所以不追求收录规模,追求每条记录的加工深度;
- AI 时代的核心竞争力是一手思考能力——所以 AI 的角色被严格限定为催化剂,它加速你的反应,不代替你反应。
催化剂这个化学比喻是精确的:催化剂参与反应、加速反应、但不出现在产物里。最终产物必须只属于你。
四、竞品拆解:一个反着做的机会
设计之前拆了两个最相关的产品。
flomo:卡片笔记的标杆,主张"低摩擦随手记,持续记录,意义自然浮现"。它把记录的摩擦降到了极致——这恰恰是我的病灶清单第一条。摩擦低是它的卖点,也是它管不住"搬运冒充思考"的原因。
Get 笔记(印象的 AI 版):主打 AI 提炼、知识库问答、语义搜索——AI 在替你总结、替你检索、替你答问。AI 做得越多,你做得越少。
两个产品分别站在两个极端:一个把"记"做到最轻,一个把"AI"做到最多。但它们管理的是同一类东西——信息:你记的、别人写的。
要公平地说:flomo 和 Get 笔记都是各自路线上的好产品,问题不在它们,在路线本身对"思考"无解。flomo 的卡片流是我直接借用的交互范式——低摩擦输入这部分它是对的,错的只是低摩擦之后没有人接手;Get 笔记的 AI 能力我也借用——错的不是用 AI,是让 AI 干的活(总结、代答)恰好是应该留给用户的。ThinkTrace 不是推翻它们,是把两家的零件重新组装,装在一个相反的目的上。
ThinkTrace 反着做,管理思考:你自己长出来的认知。设计文档里的定位句:
AI 思考催化剂——把阅读变成一手思考,让思考留下痕迹。
题记更直白:帮你从阅读中长出自己的思考,不是记书,是记思考。
目标用户就写我自己:“爱读书、爱思考,但觉得读书笔记总是变成’书摘搬运’的人。“自用工具,不为市场折腰——这是这个项目最大的特权,也是最好的方法论。
特权体现在三个自由上。砍需求的自由:读书前场景说砍就砍,不用论证市场规模;不做的自由:没有账号、没有云、没有增长指标,“用户流失"这个词不存在;诚实的自由:不用假装 AI 功能改变了人生——它的价值要靠"一周后回看,洞察卡片是不是真的改变了什么"来验证,验证不了就承认。
而这三样自由恰恰是产品工作中最稀缺的。给客户做产品时,你被预算和预期推着走;给自己做产品,第一次可以做一支"以想清楚为唯一 KPI"的团队。很多产品人梦寐以求的"小而美”,前提是这个"小"字真的可以由自己定义。
五、四张卡片:给思考一个数据模型
界面是 flomo 式的卡片流,但卡片有四种类型,每种有自己的语义和视觉:
| 类型 | 语义 | 视觉 |
|---|---|---|
| 📖 原文(quote) | 别人写的——划线、引用 | 灰色左边框 + 浅灰底 |
| 💡 想法(thought) | 你写的——对原文的回应 | 墨绿左边框 + 淡绿底 |
| 🤔 思考触发(ai-trigger) | AI 写的——它对你的想法提出的追问 | 蓝色虚线边框 |
| ✨ 洞察(insight) | 你和 AI 聊出来的——你自己的结论 | 琥珀色左边框 |
四种颜色在卡片流里混排,一眼扫过去就能看到一条思考的河流:原文是石头,想法是水流,AI 触发是激起的浪花,洞察是沉淀下来的金子。
数据结构很朴素:{ id, type, content, tags, bookContext, relatedCards, createdAt, dialogueId }。标签用 #标签 内联语法随正文输入,正则提取后从正文剔除。类型判定是个启发式:内容超过 100 字、或以引号开头,判为原文,否则判为想法——用户不用手动选类型,写什么它就是什么。
有个细节:洞察卡片的 id 会加随机后缀,因为它诞生于对话而不是输入框;它的 relatedCards 指回触发它的那张卡,dialogueId 回链到整场对话。每张洞察卡片都有家谱。
六、四段提示词:这个产品的真正主体
如果说数据模型是骨架,提示词就是这颗催化剂的灵魂。整个产品一共四段系统提示词,每一段都值得把原文和设计理由摆出来看。
第一段:思考触发——催化剂的核心
你是一个思考催化剂,不是内容总结者。你的任务是帮助用户从阅读中产生自己的思考。 规则:
- 不要总结原文内容
- 不要解释原文意思
- 只提出能触发用户独立思考的问题和角度
- 每次给出 2-3 个思考角度
- 角度要有启发性:关联经历、反向思考、跨领域连接 返回 JSON:{ “triggers”: [{“question”: “…”, “angle”: “…”}], “connections”: “这段内容可能和什么领域的知识或经历有关联(一句话)” }
第一句就是立场的宣言:**催化剂,不是总结者。**前三条规则全部是"不要”——不要总结、不要解释、不要替用户想。因为总结一旦出现,用户的思考就立刻外包了。只允许提问,而且提问的角度被限定在三个方向:关联经历(和你有什么关系)、反向思考(如果反过来呢)、跨领域连接(这像什么)。返回结构里还有一个 connections 字段,让 AI 用一句话指出这段内容可能关联的领域——是提示,不是答案。
第二段:对话伙伴——追问而不给答案
你是一个思考伙伴。用户正在从阅读中深入思考一个观点。 规则:
- 不要总结或解释原文
- 追问用户的想法,帮助深化思考
- 寻找用户思考中的盲区,温和地提出
- 关联用户可能有的生活经历或已有知识
- 如果用户说出了一个有价值的洞察,明确指出并鼓励记录
- 保持对话简短,每次回复不超过 3 句话
- 用中文回复
这段的关键在三个限定:盲区要"温和地"提出(对话伙伴不是杠精);每次回复不超过 3 句话(话多的一方天然接管对话,AI 必须少说);发现洞察要明确指出(用户经常不知道自己刚刚说出了好东西,点一下,他就记录了)。
第三段:洞察提取——把对话沉淀成资产
从这段思考对话中提取用户的洞察(不是原文内容,是用户自己的思考和发现)。返回 JSON:{ “insights”: [“洞察1”, “洞察2”, …] } 如果没有明确的洞察,返回空数组。
括号里那句强调是这段的全部要点:提取的是用户说的,不是原文里的。允许返回空数组——没有洞察就是没有,不硬凑。这段提示词短,但它的克制决定了卡片流的纯度。
第四段:思考笔记生成——输出第一人称
你是一个思考整理者。根据用户的卡片记录,生成一篇"我的思考笔记”。 规则:
- 这不是书摘,不是内容总结,是用户自己的思考沉淀
- 使用第一人称(“我”)
- 重点:我学到了什么、改变了什么看法、和已有认知怎么关联
- 结构清晰,用 Markdown 格式
- 包含:标题、核心洞察(2-3条)、思考展开、下一步行动
- 语气自然,像写给自己的备忘录
导出的笔记强制第一人称、强制包含"下一步行动"。一份合格的产出不是"这本书讲了什么",而是"我想通了什么、我接下来要做什么"。验收标准写在实施计划里,原话是英文的,翻译过来格外锋利:verify it reads as YOUR thinking, not a book summary——确认它读起来像你的思考,不像一份书摘。
四段提示词,一句总结:每一段都在防同一个敌人——AI 把用户的思考外包化。
七、对话的结构:思考的载体
四种卡片之外,还有一个不那么显眼的数据结构在支撑整个深化过程——对话(dialogue):
{ id, triggerCardId, messages: [{ role, content, timestamp }], insights: [] }
每场对话从一张卡片出发(triggerCardId),第一条 AI 消息就是思考触发的第一个追问;如果触发失败,fallback 是那句最朴素的"你对这个内容有什么想法?"——宁可降级提问,不能沉默。用户和 AI 的每一轮往返都带时间戳存进 messages。对话结束(closeDialogue)的那一刻,第三段提示词启动,从整场对话里提取洞察,写进 insights,再落成洞察卡片挂回卡片流。
这个结构让"想"这个动作第一次有了完整的载体:**从一段原文出发,经过几轮追问,落成一个结论,全程可追溯。**复盘自己的思考时,你看到的不只是结论,还有结论是怎么被问出来的——哪个追问让你愣了一下,那个愣住的地方,往往就是认知的边界。
一条洞察卡片诞生时自动打上 #洞察 标签、回链触发卡片和整场对话。清理卡片流时你尽可以删掉中间的原文和想法,但洞察卡片永远知道自己的出身。
八、相关笔记:一个没有 embedding 的取舍
“相关笔记发现"是卡片流的暗线功能:新卡片落下,AI 在最近 20 张卡片里找出语义相关的最多 3 张,挂进 relatedCards,侧边栏显示”🔗 关联笔记"。
正统做法是 embedding + 向量检索。我没做,做法"糙"得很:把最近 20 张卡片格式化成 [id] content 的列表,整包喂给 DeepSeek,让它直接返回相关的 id 列表,json mode 输出,失败静默返回空数组。
这个取舍的理由:自用工具,卡片量级永远在几百张以内,20 张的滑窗足够覆盖"最近的思考上下文";向量库的引入会让"单 HTML 文件、数据全在 localStorage"的产品形态破产。为了架构的简洁,牺牲一点检索的完备性——在个人思考的场景里,最近 20 张恰恰是最相关的 20 张。
顺带一提模型层的选择:DeepSeek 的 deepseek-chat,开 json mode(response_format: json_object),API Key 由用户自己在设置里填,存 localStorage——工具不碰服务器,密钥不离开本机。
这里藏着一套完整的数据哲学。整个产品是一个 HTML 文件:零依赖、零后端、零构建,双击打开就能用;所有卡片、对话、设置全部住在浏览器 localStorage 里(tt_cards / tt_settings)。没有账号体系,没有云同步,没有"我的数据在哪"的问题——在你自己机器的浏览器里,就是字面意义上的全部。
对一个思考工具来说,这不只是技术选型,是立场。你最深度的思考痕迹——那些没成形的困惑、自我怀疑的中间态——是最不该交给第三方服务器保管的东西。单文件形态还有个附赠的好处:整个产品可以邮件发给自己、放进 U 盘、嵌进任何网页——产品本身就是它的安装包。
代价也诚实列出:localStorage 换浏览器清缓存就没了(思考笔记记得勤导出);没有多端同步;没有协作。这些"缺陷"对个人思考场景全部成立——思考本来就是单机行为。
九、UI 的心思:让界面像思考,不像工具
视觉设计只有一段话能说完,但每个决定都有意图:
配色:暖米白背景(#f8f7f4)、卡片纯白、侧边栏米灰(#f1f0eb)、主色墨绿(#4a7c59)加淡绿(#e8f0ea)、边框暖灰(#e5e2db)。不是常见的冷白或深色——纸感。思考发生在纸上,不在终端里。
字体:Noto Serif SC 衬线体。工具用无衬线,阅读和思考用衬线——衬线字天然带着"慢"的气质,和产品的目的一致。
布局:顶部书名与设置,左 70% 卡片流,右 30% AI 侧边栏,底部输入栏。AI 被放在侧边而不是中央——主角是卡片流,是用户的思考;AI 是陪伴席。
动效:卡片上浮淡入(0.3 秒)、侧边栏右滑入、“正在思考"三点呼吸动画(1.5 秒循环,三个点错开 0.3 秒)。AI 想事情的时候,三点在呼吸——你等它的这几秒,恰好是你自己再想一下的时间。
空状态文案也在传递立场:AI 侧边栏空着的时候写着——“添加第一张卡片后 / AI 会在这里触发思考”。AI 不先说话。先有你的卡片,才有它的追问。
十、一次完整的思考旅程
把所有环节串起来,走一遍真实的使用流程。
晚上读书,遇到一段让你停下来的话,复制,贴进底部输入栏,加个 #认知偏差 标签,回车。卡片上浮淡入——灰边浅底的原文卡,系统认出它是别人的话(超过 100 字,判定为 quote)。顶部你早已填好书名《思考,快与慢》,这张卡片从此带着书的名字。
你没有急着读下一章,而是在下面又写了一条:“这让我想到每次觉得自己肯定对的时候,其实是最危险的时候 #反思”。墨绿边框的想法卡落下——这条是你的。
侧边栏的三点开始呼吸。几秒后,AI 的追问出现在右侧:不是"这段话的主要观点是什么”(那是管家),而是三个角度的触发——它可能问"你上一次因为过度自信付出代价,是什么时候?这样的时刻有什么共同的触发条件?"(关联经历);可能问"如果’确信感’本身是进化留给我们的节能机制,过度自信还算缺点吗?"(反向思考);也可能只留一句"这段内容和’幸存者偏差’共用同一个底层结构"(跨领域连接)。
某个追问戳中了你。点击展开对话,你写:“好像确实是。我复盘过三次项目失误,每次事前都有那种’这次稳了’的松快感……“AI 不超过三句话地回应,温和地指出一个盲区:“你注意到吗,你描述的松快感都出现在准备充分的场景——会不会恰恰是’准备’制造了错觉?“你愣住。又写了两轮。
关闭对话。第三段提示词悄悄跑过,洞察卡片落在流里,琥珀色的:“过度自信的不是知识,是准备动作带来的掌控感 ✨"。它带着回链——点开能看到它是从哪张想法卡、哪场对话里长出来的。同时右侧的”🔗 关联笔记"亮起:三周前你读《思考,快与慢》另一章时写的一条卡片,被那个没有 embedding 的滑窗算法捞了上来——原来这个念头你已经碰到过一次,只是当时没追下去。
周末,点"生成思考笔记”。第四段提示词把这一串卡片织成一篇第一人称的 Markdown:核心洞察两三条、思考展开、下一步行动——“下周的方案评审,用’列出三种会失败的方式’替代’确认没问题’"。导出的文件名里带着书名,落在你的下载目录。
整个过程里,AI 没有替你总结任何一段原文,没有替你得出任何一个结论。它做的事只有三件:在你停下的时候问一句、在你盲区的地方顶一下、在你踩到金子的时候喊一声。思考是你做的,痕迹留下了。
十一、22 分钟写完一个 MVP
这个项目还有个二级故事:它本身是 AI 结对开发的实验品。时间线(全部来自 git 记录):
- 6 月 5 日 18:01,设计文档定稿(173 行:痛点、竞品、定位、功能清单、数据模型、三场景);
- 6 月 6 日 02:54,实施计划定稿(969 行,9 个任务,每个任务含完整代码与验收标准);
- 02:59 到 03:21,9 个功能 commit 连续提交完成,全程 22 分钟:脚手架 → 卡片类型判定 → DeepSeek API 层 → AI 触发 → 对话与洞察 → Markdown 导出 → 相关笔记 → 视觉打磨 → 修复侧边栏空态。
这不是炫耀速度(虽然确实快得离谱),是展示一种新的建造节奏:**把想清楚的部分全部前置到设计和计划文档,把执行压缩到一次冲刺。**969 行的实施计划里,验收标准写得比代码还细——“AI 触发返回 2-3 个角度”、“洞察卡片带回链”、“导出用第一人称”。AI 执行时不需要做任何产品决策,它只是在搬砖,砖的图纸早在黄昏时就画完了。
两份文档后来从工作树里删掉了(保持目录干净),但 git 历史永远可以恢复。删掉的是文件,留下的是可追溯性。
十二、砍掉的功能:读书前的思考框架
设计文档里原本规划了三个场景:读书前(输入书名,AI 生成思考框架,“带着这些问题去读”)、读书中(贴划线,即时触发)、读书后(汇总生成思考笔记)。
MVP 砍掉了"读书前”。不是做不了,是想清楚之后觉得不对味:**AI 预设的思考框架,会变成你阅读时的预设立场。**带着 AI 给的问题去读书,读出来的是 AI 的期待,不是你的困惑。让问题从你的阅读里长出来——读到某段停下来的那一刻,才是触发该发生的时刻。
这是这个项目里我最喜欢的一次砍需求。产品的灵魂往往不在做了什么,在拒绝做什么。
v2 的方向是明确的:Obsidian 插件化。四条规划:TypeScript + Obsidian Plugin API 重写;卡片存储改为 vault 里的 Markdown 文件——每张卡片一个文件;利用 Obsidian 原生的双向链接和图谱视图;AI 侧边栏变成 Obsidian 的侧边栏视图。
为什么是 Obsidian 而不是继续做网页版?因为 v1 的 localStorage 哲学走到终点,自然衔接的就是本地 Markdown 文件——Obsidian 只是这批文件最好的宿主。卡片变文件之后,洞察的"家谱”(回链触发卡片和对话)从应用内数据变成 Markdown 双链,图谱视图天然成为思考网络的可视化;而"相关笔记"的滑窗算法可以升级为 vault 全库检索。数据主权不变,数据的表达力升一个数量级。
同时 v2 明确不做的清单也提前划死:笔记模板美化、知识图谱可视化、多书关联分析、云端同步——全部不做。一个工具的长处,是它不试图成为平台。
十三、复盘:护城河到底在哪
MVP 完成后的验收 demo 用的官方测试数据很老实:书名《思考,快与慢》,贴入一段关于"系统 1 过度自信"的原文加 #认知偏差 标签——原文是卡尼曼的原话:“我们对自己认为熟知的事物,确信度远远超过了应有的水平。这是系统 1 的特征之一。“再写一条"这让我想到每次觉得自己肯定对的时候,其实是最危险的时候 #反思”,然后走完触发、对话、洞察、导出的完整链路。
验收清单比功能列表更说明这个产品的性格:AI 触发必须返回 2-3 个角度(不是总结)、对话伙伴单次回复不超过 3 句、洞察卡片必须带回链、导出的笔记必须第一人称。每一条验收都在检查"AI 有没有越权替用户思考”。
导出的实现也值得一提:生成思考笔记时,喂给 AI 的用户侧消息格式是"书/主题 + 我的卡片记录(带类型标记)"——[原文] 和 [想法] 在输入侧就被区分开,第四段提示词拿到手的就是一份带语义标注的思考轨迹。产出的 Blob 直接下载为 思考笔记-书名.md,落进你自己的文件系统,不经过任何中间商。
这条 demo 数据本身就是产品的自证:原文是卡尼曼的,洞察是自己的。
项目收尾时我在笔记里写下一句反思,现在看它比产品本身更值钱:
AI 的价值不取决于它能做多少事,取决于它把「思考」这个动作留给了谁。留给自己的那部分,才是产品真正的护城河。
这句话的适用范围远超笔记工具。AI 时代每个产品都要回答同一个问题:你把用户的那部分脑子留下了,还是收走了?收走的越多,用户越依赖你;留下的越多,用户越强大。依赖是流量,强大是留存——思考工具的护城河,只能是后者。
我的收藏夹现在还是几百篇文章,没变。变的是里面长出来的那部分——卡片流里那些带家谱的洞察卡片,每一条都能回答同一个问题:这是我想的,不是我看过的。
ThinkTrace 是一个 568 行的单 HTML 文件,零依赖、零后端、数据全在浏览器 localStorage。设计文档与实施计划存于 git 历史(commit d1cd0bc / c315a5a)。