AI2025-03-2930 分钟

语义搜索与RAG

从稀疏检索(BM25)到稠密向量检索,再到混合检索与 Reranking——系统梳理语义搜索与 RAG 的完整技术栈,以及实际工程中的优化策略。

语义搜索与RAG

语义搜索与RAG

Q1. 在RAG中,为什么要把文档划分成多个块进行索引?如何解决文档分块后,内容上下文缺失的问题?如何处理跨片段的依赖关系,可以通过使用强化学习等方法来实现。

分块是因为嵌入模型有长度限制,且短文本的嵌入质量更高。解决上下文缺失:1)重叠分块——相邻块共享一部分内容;2)父子分块——用小块检索但返回时带上所属大块的上下文;3)给每个块加上文档标题和摘要作为前缀。处理跨片段依赖:可以在检索后用LLM判断是否需要相邻块,或者用滑动窗口合并连续命中的块。

Q2. 如果发现向量相似度检索的匹配效果不佳,除了更换嵌入模型,还有哪些办法,可以通过使用强化学习等方法来实现。

1)优化分块策略——块太大语义模糊,太小信息不全;2)查询改写——用LLM把用户问题改写成更适合检索的形式;3)混合检索——向量+BM25关键词检索融合;4)加重排序模型——用交叉编码器对召回结果精排;5)微调嵌入模型——用领域数据做对比学习微调;6)HyDE——先让LLM生成假设答案,用答案的嵌入去检索。

Q3. 向量相似度检索不能实现关键词的精确匹配,传统关键词检索不能匹配语义相近的词,如何解决这对矛盾,可以通过使用强化学习等方法来实现。

用混合检索(hybrid search)。同时跑向量检索和BM25关键词检索,然后用RRF(Reciprocal Rank Fusion)等方法融合两路结果。向量检索负责语义匹配,BM25负责精确关键词匹配,取长补短。很多向量数据库(如Milvus、Weaviate)已经内置了混合检索功能。还可以加一层重排序模型做最终排序。

Q4. 向量相似度检索已经是根据语义相似度匹配,为什么还需要重排序模型,可以通过使用强化学习等方法来实现。

双编码器(向量检索)和交叉编码器(重排序)的精度差距很大。向量检索用双编码器,query和文档分别编码后算余弦相似度,效率高但交互不够充分。重排序用交叉编码器,把query和文档拼在一起联合编码,能捕捉更细粒度的语义交互,精度明显更高但速度慢。所以典型做法是:向量检索先召回top-100,重排序再从中选出top-5,兼顾效率和精度。

Q5. 为什么要在向量相似度检索前,对用户输入的话进行改写,可以通过使用强化学习等方法来实现。

用户的原始输入往往不适合直接检索:1)口语化表达和文档的书面表达有gap;2)用户问题可能省略了上下文(多轮对话中);3)一个复杂问题可能需要拆成多个子查询分别检索。查询改写用LLM把用户输入转换成更适合检索的形式,比如补全指代、拆分子问题、改写成陈述句等。HyDE更进一步——直接让LLM生成一个假设答案,用答案去检索,效果往往比用问题检索更好。

Q6. RAG系统检索的文档可能包含冲突信息或过时数据,如何在生成回答时防止被这些信息误导,可以通过使用强化学习等方法来实现。

1)给文档加时间戳和来源元数据,检索时优先返回最新的;2)在提示词中要求模型标注信息来源,遇到冲突时明确告知用户;3)用可信度标签——手动或自动给文档打分,检索时加权;4)让模型做事实性检查——对生成的回答和检索的文档做一致性验证;5)定期更新知识库,清理过时文档。

Q7. 如何使检索模块能够从生成模块获得反馈并动态调整检索策略,例如给不同的文档标注可信度,可以通过使用强化学习等方法来实现。

用反馈循环:1)生成模块评估每次检索结果的用处——哪些文档被引用了,哪些没用;2)基于这些反馈更新文档的可信度分数,影响后续检索排序;3)用用户反馈(点赞/点踩)作为RL的奖励信号,训练检索策略网络。本质是把检索当成可学习的决策问题,而不是固定的规则。

Q8. 如何提升RAG系统的可解释性,包括清晰标注生成内容的来源,以及量化展示系统对回答的确信度,可以通过使用强化学习等方法来实现。

来源标注:在提示词中要求模型对每个论断标注引用的文档编号,前端把编号渲染成可点击的引用链接。确信度:1)用检索分数作为基础置信度;2)让模型自评确信度(但需标定);3)通过多次采样算一致性——多次生成的回答越一致,确信度越高;4)计算生成内容与检索文档的语义相似度作为 grounding分数。

Q9. 智能体如何把处理企业任务的经验总结到知识库中,并在后续任务中引入知识库中的经验?如何保证经验不断积累,而不是简单用新的经验覆盖已有的经验,可以通过使用强化学习等方法来实现。

每次任务完成后,用LLM提取关键经验(什么有效、什么坑、最佳实践),结构化存入知识库。后续任务时用RAG检索相关经验。避免覆盖的方法:1)用追加而不是更新——新经验作为新条目加入,不删旧的;2)定期用LLM合并相似经验,生成更全面的总结;3)给经验加时间戳和使用频率,检索时可以按相关性和时效性加权。

Q10. 如果需要根据一本长篇小说的内容回答问题,小说长度远远超出上下文限制,应该如何综合利用摘要总结和RAG技术,使其能同时回答故事梗概和故事细节,可以通过使用强化学习等方法来实现。

建两层索引:1)粗粒度层——对每章/每部分做摘要,用于回答梗概类问题;2)细粒度层——对原文分块做RAG索引,用于回答细节问题。查询时先用路由判断问题类型:宏观问题用摘要层,细节问题用RAG层,复合问题两层都用。摘要可以分层做:章节摘要→部分摘要→全书摘要,形成层次化的理解。

Q11. 如何将RAG系统从纯文本扩展到多模态,支持检索图像、视频、图文并茂的文档等多模态信息,并在生成回答时以多模态形式呈现,例如包含原始文档中的图表和视频,可以通过使用强化学习等方法来实现。

索引端:用CLIP等多模态嵌入模型对图像、视频帧、文本统一编码到同一向量空间,支持跨模态检索。存储端:每个文档块关联其包含的图像/视频的引用。生成端:用多模态LLM(如GPT-4V、Qwen-VL)同时处理检索到的文本和图像,生成回答时标注哪些图表相关,前端展示时直接嵌入原图/视频。

Q12. 如果需要设计一个AI智能伴侣,每天记录用户说过的所有话、做过的所有事,持续多个月,如何在需要的时候快速检索出相关的记忆,让AI能够根据记忆回答问题,可以通过使用强化学习等方法来实现。

多层记忆架构:1)短期记忆——最近的对话保持在上下文中;2)中期记忆——用摘要压缩近几天的事件;3)长期记忆——所有历史记录存入向量数据库,用RAG检索。存储时对每天的记录用LLM提取关键事件、情绪、偏好等结构化信息。检索时同时用语义相似度和时间过滤。还可以建用户画像文档,定期更新,作为系统提示词的一部分。

RELATED

AI2025-04-01

为分类任务微调表示模型

深入讲解为分类任务微调表示模型的完整流程:分类头设计、全量微调 vs LoRA 的选择、小样本场景下的 SetFit 方案,以及过拟合防范与模型评估。

Read next25 分钟
AI2025-03-31

构建文本嵌入模型

从 Sentence-BERT 到对比学习(SimCSE),再到 Matryoshka 嵌入和 MTEB 基准评估——系统讲解如何构建和优化高质量文本嵌入模型。

Read next25 分钟