LLM/RAG Zoomcamp 課外補充 1:資料文件格式

這是我開始學習 RAG 之前,一直都有的問題。

我提過幾次,我想做的專案,是將聖嚴法師的所有文章,整理為一個問答的系統。

因為 法鼓全集2020 已整理好所有的文章,比較方便。

未來打算擴展到其他的法師們。

在這個領域是菜鳥的我,已收集好所有文章,但不知道應該如何整理,提供給 RAG 使用。

開始學習 LLM Zoomcamp 2025 後,講師整理的資料格式是:

{
    "text": "問題的詳細回答內容",
    "section": "所屬章節", 
    "question": "問題標題",
    "course": "課程名稱"
}

我就有了這樣的疑惑,聖嚴法師的文章中,問答的部分不多,難道必須把文章都整理成這種格式嗎?

以下是 Claude 的建議(提醒:可能不完全正確):


▌RAG 系統沒有標準格式

這不是 RAG 的通用格式。這個格式是 DataTalks.Club LLM Zoomcamp 課程特定的資料結構,專門為他們的 FAQ 文件所設計。

RAG系統對於知識庫文件 沒有統一的標準格式

不同的應用場景會使用不同的資料結構,取決於:

1. 資料來源類型

  • 學術論文:可能包含 title, abstract, authors, publication_date
  • 產品文件:可能包含 product_name, version, category, content
  • 客服FAQ:可能包含 question, answer, category, priority
  • 法律文件:可能包含 law_type, article_number, content, effective_date

2. 應用需求

電商網站的 RAG 可能是:

{
    "product_id": "12345",
    "product_name": "商品名稱",
    "description": "商品描述",
    "category": "分類",
    "price": "價格",
    "reviews": "評價摘要"
}

醫療知識庫可能是:

{
    "condition": "疾病名稱",
    "symptoms": "症狀描述", 
    "treatment": "治療方法",
    "severity": "嚴重程度",
    "source": "資料來源"
}

▌常見的文件格式模式

》最簡單的格式

{
    "content": "文件內容",
    "metadata": {
        "source": "來源",
        "timestamp": "時間戳記"
    }
}

》分塊格式(Chunking)

{
    "chunk_id": "唯一識別碼",
    "text": "文本內容",
    "chunk_index": 0,
    "parent_document": "原始文件ID",
    "metadata": {...}
}

》階層式格式

{
    "document_id": "文件ID",
    "title": "標題",
    "sections": [
        {
            "section_title": "章節標題",
            "content": "章節內容",
            "subsections": [...]
        }
    ]
}

》更複雜的格式範例

{
    "id": "唯一識別碼",
    "content": "主要內容",
    "title": "標題",
    "metadata": {
        "source": "來源系統",
        "created_at": "建立時間",
        "updated_at": "更新時間",
        "author": "作者",
        "version": "版本",
        "tags": ["標籤1", "標籤2"],
        "access_level": "權限等級"
    },
    "embeddings": [...],  # 向量表示
    "relationships": {    # 文件關聯
        "parent": "父文件ID",
        "children": ["子文件ID1", "子文件ID2"]
    }
}

》DataTalks.Club格式的特點

為什麼選擇這個格式?

  1. 教學友好:結構清晰,容易理解
  2. 適合FAQ場景:問答對的形式很直觀
  3. 支援多課程course 欄位允許混合不同課程的資料
  4. 搜尋優化questiontext 分離,便於權重調整

》小結

  1. 沒有標準格式:RAG 系統的文件格式完全取決於具體應用
  2. 格式影響搜尋策略:欄位設計會影響如何進行檢索和權重分配
  3. 演進性:隨著需求變化,格式也會演進

課程選擇這個簡單的 FAQ 格式是為了教學目的

在實際專案中,你需要根據具體的資料來源和業務需求,來設計最適合的文件格式。


▌法師文章格式初探

對於佛教法師的文章,由於文章類型與 FAQ 不同,文件格式設計可以是:

1. 基礎格式

{
    "article_id": "唯一識別碼",
    "title": "文章標題",
    "content": "文章完整內容",
    "metadata": {
        "date": "發布日期",
        "category": "分類",
        "source": "來源(書籍/開示/講座等)",
        "tags": ["關鍵詞標籤"]
    }
}

2. 進階格式(推薦)

{
    "article_id": "dharma_001",
    "title": "論慈悲心的培養",
    "summary": "文章摘要(可用LLM生成)",
    "content": "文章完整內容",
    "chunks": [
        {
            "chunk_id": "dharma_001_01",
            "text": "分段內容1",
            "chunk_index": 0,
            "section_title": "段落小標題(如有)"
        }
    ],
    "metadata": {
        "date": "2023-05-15",
        "category": "修行指導",
        "subcategory": "慈悲觀",
        "source_type": "開示錄",
        "source_name": "某某寺院開示",
        "dharma_concepts": ["慈悲", "菩提心", "六度"],
        "difficulty_level": "初級/中級/高級",
        "target_audience": "初學者/進階/僧眾"
    }
}

▌佛教文章的特殊考量

1. 分類架構設計

categories = {
    "教理闡述": ["基礎佛法", "中觀思想", "唯識學說", "如來藏思想"],
    "修行指導": ["戒學", "定學", "慧學", "念佛法門", "禪修指導"],
    "經典解釋": ["阿含經", "般若經", "法華經", "華嚴經", "淨土經典"],
    "生活應用": ["在家修行", "職場佛法", "人際關係", "生死問題"],
    "佛教歷史": ["佛陀傳記", "祖師大德", "宗派發展", "佛教傳播"]
}

