iT邦幫忙

2025 iThome 鐵人賽

DAY 20
0
自我挑戰組

從讀書筆記到可落地 AI:LangChain、LangSmith 與 Agent 工具 30 講系列 第 20

Day 20|Agent Design - RAG - 提高搜尋準度(1/3)

  • 分享至 

  • xImage
  •  

目標先講清楚:
研究Weaviate和Pinecone分享提高搜尋準度的方式

使用情境:
  • 旅客問「台北親子兩天一夜、想泡溫泉,有兒童友善設施」
  • OP 要找「10/10 CI102 班機異動公告」
  • 旅客找「便宜的親子沖繩自由行(含兒童座椅)」

可以怎麼使用以下技巧處理類似的問題?


(A) Weaviate「強化搜尋策略」—重點流程圖

https://ithelp.ithome.com.tw/upload/images/20251004/201785688Lj520jKYe.png

  • 向量/模型:選能理解同義與地名語意的 embedding;只向量化「行程介紹/飯店描述」等重要欄位,別把「退改規則」混進來(降噪)。
  • 合理切塊:長文以「每天一段」或 100–150 詞作為起點,有利於抓到關鍵段落。
  • BM25(或稀疏):對航班號/日期/價格等「一定要精確匹配」很關鍵。Weaviate 以 BM25F 關鍵字搜尋,支援與向量結果做分數融合。
  • Hybrid 融合:向量找語意相近、BM25抓硬條件,透過加權或融合演算法合併。
  • Re-ranker:在「初步 50 筆」上用較慢但較準的跨編碼器重排,避免把「溫泉餐廳」排到「溫泉飯店」前。

兩個超短示例

  1. 「台北親子兩天一夜、溫泉、兒童友善」

    • 沒做最佳化:回來一堆親子餐廳或博物館
    • 做了:前幾名就是「北投 × 親子 × 溫泉 × 兩天一夜」的飯店或行程(段落直接講兒童設施與泡湯時段)
      關鍵做法:挑對 embedding、限定向量欄位、100–150 詞切塊 + re-rank
  2. 「10/10 CI102 班機異動公告」

    • 沒調 tokenizer/欄位:CI102 被切壞或被長文淹沒
    • 有調整:標題/結構欄位 boost(BM25F)→ 第一筆就是正確公告。

(B) Pinecone 論文(ICML 2025)「slab 內建過濾+相似度」

https://ithelp.ithome.com.tw/upload/images/20251004/20178568QoQh9iasOp.png

核心差異

傳統做法=先全館用條件篩一張清單,再比相似度

像你要找「價格 ≤ 200、分類是玩具、而且跟『積木』很像」的商品。

  1. 先在整個賣場用條件(metadata)篩出「符合條件的商品清單」。
  2. 再在這張清單裡,用「相似度」去找最像『積木』的。

特色:兩段分開做。過濾是一件事;相似度又是另一件事,彼此比較「各做各的」。


論文做法=把賣場分成很多小抽屜(slab),每個抽屜裡同時會過濾+比相似度

把大賣場切成很多不重疊的小區(slab),每個小區都內建兩個工具:

  • 過濾小幫手」:會把符合條件的商品先標記成名單(用位圖存,超省)
  • 相似度小幫手」:只在這份名單裡面比相似度

查詢來時會這樣跑:

  1. 把條件同時丟到每個 slab,各自先標出「符合條件的商品名單」。
  2. 每個 slab 只在自己的名單裡跑相似度搜尋(不看其它不符合的)。
  3. 把所有 slab 的前幾名合併,挑出總冠軍。

特色:過濾和相似度在同一個抽屜裡「黏在一起」跑,而且是「先標名單,再比相似度」,省很多力氣。

接下來要做什麼

分享向量資料庫,有時效性資料的處理方式


參考資源

1.Accurate and Efficient Metadata Filtering in Pinecone’s Serverless Vector Database
2.Strategies to improve search results


上一篇
Day 19|Agent Design - Memory - mem0使用的資料庫探討(5/5)
系列文
從讀書筆記到可落地 AI:LangChain、LangSmith 與 Agent 工具 30 講20
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言