Files
Mofox-Core/src/memory_graph/utils/similarity.py
copilot-swe-agent[bot] 4eaef843a5 refactor: 消除重复代码并优化记忆系统结构
- 提取共享工具函数到 utils 模块
  - 创建 utils/similarity.py: 统一余弦相似度计算
  - 创建 utils/graph_expansion.py: 统一图扩展算法
- 删除重复实现
  - manager.py: 删除 _cosine_similarity 和 _fast_cosine_similarity (60行)
  - tools/memory_tools.py: 删除 _expand_with_semantic_filter 和 _cosine_similarity (150行)
- 清理废弃代码
  - 删除 tools/memory_tools.py 中10行注释掉的旧代码
  - 删除空的 retrieval/ 模块
- 净减少 ~150行重复代码

Co-authored-by: Windpicker-owo <221029311+Windpicker-owo@users.noreply.github.com>
2025-11-07 04:57:50 +00:00

51 lines
1.1 KiB
Python

"""
相似度计算工具
提供统一的向量相似度计算函数
"""
from typing import TYPE_CHECKING
if TYPE_CHECKING:
import numpy as np
def cosine_similarity(vec1: "np.ndarray", vec2: "np.ndarray") -> float:
"""
计算两个向量的余弦相似度
Args:
vec1: 第一个向量
vec2: 第二个向量
Returns:
余弦相似度 (0.0-1.0)
"""
try:
import numpy as np
# 确保是numpy数组
if not isinstance(vec1, np.ndarray):
vec1 = np.array(vec1)
if not isinstance(vec2, np.ndarray):
vec2 = np.array(vec2)
# 归一化
vec1_norm = np.linalg.norm(vec1)
vec2_norm = np.linalg.norm(vec2)
if vec1_norm == 0 or vec2_norm == 0:
return 0.0
# 余弦相似度
similarity = np.dot(vec1, vec2) / (vec1_norm * vec2_norm)
# 确保在 [0, 1] 范围内(处理浮点误差)
return float(np.clip(similarity, 0.0, 1.0))
except Exception:
return 0.0
__all__ = ["cosine_similarity"]