📌 本文重點
- 2 億頁壓成約 2GB 的「縮小版網際網路」可離線搜尋
- 純本地檢索搭配任意 LLM,輕鬆組出 RAG 流程
- 特別適合高隱私、內網環境與成本敏感的 RAG 應用
用一句話定位:LLMSearchIndex 就是把「壓縮過的縮小版網際網路」塞進你筆電,讓你在本機就能做全網級搜尋,再拿結果丟給任何 LLM 做 RAG,完全不用再付搜尋 API 費。
原始專案介紹可看 Reddit:https://www.reddit.com/r/LocalLLaMA/comments/1t3hokh/llmsearchindex_an_open_source_local_web_search/
核心功能:一台筆電裝下一個「可離線的 Google 替身」
1. 2 億頁壓縮索引,約 2GB 就能跑
LLMSearchIndex 預先把網頁爬好、清洗、壓縮成自訂索引格式,涵蓋 FineWeb、維基百科等資料,超過 2 億頁內容壓進約 2GB 檔案。
💡 關鍵: 把原本動輒數 TB 的網頁內容壓成約 2GB,使全網級搜尋第一次可以在一般筆電本機完成。
你可以做的事:
- 把它想成「只存文字精華的迷你網際網路」
- 在任何一台 8GB RAM 以上的筆電或桌機上運行,不用伺服器
- 直接拿來當你自建 RAG 系統的「泛網背景知識來源」,不用自己寫爬蟲 + 建索引
2. 純本地檢索,不靠外部搜尋 API
LLMSearchIndex 是一個 Python 函式庫,檢索完全在本機完成:
- 不依賴 Google、Brave、Bing API
- 不需要額外布署 SearXNG 這種 meta search
- 問題 → 本機索引 → 回傳相關片段(含來源網址)
實際效果:只要你還在用本地 LLM(如 Ollama、llama.cpp)或雲端 LLM(OpenAI、Claude 等),檢索這一段可完全脫離網路與付費 API,對公司內網環境或隱私要求嚴格的團隊特別實用。
💡 關鍵: 把「搜尋這一步」完全搬到本地,不只省掉搜尋 API 成本,也避免把查詢內容外送到第三方服務。
3. Python API + 任意 LLM,快速組出 RAG 流程
LLMSearchIndex 的設計就是為 RAG 用:
- 輸入:自然語言
query - 輸出:N 個相關片段(帶文字與
URL),可直接拼進 LLM 的系統提示或 context - 不綁特定模型,你可以串:
- 本地模型(
Ollama、vLLM、Kobold、LM Studio…) - 雲端模型(OpenAI、Anthropic、Gemini、Groq…)
典型 workflow:
- 使用者問問題
- 用
LLMSearchIndex搜索全網索引,取前 5–10 個片段 - 把片段整理成「context」
- 丟給 LLM 生成回答
這整套,你可以在一支 Python 檔內完成。
適合誰用:三種典型場景
1. 公司內部知識問答:先查內網,再查「縮小版全網」
情境:你有一個內部知識庫(Notion、Confluence、PDF…),已經做了 RAG,但常遇到:
- 文件沒寫清楚,需要補充產業背景
- 客戶問題牽涉到外部規範、標準、技術細節
做法:
- 先用公司內部向量庫檢索(例如
Chroma、Qdrant、Weaviate) - 若分數不夠高或結果太少,再用
LLMSearchIndex查一次「全網索引」 - 把「內網內容 + 全網片段」一起餵給 LLM
好處:
- 內網問題走本地知識(更準、更貼合公司語境)
- 外部背景靠本地全網索引補足,不用再打搜尋 API
2. 研究人員做主題深度檢索
情境:你是研究員 / 資深工程師,常需要:
- 快速掃描一個新主題的相關文章
- 找技術名詞、標準、實作細節的來源
做法:
- 用
LLMSearchIndex做多輪查詢,像這樣: - 「LLM 推理最佳化 quantization 技術」
- 「vLLM streaming serving 實作」
- 「RAG selective retrieval cost optimization」
- 把回來的片段整理成資料集,再讓 LLM 幫你摘要、對比觀點、拉時間線
你得到的是:一套可重複的「本機文獻預篩管線」,比手動 Google → 開一堆分頁 → Copy/Paste 省力很多,也更隱私。
3. 離線 / 高隱私環境下的「像 Google 一樣」輔助搜尋
情境:
- 政府、醫療、金融等內網環境不允許對外連線
- 你只被允許「把工具帶進來」,不能讓資料出去
做法:
- 先在可上網環境下載索引檔與程式碼
- 帶進封閉網路內安裝
- 之後所有搜尋與 RAG 都在本機完成
搭配 Selective RAG(參考 Silicon Protocol 思路):
- 只有在「本地內網文件」不足以回答時,才啟動
LLMSearchIndex檢索 - 把返回片段壓縮(摘要、抽 key points),控制 context 在 3–4 萬 token,以節省 LLM 成本
💡 關鍵: 用 Selective RAG 控制 context 在 3–4 萬 token 內,可以在維持回答品質的同時大幅壓低 LLM 推理成本。
參考文章:
- Selective RAG / 成本控制思路:https://pub.towardsai.net/the-silicon-protocol-how-to-cut-llm-context-costs-80-in-healthcare-government-finance-2026-5c2f583969cf
- Agentic RAG 思路:https://pub.towardsai.net/the-real-leap-is-not-better-retrieval-its-better-control-over-retrieval-2bd470bba9d3
怎麼開始:從 pip 到最小可用 RAG 範例
以下程式碼是假想 API 介面,目的是讓你知道「整體長什麼樣」,實作時請以實際專案 README 為主。
步驟 1:安裝與下載索引
# 1. 安裝套件
pip install llmsearchindex
# 2. 下載預先建好的 2GB 索引
llmsearchindex download --dataset fineweb-wikipedia
# 或依 README 指示,選擇其他索引來源
行動重點:確保你有至少 5GB 以上的剩餘磁碟空間與穩定網路,這一步可能會跑一陣子,但只需做一次。
步驟 2:在 Python 裡發一個最簡單的 query
from llmsearchindex import LLMSearchIndex
# 載入索引(第一次載入會較慢,之後可快取)
index = LLMSearchIndex("./indexes/fineweb_wiki.idx")
# 發出一個查詢
results = index.search(
query="什麼是 Selective RAG,怎麼降低 LLM context 成本?",
top_k=5
)
for i, r in enumerate(results, 1):
print(f"[{i}] score={r.score:.3f}\nURL={r.url}\nSnippet={r.text[:200]}...\n")
行動重點:
- 改成你的問題跑一次
- 看回傳的文字和
URL,確認內容大致合理
步驟 3:把檢索結果接到任意 LLM(本地或雲端)
以下以 OpenAI API 為例,你可以換成任何 LLM SDK:
import os
from openai import OpenAI
from llmsearchindex import LLMSearchIndex
client = OpenAI(api_key=os.environ["OPENAI_API_KEY"])
index = LLMSearchIndex("./indexes/fineweb_wiki.idx")
question = "請用中文說明 Agentic RAG 與傳統 RAG 的差異,並舉一個應用例子。"
# 1) 先檢索
hits = index.search(question, top_k=5)
context_blocks = []
for h in hits:
context_blocks.append(f"來源:{h.url}\n內容:{h.text}")
context = "\n\n".join(context_blocks)
# 2) 再把 context 丟給 LLM
prompt = f"""你是一位技術寫作者。
根據以下資料回答使用者問題,回答要有條列與具體例子。
【檢索到的資料】
{context}
【使用者問題】
{question}
"""
resp = client.chat.completions.create(
model="gpt-4.1-mini",
messages=[{"role": "user", "content": prompt}]
)
print(resp.choices[0].message.content)
行動重點:
- 把
model改成你實際在用的模型 - 若是本地模型(例如
Ollama),只需把「呼叫 OpenAI」那段換成對本地 API 的 HTTPPOST
步驟 4:加一點「Selective / Agentic RAG」邏輯
目標:控制什麼時候查本機內網知識、什麼時候查全網索引,並讓 LLM 自己做選擇。
下面是一個可直接複製的「最小工作流」範例(假設你已有 search_internal() 可查公司文件):
def answer_question(question: str):
"""最小 Agentic + Selective RAG 工作流示意"""
# 1) 先查內部知識庫
internal_docs = search_internal(question, top_k=5)
# 2) 請 LLM 判斷要不要額外查全網
judge_prompt = f"""你是一個檢索決策助手。
使用者問題:{question}
下面是內部文件的部份內容,如果已足夠回答,就回答 NO;
如果明顯需要外部背景知識,回答 YES。
內部文件摘要:
{internal_docs[:4000]}
只回答 YES 或 NO。"""
judge = client.chat.completions.create(
model="gpt-4.1-mini",
messages=[{"role": "user", "content": judge_prompt}],
max_tokens=2
).choices[0].message.content.strip()
web_context = ""
if judge == "YES":
web_hits = index.search(question, top_k=5)
web_context = "\n\n".join(h.text for h in web_hits)
# 3) 最終回答,Selective RAG:只注入必要的 context
final_prompt = f"""根據以下資料,用清楚的條列方式回答問題。
【內部文件】
{internal_docs}
【外部網路資料】
{web_context}
問題:{question}
"""
ans = client.chat.completions.create(
model="gpt-4.1-mini",
messages=[{"role": "user", "content": final_prompt}]
)
return ans.choices[0].message.content
這段做了幾件關鍵事:
- 先用內部文件回答,避免 context 過大
- 只在 LLM 判斷「需要外部背景」時才查
LLMSearchIndex→ Selective RAG - 讓「要不要查外網」變成 LLM 可控制的動作 → Agentic RAG 思路
你可以把這段包成 API,直接給前端 chat UI 使用,實際上就完成了一個「有公司腦、有縮小版全網腦」的混合助理。
小結:什麼時候值得把 LLMSearchIndex 裝進你電腦?
如果你符合以下任一條件,很值得試:
- 不想再為 Brave / Bing / 其他 Web Search API 付費
- 公司內網不能直連外網,但又需要一般網路知識
- 已經有 RAG,但缺一層泛網背景,常被卡在「文件沒寫但網路上早就有答案」
先從:
pip install+ 下載索引- 跑一次簡單 query
- 用上面最小工作流範例接到你的 LLM
開始把「縮小版網際網路」塞進你的 RAG pipeline 裡,用一台筆電就做出接近全網搜尋體驗的助理。
🚀 你現在可以做的事
- 打開 README,實際執行
pip install llmsearchindex並下載一個索引檔- 改寫文中的 Python 範例,把
query換成你真實工作會問的問題跑一次- 把「步驟 4」的
answer_question()包成一個簡單 API,接到現有的內網 chat UI 做小規模試用


發佈留言