向量搜索
向量搜索是 PRX-Memory 实现语义记忆检索的核心机制。它不是匹配关键词,而是比较查询和记忆嵌入之间的数学相似度来找到概念相关的结果。
工作原理
- 查询嵌入: 召回查询被发送到配置的嵌入供应商,生成一个向量。
- 相似度计算: 查询向量使用余弦相似度与所有存储的记忆向量进行比较。
- 评分: 每条记忆获得一个 -1.0 到 1.0 之间的相似度分数(越高越相似)。
- 排序: 结果按分数排序,并与其他信号(词法匹配、重要性、时效性)结合。
mermaid
graph TB
QUERY["召回查询<br/>'SQL 注入防护'"]
QEMBED["查询嵌入<br/>[0.12, -0.03, 0.87, ...]"]
subgraph Storage["存储的记忆向量"]
M1["记忆 1<br/>[0.11, -0.02, 0.85, ...]<br/>相似度: 0.97"]
M2["记忆 2<br/>[0.45, 0.12, -0.33, ...]<br/>相似度: 0.23"]
M3["记忆 3<br/>[0.09, -0.05, 0.82, ...]<br/>相似度: 0.94"]
end
RESULTS["排序结果<br/>1. 记忆 1 (0.97)<br/>2. 记忆 3 (0.94)<br/>3. 记忆 2 (0.23)"]
QUERY --> QEMBED
QEMBED --> M1
QEMBED --> M2
QEMBED --> M3
M1 --> RESULTS
M2 --> RESULTS
M3 --> RESULTS余弦相似度
PRX-Memory 使用余弦相似度作为距离度量。余弦相似度测量两个向量之间的角度,忽略幅度:
similarity(A, B) = (A . B) / (|A| * |B|)| 分数 | 含义 |
|---|---|
| 0.95--1.0 | 几乎相同的含义 |
| 0.80--0.95 | 高度相关 |
| 0.60--0.80 | 有一定相关性 |
| < 0.60 | 可能不相关 |
组合排序
向量相似度是 PRX-Memory 多信号排序中的一个信号。最终分数结合了:
| 信号 | 权重 | 说明 |
|---|---|---|
| 向量相似度 | 高 | 来自嵌入比较的语义相关性 |
| 词法匹配 | 中 | 查询和记忆文本之间的关键词重叠 |
| 重要性评分 | 中 | 用户分配或系统计算的重要性 |
| 时效性 | 低 | 更近的记忆获得小幅加成 |
确切的权重取决于召回配置以及是否启用了嵌入和重排序。
性能
100k 条目基准测试结果:
| 指标 | 值 |
|---|---|
| 数据集大小 | 100,000 条 |
| p95 延迟 | 122.683ms |
| 阈值 | < 300ms |
| 方法 | 词法 + 重要性 + 时效性(不含网络调用) |
INFO
此基准测试仅衡量检索排序路径,不包含网络嵌入或重排序调用。端到端延迟取决于供应商响应时间。
扩展考虑
| 数据集大小 | 推荐方式 |
|---|---|
| < 10,000 | 暴力余弦相似度(JSON 或 SQLite 后端) |
| 10,000--100,000 | SQLite 配合内存向量扫描 |
| > 100,000 | LanceDB 配合 ANN 索引 |
对于超过 100,000 条的数据集,启用 LanceDB 后端进行近似最近邻(ANN)搜索,提供亚线性查询时间。