06-文本切分不是越小越好-Chunk大小對(duì)RAG的影響
文本切分不是越小越好Chunk文本塊大小對(duì) RAG 的影響系列從零構(gòu)建企業(yè) RAG 知識(shí)庫(kù)第 6 篇1. Chunk 是檢索與生成之間的接口文檔太長(zhǎng)無(wú)法作為一個(gè)檢索單元切得太碎又會(huì)丟失語(yǔ)義關(guān)系。Chunk 同時(shí)影響召回查詢能否匹配到正確片段精度片段中有多少無(wú)關(guān)信息上下文答案需要的條件是否完整成本Embedding 數(shù)量與生成 Token溯源引用能否定位到有意義的段落。所以不存在適用于所有文檔的“最佳 500 字”。合適大小由文檔結(jié)構(gòu)、問(wèn)題粒度、目標(biāo)模型 Tokenizer 和評(píng)測(cè)集共同決定。2. 字符數(shù)不等于 Token 數(shù)中文、英文、代碼和表格的 Token 比例不同。生產(chǎn)系統(tǒng)應(yīng)使用目標(biāo) Embedding/生成模型對(duì)應(yīng)的 Tokenizer 計(jì)算預(yù)算。本文為保持純 Python 可運(yùn)行使用字符上限演示算法不能把該字符數(shù)稱為真實(shí) Token。3. 優(yōu)先按語(yǔ)義邊界切分fromdataclassesimportdataclassimportredataclass(frozenTrue)classSection:heading:strtext:strsource_position:intdataclass(frozenTrue)classTextChunk:chunk_id:strheading:strtext:strstart_position:intend_position:intdefsplit_sentences(text:str)-list[str]:保留句末標(biāo)點(diǎn)避免切分后原文無(wú)法引用。partsre.split(r(?[。!?;]),text)return[item.strip()foriteminpartsifitem.strip()]標(biāo)題、段落、句子、列表、代碼塊和表格行都是自然邊界。只有單個(gè)語(yǔ)義單元超過(guò)上限時(shí)才考慮硬切。4. 句子打包算法fromhashlibimportsha256defchunk_section(section:Section,max_chars:int300,overlap_sentences:int1,)-list[TextChunk]:ifmax_chars20:raiseValueError(max_chars 不能小于 20)ifnot0overlap_sentences3:raiseValueError(overlap_sentences 必須在 0 到 3 之間)sentencessplit_sentences(section.text)ifnotsentences:return[]groups:list[list[str]][]current:list[str][]forsentenceinsentences:iflen(sentence)max_chars:raiseValueError(單句超過(guò)上限應(yīng)進(jìn)入長(zhǎng)句專項(xiàng)切分)proposed.join(current[sentence])ifcurrentandlen(proposed)max_chars:groups.append(current)overlapcurrent[-overlap_sentences:]ifoverlap_sentenceselse[]currentlist(overlap)current.append(sentence)ifcurrent:groups.append(current)chunks:list[TextChunk][]cursorsection.source_positionforindex,groupinenumerate(groups):text.join(group)chunk_idsha256(f{section.heading}:{index}:{text}.encode(utf-8)).hexdigest()[:16]chunks.append(TextChunk(chunk_idchunk_id,headingsection.heading,texttext,start_positioncursor,end_positioncursorlen(text),))# 有重疊時(shí)位置是近似值精確實(shí)現(xiàn)應(yīng)保留原句 offsetcursorlen(text)returnchunksOverlap重疊幫助保留邊界上下文但會(huì)重復(fù)索引、增加存儲(chǔ)并產(chǎn)生近重復(fù)召回。應(yīng)通過(guò)評(píng)測(cè)選擇而不是默認(rèn)越大越好。5. 表格和代碼不能照搬段落策略表格問(wèn)題常依賴表頭與某一行應(yīng)讓每個(gè) Chunk 攜帶表名、表頭和行定位。代碼應(yīng)以函數(shù)、類或語(yǔ)法樹(shù)節(jié)點(diǎn)切分避免把函數(shù)簽名與函數(shù)體拆開(kāi)。合同與制度則適合保留章節(jié)路徑退款制度 / 第二章 / 第三條 / 適用條件將標(biāo)題路徑附在 Chunk 文本或元數(shù)據(jù)中通常比單純擴(kuò)大 Chunk 更有效。6. 用實(shí)驗(yàn)選擇大小fromdataclassesimportdataclassdataclass(frozenTrue)classChunkExperiment:strategy:strmax_size:intoverlap:intrecall_at_5:floatprecision_at_5:floatavg_context_size:floatdefchoose_experiment(results:list[ChunkExperiment])-ChunkExperiment:ifnotresults:raiseValueError(實(shí)驗(yàn)結(jié)果不能為空)# 示例約束先保證召回再在候選中選擇更少上下文的方案eligible[itemforiteminresultsifitem.recall_at_50.90]ifnoteligible:raiseValueError(沒(méi)有方案達(dá)到召回門(mén)檻)returnmax(eligible,keylambdaitem:(item.precision_at_5,-item.avg_context_size),)閾值僅是教學(xué)示例。真實(shí)實(shí)驗(yàn)應(yīng)固定文檔版本、Embedding、查詢集和檢索參數(shù)。7. 可復(fù)驗(yàn)測(cè)試deftest_chunk_size_and_overlap()-None:sectionSection(退款制度,第一條說(shuō)明適用范圍。第二條說(shuō)明申請(qǐng)材料。第三條說(shuō)明審核流程。,0,)chunkschunk_section(section,max_chars25,overlap_sentences1)assertlen(chunks)2assertall(len(item.text)25foriteminchunks)# 相鄰塊共享一個(gè)句子assertsplit_sentences(chunks[0].text)[-1]inchunks[1].textdeftest_oversized_sentence_fails_explicitly()-None:try:chunk_section(Section(標(biāo)題,很*30。,0),max_chars20)exceptValueError:passelse:raiseAssertionError(超長(zhǎng)句不能被靜默處理)8. 對(duì)抗性審查不跨租戶或跨權(quán)限文檔合并 Chunk重疊 Chunk 去重后再交給模型標(biāo)題和權(quán)限元數(shù)據(jù)不能在重新切分時(shí)丟失文檔更新后用策略版本重建索引檢查極長(zhǎng)句、無(wú)標(biāo)點(diǎn)文本、表格和代碼不只看召回率還看上下文噪聲、Token、延遲和引用體驗(yàn)。9. 總結(jié)Chunk 的目標(biāo)是讓“一個(gè)可回答的問(wèn)題”盡量對(duì)應(yīng)“一個(gè)語(yǔ)義完整、噪聲有限、可定位的證據(jù)單元”。大小只是參數(shù)結(jié)構(gòu)感知和可重復(fù)評(píng)測(cè)才是核心。

