🔎 AI搜索引擎架构:从向量检索到智能重排序的工程实践
分类: 技术深度 | 日期: 2026-06-07 摘要: 深入解析AI搜索引擎的核心技术栈,包括稠密检索、稀疏检索、重排序模型和混合检索策略的工程实现。
一、概述:为什么传统搜索不够用了
传统搜索引擎基于关键词匹配(BM25、TF-IDF),在精确查询场景下表现出色,但面对语义搜索、多语言检索、模糊意图理解等场景时力不从心。AI搜索引擎通过"检索-重排序"(Retrieve-then-Rerank)两阶段架构,将召回率和精确率同时提升到新高度。
整体架构如下:
用户查询 → [稀疏检索 + 稠密检索] → Top-K候选集 → [重排序模型] → Top-N结果 → 用户
二、稠密检索:向量化语义匹配
稠密检索(Dense Retrieval)的核心是将文本编码为稠密向量,通过向量相似度进行匹配。2024-2026年的主流Embedding模型包括:
- BGE系列(BAAI):BGE-M3支持多语言、多粒度,维度1024,支持最大8192 token
- GTE系列(阿里):GTE-Qwen2在MTEB榜单上表现优异
- Jina Embeddings v3:支持Matryoshka表示学习,可灵活调整向量维度
使用 sentence-transformers 进行文本编码的典型代码:
from sentence_transformers import SentenceTransformer
import numpy as np
# 加载BGE-M3模型
model = SentenceTransformer("BAAI/bge-m3")
# 编码文档集合
documents = [
"向量数据库是AI搜索引擎的基础设施",
"Milvus支持分布式部署和亿级向量检索",
"HNSW算法在高维空间中提供近似最近邻搜索"
]
# 批量编码,normalize用于余弦相似度
doc_embeddings = model.encode(documents, normalize_embeddings=True)
# 查询编码与检索
query = "如何选择向量数据库?"
query_embedding = model.encode([query], normalize_embeddings=True)
# 计算相似度
scores = np.dot(doc_embeddings, query_embedding.T).flatten()
top_k_indices = np.argsort(scores)[::-1][:3]
三、稀疏检索:BM25与SPLADE
稀疏检索并未过时,它在精确术语匹配上依然不可替代。
BM25 仍是基线方案,Elasticsearch和Lucene内置支持。SPLADE(Sparse Lexical and Expansion)是学习型稀疏表示,将神经网络的语义理解能力注入稀疏检索:
# SPLADE使用transformers实现
from transformers import AutoModelForMaskedLM, AutoTokenizer
import torch
model = AutoModelForMaskedLM.from_pretrained("naver/splade-cocondenser-ensembledistil")
tokenizer = AutoTokenizer.from_pretrained("naver/splade-cocondenser-ensembledistil")
def splade_encode(text):
inputs = tokenizer(text, return_tensors="pt", truncation=True, max_length=256)
with torch.no_grad():
logits = model(**inputs).logits
# ReLU + log(1+x) 激活,产生稀疏表示
sparse_vec = torch.log(1 + torch.relu(logits)).max(dim=1).values
return sparse_vec
sparse_q = splade_encode("向量数据库选型")
四、重排序模型:精排的关键
重排序(Reranking)使用Cross-Encoder架构,将query和document拼接输入,逐对打分,精度远高于Bi-Encoder:
| 模型 | 类型 | 中文支持 | 延迟(单对) |
|---|---|---|---|
| BGE-Reranker-v2-m3 | Cross-Encoder | 优秀 | ~15ms |
| Cohere Rerank v3 | API服务 | 良好 | ~50ms |
| Jina Reranker v2 | Cross-Encoder | 优秀 | ~20ms |
使用BGE-Reranker的完整示例:
from sentence_transformers import CrossEncoder
reranker = CrossEncoder("BAAI/bge-reranker-v2-m3", max_length=512)
query = "如何优化向量检索性能?"
candidates = [
"HNSW算法通过构建层次化图结构加速近似最近邻搜索",
"Python是一种通用编程语言",
"IVF-PQ将倒排索引与乘积量化结合,降低内存占用"
]
# 构造query-document对
pairs = [[query, doc] for doc in candidates]
scores = reranker.predict(pairs)
# 按重排序分数排序
ranked = sorted(zip(candidates, scores), key=lambda x: x[1], reverse=True)
for doc, score in ranked:
print(f"[{score:.4f}] {doc}")
五、混合检索策略
实践中,混合检索(Hybrid Search) 是最优方案:结合稀疏检索的精确匹配和稠密检索的语义理解。
在 Milvus 中实现混合检索:
from pymilvus import (
connections, Collection, FieldSchema, CollectionSchema,
DataType, utility
)
# 连接Milvus
connections.connect("default", host="localhost", port="19530")
# 定义schema:同时包含稠密向量和稀疏向量
fields = [
FieldSchema(name="id", dtype=DataType.INT64, is_primary=True, auto_id=True),
FieldSchema(name="text", dtype=DataType.VARCHAR, max_length=2048),
FieldSchema(name="dense_vector", dtype=DataType.FLOAT_VECTOR, dim=1024),
FieldSchema(name="sparse_vector", dtype=DataType.SPARSE_FLOAT_VECTOR),
]
schema = CollectionSchema(fields, description="Hybrid search collection")
collection = Collection("hybrid_demo", schema)
# 创建索引
collection.create_index("dense_vector", {
"index_type": "HNSW",
"metric_type": "COSINE",
"params": {"M": 16, "efConstruction": 256}
})
collection.create_index("sparse_vector", {
"index_type": "SPARSE_INVERTED_INDEX",
"metric_type": "IP"
})
# 混合检索
from pymilvus import AnnSearchRequest, RRFRanker
dense_req = AnnSearchRequest(
data=[query_dense_vec],
anns_field="dense_vector",
param={"metric_type": "COSINE", "params": {"ef": 128}},
limit=20
)
sparse_req = AnnSearchRequest(
data=[query_sparse_vec],
anns_field="sparse_vector",
param={"metric_type": "IP"},
limit=20
)
# RRF融合排序
collection.load()
results = collection.hybrid_search(
reqs=[dense_req, sparse_req],
rerank=RRFRanker(k=60),
limit=10,
output_fields=["text"]
)
六、向量数据库选型与ANN算法
主流向量数据库对比:
- Milvus:分布式架构,支持亿级向量,GPU加速,生产级首选
- Qdrant:Rust编写,高性能单机,支持Payload过滤
- Weaviate:GraphQL接口,内置向量化模块
- Chroma:轻量级,适合原型开发
ANN算法选型:
- HNSW(Hierarchical Navigable Small World):查询速度快(<1ms),内存占用高,适合百万级数据
- IVF(Inverted File Index):内存友好,适合亿级数据,需训练聚类中心
- HNSW + PQ:兼顾速度与内存,适合十亿级场景
七、性能基准与工程建议
基于100万条中文文档的基准测试(单机A10 GPU):
方案 | Recall@10 | QPS | 内存
BM25 only | 0.62 | 5000 | 2GB
Dense (BGE-M3) + HNSW | 0.85 | 800 | 8GB
Hybrid + Reranker | 0.93 | 200 | 12GB
工程建议:
1. 生产环境优先采用 Hybrid Search + Reranker 三阶段架构
2. 使用 ef 参数在HNSW中平衡召回率与延迟
3. 对Reranker使用 batch推理 和 截断策略(仅rerank top-50而非top-200)
4. 建立 离线评估流水线,持续监控MRR、NDCG等指标
AI搜索引擎的工程化落地需要在精度、延迟和成本之间找到最佳平衡点。混合检索配合智能重排序,是当前最成熟的技术路线。