这周末把 RAG 接到了 hub 的 AI 模块。原本以为是个工程问题,做完发现它其实是个写作问题。
工程上其实简单
链路清楚得很:所有 md 文件 → 段落切片 → bge-m3 生成 embedding → Vectorize 索引 → 用户提问时实时检索 top 3 拼进 system prompt。整个改动不到 300 行代码,跑通后 AI 突然就开始用「我之前在 xx 那篇里写过…」这种语气回答了。
但写作上麻烦
模型的”我”是它读过的那部分我。我现在 hub 里只有 6 篇文章,那 AI 嘴里的 Andy 就只能基于这 6 篇——一个写过 Astro 教程、聊过阅读系统、吐槽过 API 设计的人。
如果一个不认识我的人来问「你最焦虑的事是什么」,AI 大概率会用这 6 篇里语气最接近的那一段去硬接。它给出的不是错误答案,而是一个”被我有限内容塑造出来的版本”。
这件事让我想起 Cal Newport 在 Slow Productivity 里的提醒:你呈现给世界的工作,会反过来定义你。我以前理解这是说”别只发表浅薄的东西”,现在多了一层意思——你不写的部分,AI 也学不到。
三条暂定的写作守则
为了让那个”被检索出来的 Andy”更接近真实的 Andy,我打算:
- 每月一篇 WJ,主题从月度复盘里挑最有感触的那个。流水账不行,得有结论或转折。
- 诚实优先于完整。失败、犹豫、想撤回的决定,比成功 case 更重要——没有这些 AI 就只剩骨架没有血肉。
- 打具体时间戳。月份、季节、当时在听的歌,让”那年我在做什么”可以被精确定位。
一个有点反直觉的发现
接 RAG 之前我想,索引会让 AI 更”博学”。结果反而是相反的:检索阈值我调到 0.4,相关度不够的时候它会主动放弃引用,回到空 system prompt 的状态。换句话说——
RAG 让 AI 更容易承认「这件事我没写过」。
这比我预期的更接近真实的人。真人也是:知道的就说,没经历过的就不装。
下个月想写的主题:为什么命令行美学这件事我喜欢了 8 年都没腻。涉及一些关于”约束作为创造力”的思考,估计要写两遍才能写顺。