相關(guān)新聞

EL Shield:輕量級(jí)日志異常檢測(cè)系統(tǒng)設(shè)計(jì)與實(shí)戰(zhàn)

EL Shield:輕量級(jí)日志異常檢測(cè)系統(tǒng)設(shè)計(jì)與實(shí)戰(zhàn)

1. 項(xiàng)目緣起:從“裸奔”到“武裝”的運(yùn)維覺(jué)醒 在運(yùn)維和開(kāi)發(fā)這個(gè)行當(dāng)里,日志系統(tǒng)就像我們每天呼吸的空氣,無(wú)處不在,卻又常常被忽視。直到某天深夜,線上服務(wù)突然告警,流量曲線斷崖式下跌,而你面對(duì)…

2026/8/3 10:18:42 閱讀更多
SCPI標(biāo)準(zhǔn)命令解析:從語(yǔ)法到實(shí)踐,構(gòu)建高效自動(dòng)化測(cè)試系統(tǒng)

SCPI標(biāo)準(zhǔn)命令解析:從語(yǔ)法到實(shí)踐,構(gòu)建高效自動(dòng)化測(cè)試系統(tǒng)

1. 項(xiàng)目概述:SCPI,儀器世界的“普通話” 如果你在電子測(cè)量、自動(dòng)化測(cè)試或者研發(fā)實(shí)驗(yàn)室里待過(guò),大概率會(huì)聽(tīng)過(guò)GPIB、VISA或者“程控儀器”這些詞。在這些場(chǎng)景背后,讓一臺(tái)電腦能夠精確指揮示波器、信號(hào)源、電源、萬(wàn)用表等五花八門(mén)儀器…

