从微信读书后台架构看RAG知识召回架构

微信读书后台架构演进之路

从微信读书后台架构看RAG知识召回架构

当千万级书籍遇上亿级用户笔记,如何构建高性价比的智能检索系统?微信读书用分级架构给出了答案。

基于微信读书构建RAG召回系统,核心挑战如下:

  1. 基于书籍原文构建全文检索,为了达到最好的效果,往往需要支持按语义进行段落切分,在此基础上构建embedding进行语义召回。微信读书拥有百万级书籍原文数据,此外,对于用户导入书,更是达到亿级别规模。现有架构无论从成本还是耗时上都无法解决。
  2. 为了支持更多维度的召回,需要对UGC内容进行召回,部分UGC内容属于私密信息,并不向全网公开,只需要满足用户个人检索即可。此时如果用常规的检索系统构建常驻索引,访问率太低,成本难以收敛。

我们把数据划分成两类:全局公开可搜以及用户个人可搜。

  1. 对于全局公开可搜索的数据,如库内电子书的全文、书籍大纲、书评、人工知识库等,我们构建了一套入库流程,能对源信息进行语义分段、生成正排倒排,语义分段基于开源的chunk模型进行微调,正排基于fkv,倒排则基于ES构建,ES提供了DiskANN方案,通过设置合理的缓存和分片,能在存储成本和召回效率之间取得不错的平衡。对于App 内主搜等低时延场景,为了满足多种定制化检索需求,我们自建了基于内存索引的Searchsvr服务,支持索引落盘,可以在毫秒级返回电子书搜索结果。

  2. 对于用户个人数据,如导入书全文、个人想法等,特点是数据量大但使用频率不高,不需要针对全网用户进行检索,如果采用上述方案,会带来成本灾难,性价比极低。为此,我们按用户及物料的维度,基于USearch、Xapian等方案构建了向量及文本索引,这些组件的优势在于可以把单个索引存储成文件的形式,便于落盘,配合一些量化的方法,可以把大大压缩索引大小。在构建索引阶段,按用户+类型构建出不同的索引,并存储在低成本的COS上,当用户需要检索召回时,采用读时加载的方式实时进行召回,结合CFS进行预热可以大大提升检索速度。当检索完成后,定时淘汰策略会把长期不用的索引从CFS中清理,降低存储成本。

一、数据分类:全局公开 vs 用户私有

微信读书将数据划分为两大类型,采用完全不同的技术路线:

数据类型典型场景技术挑战
全局公开数据电子书全文/书评/知识库高并发检索+语义理解
用户私有数据导入书籍/个人笔记低成本存储+动态加载

二、文本处理流水线

1. 语义分段:喂AI吃“书”

  • 基于开源chunk模型微调,突破传统按规则分段的局限
  • 支持段落级语义理解,使"红楼梦主要人物关系"能精准定位到相关章节
  • 处理百万级书籍时,分段耗时从小时级优化至分钟级

2. 双索引构建

索引类型技术方案优化点
正排索引自研fkv存储支持毫秒级文档内容获取
倒排索引ES+DiskANN存储成本降低40%,召回率提升15%

三、检索方案设计

1. 全局数据

# 内存索引服务核心逻辑示例
class SearchSvr:
    def __init__(self):
        self.memory_index = LoadIndex()  # 内存加载索引
        self.disk_backup = DiskCache()   # 落盘备份
        
    def search(self, query):
        # 毫秒级响应
        return self.memory_index.search(query)

关键点:

  1. 内存索引+异步落盘
  2. 动态分片策略
  3. 热点数据预加载

2. 用户数据

用户请求
索引是否在CFS?
立即检索
从COS加载索引
CFS预热缓存
返回结果
定时清理冷索引

关键点:

  1. USearch量化压缩:索引体积减少60%
  2. COS+CFS二级存储:存储成本降低75%
  3. 动态加载机制:冷启动延迟<200ms

四、总结RAG检索方案

首行文章链接-图6.1

微信读书的RAG检索方案,其核心点在于看重前端用户体验,设计分级索引架构,数据先通过IndexBuilder的“加工线”变成向量、分词等索引,存进COS仓库;当用户发起搜索时,RecallSvr同时从MemSearch(内存快查)、COS的不同货架(向量/分词/正排)、ES(专业检索)调取数据,综合排序后返回结果,达到高效和精准的目标。

### 微信小程序 Agent RAG 使用指南 #### 构建私有知识库 为了使微信小程序中的Agent具备更强的知识处理能力,构建一个有效的私有知识库至关重要。这涉及到收集、整理并结构化特定领域的数据集,以便于后续的查询和利用[^1]。 #### 向量表示(Embeddings) 向量表示是将文本转换成数值型特征的过程,在此过程中每篇文档或句子被映射到高维空间的一个点上。对于微信小程序而言,这意味着用户提问能够转化为机器可理解的形式,并用于相似度计算以获取最接近的回答。 #### 基于向量检索的RAG架构 采用基于向量检索的方法来增强对话系统的性能,即Retrieval-Augmented Generation (RAG),它结合了传统搜索引擎的优势以及现代预训练语言模型的强大生成力。具体来说就是在接收到一个问题时先从预先建立好的索引中找出若干候选答案片段作为上下文提供给解码器进行最终回复生成。 ```javascript // 示例:初始化RAG模块并与微信小程序集成 const rag = require('your-rag-library'); async function getResponse(query) { const context = await rag.retrieveContexts(query); let responseText; try { responseText = await rag.generateResponse(context, query); } catch(error){ console.error(`Error generating response: ${error.message}`); throw error; } return {response: responseText}; } ``` #### 混合检索与RAG-Fusion简介 除了纯向量匹配外,还可以考虑引入其他类型的线索比如关键词匹配等形成混合策略提高召回率;而所谓的RAG-Fusion则是指进一步融合多个不同来源的信息源共同作用于同一个推理过程之中。 #### 效果评估的重要性 无论采取何种方式改进系统的表现形式,都需要有一套完善的评测机制确保所做改动确实带来了正面影响而不是相反方向的变化。因此针对每一次调整都应当记录下相应的指标变化情况供日后分析参考之用[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值