RAG由浅入深02
第一部分分块策略 —— 如何优雅地切分长文档分块Chunking是RAG的地基工程——分块太大检索噪声多分块太小语义不完整。核心目标是在保持语义完整性和控制检索粒度之间找到最佳平衡。 五大主流分块策略1. 固定字符分块最基础deffixed_size_chunking(text,chunk_size500,overlap50): 按固定字符数切分带重叠区域防止语义断裂 chunks[]start0whilestartlen(text):endstartchunk_size chunks.append(text[start:end])startend-overlap# 重叠区域保留上下文returnchunks优点实现简单计算开销小缺点可能切断句子或段落语义不完整适用场景对质量要求不高的快速原型2. 递归字符分块LangChain默认方式fromlangchain.text_splitterimportRecursiveCharacterTextSplitter splitterRecursiveCharacterTextSplitter(chunk_size500,chunk_overlap50,separators[\n\n,\n,。,,,, ,]# 优先级递减)chunkssplitter.split_text(document)核心思想优先在段落、句子边界切分保持自然语义单元优点比固定切分更智能保留更多语义完整性适用场景通用场景的首选方案3. 语义分块基于句子嵌入fromsentence_transformersimportSentenceTransformerimportnumpyasnpdefsemantic_chunking(sentences,similarity_threshold0.7): 计算句子间的语义相似度相似度低的切分 modelSentenceTransformer(all-MiniLM-L6-v2)embeddingsmodel.encode(sentences)chunks[]current_chunk[sentences[0]]foriinrange(1,len(sentences)):# 计算当前句子与上一句的相似度simnp.dot(embeddings[i],embeddings[i-1])/(np.linalg.norm(embeddings[i])*np.linalg.norm(embeddings[i-1]))ifsimsimilarity_threshold:chunks.append( .join(current_chunk))current_chunk[sentences[i]]else:current_chunk.append(sentences[i])ifcurrent_chunk:chunks.append( .join(current_chunk))returnchunks优点能智能识别主题边界分块质量高缺点计算开销大需要调用模型适用场景对检索精度要求高的生产环境4. 文档结构感知分块针对特定格式defmarkdown_aware_chunking(markdown_text): 按Markdown的标题层级切分保持文档结构 importre# 按标题# ## ###分割patternr(#{1,3}\s[^\n]\n)sectionsre.split(pattern,markdown_text)chunks[]current_headercurrent_content[]foriteminsections:ifre.match(r^#{1,3}\s,item):# 是标题保存之前的块ifcurrent_headerandcurrent_content:chunks.append(current_header\n.join(current_content))current_headeritem current_content[]else:current_content.append(item)ifcurrent_headerandcurrent_content:chunks.append(current_header\n.join(current_content))returnchunks适用场景技术文档、法律文书、财报等结构化文档5. 大小块混合策略进阶方案defhybrid_chunking(document): 同时建立大块用于上下文和小块用于检索 # 大块提供完整上下文large_chunksRecursiveCharacterTextSplitter(chunk_size1000,chunk_overlap100).split_text(document)# 小块用于精确检索small_chunksRecursiveCharacterTextSplitter(chunk_size200,chunk_overlap50).split_text(document)return{large_chunks:large_chunks,small_chunks:small_chunks,strategy:父文档检索Parent Document Retrieval}核心思想检索时用小块精确定位返回答案时附带大块上下文优点兼顾检索精度和回答质量 分块策略选择决策表文档类型推荐策略chunk_sizeoverlap短文章500字不切分整文使用--技术博客/文章递归字符分块500-80050-100法律/政策文档结构感知分块按章节-财报/年报语义分块动态-多主题综合文档混合策略200/100050/100用户评论/对话固定字符分块200-30030-50 第二部分检索优化 —— 让AI找到最相关的信息分块只是第一步更关键的是如何让检索系统精准找到用户问题的相关片段。 检索优化策略矩阵策略1多路召回 重排序Reranking核心思想先快速召回多个候选再用更精细的模型重新排序。fromsentence_transformersimportCrossEncoderimportnumpyasnpdefrerank_search(query,chunks,top_k10): 多路召回 交叉编码器重排 # 1. 第一轮快速召回20个候选用普通嵌入embeddingsOpenAIEmbeddings()query_embembeddings.embed_query(query)chunk_embs[embeddings.embed_query(chunk)forchunkinchunks]# 计算余弦相似度取前20similaritiesnp.dot(chunk_embs,query_emb)top_indicesnp.argsort(similarities)[-20:][::-1]candidates[chunks[i]foriintop_indices]# 2. 第二轮用交叉编码器精细排序rerankerCrossEncoder(cross-encoder/ms-marco-MiniLM-L-6-v2)scoresreranker.predict([(query,chunk)forchunkincandidates])# 返回排序后的top_krerankedsorted(zip(candidates,scores),keylambdax:x[1],reverseTrue)return[chunkforchunk,scoreinreranked[:top_k]]性能提升检索精度提升20-30%适用场景大规模知识库10万文档策略2HyDE假设文档嵌入核心思想让大模型先想象一个理想答案然后用这个假想答案去检索。defhyde_search(query,llm,knowledge_base): HyDE先让AI生成假设答案再检索 # 1. 生成假设答案不要求准确只求相关概念hypothesisllm.invoke(f假设你是专家请针对以下问题写一段可能的答案草稿{query})# 2. 用假设答案进行检索而非原始问题hypothesis_embedembeddings.embed_query(hypothesis.content)resultsknowledge_base.similarity_search_by_vector(hypothesis_embed)returnresults优点能召回与问题语义相近但关键词不同的文档缺点增加LLM调用开销约100-300ms策略3多查询查询Multi-Query核心思想将用户问题改写为多个不同视角的问题分别检索后合并去重。defmulti_query_search(query,llm,knowledge_base): 生成5个不同视角的问题合并检索结果 # 1. 生成多个查询变体promptf请将以下问题从不同角度改写为5个不同的问题保持原意{query}variantsllm.invoke(prompt).content.split(\n)[:5]# 2. 每个变体分别检索all_results[]forqin[query]variants:resultsknowledge_base.similarity_search(q,k3)all_results.extend(results)# 3. 去重并合并基于内容相似度unique_resultsdeduplicate_documents(all_results)returnunique_results适用场景用户问题模糊、多义性强的场景策略4元数据过滤Metadata Filtering核心思想为文档块附加元数据来源、日期、类型等检索时先按条件过滤。defmetadata_aware_retrieval(query,metadata_filters,knowledge_base): 带元数据过滤的检索 # 例只检索2024年以后的文档且类型为政策filters{year:{$gte:2024},doc_type:policy}resultsknowledge_base.similarity_search(query,k5,filterfilters# 先过滤再检索)returnresults优点大幅减少无关候选提升精度适用场景结构化知识库如企业文档库策略5自适应检索Adaptive Retrieval核心思想根据问题的复杂度动态调整检索策略。defadaptive_search(query,llm,knowledge_base): 先判断问题复杂度再选择策略 # 1. 问题复杂度判断complexity_promptf请判断以下问题的复杂度简单/中等/复杂{query}levelllm.invoke(complexity_prompt).content.strip()# 2. 动态策略选择iflevel简单:returnknowledge_base.similarity_search(query,k3)eliflevel中等:# 使用多路召回returnmulti_query_search(query,llm,knowledge_base)else:# 复杂# 使用HyDE或链式检索returnhyde_search(query,llm,knowledge_base) 实战完整优化方案代码示例fromlangchain.retrieversimportContextualCompressionRetrieverfromlangchain.retrievers.document_compressorsimportLLMChainExtractordefbuild_optimized_rag(): 构建一个整合了多种优化策略的RAG系统 # 1. 优化分块策略text_splitterRecursiveCharacterTextSplitter(chunk_size600,chunk_overlap80,separators[\n\n,\n,。,,,, ,])docstext_splitter.split_documents(documents)# 2. 创建向量库embeddingsOpenAIEmbeddings()vectorstoreChroma.from_documents(docs,embeddings,collection_metadata{hnsw:space:cosine}# 使用余弦相似度)# 3. 基础检索器多路召回base_retrievervectorstore.as_retriever(search_typemmr,# MMR算法平衡相关性和多样性search_kwargs{k:20,fetch_k:50})# 4. 重排序压缩LLM链式压缩llmChatOpenAI(modelgpt-3.5-turbo)compressorLLMChainExtractor.from_llm(llm)# 5. 最终检索器final_retrieverContextualCompressionRetriever(base_compressorcompressor,base_retrieverbase_retriever)returnfinal_retriever# 使用优化后的检索器retrieverbuild_optimized_rag()relevant_docsretriever.get_relevant_documents(公司年假政策是什么) 优化效果与性能权衡优化策略精度提升延迟增加实现难度推荐指数递归字符分块10%5ms⭐⭐⭐⭐⭐⭐语义分块15%50ms⭐⭐⭐⭐⭐⭐⭐多路召回重排20-30%100-200ms⭐⭐⭐⭐⭐⭐⭐⭐⭐HyDE15-25%200-300ms⭐⭐⭐⭐⭐⭐元数据过滤25%10ms⭐⭐⭐⭐⭐⭐⭐自适应检索30%50-300ms⭐⭐⭐⭐⭐⭐⭐⭐ 最佳实践建议从小规模开始先在1000个文档的规模测试分块策略建立评测集准备50-100个标准问题及期望答案量化评估每个优化策略的效果分层优化先优化分块影响基础再优化检索锦上添花监控关键指标关注召回的NDCG10和回答的BLEU/ROUGE分数渐进式部署在生产环境先用简单策略逐步迭代复杂优化分块和检索优化没有银弹最佳实践是根据你的文档类型、用户查询模式、性能要求做AB测试找到最适合的组合。

