Index 将一段文本写入向量索引。 docID 应全局唯一, meta 中可包含 user_id/project_id/resource_id 等信息。 如果启用 Provenance, 将自动创建溯源信息。
(ctx context.Context, docID string, text string, meta map[string]any)
| 79 | // docID 应全局唯一, meta 中可包含 user_id/project_id/resource_id 等信息。 |
| 80 | // 如果启用 Provenance, 将自动创建溯源信息。 |
| 81 | func (sm *SemanticMemory) Index(ctx context.Context, docID string, text string, meta map[string]any) error { |
| 82 | if sm.cfg.EnableProvenance { |
| 83 | // 自动创建 Provenance |
| 84 | sourceID := docID // 使用 docID 作为默认 sourceID |
| 85 | if sid, ok := meta["source_id"].(string); ok && sid != "" { |
| 86 | sourceID = sid |
| 87 | } |
| 88 | |
| 89 | sourceType := sm.cfg.DefaultSourceType |
| 90 | if st, ok := meta["source_type"].(string); ok && st != "" { |
| 91 | sourceType = SourceType(st) |
| 92 | } |
| 93 | |
| 94 | isExplicit := false |
| 95 | if exp, ok := meta["is_explicit"].(bool); ok { |
| 96 | isExplicit = exp |
| 97 | } |
| 98 | |
| 99 | var provenance *MemoryProvenance |
| 100 | if isExplicit { |
| 101 | provenance = NewExplicitProvenance(sourceType, sourceID) |
| 102 | } else { |
| 103 | provenance = NewProvenance(sourceType, sourceID) |
| 104 | } |
| 105 | |
| 106 | return sm.IndexWithProvenance(ctx, docID, text, meta, provenance, nil) |
| 107 | } |
| 108 | |
| 109 | // 不启用 Provenance 时的原始逻辑 |
| 110 | return sm.indexInternal(ctx, docID, text, meta, nil) |
| 111 | } |
| 112 | |
| 113 | // IndexWithProvenance 使用指定的 Provenance 索引文本。 |
| 114 | // derivedFromIDs 表示该记忆派生自哪些其他记忆。 |