<cite id="ffb66"></cite><cite id="ffb66"><track id="ffb66"></track></cite>
      <legend id="ffb66"><li id="ffb66"></li></legend>
      色婷婷久,激情色播,久久久无码专区,亚洲中文字幕av,国产成人A片,av无码免费,精品久久国产,99视频精品3
      網易首頁 > 網易號 > 正文 申請入駐

      LlamaIndex檢索調優實戰:七個能落地的技術細節

      0
      分享至

      RAG系統搭完其實才是工作的開始,實際跑起來你會發現,答案質量參差不齊,有時候精準得嚇人、有時候又會非常離譜。這個問題往往不模型本身,而是在檢索環節的那些"小細節"。

      這篇文章整理了七個在LlamaIndex里實測有效的檢索優化點,每個都帶代碼可以直接使用。



      1、語義分塊 + 句子窗口

      固定長度切分文檔是最省事的做法,但問題也很明顯:這樣經常把一句話從中間劈開,上下文斷裂,檢索器只能硬著頭皮匹配這些殘缺的片段。

      所以LlamaIndex提供了兩個更聰明的解析器。SemanticSplitter會在語義邊界處切分,不再機械地按字數來;SentenceWindow則給每個節點附加前后幾句話作為上下文窗口。并且這兩者還可以組合使用,能達到不錯的效果:

      # pip install llama-index
      from llama_index.core import VectorStoreIndex, SimpleDirectoryReader
      from llama_index.core.node_parser import (
      SemanticSplitterNodeParser, SentenceWindowNodeParser
      )
      docs = SimpleDirectoryReader("./knowledge_base").load_data()
      # Step 1: Semantically aware base chunks
      semantic_parser = SemanticSplitterNodeParser(buffer_size=1, breakpoint_percentile_threshold=95)
      semantic_nodes = semantic_parser.get_nodes_from_documents(docs)
      # Step 2: Add sentence-window context to each node
      window_parser = SentenceWindowNodeParser(window_size=2, window_metadata_key="window")
      nodes = window_parser.get_nodes_from_documents(semantic_nodes)
      index = VectorStoreIndex(nodes)

      檢索模型打分的對象是單個節點,所以讓每個節點包含完整的語義單元,再帶上一點其他的附加信息,命中率自然就上去了。

      2、BM25 + 向量的混合檢索

      向量嵌入擅長捕捉語義相似性,但碰到專業縮寫、產品型號這類精確匹配場景就容易翻車。老牌的BM25算法恰好補上這個短板,它對精確詞項敏感,長尾術語的召回能力很強。

      把兩種檢索方式融合起來,LlamaIndex的QueryFusionRetriever可以直接搞定:

      from llama_index.core.retrievers import QueryFusionRetriever
      from llama_index.core import StorageContext
      from llama_index.core.indices.keyword_table import SimpleKeywordTableIndex
      # Build both indexes
      vector_index = index # from above
      keyword_index = SimpleKeywordTableIndex.from_documents(docs)
      retriever = QueryFusionRetriever(
      retrievers=[
      vector_index.as_retriever(similarity_top_k=5),
      keyword_index.as_retriever(similarity_top_k=5)
      ],
      num_queries=1, # single query fused across retrievers
      mode="simple", # RRF-style fusion
      )

      BM25抓精確匹配,向量抓語義關聯,RRF融合后的top-k質量通常比單一方法好一截,而且不用寫多少額外代碼。

      3、多查詢擴展

      用戶的提問方式千奇百怪,同一個意圖可以有很多種表達方法。所以單一query去檢索很可能漏掉一些相關但措辭不同的文檔。

      多查詢擴展的思路就是:自動生成幾個query的變體,分別檢索,再把結果融合起來。

      from llama_index.core.retrievers import QueryFusionRetriever
      multi_query_retriever = QueryFusionRetriever.from_defaults(
      retriever=vector_index.as_retriever(similarity_top_k=4),
      num_queries=4, # generate 4 paraphrases
      mode="reciprocal_rerank", # more robust fusion
      )

      如果業務場景涉及結構化的對比類問題(比如"A和B有什么區別"),還可以考慮query分解:先拆成子問題,分別檢索,最后匯總。

      不同的表述會激活embedding空間里不同的鄰居節點,所以這種融合機制保留了多樣性,同時讓多個檢索器都認可的結果排到前面。

      4、reranker

      初篩拿回來的top-k結果,質量往往是"還行"的水平。如果想再往上提一個檔次reranker是個好選擇。

      和雙編碼器不同,交叉編碼器會把query和passage放在一起過模型,對相關性的判斷更精細。但是問題就是慢,不過如果只跑在候選集上延遲勉強還能接受:

      from llama_index.postprocessor.cohere_rerank import CohereRerank
      # or use a local cross-encoder via Hugging Face if preferred
      reranker = CohereRerank(api_key="COHERE_KEY", top_n=4) # keep the best 4
      query_engine = vector_index.as_query_engine(
      similarity_top_k=12,
      node_postprocessors=[reranker],
      )
      response = query_engine.query("How does feature X affect Y?")

      先用向量檢索快速圈出候選(比如top-12),再用交叉編碼器精排到top-4。速度和精度之間取得了不錯的平衡。

      5、元數據過濾與去重

      不是所有檢索回來的段落都值得信任,文檔有新有舊,有的是正式發布版本,有的只是草稿。如果語料庫里混著不同版本、不同產品線的內容,不加過濾就是給自己挖坑。

      元數據過濾能把檢索范圍限定在特定條件內,去重則避免相似內容重復占用上下文窗口,時間加權可以讓新文檔獲得更高權重:

      from llama_index.core.retrievers import VectorIndexRetriever
      from llama_index.postprocessor import (
      SimilarityPostprocessor, DuplicateRemovalPostprocessor
      )
      retriever = VectorIndexRetriever(
      index=vector_index,
      similarity_top_k=12,
      filters={"metadata": {"product": "alpha"}} # simple example
      )
      post = [
      DuplicateRemovalPostprocessor(),
      SimilarityPostprocessor(similarity_cutoff=0.78),
      ]
      nodes = retriever.retrieve("Latest install steps for alpha build?")
      nodes = [p.postprocess_nodes(nodes) for p in post][-1]

      過濾器擋住不相關的文檔,相似度閾值過濾掉弱匹配,去重保證多樣性。這套組合操作下來,檢索結果的下限被抬高了。

      6、響應合成模式的選擇

      檢索只是手段,最終目的是生成靠譜的答案。如果合成階段沒控制好,模型很容易脫離檢索內容自由發揮,幻覺就來了。

      LlamaIndex的"compact"模式會讓模型更緊密地依賴檢索節點,減少跑題的概率:

      from llama_index.core.response_synthesizers import TreeSummarize, CompactAndRefine
      # Balanced, citation-friendly option
      qe = vector_index.as_query_engine(
      similarity_top_k=8,
      response_mode="compact", # leans terse & grounded
      use_async=False,
      )
      ans = qe.query("Summarize the security model, cite sources.")
      print(ans) # includes source refs by default

      嚴格來說這不算檢索優化,但它形成了一個反饋閉環——如果發現答案經常跑偏,可能需要回頭調整top-k或者相似度閾值。

      7、持續評估

      沒有量化指標,優化就是在黑箱里瞎摸。建議準備一個小型評估集,覆蓋核心業務場景的10到50個問題,每次調參后跑一遍,看看忠實度和正確率的變化。

      from llama_index.core.evaluation import FaithfulnessEvaluator, CorrectnessEvaluator
      faith = FaithfulnessEvaluator() # checks grounding in retrieved context
      corr = CorrectnessEvaluator() # compares to reference answers
      eval_prompts = [
      {"q": "What ports do we open for service Z?", "gold": "Ports 443 and 8443."},
      # add 20–50 more spanning your taxonomy
      ]
      qe = multi_query_retriever.as_query_engine(response_mode="compact", similarity_top_k=6)
      scores = []
      for item in eval_prompts:
      res = qe.query(item["q"])
      scores.append({
      "q": item["q"],
      "faithful": faith.evaluate(res).score,
      "correct": corr.evaluate(res, reference=item["gold"]).score
      })
      # Now look at averages, find weak spots, iterate.

      當你發現系統在某類問題上總是出錯:比如漏掉具體數字、把策略名稱搞混等等,就就可以根據問題來進行調整了,比如加大BM25權重?提高相似度閾值?換個更強的reranker?

      幾個容易踩的坑

      分塊太長會拖累召回率,節點應該保持聚焦,讓句子窗口來承擔上下文補充的任務。

      Rerank不要對全量結果做,應該只在初篩的候選集上。

      語料庫如果混著多個產品版本,一定要在建索引時就加好version、env、product這些元數據字段,否則檢索回來的可能是過時內容。

      最后別憑感覺判斷效果好不好,維護一個評估用的表格,記錄每次調參后的分數變化,時間長了你會發現哪些參數對哪類問題影響最大。

      總結

      RAG的答案質量不靠單一銀彈,而是一系列合理配置的疊加。建議先從混合檢索和句子窗口兩個點入手,觀察效果,再逐步加入多查詢擴展和reranker。

      量化、調整、再量化,循環往復。

      https://avoid.overfit.cn/post/507a074851c5480a818e67374aecddd6

      作者:Modexa

      特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。

      Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

      相關推薦
      熱點推薦
      伊朗最大“內鬼”被抓?革命衛隊:勾結以色列,指揮官卡尼被拘!

      伊朗最大“內鬼”被抓?革命衛隊:勾結以色列,指揮官卡尼被拘!

      青青子衿
      2026-03-05 11:57:03
      打瘋了!東契奇首節狂轟22+5三分 生涯30次單節20+升歷史第四

      打瘋了!東契奇首節狂轟22+5三分 生涯30次單節20+升歷史第四

      醉臥浮生
      2026-03-07 12:13:33
      伊拉克庫爾德第一夫人宣言:我們不是任人驅使的炮灰!

      伊拉克庫爾德第一夫人宣言:我們不是任人驅使的炮灰!

      勝研集
      2026-03-06 13:44:23
      廣東一女子不愿上班常年坐街邊,因長得好看被路人投喂:又懶又饞

      廣東一女子不愿上班常年坐街邊,因長得好看被路人投喂:又懶又饞

      明智家庭教育
      2026-03-06 17:19:16
      美以伊軍事沖突最大副作用,是斬斷了俄羅斯的“救命稻草”

      美以伊軍事沖突最大副作用,是斬斷了俄羅斯的“救命稻草”

      廖保平
      2026-03-05 12:08:52
      “不想為以色列賣命”:帝國最后的遮羞布,美式民主終成笑話

      “不想為以色列賣命”:帝國最后的遮羞布,美式民主終成笑話

      怪口歷史的K先生
      2026-03-06 15:22:51
      為何關閉霍爾木茲海峽就能掐全球脖子?因為伊朗原油是全世界最好的

      為何關閉霍爾木茲海峽就能掐全球脖子?因為伊朗原油是全世界最好的

      風向觀察
      2026-03-06 21:31:15
      兩會不到3天,5大好消息傳來!老百姓暗暗叫好:希望國家盡快落實

      兩會不到3天,5大好消息傳來!老百姓暗暗叫好:希望國家盡快落實

      談史論天地
      2026-03-07 06:54:29
      1979年,張國燾凍死在養老院,許世友:除了主席,沒人是他的對手

      1979年,張國燾凍死在養老院,許世友:除了主席,沒人是他的對手

      文史季季紅
      2026-03-05 13:35:03
      寫入教科書的一天:F-35在德黑蘭完成全球首次實戰空對空擊殺

      寫入教科書的一天:F-35在德黑蘭完成全球首次實戰空對空擊殺

      斌聞天下
      2026-03-06 07:30:03
      伊方:因美以襲擊喪生的伊朗人三成為青少年

      伊方:因美以襲擊喪生的伊朗人三成為青少年

      環球網資訊
      2026-03-07 06:39:29
      為什么美國的華人華裔地位那么低 網友從各方面分析 真就那樣

      為什么美國的華人華裔地位那么低 網友從各方面分析 真就那樣

      侃神評故事
      2026-03-06 07:10:03
      我包養過一個女大學生,七年花了一千多萬

      我包養過一個女大學生,七年花了一千多萬

      煙火人間故事匯
      2026-03-06 23:05:03
      性壓抑已經變態至此了?

      性壓抑已經變態至此了?

      黯泉
      2026-03-07 11:28:43
      蘿莉島,是進入核心圈層的投名狀,你猜他們為什么都穿紅皮鞋

      蘿莉島,是進入核心圈層的投名狀,你猜他們為什么都穿紅皮鞋

      百曉生談歷史
      2026-03-05 22:00:08
      一份“煮熟的三文魚”火了,原來低認知的家長,真能搞出人命!

      一份“煮熟的三文魚”火了,原來低認知的家長,真能搞出人命!

      妍妍教育日記
      2026-03-07 08:45:06
      伊朗萬萬沒想到,自家王牌武器遭到破解,美軍多了一張底牌

      伊朗萬萬沒想到,自家王牌武器遭到破解,美軍多了一張底牌

      空天力量
      2026-03-06 13:09:18
      上次被發現還是1911年!上海寶山驚現1只,專家:可能是坐船來的

      上次被發現還是1911年!上海寶山驚現1只,專家:可能是坐船來的

      萬象硬核本尊
      2026-03-06 23:54:22
      女子實名舉報某團外賣:不上大額券就讓我變成“凌晨營業”,你們真黑!

      女子實名舉報某團外賣:不上大額券就讓我變成“凌晨營業”,你們真黑!

      回旋鏢
      2026-03-06 21:13:59
      塔圖姆復出15分12板7助攻凱爾特人大勝獨行俠,布朗24分7板7助

      塔圖姆復出15分12板7助攻凱爾特人大勝獨行俠,布朗24分7板7助

      湖人崛起
      2026-03-07 10:25:09
      2026-03-07 13:43:00
      deephub incentive-icons
      deephub
      CV NLP和數據挖掘知識
      1940文章數 1456關注度
      往期回顧 全部

      科技要聞

      OpenClaw爆火,六位"養蝦人"自述與AI共生

      頭條要聞

      特朗普突然放話"先解決伊朗后解決古巴" 梅西聽懵了

      頭條要聞

      特朗普突然放話"先解決伊朗后解決古巴" 梅西聽懵了

      體育要聞

      塔圖姆歸來:凱爾特人的春之綠

      娛樂要聞

      周杰倫田馥甄的“JH戀” 被扒得底朝天

      財經要聞

      針對"不敢休、不讓休"怪圈 國家出手了

      汽車要聞

      逃離ICU,上汽通用“止血”企穩

      態度原創

      時尚
      家居
      藝術
      本地
      旅游

      這些才是適合普通人的穿搭!搭配腰帶、多穿牛仔褲,簡單舒適

      家居要聞

      暖棕撞色 輕法奶油風

      藝術要聞

      Mark Grantham | 城市街景

      本地新聞

      食味印象|一口入魂!康樂烤肉串起千年絲路香

      旅游要聞

      文旅部部長:7名外國游客到上海旅游,買了40箱貨;“成為中國人”成了熱詞

      無障礙瀏覽 進入關懷版