iT邦幫忙

0

(C#) RAG Chunking 低成本策略 : Fixed-Length

  • 分享至 

  • xImage
  •  

RAG Chunking

建立 AI RAG (Retrieval-Augmented Generation,檢索增強生成),
讓 AI 可以依照企業內部知識回覆問題


RAG 簡單的理解就是,透過 Embedding Model 將知識文件轉化成向量資料後,存入 Vector DB 向量資料庫

在進行AI問答時,將問題經過Embedding Model 轉為向量資料,

再去向量資料庫找出相似資料,附在上文送進LLM。


但是每一個 Embedding Model 都有 input Text Size 限制,所以無法將長篇大論直接送進Vector DB

因此,如何切割知識內容又不失真就衍生出各種分塊策略(Chunking Strategy)

本次介紹成本最低的Fixed-length 策略


Fixed-length Chunking :透過固定區塊長度與重疊長度切個, 盡量 保留完整資訊內容

  • Chunk Size (區塊大小):每個區塊文字長度
  • Overlap (重疊大小):兩區塊之間的重複長度

以長度為 1,000 文字為例
Chunk Size:500
Overlap :100

        1,000
        |----------------------------------|
        1~500
Chunk 1 |---------------| 
                   401~900
Chunk 2            |-------------------|
                                   801~1,000
Chunk 3                            |-------|

以C#為例如下:

/// <summary>
/// 將文字切分為多個塊,根據設定的區塊大小和重疊量。
/// </summary>
/// <param name="text">要切分的文字內容。</param>
/// <returns>返回切分後的文字塊列表。</returns>

public List<string> ChunkText(string text)
    {
        var chunks = new List<string>();
        if (string.IsNullOrWhiteSpace(text)) return chunks;

        // 換行統一由 \r\n 轉為 \n
        string cleanedText = text.Replace("\r\n", "\n").Trim();

        int step = _chunkSize - _chunkOverlap;
        if (step <= 0) step = _chunkSize;

        for (int i = 0; i < cleanedText.Length; i += step)
        {
            int length = Math.Min(_chunkSize, cleanedText.Length - i);
            string chunk = cleanedText.Substring(i, length).Trim();
            
            if (!string.IsNullOrWhiteSpace(chunk))
            {
                chunks.Add(chunk);
            }

            // Stop if we reached the end of text
            if (i + length >= cleanedText.Length)
            {
                break;
            }
        }

        return chunks;
    }

Fixed-Length Strategy 如果效果不好,就要在選擇其他的Chunking策略(也是一個深坑)


圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言