一句話說明

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 費用。建議先用小量文件測試效果,確認可行後再擴大規模。

怎麼開始?

  1. 安裝基本套件:
pip install llama-index llama-index-llms-openai llama-index-embeddings-openai
  1. 設定 API Key:
export OPENAI_API_KEY="your-key-here"
  1. 準備幾份測試文件(PDF 或文字檔),放在一個資料夾裡。

  2. 用五行程式碼跑一個基本的 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("文件的主要內容是什麼?"))
  1. 調整 Chunking 策略。預設的 Chunk 大小是 1024 個 token,試試不同的大小看看效果差異。

  2. 加上持久化。預設每次都要重新建索引,加上儲存功能後就不用重複處理:

# 儲存索引
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)
  1. 看官方教學。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 是很好的起點。從一個資料夾的文件開始,先確認基本的問答品質,再逐步加入更多資料來源和進階查詢策略。

參考資料