2. 佛教專有名詞處理

在 metadata 中加入佛教概念標籤

dharma_concepts = [
    "四聖諦", "八正道", "十二因緣", "六度波羅蜜",
    "三寶", "業力", "輪迴", "涅槃", "菩提心"
]

3. 按段落分塊(推薦)

def chunk_dharma_article(article):
    # 按自然段落分塊,保持意思完整
    paragraphs = article.split('\n\n')
    chunks = []
    
    for i, paragraph in enumerate(paragraphs):
        if len(paragraph) > 50:  # 過濾過短段落
            chunks.append({
                "chunk_id": f"{article_id}_{i:02d}",
                "text": paragraph,
                "chunk_index": i,
                "word_count": len(paragraph)
            })
    return chunks

4. 按語意分塊(進階)

# 使用NLP工具識別主題轉換點
def semantic_chunking(article):
    # 1. 識別小標題
    # 2. 按主題相關性分組
    # 3. 確保每塊有完整的思想單元
    pass

▌搜尋策略優化

》權重設計

boost_weights = {
    "title": 3.0,           # 標題最重要
    "summary": 2.0,         # 摘要次之
    "dharma_concepts": 2.5, # 佛教概念很重要
    "content": 1.0,         # 內容標準權重
    "category": 1.5         # 分類有助於精確檢索
}

》同義詞處理

# 佛教術語同義詞庫
dharma_synonyms = {
    "慈悲": ["慈愛", "大悲", "悲憫"],
    "智慧": ["般若", "明智", "覺悟"],
    "修行": ["實踐", "用功", "辦道"],
    "煩惱": ["無明", "習氣", "妄想"]
}

▌實作建議

1. 資料預處理

def preprocess_dharma_article(raw_article):
    return {
        "article_id": generate_id(raw_article),
        "title": extract_title(raw_article),
        "summary": generate_summary(raw_article),  # 用LLM生成
        "content": clean_content(raw_article),
        "chunks": chunk_article(raw_article),
        "metadata": {
            "dharma_concepts": extract_concepts(raw_article),
            "category": classify_article(raw_article),
            "difficulty": assess_difficulty(raw_article)
        }
    }

2. 檢索增強

def dharma_search(query):
    # 1. 關鍵詞檢索
    keyword_results = keyword_search(query)
    
    # 2. 概念匹配(後續可加入向量搜尋)
    concept_results = concept_search(query)
    
    # 3. 結果合併和重排序
    return merge_and_rerank(keyword_results, concept_results)

3. 提示模板優化

dharma_prompt_template = """
你是一位佛學助教,請根據以下法師文章內容回答問題。
請用慈悲和智慧的語調,引用相關的佛教經典或祖師教導。

問題:{question}

相關文章內容:
{context}

請提供深入而實用的回答,並在適當時候引用佛教經典。
"""

▌特殊功能考量

1. 引文追蹤

# 記錄引用的經典出處
"citations": [
    {
        "sutra": "金剛經",
        "chapter": "第十四品",
        "text": "凡所有相,皆是虛妄"
    }
]

2. 相關文章推薦

# 基於主題相似性推薦相關文章
"related_articles": ["article_id_1", "article_id_2"]

▌結論

推薦前面所提的進階格式,這種格式設計能夠:

  • 保持文章完整性:避免破壞佛教文章的邏輯結構
  • 支援精確檢索:通過分類和概念標籤提高檢索精度
  • 維護文化特色:保留佛教術語和表達方式
  • 便於後續擴展:支援加入更多佛教特有功能
{
    "article_id": "dharma_001",
    "title": "論慈悲心的培養",
    "summary": "文章摘要(可用LLM生成)",
    "content": "文章完整內容",
    "chunks": [
        {
            "chunk_id": "dharma_001_01",
            "text": "分段內容1",
            "chunk_index": 0,
            "section_title": "段落小標題(如有)"
        }
    ],
    "metadata": {
        "date": "2023-05-15",
        "category": "修行指導",
        "subcategory": "慈悲觀",
        "source_type": "開示錄",
        "source_name": "某某寺院開示",
        "dharma_concepts": ["慈悲", "菩提心", "六度"],
        "difficulty_level": "初級/中級/高級",
        "target_audience": "初學者/進階/僧眾"
    }
}

為什麼這個格式能達成四個目標:

1. 保持文章完整性

  • "content" 欄位保存完整原文
  • "chunks" 數組按段落分塊,保持邏輯結構
  • "section_title" 保留段落標題的層次關係

2. 支援精確檢索

  • "dharma_concepts" 提供佛教概念標籤
  • "category""subcategory" 提供分類檢索
  • "difficulty_level""target_audience" 支援精準匹配

3. 維護文化特色

  • "dharma_concepts" 專門記錄佛教術語
  • "source_type" 區分開示、講座、著作等佛教文獻類型
  • "source_name" 保留具體的佛教場所或經典出處

4. 便於後續擴展

  • "metadata" 結構可以輕鬆添加新欄位
  • 模組化設計,可以加入引文追蹤、相關文章等功能
  • 支援未來的向量搜尋和語意分析