docs(memory): 修正三处仍把已删 CAS 当活的注释

9f7d91c2 删掉了 media.Store,但有三处注释还在说"向量存在 media.Store 里"、
"直接用于 media.Store 的稠密余弦检索"——留着会让读者以为那个包还在。

- internal/memory/vector/store.go:多模态稠密空间现用于**媒体块自带向量**的
  余弦召回,不再经 media.Store。
- internal/knowledge/knowledge.go:MediaRef 注释澄清字节作为条目自带数据
  落在条目目录的 File 上(Digest 只是内容派生身份,同内存无第二份)。
- internal/memory/migrate_blockdata.go:resolver 由调用方提供(迁移命令直读
  旧 CAS 冻结布局),sha256 校验也在那一侧做,不在这里重复。

纯注释,无行为变更。全仓生产编译 GREEN;memory/knowledge/vector 包测试通过。
This commit is contained in:
JianFeeeee
2026-10-12 16:55:40 +08:00
parent c620694084
commit 937164e515
3 changed files with 10 additions and 12 deletions

View File

@ -36,13 +36,10 @@ type Knowledge struct {
Media []MediaRef `json:"-"`
}
// MediaRef 是媒体在知识条目里的一等引用。Digest 是内容 sha256(媒体存储的
// 主键),向量不在这里——它存在 media.Store 里(同一份媒体可能被多条知识
// 引用,向量只算一次、只存一份)。
//
// 与 memory/media 的 Item 刻意不共用:那边是媒体存储的内务结构(含
// OriginPath/FirstSeen 等溯源字段),这里是知识条目对外暴露的引用。
// 知识库只依赖 digest + MIME 就能完成嵌入与检索。
// MediaRef 是媒体在知识条目里的一等引用。Digest 是内容派生的媒体身份
// (与记忆块的 `MediaBlockID` 同构:同内容⇒同 Digest),但**字节不在别处**:
// 字节作为条目自带数据落在条目目录的 `File` 上(与 content.md 并列,随条目生灭)。
// 向量不入侧车——它随条目在内存/稠密缓存里按需算。
//
// 命名为 KnowledgeMediaRef 而非 MediaRef,是为了不与别的包的类型撞名。
type KnowledgeMediaRef struct {

View File

@ -52,7 +52,8 @@ func (g *GraphDB) CountBlockDataBackfillCandidates() (int, error) {
// BackfillBlockData 把块负载从旧 CAS 回填到 data 列。
//
// resolve 按 payload_digest 取字节(通常包一层 media.Store.Get)。
// resolve 按 payload_digest 取字节(由调用方提供,如迁移命令直接读旧 CAS 的
// 冻结布局 blobs/<d[:2]>/<d[2:]>)。
// 单事务、全成功或全回滚。幂等:只处理 data 为空且 payload_digest 非空的块,
// 重复运行不会覆盖已回填的字节。
//
@ -60,9 +61,9 @@ func (g *GraphDB) CountBlockDataBackfillCandidates() (int, error) {
// 这是无法补救的既有数据损失(CAS 曾被清理过),不是迁移故障,不该阻断
// 其余块的回填。
//
// ★ 不校验「回填字节的 sha256 == payload_digest」:那是 CAS 的内部不变量,
// 已由 media.Store.Get 在读出时校验(见其 digest mismatch 检查)。这里
// 再算一次 sha256 对上万张图是纯浪费。
// ★ 不校验「回填字节的 sha256 == payload_digest」:那是旧 CAS 的不变量,
// 应由提供 resolve 的一方在读出时校验(homed-media-backfill 的 blobReader
// 就是这么做的)。这里再算一次 sha256 对上万张图是纯浪费。
func (g *GraphDB) BackfillBlockData(resolve BlockPayloadResolver) (BlockDataBackfillStats, error) {
var st BlockDataBackfillStats
if resolve == nil {

View File

@ -22,7 +22,7 @@ type Vectorizer interface {
// MultimodalEmbedder 是稠密多模态编码器的接口。
//
// 与 Vectorizer(稀疏词向量,供 TF-IDF/倒排检索)刻意区分:多模态模型产出的
// 是共享稠密空间,直接用于 media.Store 的稠密余弦检索,
// 是共享稠密空间,直接用于媒体块的稠密余弦召回(块自带向量),
// **不得**塞进文档/知识层的稀疏 vector.Store(会破坏倒排剪枝与 TF-IDF 语义)。
//
// 实现不限:可以是内嵌 ONNX,也可以是外部 HTTP 向量服务——