Chain Types: Stuff, Refine, Map reduce, Map re-rank

 Langchain 提供了幾種「文件 chain」來處理和 LLM 互動多份文件。每種 chain 類型都有其優缺點,適用於不同的使用場景。

1. Stuff (填充)


  • 概念: 最直接的方法。它會將所有文件直接「塞」或插入到 LLM 的提示中。
  • 理想用途: 文件較小且每次只使用少量文件的應用,確保總 token 數在 LLM 的上下文限制內。
  • 優點:
    • 只需一次 API 呼叫。
    • 所有數據一次性處理。
  • 缺點:
    • 受限於 LLM 的最大上下文長度;如果文件 token 超出此限制,將會失敗。



2. Refine (精煉)


  • 概念: 透過循環處理輸入文件並迭代更新其答案來構建回應。對於每個文件,它將當前文件、非文件輸入以及最新的中間答案一起傳遞給 LLM chain,以獲得一個新的、精煉的答案。
  • 理想用途: 需要分析的文件數量超出模型上下文範圍的任務,因為它會逐一處理文件。
  • 優點:
    • 與 Map Reduce 相比,能保持更相關的上下文,因為它會根據每個新文件精煉答案。
  • 缺點:
    • 涉及許多相互依賴的 LLM 呼叫,因為每個文件都需要單獨的互動。





3. Map Reduce (映射歸納)


  • 概念: 兩階段過程:
    1. 映射 (Map) 階段: 單獨將一個 LLM chain 應用於每個文件,並將 chain 的輸出視為一個新文件。
    2. 歸納 (Reduce) 階段: 將所有這些新生成的文件傳遞給一個單獨的「組合文件 chain」,以產生一個單一的最終輸出。
  • 理想用途: 總結大量文件,特別是當文件內容超出 LLM 上下文限制時。
  • 優點:
    • 透過分塊處理文件,可擴展到處理更大的文件。
    • 可並行處理,可能加快處理速度。
  • 缺點:
    • 需要多次 API 呼叫(每個「映射」步驟一次,然後「歸納」步驟一次)。
    • 在歸納階段可能會丟失信息,因為單個文件摘要會被組合。





4. Map Re-rank (映射重排)


  • 概念: 在每個文件上運行一個初始提示,該提示不僅嘗試完成任務,還為其答案的確定性提供一個「分數」。系統隨後只返回得分最高的回應。
  • 理想用途: 回答單一答案問題,當需要最相關或最有信心的答案,而不是全面總結或信息組合時。
  • 優點:
    • 對大量文件有良好的擴展性。
    • 更適合需要單一明確答案的任務。
  • 缺點:
    • 無法組合多個文件之間的信息,因為它只返回得分最高的一個回應。


留言

此網誌的熱門文章