相关新闻

发展智慧农业,有哪些国家扶持政策?

发展智慧农业,有哪些国家扶持政策?

不少做农业的朋友布局智慧农业,却不了解相关扶持政策,白白错失扶持机会。各地每年都会推出涉农数字化相关扶持项目,提前摸清政策方向,对基地数字化升级十分关键。一、政策覆盖范围广,支持多个建设板块各地涉农数字化扶…

2026/7/23 11:13:16阅读更多 →
为什么 Agent Skill 突然火了?

为什么 Agent Skill 突然火了?

你是不是也有过这样的崩溃时刻? 每次让 Claude 写代码,都要重复粘贴 请使用我们的代码规范:驼峰命名、2空格缩进、必须写单元测试 ——像极了每天入职新公司; 好不容易调教好的 Prompt 换个项目就完全失效,之前的调教经…

2026/7/23 11:13:16阅读更多 →
MSPM0定时器TIMx配置实战:从计数模式到捕获比较应用

MSPM0定时器TIMx配置实战:从计数模式到捕获比较应用

1. 定时器在嵌入式系统中的核心地位与TIMx模块概览在嵌入式开发领域,无论是驱动一个LED的呼吸灯,还是控制一台无刷电机的精准转速,亦或是测量一个超声波传感器的回波时间,其背后都离不开一个核心硬件外设——定时器。它就像是嵌入…

