Agentic Research

Chunking(分段/切塊)

又稱:分段 · 切塊 · 文字分塊 · chunk size · chunking 策略

在做 embedding 之前,先把長文件切成一小段一小段;因為向量是把「一整段的意思」壓成一個點,段落越長,那個點就越模糊。

你會在什麼時候遇到它

這是 RAG 裡最安靜卻最關鍵的旋鈕。切太大,一段裡混了好幾個主題,向量被平均掉、檢索不準;切太小,一句話失去上下文,撈回來也看不懂。檢索品質莫名其妙地差,八成是 chunking 沒調好。

打個比方

像把一本書拆成卡片放進圖書館的檢索櫃。卡片太大(整章),一張卡講太多事,很難精準命中;卡片太小(單字),又看不出在講什麼。剛好的卡片,是一段能獨立讀懂的內容。

最小範例

# 常見做法:固定長度切塊,並讓相鄰塊重疊一點,避免句子被切成兩半
def chunk(text, size=500, overlap=50):
    out, i = [], 0
    while i < len(text):
        out.append(text[i:i + size])
        i += size - overlap          # 重疊:下一塊往回抓 50 個字
    return out

# size / overlap 沒有萬能值,要照文件類型試:
#   技術文件、法規 → 偏小、貼著段落切
#   敘事、對話     → 偏大,保留上下文

重點在 overlap(重疊):它讓被切在邊界的句子,至少在某一塊裡是完整的。size 和 overlap 會直接改變檢索結果,卻沒有標準答案 —— 這是必須用你自己的文件去試的參數,不是抄別人的數字就好。

最常搞錯的地方

  • 只按固定字數硬切,不管句子與段落邊界。結果半個句子被切進上一塊、半個進下一塊,兩塊的向量都失真,檢索自然不準。至少盡量在句號、換行處切。
  • 以為 chunking 只是前置處理、隨便切切就好,把心力全放在換更貴的模型上。實務上,改善 chunking 往往比換模型對檢索品質的提升更大、更便宜。

相關詞條

下一步