项目介绍:VectorDB
VectorDB 是一个简单、轻量且完全本地的端到端解决方案,专门用于基于嵌入的文本检索。依靠其低延迟和小内存占用的特性,VectorDB 被用于驱动 Kagi Search 中的 AI 功能。
用户可以通过 Colab 示例笔记 了解如何使用 VectorDB 根据用户兴趣从 Kagi Small Web 的 RSS 源中筛选内容。
安装方法
用户可以通过 pip 安装 VectorDB:
pip install vectordb2
使用示例
以下是一个快速示例,展示如何将数据加载到内存并运行检索操作。所有数据处理,包括嵌入和向量搜索,都将在本地完成,对用户完全透明,确保了最大的性能。
from vectordb import Memory
# Memory 是存储与搜索内容的地方。
memory = Memory()
memory.save(
["apples are green", "oranges are orange"], # 保存文本内容,对于长文本会自动分块
[{"url": "https://apples.com"}, {"url": "https://oranges.com"}], # 可以为文本关联任意元数据(可选)
)
# 搜索最相关的结果,自动使用嵌入
query = "green"
results = memory.search(query, top_n=1)
print(results)
这将返回匹配块及所附元数据和向量距离(0表示精确匹配,数值越高表示差异越大)。
选项配置
Memory 类构造
-
memory_file
: 可选参数。指定内存文件的路径。如果提供,将内存持久化到磁盘,并加载/保存到这个文件。 -
chunking_strategy
: 可选参数。包含分块模式的字典。选项:
{'mode':'sliding_window', 'window_size': 240, 'overlap': 8}
默认设置{'mode':'paragraph'}
-
embeddings
: 可选参数。指定嵌入选项:fast
: 使用 Universal Sentence Encoder 4normal
: 使用 "BAAI/bge-small-en-v1.5" 默认设置best
: 使用 "BAAI/bge-base-en-v1.5"multilingual
: 使用 Universal Sentence Encoder Multilingual Large 3
用户还可以通过指定 HuggingFace 模型名称来使用自定义模型,例如 TaylorAI/bge-micro-v2
。相关信息也可在 Pretrained models 和 MTEB 获取。
Memory.save(texts, metadata, memory_file=None)
将内容保存到内存中。元数据将自动优化以减少资源使用。
texts
: 必需参数。要保存的文本或文本列表。metadata
: 可选参数。与文本关联的元数据或元数据列表。memory_file
: 可选参数。用于持久化内存文件的路径。
Memory.search(query, top_n=5, unique=False, batch_results="flatten")
在内存中进行搜索。
query
: 必需参数。查询文本或查询列表。top_n
: 可选参数。返回最相似的片段数量(默认:5)。unique
: 可选参数。仅返回来自唯一原始文本的项目片段(来自同一文本的其他片段将被忽略)。注意,这可能返回的片段数量少于请求数(默认:False)。batch_results
: 可选参数。当输入为查询列表时,输出算法可以是 "flatten" 或 "diverse"。Flatten 返回所有输入查询中的最近邻居,意味着所有结果可能都来自一个查询。"diverse" 尝试分散结果,以便每个查询的最近邻居都被平等地添加(首先是所有查询中的最近邻居,然后是第二近的,以此类推)。(默认:"flatten")
Memory.clear()
清空内存。
Memory.dump()
打印内存的内容。
使用示例
以下是更为详细的使用示例:
from vectordb import Memory
memory = Memory(
chunking_strategy={"mode": "sliding_window", "window_size": 128, "overlap": 16}, embeddings='TaylorAI/bge-micro-v2'
)
texts = [
"""
Machine learning 是一种用于自动化分析模型构建的数据分析方法。
它是基于系统可以从数据中学习、识别模式并在最小的人类干预下做出决策的人工智能分支。
机器学习算法训练的是包含期望输出实例的数据集。例如,用于分类图像的机器学习算法可能会在包含猫和狗图像的数据集上进行训练。一旦算法完成训练,它可以用于新数据的预测。例如,用于分类图像的机器学习算法可以用于预测新图像中是否包含猫或狗。
机器学习算法可用于解决多种问题。一些机器学习的常见应用包括:
分类: 将数据分类为不同组别。例如,机器学习算法可用于将电子邮件分类为垃圾邮件或非垃圾邮件。
回归: 预测连续值。例如,机器学习算法可用于预测房屋的价格。
聚类: 寻找相似数据点的组别。例如,机器学习算法可用于寻找具有相似购买习惯的客户组。
异常检测: 发现与其他数据不同的数据点。例如,机器学习算法可用于查找欺诈性信用卡交易。
机器学习是一种强大的工具,可以用来解决多种问题。随着可用数据的不断增长,机器学习在未来可能会变得更加重要。
"""
]
metadata_list = [
{
"title": "Introduction to Machine Learning",
"url": "https://example.com/introduction-to-machine-learning",
}
]
memory.save(texts, metadata_list)
query = "What is the relationship between AI and machine learning?"
results = memory.search(query, top_n=3, unique=True)
print(results)
结果示例:
[
{
"chunk": "Artificial intelligence (AI) 的描述……",
"metadata": {
"title": "Introduction to Artificial Intelligence",
"url": "https://example.com/introduction-to-artificial-intelligence"
},
"distance": 0.87
},
{
"chunk": "Machine learning 的描述……",
"metadata": {
"title": "Introduction to Machine Learning",
"url": "https://example.com/introduction-to-machine-learning"
},
"distance": 0.83
}
]
嵌入性能分析
VectorDB 中的嵌入模型通过标准化基准在不断评估。基准数据来自 MTEB。
Model | Latency | Benchmark 1 | Benchmark 2 | Benchmark 3 | Benchmark 4 |
---|---|---|---|---|---|
all-mpnet-base-v2 | 6.12 s | 80.28 | 65.07 | 43.69 | 83.04 |
图表和详细分析数据可以参考文本中的其他图像或网站链接。
向量搜索性能分析
VectorDB 也经过优化以提升检索速度。我们自动采用 Faiss 和 mrpt 以确保适用各种使用场景的最高性能。
许可证
VectorDB 遵循 MIT 许可证。