建立 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 :透過固定區塊長度與重疊長度切個, 盡量 保留完整資訊內容
以長度為 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策略(也是一個深坑)