2026/8/3 10:18:42 閱讀更多
Luna模型:高性價(jià)比AI編程助手實(shí)戰(zhàn)指南與本地部署詳解

Luna模型:高性價(jià)比AI編程助手實(shí)戰(zhàn)指南與本地部署詳解

如果你正在尋找一個(gè)既能理解復(fù)雜指令、又能快速生成代碼,同時(shí)還能保持極低推理成本的AI助手,那么最近在開(kāi)發(fā)者圈子里熱議的Luna模型,可能就是你一直在等待的那個(gè)“性價(jià)比之選”。 過(guò)去幾個(gè)月,AI編程助手領(lǐng)域看似熱鬧,…

2026/8/3 10:18:42 閱讀更多
Altium Designer 16快捷鍵進(jìn)階指南:從核心操作到高效工作流

Altium Designer 16快捷鍵進(jìn)階指南:從核心操作到高效工作流

1. 從“記不住”到“離不開(kāi)”:AD16快捷鍵的進(jìn)階之路 每次看到有朋友在Altium Designer 16(簡(jiǎn)稱AD16)里,還在用鼠標(biāo)顫顫巍巍地點(diǎn)擊菜單欄,或者滿屏幕找那個(gè)小小的圖標(biāo)時(shí),我就忍不住想分享點(diǎn)什么。這感覺(jué)就像…

2026/8/3 11:28:46 閱讀更多
EPLAN 3D宏創(chuàng)建實(shí)戰(zhàn):從零構(gòu)建智能箱柜模型庫(kù)提升電氣設(shè)計(jì)效率

EPLAN 3D宏創(chuàng)建實(shí)戰(zhàn):從零構(gòu)建智能箱柜模型庫(kù)提升電氣設(shè)計(jì)效率

1. 項(xiàng)目概述:為什么箱柜的3D宏是電氣設(shè)計(jì)的“勝負(fù)手”? 干了這么多年電氣設(shè)計(jì),從最早用CAD畫(huà)平面圖,到后來(lái)接觸EPLAN做原理圖,再到如今三維布局成為標(biāo)配,我最大的感觸就是: 效率和質(zhì)量的天花板…

2026/8/3 11:28:46 閱讀更多
eNSP安裝與美化全攻略:從環(huán)境搭建到界面優(yōu)化

eNSP安裝與美化全攻略:從環(huán)境搭建到界面優(yōu)化

1. 項(xiàng)目概述:從零到一,打造一個(gè)穩(wěn)定且賞心悅目的eNSP工作環(huán)境 作為一名網(wǎng)絡(luò)工程師,eNSP(Enterprise Network Simulation Platform)可以說(shuō)是我們吃飯的家伙。無(wú)論是備考華為認(rèn)證,還是日常做網(wǎng)絡(luò)方案驗(yàn)證、拓…

2026/8/3 11:28:46 閱讀更多
PlayFab Unity Editor Extensions:游戲后端開(kāi)發(fā)效率提升利器

PlayFab Unity Editor Extensions:游戲后端開(kāi)發(fā)效率提升利器

1. 項(xiàng)目概述:為什么我們需要 PlayFab Unity Editor Extensions? 如果你正在用 Unity 開(kāi)發(fā)一款需要后端服務(wù)的游戲,無(wú)論是簡(jiǎn)單的玩家數(shù)據(jù)存儲(chǔ)、排行榜,還是復(fù)雜的實(shí)時(shí)對(duì)戰(zhàn)、虛擬商品交易,后端開(kāi)發(fā)都是一個(gè)繞不過(guò)去的坎?!?/p>

2026/8/3 11:28:46 閱讀更多
Vibe Coding架構(gòu)解析:從意圖理解到項(xiàng)目生成的AI編程新范式