2026/7/23 11:11:15阅读更多 →
GEO新手最容易踩的“坑”有哪些?

GEO新手最容易踩的“坑”有哪些?

GEO(生成式引擎优化)正成为数字营销领域的热门话题,随着ChatGPT、文心一言等AI大模型深度嵌入搜索引擎和用户信息获取流程,品牌曝光逻辑发生了根本性转变。很多新手满怀热情入局,却因对规则理解不透彻,反复…

2026/7/23 12:43:30阅读更多 →
战略规划方法论演进:从Excel到AI决策系统

战略规划方法论演进:从Excel到AI决策系统

1. 项目概述:规划方法论十年演进之路 十年前我刚入行做战略规划时,用的还是Excel表格和PPT模板。如今看着团队用智能算法自动生成的可视化路线图,不禁想梳理这十年间规划方法论发生的革命性变化。从最初的手工填表到现在的动态推演系统&#…

2026/7/23 12:43:30阅读更多 →
洛阳选购床垫的实操经验分享:从需求到落地的完整流程

洛阳选购床垫的实操经验分享:从需求到落地的完整流程

针对洛阳本地消费者常见的“洛阳哪家床垫好”的疑问,结合实际选购经历来看,洛阳梦百合0压床垫总代理的线下门店是可供参考的选择之一。 明确自身需求与场景 首先要梳理清楚自身的睡眠问题和使用场景。以准备结婚的刚需用户为例,若同时存在腰椎…

