Utopia搜索与RAG揭秘:Tantivy全文+pgvector向量如何混合出更准答案
Utopia搜索与RAG揭秘Tantivy全文pgvector向量如何混合出更准答案【免费下载链接】utopia首个开源企业世界模型项目地址: https://gitcode.com/deeplethe/utopiaUtopiadeeplethe/utopia是首个开源企业世界模型它内置了一套混合检索的 RAG 搜索架构全文检索由内嵌的TantivyBM25 算法 jieba 中文分词负责向量检索由pgvectorHNSW 索引负责两路结果用RRF倒数排名融合合并让知识库问答比单一方案更准、更快。整个过程只需要一个 Rust 二进制加一个 Postgres无需额外部署 Elasticsearch 或向量数据库。为什么需要全文 向量混合检索单用任何一种方案都有明显的短板纯全文检索BM25擅长精确词匹配找编号、专有名词很准但换个说法就找不到了——你问负责人文档里写的是带头人它就抓瞎。纯向量检索擅长语义近似但容易把意思相近却张冠李戴的内容捞上来对精确术语如合同编号AC-2024-017反而不敏感。Utopia 的做法是让两者各管一摊、再合并投票这正是混合检索Hybrid Search的核心思想。全文路内嵌 Tantivy中文分词开箱即用全文索引直接内嵌在 Utopia 二进制里由独立的 utopia-search crate 实现核心是一个 SearchIndex 结构。几个值得新手注意的设计jieba 中文分词索引和查询走同一套分词器中文无需手动配置分词方案。单索引多知识库kb_id作为过滤字段存在索引里多个知识库共享一份索引查询时按库过滤互不串味。索引只存 id 映射分块正文存在 Postgres索引里只有chunk_id的对应关系索引体积可控正文以数据库为准。BM25 召回查询用与索引一致的 jieba 分词后按 OR 组合取每路前24条候选。向量路pgvector 由任务构建的 HNSW 索引向量存在 Postgres 的chunks.embedding列里靠 pgvector 的余弦距离找近邻。真正让它快的是 vector_index.rs 中的一系列工程细节完整决策过程记录在架构决策 0035向量索引由任务构建HNSW 索引不是迁移建的而是任务建的向量维度取决于你选的嵌入模型只有第一次写入向量时才知道所以由后台任务异步CONCURRENTLY建索引不锁表。实测效果5 万条 1024 维分块无索引时一次查询约 195 ms全表算余弦距离建好 HNSW 后降到4.5 ms——两个数量级的差距。小库自动走精确路径规划器发现库很小时会自己选索引 排序的精确方案不用应用层写阈值猜测。融合RRF 投票 双路并行两路结果在 retrieval.rs 的hybrid函数里汇合规则很朴素RRF 融合rrf_fuse 按排名倒数加权给每个分块累加分数——1/(60 名次)。被两路都召回的分块天然排到最前面这正是混合检索比单路更准的原因。双路并行BM25 扔进阻塞线程池、向量路走异步调用tokio::join!同时跑总延迟取两路的最大值而不是相加。静默降级没配嵌入模型、嵌入请求失败或返回空向量路直接缺席检索照常以纯 BM25 完成——模型故障不会被放大成检索报错。双时间轴支持Utopia 的事实带世界时间 入库时间两条时间轴as_of参数可以让混合检索回到当时的知识状态作答这是普通 RAG 做不到的。怎么用聊天、搜索接口与 MCP 工具混合检索对使用者是透明的出现在三个地方聊天问答提问时自动检索流式答案带行内引用点开就是出处原文见 chat-and-mcp 设计文档 与 search_routes.rs 的搜索接口。内置 Agent / MCP 的search_docs工具外部 Agent如 Claude Desktop、Cursor通过 MCP 连接时也能用同一套混合检索工具清单见 web/src/docs/mcp.md。Charter 文档检索Utopia 还内置了自解释文档索引 DocsIndex用它回答Utopia 本身怎么用这类问题。小结环节技术选型解决什么问题全文召回TantivyBM25 jieba精确词、编号、中文分词向量召回pgvector HNSW语义近似、换说法也能命中结果融合RRFk60双路共识加权谁被两路点名谁靠前执行方式双路并行 失败降级延迟不叠加模型挂了检索不断对新手来说这套架构最值得借鉴的三点别只押一条召回路、融合要按名次而不是分数不同算法的分数没有可比性、向量索引要异步构建并做好降级。全部源码就在 crates/utopia-search 和 crates/utopia-server/src/retrieval.rs配合 docs/design/ 下的设计文档半天就能读完这套混合检索的完整实现。【免费下载链接】utopia首个开源企业世界模型项目地址: https://gitcode.com/deeplethe/utopia创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
上一篇/下一篇内容由系统自动关联
返回资讯列表 →