1. 项目概述:JiaJia-Search混合检索引擎
在RAG(检索增强生成)技术栈中,检索环节的质量直接决定了最终生成效果的上限。传统单一检索方式往往面临关键词匹配与语义理解难以兼顾的困境,而现有解决方案又普遍存在依赖云服务、计算资源消耗大、流程耦合度高等问题。JiaJia-Search正是为解决这些痛点而生的轻量级混合检索引擎。
这个项目最吸引我的地方在于其"全链路CPU优化"的设计理念。通过将BM25全文检索、向量语义检索、CrossEncoder重排三个关键环节全部用ONNX模型实现,不仅摆脱了对GPU硬件的依赖,还通过全局单例模型加载机制将内存占用控制在极低水平。实测在4核8G的普通服务器上,单次混合检索的端到端延迟可以稳定控制在200ms以内,这对于需要高并发响应的生产环境尤为重要。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 核心架构解析
2.1 混合检索的黄金组合
JiaJia-Search的核心创新在于将三种经典检索算法有机融合:
- BM25算法:基于jieba分词的经典关键词匹配算法,擅长捕捉精确术语匹配
- E5向量检索:multilingual-e5-small模型生成的384维语义向量,擅长理解查询意图
- CrossEncoder重排:bge-reranker-v2-m3模型进行的精细化相关性评分
这种组合的巧妙之处在于:BM25保证召回结果中必定包含关键词匹配文档(防止语义漂移),E5向量拓展语义相关结果,最后用CrossEncoder对Top30候选集进行微排序。就像足球比赛中的"初赛-复赛-决赛"机制,既保证覆盖面又提升精度。
2.2 并行化执行引擎
项目采用双路并行检索设计,BM25和向量检索同时启动。这里有个工程细节值得注意:BM25检索基于倒排索引,其时间复杂度为O(1),而向量检索需要计算余弦相似度,复杂度为O(n)。为了平衡两者速度,作者在向量检索时采用了FAISS的IVF索引(需额外构建),使得两种检索能在相近时间内完成。
实测数据显示,在万级文档库中:
- 纯BM25检索平均耗时:12ms
- 纯向量检索平均耗时:18ms
- 并行混合检索耗时:20ms
这种设计使得混合检索几乎没有增加额外延迟,却显著提升了召回质量。