Vibe Coding架構(gòu)解析:從意圖理解到項(xiàng)目生成的AI編程新范式

如果你最近關(guān)注AI編程工具,可能已經(jīng)聽(tīng)過(guò)“Vibe Coding”這個(gè)詞。它不像傳統(tǒng)的Copilot那樣只是補(bǔ)全代碼,也不像ChatGPT那樣需要你詳細(xì)描述需求。它更像是一個(gè)能理解你“編程意圖”的伙伴——你給出一個(gè)模糊的想法,它就能生成一個(gè)可運(yùn)行的項(xiàng)目骨…

2026/8/3 11:18:46 閱讀更多
全球僅7家廠商通過(guò)ISO/IEC 27001認(rèn)證的名片AI引擎,我們逆向拆解了它的字段置信度熔斷機(jī)制

全球僅7家廠商通過(guò)ISO/IEC 27001認(rèn)證的名片AI引擎,我們逆向拆解了它的字段置信度熔斷機(jī)制

更多請(qǐng)點(diǎn)擊: https://kaifayun.com 第一章:全球僅7家廠商通過(guò)ISO/IEC 27001認(rèn)證的名片AI引擎概覽 名片AI引擎是企業(yè)級(jí)智能文檔處理的核心組件,專注于高精度OCR、語(yǔ)義結(jié)構(gòu)化提取與跨語(yǔ)言實(shí)體對(duì)齊。截至2024年第三季度,全球范圍內(nèi)僅…

2026/8/3 0:07:47 閱讀更多
MoneyPrinterPlus實(shí)戰(zhàn)指南:AI視頻批量生成與自動(dòng)化發(fā)布完整解決方案

MoneyPrinterPlus實(shí)戰(zhàn)指南:AI視頻批量生成與自動(dòng)化發(fā)布完整解決方案

MoneyPrinterPlus實(shí)戰(zhàn)指南:AI視頻批量生成與自動(dòng)化發(fā)布完整解決方案 【免費(fèi)下載鏈接】MoneyPrinterPlus AI一鍵批量生成各類短視頻,自動(dòng)批量混剪短視頻,自動(dòng)把視頻發(fā)布到抖音,快手,小紅書(shū),視頻號(hào)上,賺錢(qián)從來(lái)沒(méi)有這么容易過(guò)! 支持本地語(yǔ)音模型chatTTS,fasterwhisper,…

2026/8/3 7:44:46 閱讀更多
3分鐘搞定!QQ空間歷史說(shuō)說(shuō)完整備份終極指南

3分鐘搞定!QQ空間歷史說(shuō)說(shuō)完整備份終極指南

3分鐘搞定!QQ空間歷史說(shuō)說(shuō)完整備份終極指南 【免費(fèi)下載鏈接】GetQzonehistory 獲取QQ空間發(fā)布的歷史說(shuō)說(shuō) 項(xiàng)目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否曾想過(guò),那些年發(fā)過(guò)的QQ空間說(shuō)說(shuō),那些記錄青春的文字…

2026/8/2 0:04:01 閱讀更多
AMAT 0100-02186 I/O 分配 PCB

AMAT 0100-02186 I/O 分配 PCB

AMAT 0100-02186 I/O分配PCB板是應(yīng)用材料(Applied Materials)公司生產(chǎn)的一款用于半導(dǎo)體設(shè)備的I/O信號(hào)分配電路板。該型號(hào)(0100-02186)的核心特點(diǎn)如下:專用于Endura等半導(dǎo)體工藝腔室。集成信號(hào)路由與分配功能。連接控制…

2026/8/2 2:51:21 閱讀更多
Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動(dòng)機(jī)

Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動(dòng)機(jī)

Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動(dòng)機(jī)是日本日清(Nissei)品牌的一款工業(yè)用三相異步電機(jī),適用于自動(dòng)化設(shè)備及通用機(jī)械驅(qū)動(dòng)。該型號(hào)(FFMN-32L-10-T0 40AX)的核心特點(diǎn)如下:三相交流異步電動(dòng)機(jī)。額定…

2026/8/2 2:52:49 閱讀更多