辅助方法 generateEmbedding 生成向量嵌入
(ctx context.Context, item *KnowledgeItem)
| 781 | |
| 782 | // generateEmbedding 生成向量嵌入 |
| 783 | func (m *manager) generateEmbedding(ctx context.Context, item *KnowledgeItem) ([]float32, error) { |
| 784 | if m.embedder == nil { |
| 785 | return nil, errors.New("knowledge: no embedder available") |
| 786 | } |
| 787 | |
| 788 | text := item.Content |
| 789 | if text == "" { |
| 790 | text = item.Title + " " + item.Description |
| 791 | } |
| 792 | |
| 793 | embeddings, err := m.embedder.EmbedText(ctx, []string{text}) |
| 794 | if err != nil { |
| 795 | return nil, fmt.Errorf("knowledge: embed failed: %w", err) |
| 796 | } |
| 797 | if len(embeddings) == 0 { |
| 798 | return nil, errors.New("knowledge: no embedding generated") |
| 799 | } |
| 800 | embedding := embeddings[0] |
| 801 | |
| 802 | return embedding, nil |
| 803 | } |
| 804 | |
| 805 | // calculateQuality 计算知识质量 |
| 806 | func (m *manager) calculateQuality(item *KnowledgeItem) float64 { |