RemoveRelation 移除知识关系
(ctx context.Context, fromID, toID string, relationType RelationType)
| 601 | |
| 602 | // RemoveRelation 移除知识关系 |
| 603 | func (m *manager) RemoveRelation(ctx context.Context, fromID, toID string, relationType RelationType) error { |
| 604 | m.mu.Lock() |
| 605 | defer m.mu.Unlock() |
| 606 | |
| 607 | // 获取知识项 |
| 608 | item, err := m.getItemFromMemory(ctx, fromID) |
| 609 | if err != nil { |
| 610 | return fmt.Errorf("knowledge: item not found: %w", err) |
| 611 | } |
| 612 | |
| 613 | // 移除关系 |
| 614 | relations := make([]KnowledgeRelation, 0, len(item.Relations)) |
| 615 | removed := false |
| 616 | for _, existing := range item.Relations { |
| 617 | if existing.Type == relationType && existing.TargetID == toID { |
| 618 | removed = true |
| 619 | } else { |
| 620 | relations = append(relations, existing) |
| 621 | } |
| 622 | } |
| 623 | |
| 624 | if !removed { |
| 625 | return errors.New("knowledge: relation not found") |
| 626 | } |
| 627 | |
| 628 | item.Relations = relations |
| 629 | |
| 630 | // 保存更新 |
| 631 | if err := m.saveItemToMemory(ctx, item); err != nil { |
| 632 | return fmt.Errorf("knowledge: failed to save updated relations: %w", err) |
| 633 | } |
| 634 | |
| 635 | // 记录审计 |
| 636 | if m.config.EnableAudit { |
| 637 | m.audit("remove_relation", "", fromID, fmt.Sprintf("Removed relation to %s: %s", toID, relationType)) |
| 638 | } |
| 639 | |
| 640 | return nil |
| 641 | } |
| 642 | |
| 643 | // GetRelated 获取相关知识 |
| 644 | func (m *manager) GetRelated(ctx context.Context, id string, relationTypes []RelationType, maxDepth int) ([]*KnowledgeItem, error) { |
nothing calls this directly
no test coverage detected