教程|用 turbovec 替代 Pinecone:单节点 1000 万向量的 RAG 索引
这篇教程演示如何用 turbovec(GitHub)搭一个本地 RAG 索引。
第 1 步:安装
pip install turbovec numpy
第 2 步:准备数据
用 bge-m3 生成 1024 维向量:
from sentence_transformers import SentenceTransformer
import numpy as np
model = SentenceTransformer("BAAI/bge-m3")
texts = [doc.page_content for doc in documents] # 你自己的文档
vectors = model.encode(texts, normalize_embeddings=True)
print(vectors.shape) # (N, 1024)
第 3 步:建索引
import turbovec as tv
index = tv.Index(dimension=1024, precision="3bit")
index.add(vectors.astype("float32"))
index.save("my_index.tvec")
1000 万 1024-d 向量,单机 8 分钟。
第 4 步:查询
index = tv.Index.load("my_index.tvec")
query = model.encode(["什么是持续学习?"], normalize_embeddings=True)
results = index.search(query[0], k=10)
# results: [(score, idx), ...]
p99 < 5ms。
第 5 步:接到 RAG
from openai import OpenAI
client = OpenAI()
def rag(query, k=5):
q_vec = model.encode([query], normalize_embeddings=True)[0]
results = index.search(q_vec, k=k)
context = "
".join([texts[i] for _, i in results])
resp = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": f"基于以下上下文:
{context}
回答:{query}"}]
)
return resp.choices[0].message.content
print(rag("DeepSeek-R1 是不是真正在推理?"))
性能对比
- Pinecone(云):1000 万向量 $70/月
- turbovec(本地):免费 + 16GB 内存
- 延迟:本地 5ms vs 云 30-50ms
- 数据安全:本地不外传
局限
- 不支持向量删除(要重建)
- 不能跨节点扩展(单机)
- Python GIL 还存在,极致性能要调 Rust