v0.4.1 是个「小步快跑」版本:两件事,一件是体验增强(公共记忆自动注入),一件是安全收口(移除明文密码日志)。两件事都指向同一个原则——机制替代约定。

公共记忆:每轮对话自动召回注入

Linkora 的记忆分两层:scope=public(公共,所有对话可见)和 scope=private(个人,私域召回)。v0.4.1 之前,两层都要 LLM 主动调用工具才能召回,问题是——LLM 经常忘。

公共记忆的语义本来就是「项目级背景信息」(团队术语、协作规范、公司名字),它就该每轮都在 prompt 里。v0.4.1 改成:公共记忆(scope=public)每轮对话自动召回并注入 system prompt,与 RAG 知识库注入对称。个人记忆仍保持 LLM 主动调用——因为它涉及隐私边界,不该无条件注入每条消息。

权重提升:仿 RAG v5 的「指令前缀 + 紧贴 user 之前」

公共记忆注入的位置和形式有讲究。直接塞在 system prompt 尾部,LLM 经常被 KB 文档覆盖;塞在最前面,token 又会被长对话挤到上下文窗口外。最后参照 RAG v5 的策略:

这套结构在 RAG 上验证过——让 LLM 在「看 KB」和「看 user」之间不会被 KB 文档误导。公共记忆和 RAG 用同一套权重提升策略,一致性也省了一类心智负担。

安全收口:日志里不允许出现明文密码

auth_middleware.py 里有一处历史遗留的 debug 日志,会把登录请求里的 password 字段原样写进日志。这条日志平时没人翻,但只要有人翻——就是 P0 事故苗头。CodeQL 也一直在报警。

v0.4.1 直接把那行日志删掉,连 password 字段名都不在日志里出现。审计层面的原则:默认不记录敏感字段,白名单加白名单,不要靠人的记忆去「记得别打 password」。

升级注意:公共记忆自动注入是透明增强,无需额外配置。默认阈值 0.55 / top_k=3,可在 config.yaml 用 memory.recall.threshold 与 memory.recall.top_k 调整。docs/memory.md 已同步更新。

完整变更见 CHANGELOG,代码在 GitHub。