VIP 專屬 RAG 檢索增強 實戰

知識圖譜輔助檢索:關聯性問題的解法

「A 的主管的部門負責哪些產品」這種問題,向量檢索天生做不好。

RAG 檢索增強教程封面

向量檢索擅長找「語意相近的片段」,不擅長回答需要多跳關聯的問題。因為答案不在任何單一片段裡,而在片段之間的關係中。

典型的失敗例子:「去年離職的那位工程師負責的專案,現在由誰接手」。這需要串起三個事實,每個事實可能在不同文件裡。

什麼時候值得加圖

  • 大量問題涉及實體之間的關係(人、組織、產品、零件)。
  • 需要多跳推理(A→B→C)。
  • 實體與關係相對穩定,值得投入抽取成本。

不值得加圖的情況

  • 問題多為「這個怎麼做」的操作型查詢。
  • 文件內容變動極快,圖的維護成本會超過收益。
  • 團隊沒有維運圖資料庫的經驗——這是真實的成本。

實體與關係抽取

EXTRACT = '''從下列文件片段抽取實體與關係,只輸出 JSON。

實體型別:Person | Team | Product | Document | System
關係型別:manages | belongs_to | owns | depends_on | supersedes

規則:
- 只抽取文中明確陳述的關係,不要推論。
- 每個關係必須附上原文依據 evidence。

輸出:{"entities": [{"id","type","name"}],
       "relations": [{"from","type","to","evidence"}]}'''

evidence 欄位是品質控管的關鍵:沒有原文依據的關係一律丟棄。抽取階段的寬鬆會在查詢階段變成錯誤答案。

混合查詢流程

def hybrid_answer(q):
    ents = link_entities(q)                    # 找出問題中的實體
    if len(ents) >= 1 and needs_hop(q):
        sub = graph.neighborhood(ents, hops=2)  # 取兩跳子圖
        facts = render_triples(sub)             # 轉成可讀的事實句
    else:
        facts = ''
    chunks = vector_search(q, top_k=5)
    return generate(q, context=facts + '\n\n' + render(chunks))

把圖轉成文字給模型

不要讓模型直接讀圖資料庫的查詢結果格式。把三元組轉成自然語句——「張三 管理 平台team」寫成「張三管理平台團隊」——模型的理解正確率會明顯較高。

維護的現實成本

  • 文件更新時,舊的關係要失效。這比更新文字片段複雜得多。
  • 實體對齊(同一個人的不同稱呼)需要持續維護。
  • 抽取錯誤會累積,需要定期抽查與人工修正機制。
別在第一版就上知識圖譜。先做好基礎 RAG,用真實的失敗案例證明「這些問題確實需要關聯推理」,再決定投入。
🔒

訂閱後繼續閱讀全文

本篇為訂閱者專屬內容。訂閱後可取得下列權限:

  • 解鎖全部內容權限
  • 閱讀不限篇數
  • 全站移除廣告
月卡
NT$240
開通 30 天
一次付清,開通 30 天
季卡
NT$620
開通 90 天
一次付清,開通 90 天,每天約 NT$7
年卡
NT$2,160
開通 365 天
一次付清,開通 365 天,每天約 NT$6

一次性付款,付款成功後立即開通,到期自動結束,不會再次扣款,也不需要取消訂閱。

立即訂閱

金額均為新臺幣(TWD),即實際扣款金額,不另收手續費
支援信用卡 · Apple Pay · Google Pay · WebATM · ATM 轉帳
購買須知與退款政策