2026/7/23 12:43:30阅读更多 →
智能电网中基于博弈论的双层负荷调度优化

智能电网中基于博弈论的双层负荷调度优化

1. 项目背景与核心价值居民用电负荷调度是智能电网领域的关键课题。随着分布式能源和柔性负荷的普及,传统集中式调度方法难以应对用户侧的高度分散性和利益多元性。这个项目提出了一种创新的双层优化架构,通过非合作博弈理论刻画不同主体的利益冲突&…

2026/7/23 12:43:30阅读更多 →
2026苏州APP开发公司评测制造企业项目怎么选

2026苏州APP开发公司评测制造企业项目怎么选

苏州企业做APP,制造业场景特别多。 制造企业的APP和普通互联网APP不太一样。普通APP更多关心用户增长、页面体验、活动转化;制造企业APP往往连接销售、经销商、设备、生产、售后和内部管理。前端看起来可能只是一个移动端入口,背后却牵着MES、…

2026/7/23 12:43:30阅读更多 →
121、自动对焦AF:CDAF、PDAF、双像素对焦与激光对焦的融合策略与场景切换

121、自动对焦AF:CDAF、PDAF、双像素对焦与激光对焦的融合策略与场景切换

121、自动对焦AF:CDAF、PDAF、双像素对焦与激光对焦的融合策略与场景切换 去年夏天,我接手一个旗舰机项目,客户反馈夜景模式下对焦“拉风箱”严重,尤其是拍路灯下的猫——画面反复抽动,死活锁不住。我盯着log看了三天,发现AF算法在PDAF和CDAF之间来回跳,每次切换都触发一…

2026/7/23 12:41:29阅读更多 →
Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/23 0:56:31阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/23 0:56:31阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/23 0:56:31阅读更多 →
Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具 【免费下载链接】chitchatter Secure peer-to-peer chat that is serverless, decentralized, and ephemeral 项目地址: https://gitcode.com/gh_mirrors/ch/chitchatter Chitchatter是一款革命性的安…

2026/7/23 0:00:28阅读更多 →
从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

更多请点击: https://intelliparadigm.com 第一章:从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表) 当AI副业主理人不再仅满足于单次服务交付,而是主动构建可复用、可裂变、可…

2026/7/23 0:00:28阅读更多 →
油泥处理设备哪里能买到

油泥处理设备哪里能买到

油泥处理设备哪里有?这是许多从事油田、炼化、清罐业务的从业者最关心的问题。根据河南三丰环保设备有限公司的行业经验,选购油泥处理设备的核心在于设备能否适配当地环保法规与原料特性,而非单纯看价格。该公司总经理王钦田先生指出&#xf…

2026/7/23 0:00:28阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/22 22:56:18阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/22 18:55:50阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/22 18:55:50阅读更多 →