一句話說明
LlamaIndex 是一個專門幫你把各種資料(文件、PDF、資料庫)接上 LLM 的框架,讓 AI 能根據你的資料回答問題。
什麼是 LlamaIndex?
你想讓 AI 回答關於公司內部文件的問題。第一步是把文件丟給 AI,但文件太多太長,塞不進 Context Window。所以你需要:載入文件、切段、建立索引、搜尋相關段落、再餵給 LLM。
這就是 RAG 的基本流程,而 LlamaIndex 的設計目標就是讓這個流程盡可能簡單。
LlamaIndex 最早叫做 GPT Index,由 Jerry Liu 在 2022 年底開發,後來改名為 LlamaIndex。它的核心理念是:LLM 應用最關鍵的部分是資料——如何載入、如何組織、如何查詢。框架的設計圍繞著這個想法,提供了從資料來源到 LLM 回答的完整管線。
和 LangChain 相比,LlamaIndex 更專注在資料層面。LangChain 是通用型框架,什麼都能做(Agent、Chain、Memory、Tool)。LlamaIndex 則把力氣集中在「讓你的資料和 LLM 對話」這件事上,在 RAG 相關的功能上做得更深入。
核心概念
LlamaIndex 的架構圍繞幾個主要元件:
Document(文件):你的原始資料。可以是 PDF、Word、CSV、網頁、資料庫查詢結果,任何你想讓 AI 能查詢的內容。LlamaIndex 有超過 160 個資料連接器(Data Connector),能從各種來源載入文件。
Node(節點):文件切段後的每一個小塊。一份 100 頁的 PDF 可能會被切成幾百個節點。每個節點包含一段文字、該段文字的 Embedding 向量,以及和其他節點的關係(例如「上一段」「下一段」)。
Index(索引):把所有節點組織起來的資料結構。最常用的是 VectorStoreIndex(向量索引),它把所有節點的 Embedding 存進 向量資料庫,搜尋時用 語意搜尋 找出最相關的節點。
Query Engine(查詢引擎):處理使用者問題的元件。它負責把問題轉成搜尋查詢、從索引中取得相關節點、把節點和問題組合成 Prompt 送給 LLM、回傳最終答案。
Retriever(檢索器):負責從索引中取出相關節點的元件。你可以自訂檢索策略,例如只取前 5 個最相關的節點、或用混合搜尋結合關鍵字和語意搜尋。
一段最簡單的 LlamaIndex RAG 程式碼:
from llama_index.core import VectorStoreIndex, SimpleDirectoryReader
# 載入資料夾中的所有文件
documents = SimpleDirectoryReader("my_docs").load_data()
# 建立向量索引(自動切段、建 Embedding、存索引)
index = VectorStoreIndex.from_documents(documents)
# 建立查詢引擎
query_engine = index.as_query_engine()
# 問問題
response = query_engine.query("文件中提到哪些安全注意事項?")
print(response)
五行程式碼就完成了一個基本的文件問答系統。LlamaIndex 自動處理了 Chunking、Embedding 和向量儲存。
LlamaIndex vs LangChain
| 比較項目 | LlamaIndex | LangChain |
|---|---|---|
| 設計理念 | 以資料為中心 | 通用 LLM 應用框架 |
| 強項 | RAG、資料索引、文件查詢 | Agent、工具串接、工作流程 |
| 資料連接器 | 160+ 種(LlamaHub) | 較少,靠社群貢獻 |
| 索引類型 | 多種(向量、樹狀、摘要、關鍵字) | 主要靠向量資料庫 |
| 查詢進階功能 | Sub-question、路由、多步驟查詢 | 需要自己組合 |
| Agent 支援 | 有,但較新 | 成熟,是主打功能 |
| 學習曲線 | 中等 | 中高 |
| 社群規模 | 中等 | 最大 |
| 商業產品 | LlamaCloud | LangSmith |
簡單的選擇指引:如果你的主要需求是讓 AI 查詢你的資料(RAG),LlamaIndex 的抽象層更貼合這個場景。如果你需要建構 Agent、串接多種工具、設計複雜工作流程,LangChain(搭配 LangGraph)更適合。兩者也可以搭配使用——用 LlamaIndex 做資料索引和檢索,用 LangChain 做流程編排。
進階查詢策略
LlamaIndex 在查詢方面提供了幾種進階策略:
Sub-question Query Engine:把一個複雜問題拆成多個子問題,分別查詢後再合成答案。例如問「A 公司和 B 公司的營收差多少?」,它會拆成「A 公司的營收是多少?」和「B 公司的營收是多少?」,分別查詢後計算差額。
Router Query Engine:根據問題類型自動選擇最適合的查詢策略。例如事實性問題用向量搜尋,摘要類問題用摘要索引。
Agentic RAG:把 RAG 和 Agent 結合。AI 不只是查一次就回答,而是可以多次查詢、交叉驗證、在多個資料來源之間切換,直到找到滿意的答案。
from llama_index.core.query_engine import SubQuestionQueryEngine
from llama_index.core.tools import QueryEngineTool, ToolMetadata
# 建立多個查詢工具
tools = [
QueryEngineTool(
query_engine=company_a_engine,
metadata=ToolMetadata(name="company_a", description="A 公司的財務資料")
),
QueryEngineTool(
query_engine=company_b_engine,
metadata=ToolMetadata(name="company_b", description="B 公司的財務資料")
),
]
# 建立子問題查詢引擎
engine = SubQuestionQueryEngine.from_defaults(query_engine_tools=tools)
response = engine.query("A 公司和 B 公司哪個營收更高?差多少?")
LlamaHub 資料連接器
LlamaHub 是 LlamaIndex 的資料連接器市集。它提供超過 160 種連接器,讓你從各種來源載入資料:
文件格式:PDF、Word、Excel、PowerPoint、Markdown、HTML、JSON、CSV
雲端服務:Google Drive、Notion、Confluence、Slack、Discord、GitHub
資料庫:PostgreSQL、MySQL、MongoDB、Elasticsearch
網路:網頁爬取、RSS、Twitter、YouTube 字幕
# 從 Notion 載入
from llama_index.readers.notion import NotionPageReader
reader = NotionPageReader(integration_token="your-token")
documents = reader.load_data(page_ids=["page-id-1", "page-id-2"])
# 從 Google Drive 載入
from llama_index.readers.google import GoogleDriveReader
reader = GoogleDriveReader()
documents = reader.load_data(folder_id="your-folder-id")
LlamaCloud
LlamaCloud 是 LlamaIndex 團隊的商業產品,提供託管的 RAG 服務。主要功能包括:
LlamaParse:進階的文件解析服務,特別擅長處理複雜的 PDF(含表格、圖片、多欄排版)。免費方案每天可解析 1000 頁,付費方案有更高的額度。
託管索引:不需要自己管理向量資料庫,直接上傳文件就能查詢。
LlamaCloud 適合不想自己管理基礎設施的團隊。如果你需要完全自主控制,用開源版本就夠了。
台灣使用情境
台灣企業在使用 LlamaIndex 時,有幾個常見的應用方向:
企業知識庫:很多台灣企業的內部文件散落在 Google Drive、Confluence、共用硬碟裡。用 LlamaIndex 的資料連接器把這些來源整合起來,建立統一的知識庫查詢入口。員工可以用中文自然語言問問題,系統從所有來源找答案。
法規查詢系統:台灣的法規條文、解釋令、函釋數量龐大,用傳統搜尋很難找到正確的條文。用 LlamaIndex 建立法規索引,搭配 Sub-question Query Engine,可以處理像「勞基法和性別平等工作法對育嬰假的規定有什麼不同?」這類跨法規的比較型問題。
技術文件問答:科技公司的技術文件通常是中英混合。LlamaIndex 搭配多語言的 Embedding 模型(如 BGE-M3),能處理繁體中文和英文混合的技術文件查詢。
客戶案例庫:顧問公司把過去的專案報告和客戶案例用 LlamaIndex 建索引,業務人員可以快速找到類似產業、類似需求的過往案例,用來支撐新的提案。
安全考量與限制
使用 LlamaIndex 建構 RAG 應用時,需要注意幾個面向:
資料存取控制:LlamaIndex 建立的索引包含你所有文件的內容。如果沒有做好權限控制,使用者可能透過 AI 查到他們不應該看到的文件內容。建議在查詢階段加上使用者權限過濾,只回傳該使用者有權看到的文件。
Embedding API 的資料外洩:如果你用雲端 Embedding API(如 OpenAI),你的文件內容會被送到外部伺服器。處理機敏資料時,考慮用本地部署的 Embedding 模型,例如 BGE 或 E5 系列。
Prompt Injection 風險:如果你的文件中包含惡意內容(例如「忽略之前的指令」),RAG 系統可能把這些內容當成指令執行。這是間接 Prompt Injection 的風險,需要在輸出階段加上過濾。
索引品質:索引的品質直接影響回答品質。Chunking 策略不當(太大或太小)、Embedding 模型選擇不適合、或文件格式解析有誤,都可能導致 AI 找不到正確的參考段落。需要用測試案例來驗證索引品質。
幻覺風險:即使 RAG 提供了參考資料,LLM 仍然可能產生 幻覺。特別是當查詢結果不夠相關時,LLM 可能自己編造答案。建議設定信心閾值,當搜尋結果的相關度太低時,直接告訴使用者「找不到相關資料」。
成本考量:每次建索引和查詢都需要呼叫 Embedding API 和 LLM API。大量文件的初始索引建立會產生顯著的 API 費用。建議先用小量文件測試效果,確認可行後再擴大規模。
怎麼開始?
- 安裝基本套件:
pip install llama-index llama-index-llms-openai llama-index-embeddings-openai
- 設定 API Key:
export OPENAI_API_KEY="your-key-here"
-
準備幾份測試文件(PDF 或文字檔),放在一個資料夾裡。
-
用五行程式碼跑一個基本的 RAG:
from llama_index.core import VectorStoreIndex, SimpleDirectoryReader
documents = SimpleDirectoryReader("test_docs").load_data()
index = VectorStoreIndex.from_documents(documents)
engine = index.as_query_engine()
print(engine.query("文件的主要內容是什麼?"))
-
調整 Chunking 策略。預設的 Chunk 大小是 1024 個 token,試試不同的大小看看效果差異。
-
加上持久化。預設每次都要重新建索引,加上儲存功能後就不用重複處理:
# 儲存索引
index.storage_context.persist(persist_dir="./storage")
# 下次直接載入
from llama_index.core import StorageContext, load_index_from_storage
storage_context = StorageContext.from_defaults(persist_dir="./storage")
index = load_index_from_storage(storage_context)
- 看官方教學。LlamaIndex 的文件有豐富的 Tutorials 和 Guides。
知識檢測
讀完文章後,測試一下你對這個主題的理解。
常見問題
LlamaIndex 是免費的嗎?
LlamaIndex 核心框架是免費開源的(MIT License)。你需要付費的是 LLM API 和 Embedding API 的使用費用。LlamaCloud(託管服務)和 LlamaParse(進階文件解析)有免費額度,超過後需要付費。
LlamaIndex 和 RAG 有什麼關係?
LlamaIndex 是實作 RAG 最常用的框架之一。RAG 是一種架構模式(從資料中檢索相關內容,再用 LLM 生成回答),LlamaIndex 是實現這個模式的工具。你也可以不用 LlamaIndex 自己從頭寫 RAG,但 LlamaIndex 幫你處理了大部分的基礎工程。
我的文件有中文,LlamaIndex 支援嗎?
支援。LlamaIndex 本身是語言無關的,中文支援的品質取決於你選用的 Embedding 模型和 LLM。建議用多語言的 Embedding 模型(OpenAI text-embedding-3-small 對繁體中文支援不錯,開源的 BGE-M3 也是好選擇)。文件解析方面,LlamaParse 對中文 PDF 的處理效果比預設的解析器好。
LlamaIndex 能處理多大的資料量?
取決於你的向量資料庫。用內建的簡易向量存儲,適合幾千份文件以內。如果文件量更大,建議搭配專門的向量資料庫(如 Chroma、Qdrant、Pinecone),這些資料庫能處理百萬級以上的向量。索引建立的速度瓶頸通常在 Embedding API 的呼叫速率。
總結
LlamaIndex 是建構 RAG 應用最直接的工具。它專注在資料連接、索引建立和查詢這三件事上,提供了從簡單的五行 RAG 到複雜的多來源交叉查詢的完整解決方案。
如果你想讓 AI 能查詢你自己的資料,LlamaIndex 是很好的起點。從一個資料夾的文件開始,先確認基本的問答品質,再逐步加入更多資料來源和進階查詢策略。
參考資料
- LlamaIndex Documentation — LlamaIndex 官方文件
- LlamaIndex GitHub Repository — LlamaIndex 原始碼
- LlamaHub — LlamaIndex 資料連接器市集
- LlamaCloud — LlamaIndex 託管服務