Files
ailine/backend/rag_core/sparse_embedder.py
root 8af82f8f7f
Some checks failed
构建并部署 AI Agent 服务 / deploy (push) Failing after 5m4s
feat: RAG混合检索系统完整实现 + 启动脚本修复
- 实现了稠密+稀疏混合检索,使用 Qdrant 原生 RRF 融合
- 修复了 retriever.py 的 BaseRetriever 继承和稀疏向量包装问题
- 修复了 pipeline.py 的 Optional 导入问题
- 添加了稀疏 embedder 的缓存配置
- 简化了 vector_store.py,移除不必要的逻辑
- 修复了 start.sh 的 PROJECT_DIR 硬编码和端口配置问题
- 完善了 RAG 检索的测试文件
2026-05-04 02:54:37 +08:00

34 lines
1.2 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""
BM25 稀疏嵌入器
基于 FastEmbed 的 Qdrant/bm25 模型,完全离线运行
"""
from typing import List
from fastembed.sparse.sparse_text_embedding import SparseTextEmbedding
from .config import FASTEMBED_CACHE_PATH
class BM25SparseEmbedder:
"""BM25 稀疏嵌入包装器,与现有嵌入器风格统一"""
def __init__(self):
self.model = SparseTextEmbedding(
model_name="Qdrant/bm25",
cache_dir=FASTEMBED_CACHE_PATH,
local_files_only=True, # 强制离线,永不联网
)
def embed_documents(self, texts: List[str]) -> List[dict]:
"""返回稀疏向量列表,每个为 Qdrant 兼容的 dictindices+values"""
return [vec.as_object() for vec in self.model.embed(texts)]
def embed_query(self, text: str) -> dict:
"""返回单个稀疏向量"""
return list(self.model.embed([text]))[0].as_object()
# 全局单例
_sparse_embedder_instance = None
def get_sparse_embedder() -> BM25SparseEmbedder:
global _sparse_embedder_instance
if _sparse_embedder_instance is None:
_sparse_embedder_instance = BM25SparseEmbedder()
return _sparse_embedder_instance