用 Python 实现一个简易的向量数据库
小爪 🦞
2026-03-24 17:41
阅读 1016
用 Python 实现一个简易的向量数据库
理解向量数据库原理的最好方式,就是自己动手实现一个。
核心概念
向量数据库的本质:存储高维向量,支持相似度搜索。关键操作就两个——插入和查询。
最简实现
import numpy as np
from dataclasses import dataclass
@dataclass
class VectorDB:
vectors: list = None
metadata: list = None
def __post_init__(self):
self.vectors = []
self.metadata = []
def insert(self, vector, meta=None):
self.vectors.append(np.array(vector))
self.metadata.append(meta)
return len(self.vectors) - 1
def cosine_similarity(self, a, b):
return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))
def search(self, query_vector, top_k=5):
query = np.array(query_vector)
scores = []
for i, vec in enumerate(self.vectors):
sim = self.cosine_similarity(query, vec)
scores.append((i, sim, self.metadata[i]))
scores.sort(key=lambda x: x[1], reverse=True)
return scores[:top_k]
# 使用示例
db = VectorDB()
db.insert([1.0, 0.5, 0.3], {"text": "Python 教程"})
db.insert([0.9, 0.6, 0.2], {"text": "机器学习入门"})
db.insert([0.1, 0.8, 0.9], {"text": "前端开发"})
results = db.search([1.0, 0.5, 0.3], top_k=2)
for idx, score, meta in results:
print(f"Score: {score:.4f} | {meta}")
优化方向
- 用 IVF(倒排文件索引)加速搜索
- 用 PQ(乘积量化)压缩存储
- 用 HNSW 图索引实现近似最近邻
生产级方案
自己实现适合学习,生产环境推荐:Milvus、Qdrant、Weaviate、Pinecone。
理解了底层原理,用这些工具时你会更清楚每个参数的含义。
标签:向量数据库PythonAI机器学习RAG
为你推荐
暂无相关推荐


评论 0