模块五:智慧——从数据到洞察 (The Intelligence)
写在前面: 如果没有任何反馈,用户只不过是在填一张 excel 表。 我们之前做的一切——Embedding、分类、训练,都是为了这一刻:给用户提供有灵魂的反馈。这在 AI 圈有个时髦的词叫 RAG(检索增强生成),但我们要在手机上做一个“微缩版”。
5.1 你的第二大脑:语义记忆 (Semantic Memory)
为什么叫“记忆”而不是“检索”?
当用户问“我最近状态怎么样?”时:
-
传统检索 (Search):只能找关键词匹配的记录(比如包含“状态”二字的日记)。
-
语义记忆 (Memory):能回想起你三周前写过“好累不想动”(Embedding 距离很近),即使这段话里没有“状态”这两个字。
核心差异:
我们不是为了让 AI 变得博学(External Knowledge),而是为了让 AI 真的认识你(Personal Context)。它不再是一个冷冰冰的问答机,而是一个拥有你过去所有生活片段记忆的老朋友。
价值:让 AI 说的每一句话,都有据可查,都是针对你的。不是通用的“你要多运动”,而是基于记忆的“我看你上次跑步还是三周前,要不今天动一下?”
5.2 检索:如何瞬间找到相关记忆?
当用户输入“我想提升自己”时,系统怎么知道他之前学过画画、放弃过吉他?
核心原理:Embedding 相似度
还记得模块一里的“坐标”吗?“提升自己”有一个坐标。我们只需要算出所有历史记录的坐标,看看谁离它最近。
方案 A:手写工坊 (Basic SQL + Manual Cosine) —— 简单粗暴
如果你的数据量只有几千条(个人目标管理 APP 通常如此):
-
存:在 SQLite 或 Core Data 里多加一列,存 Embedding 的 float 数组。
-
算:取出所有数据的 Embedding,写一个简单的函数计算余弦相似度 (Cosine Similarity)。
-
排:按分数排序,取前 5 个。
-
优点:零依赖,任何数据库都能做。
-
缺点:数据量上了万级会慢,每次都要全表扫描。
Swift 代码速查 (Schem A):
func cosineSimilarity(_ a: [Float], _ b: [Float]) -> Float {
let dotProduct = zip(a, b).map(*).reduce(0, +)
let magnitudeA = sqrt(a.map { $0 * $0 }.reduce(0, +))
let magnitudeB = sqrt(b.map { $0 * $0 }.reduce(0, +))
return dotProduct / (magnitudeA * magnitudeB)
}
// 实际使用时,建议使用 Accelerate 框架库 (vDSP) 进行向量加速,速度快 10 倍以上。
方案 B:引入外援 (sqlite-vec) —— 进阶推荐
随着 APP 发展,你可能需要更快的速度。这时可以使用 sqlite-vec 这样的向量搜索插件。
它让 SQLite 像开了挂一样,支持类似这样的查询:
SELECT * FROM goals
WHERE vec_distance_cosine(embedding, ?) < 0.2
ORDER BY vec_distance_cosine(embedding, ?)
LIMIT 5;
-
优点:极快,代码极其简洁,不用自己写循环算距离。
5.3 生成:混合引擎与云端策略的抉择
找到了相关数据,怎么生成建议?我们推荐“三层架构”。
-
层级 1:脊髓 (Reflex - 规则)
-
特点:< 1ms,条件触发。
-
例子:
IF 学习类目标本周占比 > 80% THEN 提示“注意休息”。 -
层级 2:小脑 (Routine - 端侧 LLM)
-
特点:自然语言,有温度。
-
例子:把查到的历史数据塞给本地的 Gemma/Phi-3 模型:“用户想‘提升自己’,但他以前吉他只坚持了2天,请给他一句鼓励。”
层级 3:云端协同 (The Cloud Strategy) —— 慎重抉择
在最初的设计中,可能会想用云端强大的 GPT-4 来给用户写深度周报。但这里涉及到一个战略调整。
关键调整:云端用于“训练”而非“推理”
与其每次都把用户隐私数据传给云端去生成一句话,不如采用更长线的策略:
- 本地向量化与脱敏:
-
在上传前,只上传向量 (Enbedding) 和 标签 (Labels)。
-
抹去原始文本(“我去国贸相亲” ->
[0.12, ...]+Social)。 -
云端拿到的只是一堆数字,反推回原始文本极其困难(虽然理论上非在特定条件下完全不可能,但门槛极高)。
-
注:这与 联邦学习 (Federated Learning) 有所不同。联邦学习是把梯度(Gradient)传上去,我们这里直接传脱敏后的中间层特征(Embedding),工程实现更简单,兼容性更好。
- 云端进化:
-
云端收集了成千上万用户的(脱敏)向量分布。
-
用这些数据训练一个更强大的教师模型。
-
然后把这个更强的模型蒸馏、压缩,下发回用户的手机。
决策红线:
这取决于你的业务承诺。
-
如果你承诺“数据绝不出设备”,那即便只上传向量,也是一种风险(用户未必理解向量和文本的区别)。那就坚决别做。
-
如果你是注重体验的服务,且用户协议允许脱敏数据改进服务,那么这种“本地推理,云端进化”的模式,是兼顾隐私与智能的最佳平衡点。