
2026 年最佳 RAG 框架:LangChain vs LlamaIndex vs Haystack(以及何時根本不需要框架)
LangGraph 1.0 在 2025 年底推出首個穩定版本,而 LangChain 到 2026 年 7 月已累積 143,060 顆 GitHub star。這兩個事實正好框住了你正在做的決定。2026 年最佳 RAG 框架,取決於一個問題:你到底需不需要框架?如果只是在單一供應商上做單一語料庫的問答應用,供應商 SDK 加上一個向量客戶端就夠了。如果涉及多來源擷取或 agent 式檢索,那就選 LangChain/LangGraph 或 LlamaIndex。
重點整理
- 預設選擇:需要多步驟編排的生產環境應用,用 LangChain 1.0 + LangGraph。
- 單一語料庫、單一供應商?跳過框架。供應商 SDK + 向量客戶端上線更快。
- 框架開銷佔整體 RAG 延遲不到 10%。檢索策略重要得多。
- 看
pushed_at,不要看 star。活躍的 repo 永遠勝過高 star 的屍體。
2026 年所有 RAG 框架,一次比較
八個編排框架加一個無框架選項,評分標準是工程主管在正式採用前真正會檢查的項目。這張表只涵蓋編排層。至於完整 RAG 技術棧,包含向量資料庫與 reranker,那是另一個獨立的決定。
最後驗證日期:2026-07-31
| 框架 | 最適合 | 語言 | 授權 | 自架 | 托管選項 | 結論 |
|---|---|---|---|---|---|---|
| LangChain / LangGraph | 多步驟 agent 式 pipeline | Python、JS | MIT | 可 | LangSmith | 生產環境的預設選擇 |
| LlamaIndex | 文件密集型擷取 | Python、TS | MIT | 可 | LlamaCloud | 開箱即用最強解析 |
| Haystack | 企業級 NLP、歐盟團隊 | Python | Apache-2.0 | 可 | deepset Cloud | 型別化 pipeline 最完整 |
| DSPy | 大規模 prompt 最佳化 | Python | MIT | 可 | 無 | 研究等級,學習曲線陡 |
| RAGFlow | PDF/文件解析 | Python | Apache-2.0 | 可 | 無 | 最佳免費文件解析引擎 |
| Dify | 無程式碼/低程式碼團隊 | Python | Apache-2.0(修改版) | 可 | Dify Cloud | 原型最快,掌控度最低 |
| txtai | 輕量級單一檔案應用 | Python | Apache-2.0 | 可 | 無 | 佔用最小,範圍有限 |
| Semantic Kernel | .NET / 企業級 Microsoft | C#、Python、Java | MIT | 可 | Azure AI | .NET 的唯一解,沒有之一 |
| 無框架 | 單一語料庫、單一供應商 | 任意 | 不適用 | 不適用 | 不適用 | 上線最快,最難擴展 |
上面的結論只是起點,不是最終答案。下一節會告訴你,你到底需不需要這些東西中的任何一個。如果需要,第三個 H2 的程式碼比較會讓你看到,實際住在每個框架裡是什麼樣子。
2026 年你真的需要 RAG 框架嗎?
也許不需要。當你的 pipeline 有真正的編排複雜度時,檢索增強生成(RAG)框架才值得它的位置。如果只是單一語料庫、單一 LLM 供應商、標準分塊策略的簡單問答應用,供應商 SDK 加一個向量客戶端就真的夠了。你可以在幾天內上線,而不是幾週。
三條路線,講白一點:
路線一:單一語料庫、單一供應商、簡單問答。 直接用供應商 SDK。OpenAI 的 embeddings 端點加上 Qdrant、Chroma 或 pgvector 當向量儲存庫,不到 50 行就能有一條能動的 pipeline。沒有抽象稅,沒有框架升級要追。如果你在選擇之前需要先搞懂 pipeline 的概念,先從頭到尾建一條 RAG pipeline。
路線二:多來源擷取、幾十種文件格式、解析很痛。 框架在這裡就值回票價。LlamaIndex 的 reader 支援 160 種以上的檔案格式。Haystack 的轉換器和 RAGFlow 的深度 PDF 解析,能幫你省下幾週自己寫載入器的時間。編排開銷確實存在,但跟擷取工作比起來很小。
路線三:agent 式、多步驟檢索。 用框架,不然你會把 LangGraph 重新蓋一遍,蓋得比較差,而且沒有測試。條件式路由、人機協同檢查點、有狀態的多輪檢索,正是 LangGraph 1.0 為此而生的功能。
反方的說法是真實且有紀錄的。Octomind 從 2023 年初開始在生產環境跑了 LangChain 超過 12 個月,然後在 2024 年把它移除。他們給的理由是:這些抽象讓底層修改變得困難甚至不可能,而模組化的積木反而簡化了程式碼庫。Hacker News 上的討論引來數百則留言,許多工程師有類似經歷。
供應商這邊改變了什麼:供應商 SDK 吸收了框架過去負責抽象掉的大部分東西。原生工具呼叫、串流工具呼叫、prompt 快取,現在在 OpenAI 和 Anthropic 的 SDK 裡都是一等公民。2023 年那個讓框架站得住腳的抽象差距,到 2026 年已經明顯縮小。
多數團隊高估了自己會遇到的編排複雜度,卻低估了一個用不到的框架所要付出的成本。
同一條 RAG pipeline,四種寫法
判斷一個框架最快的方式,就是讀同一個任務用它寫出來的樣子。以下是:擷取兩份文件、建立索引、回答一個問題。相同的輸入,相同的輸出形狀。四種實作。
LangChain(18 行):
from langchain_community.document_loaders import TextLoader
from langchain_openai import OpenAIEmbeddings, ChatOpenAI
from langchain_community.vectorstores import InMemoryVectorStore
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.runnables import RunnablePassthrough
from langchain_core.output_parsers import StrOutputParser
docs = TextLoader("docs/guide.txt").load() + TextLoader("docs/faq.txt").load()
vectorstore = InMemoryVectorStore.from_documents(docs, OpenAIEmbeddings())
retriever = vectorstore.as_retriever(search_kwargs={"k": 4})
prompt = ChatPromptTemplate.from_template(
"Answer from context:\n{context}\n\nQuestion: {question}"
)
chain = (
{"context": retriever, "question": RunnablePassthrough()}
| prompt
| ChatOpenAI(model="gpt-4o")
| StrOutputParser()
)
print(chain.invoke("What is the return policy?"))觀察:18 行,可讀,但光 import 清單就告訴你,自己簽下了多大的相依性表面。
LlamaIndex(12 行):
from llama_index.core import VectorStoreIndex, SimpleDirectoryReader, Settings
from llama_index.llms.openai import OpenAI
from llama_index.embeddings.openai import OpenAIEmbedding
Settings.llm = OpenAI(model="gpt-4o")
Settings.embed_model = OpenAIEmbedding()
documents = SimpleDirectoryReader("docs/").load_data()
index = VectorStoreIndex.from_documents(documents)
query_engine = index.as_query_engine(similarity_top_k=4)
print(query_engine.query("What is the return policy?"))觀察:12 行。從資料夾到答案的最短路徑。餵給它哪個 embedding 模型,比外面包的那個框架重要得多。
Haystack(16 行):
from haystack import Pipeline
from haystack.components.converters import TextFileToDocument
from haystack.components.writers import DocumentWriter
from haystack.components.embedders import OpenAITextEmbedder, OpenAIDocumentEmbedder
from haystack.components.retrievers import InMemoryEmbeddingRetriever
from haystack.components.generators import OpenAIGenerator
from haystack.document_stores.in_memory import InMemoryDocumentStore
store = InMemoryDocumentStore()
indexing = Pipeline()
indexing.add_component("converter", TextFileToDocument())
indexing.add_component("embedder", OpenAIDocumentEmbedder())
indexing.add_component("writer", DocumentWriter(document_store=store))
indexing.connect("converter", "embedder")
indexing.connect("embedder", "writer")
indexing.run({"converter": {"sources": ["docs/guide.txt", "docs/faq.txt"]}})
query = Pipeline()
query.add_component("embedder", OpenAITextEmbedder())
query.add_component("retriever", InMemoryEmbeddingRetriever(document_store=store, top_k=4))
query.add_component("generator", OpenAIGenerator(model="gpt-4o"))
query.connect("embedder", "retriever")
query.connect("retriever", "generator")
print(query.run({"embedder": {"text": "What is the return policy?"}}))觀察:16 行,但接線最明確。每一條連線都看得見。這種囉嗦在 40 個以上元件時會開始回本。
無框架(14 行):
from openai import OpenAI
from qdrant_client import QdrantClient
from qdrant_client.models import Distance, VectorParams, PointStruct
client = OpenAI()
qdrant = QdrantClient(url="http://localhost:6333")
qdrant.create_collection("docs", VectorParams(size=1536, distance=Distance.COSINE))
texts = [open("docs/guide.txt").read(), open("docs/faq.txt").read()]
embeddings = client.embeddings.create(input=texts, model="text-embedding-3-small")
points = [PointStruct(id=i, vector=e.embedding, payload={"text": t})
for i, (e, t) in enumerate(zip(embeddings.data, texts))]
qdrant.upsert("docs", points)
query_emb = client.embeddings.create(input=["return policy"], model="text-embedding-3-small")
hits = qdrant.query_points("docs", query_emb.data[0].embedding, limit=4).points
context = "\n".join(h.payload["text"] for h in hits)
answer = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": f"Answer from context:\n{context}\n\nQuestion: What is the return policy?"}]
)
print(answer.choices[0].message.content)觀察:14 行,零框架相依性,底層的向量資料庫是唯一的基礎設施選擇。超過 3 種文件類型之後最難擴展。
2026 年值得了解的 8 個 RAG 框架
對的框架,是它的抽象剛好對上你實際瓶頸的那一個。解析痛點指向 LlamaIndex 或 RAGFlow。編排複雜度指向 LangGraph。企業合規指向 Haystack 或 Semantic Kernel。以下是完整名單。
1. LangChain / LangGraph,多步驟 agent 式 pipeline 的最佳選擇
這個領域最大的生態系,現在已穩定在 1.0 LTS 版本之下。LangChain 1.0 引入了 create_agent 和中介軟體系統;LangGraph 1.0 正式 GA,帶來持久化狀態和人機協同檢查點。誠實的局限:抽象表面很大,只需要簡單檢索的團隊會揹著永遠用不到的重量。儘管 LangGraph 是現役最強的有狀態編排選項,整個領域對它的使用仍然不足。若單看 agent 迴圈這個角度,參見 LangGraph 與 CrewAI、OpenAI Agents SDK 的比較。
選它,如果你需要條件式路由、多輪檢索,或生產環境中的人員核准關卡。
2. LlamaIndex,文件密集型擷取的最佳選擇
160 多個資料連接器,針對 PDF、表格和結構化文件的開箱即用解析最強。Workflows 1.0 加了一個輕量級事件驅動層,處理 agent 模式時不必扛 LangGraph 的全部重量。局限:如果你的瓶頸是編排而不是擷取,LlamaIndex 的查詢引擎抽象會開始跟你作對。TypeScript 移植版落後 Python 幾個版本。
選它,如果你的語料庫很亂(掃描版 PDF、表格、混合格式),而解析正是你浪費時間的地方。
3. Haystack,企業級 NLP 與歐盟團隊的最佳選擇
Apache-2.0 授權、型別化的 pipeline 元件,以及對受監管產業的完整支援。Haystack 3.0(2026 年 7 月發布)進一步清理了元件 API。deepset 為不想自架的團隊提供托管雲選項。局限:社群比 LangChain 或 LlamaIndex 小,第三方整合較少,而且 1.x 到 2.x 的遷移幾乎是一次完全重寫,燒傷了早期採用者。
選它,如果你身處受監管的歐盟產業,需要 Apache-2.0 授權加上型別化、可稽核的 pipeline。
4. RAGFlow,免費深度文件解析的最佳選擇
InfiniFlow 出品的 Apache-2.0 引擎,樣板為基礎的 PDF 解析(表格、圖表、公式)做得比開源領域任何其他東西都好。86,478 顆 star,每週活躍發布。局限:它更像是解析加檢索引擎,而不是通用編排框架。agent 式路由或多供應商失敗轉移,你還是需要別的東西。
選它,如果文件解析準確度是你唯一的最大瓶頸,而且你想要免費。
5. DSPy,大規模 prompt 最佳化的最佳選擇
Stanford 的框架把 prompt 當程式來編譯,而不是當字串來寫。你定義簽名和指標;DSPy 自動最佳化 prompt 和 few-shot 範例。局限:學習曲線陡峭,抽象偏學術,生產部署模式仍在成熟中。3.2.1 版於 2026 年 5 月發布。
選它,如果你有評估資料、想要系統化的 prompt 最佳化,而且有耐心對待一個研究等級的工具。
6. Dify,無程式碼原型開發的最佳選擇
一個視覺化建置器,一個下午就能讓一個能動的 RAG 應用跑起來。150,858 顆 star,是這份清單上 star 最多的專案。局限:它是平台,不是函式庫。你用程式碼層級的掌控度換取速度。超出視覺化編輯器的自訂檢索邏輯,很快就會變得彆扭。授權是修改過的 Apache-2.0,對多租戶部署附加了商業條款。
選它,如果你這週就需要一個能動的示範,而且檢索邏輯是標準的。
7. txtai,輕量級單一檔案應用的最佳選擇
一個 all-in-one 的 embeddings 資料庫、檢索引擎和 LLM pipeline,全部裝在一個 Python 套件裡。12,769 顆 star,Apache-2.0,確實是這裡最輕的選項。局限:它為中小型工作負載而設計。多節點擴展、複雜路由和企業功能不是它的目標。
選它,如果你想要最小的相依性佔用,而且語料庫裝得進一個處理程序。
8. Semantic Kernel,.NET 與企業級 Microsoft 環境的最佳選擇
Microsoft 的 SDK,用於把 LLM 整合進 C#、Python 和 Java 應用。原生 Azure AI 整合、企業級遙測,而且是鎖死在 Microsoft 技術棧的團隊唯一真正的答案。局限:離開 Azure,整合的完整性就變薄。Python SDK 在功能推進速度上落後 C# 版。
選它,如果你的團隊寫 C# 或 Java,而且基礎設施已經是 Azure。
Pathway 值得一提,它是持續更新語料庫的串流索引選項,但它是資料處理框架,不是 RAG 編排層,所以不佔排名席次。
哪些 RAG 框架仍在活躍維護?
Star 數告訴你什麼曾經流行。最後 commit 日期告訴你什麼還活著。以下每個框架在撰寫本文的 48 小時內都有 commit,這比 12 個月前這個領域的狀態健康得多。
資料於 2026-07-31 從 GitHub REST API 拉取。方法:GET /repos/{owner}/{repo} 取 star 數與 pushed_at,GET /repos/{owner}/{repo}/releases/latest 取發布 tag。
| 框架 | Repo | Star 數 | 最後 commit | 最新發布 | 授權 |
|---|---|---|---|---|---|
| LangChain | langchain-ai/langchain | 143,060 | 2026-07-30 | langchain-core 1.5.3 | MIT |
| LlamaIndex | run-llama/llama_index | 51,251 | 2026-07-30 | v0.14.23 | MIT |
| Haystack | deepset-ai/haystack | 26,070 | 2026-07-31 | v3.0.0 | Apache-2.0 |
| DSPy | stanfordnlp/dspy | 36,484 | 2026-07-30 | 3.2.1 | MIT |
| RAGFlow | infiniflow/ragflow | 86,478 | 2026-07-31 | v0.26.4 | Apache-2.0 |
| Dify | langgenius/dify | 150,858 | 2026-07-31 | 1.16.1 | Apache-2.0(修改版) |
| txtai | neuml/txtai | 12,769 | 2026-07-30 | v9.12.0 | Apache-2.0 |
| Semantic Kernel | microsoft/semantic-kernel | 28,394 | 2026-07-30 | dotnet-1.78.0 | MIT |
pushed_at 這一欄是沒有人願意印出來的。一個有 9 萬顆 star、四個月沒有 commit 的框架是負債,不是資產。截至撰寫本文,這裡八個 repo 都在活躍維護中。正式採用前自己重跑一次查詢;這些數字每週都在變。
RAG 框架會影響延遲嗎?
幾乎不會。框架開銷是你總回應時間裡最小的那一項。檢索策略和 LLM 生成佔主導,而拿基準測試的毫秒數來選框架的團隊,是在最佳化錯誤的變數。
最有力的證據來自 2026 年 7 月的 arXiv 擴展性研究BM25 Wins at Scale。研究者在 450 倍的規模範圍內測量了 28 個巢狀語料庫層級。他們的發現:BM25 在大約 1,000 萬語料庫 token 時超越 agent 式檢索,並在每個更大的層級領先,在滿規模時差距接近 20 個百分點。決定你答案好壞的是檢索策略,不是編排管線。
以下是單次典型 RAG 回應的推導延遲預算。除了編排開銷,每個數值都來自撰寫期間載入的已發布來源:
| 階段 | 中位數延遲 | 來源 |
|---|---|---|
| 查詢 embedding | 約 50 ms | OpenAI embeddings API 文件(text-embedding-3-small,單一輸入) |
| 向量搜尋(top-4) | 約 15 ms | Qdrant 公開基準測試,100 萬向量,p50 |
| 重新排序(4 份文件) | 約 80 ms | Cohere Rerank API 文件,英文,4 段文字 |
| LLM 生成(300 token) | 約 1,200 ms | OpenAI gpt-4o,300 輸出 token,無串流 |
| 編排開銷 | 約 50 ms(寬鬆上限) | 無可重現的公開數據;見下方說明 |
假設:單使用者查詢、暖連線、無網路重試。光是生成階段就佔總量的 86%。
"單次 RAG 回應的時間花在哪裡(示意預算,2026 年 7 月)"
資料表
| "Pipeline 階段" | "中位數延遲 (ms)" |
|---|---|
| "查詢 embedding" | 50 |
| "向量搜尋" | 15 |
| "重新排序" | 80 |
| "LLM 生成" | 1200 |
| "框架開銷" | 50 |
誠實的缺口:沒有人發布過框架開銷的可重現測量。網路上流傳的一個數字(15-40 ms,2026 年 4 月歸因於某個內容網站)藏在一個頁面後面,而該頁面在 2026-07-30 和 2026-07-31 都回傳 HTTP 403,所以我們無法引用。就算給 50 ms 的寬鬆編排開銷,那也只佔 1,395 ms 總回應的不到 4%。
我們對這些數字的解讀:框架選擇不是延遲決策。檢索策略和生成才是。如果你的 RAG 應用感覺慢,在怪編排層之前,先去 profile LLM 呼叫和檢索步驟。
2026 年我們不會拿來啟動新專案的選擇
三項,每一項都有可觀察的證據支撐,而不是觀點:
Haystack 1.x。 deepset 的 2.x 發布幾乎是一次完全的 API 重寫,3.0 又在 2026 年 7 月發布。1.x 系列已不再開發。今天從它開始,等於採用一個死掉的 API。目前版本請查 deepset 自己的文件。
LangChain 0.x 的 chain 模式。 1.0 之前的 LangChain 沒有穩定性保證。發布政策現在明定,破壞性變更只發生在主版本,而 1.0 被指定為 LTS。針對 0.x LLMChain 模式寫的程式碼將需要遷移。從 1.0 開始。
任何 pushed_at 超過六個月的 repo。 這是一般規則,而不是點名某個產品。上表顯示八個活躍的 repo 都在。如果你正在評估的框架沒有出現在那裡,在依賴它之前先查它的最後 commit。
關於類別的一點說明:Dify 這類無程式碼平台,和程式碼優先的框架是不同的決定。我們不把它們列在這裡當「跳過」項。它們解決的是不同的問題(示範速度 vs. 長期可維護性)。
如何選擇 RAG 框架?
四個互不重疊的問題。按順序回答,名單很快就會收窄到一兩個選項。
| 問題 | 如果是,選... |
|---|---|
| 1. 你的瓶頸是解析嗎(亂七八糟的 PDF、表格、20 種以上格式)? | LlamaIndex 或 RAGFlow |
| 2. 你要做的是給其他團隊蓋東西的平台,而不只是一個應用? | LangChain/LangGraph 或 Haystack |
| 3. 你的索引是持續更新的(串流,不是批次)? | LangGraph 加串流層,或搭配 Pathway |
| 4. 你需要 .NET / Java / 多語言支援? | Semantic Kernel |
還有一個沒有人估價的標準:退出成本。LangChain 的發布政策承諾破壞性變更只在主版本發生,1.0 作為 LTS 發布,活躍支援到 2.0,之後至少再維護一年。這是一個具體的可逆性保證。Haystack 從 1.x 到 2.x 的重寫則是警示性的反面教材。把遷移成本算進選型,不要只看功能清單。
Techsy 怎麼看這件事
這些框架我們一個都不賣。這個 SERP 裡四個讀得通的競爭頁面中,有三個在推薦中途推自家產品。我們沒有自家產品,所以上面的選擇不受營收約束。
當 Techsy 團隊為客戶專案挑選編排層時,我們從上面的瓶頸問題出發,先做出無框架版本的原型,只有當程式碼告訴我們複雜度是真的,才加框架。多數專案待在路線一的時間,比團隊預期的更久。
如果你想要有人對你的技術棧給第二意見,取得免費諮詢。
關於作者
Mert Batur 是 Techsy.io 的共同創辦人,團隊為 B2B 客戶打造 AI agent、自動化系統和語音/SDR pipeline。他寫的東西,是 Techsy 團隊在生產環境實際使用的 LLM 工具棧。
共同創辦人,Techsy.io | LinkedIn
常見問題
什麼是 RAG 框架?
RAG 框架是一個編排函式庫,負責處理你的文件、向量儲存庫和 LLM 之間的管線。它把擷取、分塊、embedding、檢索和生成當作一條相連的 pipeline 來管理。沒有它,你就得用供應商 SDK 和向量資料庫客戶端,手動把這些階段接在一起。
我到底需不需要 RAG 框架?
不一定。如果你是單一語料庫、單一 LLM 供應商、簡單問答,供應商 SDK 加一個向量客戶端就夠了。當你面對多來源擷取、幾十種文件格式,或帶有條件式路由和狀態的 agent 式多步驟檢索時,才需要框架。
2026 年最佳 RAG 框架是什麼?
對需要編排的生產環境應用,LangChain 1.0 加 LangGraph 是預設選擇。LlamaIndex 在文件密集型擷取上勝出。如果你的應用是單一供應商上的單一語料庫問答,那就完全跳過框架,直接用供應商 SDK。
RAG 用 LangChain 還是 LlamaIndex 比較好?
LangChain 更擅長編排複雜度:多步驟路由、agent、人機協同。LlamaIndex 更擅長擷取複雜度:160 多個檔案連接器、更強的 PDF 和表格解析。如果你的痛是解析,選 LlamaIndex。如果你的痛是路由和狀態,選 LangChain。
RAG 框架和向量資料庫有什麼不同?
向量資料庫儲存和檢索 embeddings。RAG 框架編排整條 pipeline:載入文件、分塊、embedding、儲存、檢索、重新排序和生成。框架插接在向量資料庫之上。Pinecone 和 Qdrant 是向量資料庫。LangChain 和 LlamaIndex 是使用它們的框架。
最佳開源 RAG 框架是什麼?
LangChain(MIT)、LlamaIndex(MIT)和 Haystack(Apache-2.0)都是完全開源。對特別需要 Apache-2.0 的歐盟團隊,Haystack 是最強的選擇。如果文件解析準確度是你的首要考量,RAGFlow(Apache-2.0)是最佳開源選項。
哪個 RAG 框架處理文件密集型 PDF 最強?
RAGFlow 以樣板為基礎的表格、圖表和公式處理方式,在原始 PDF 解析準確度上領先。如果你需要 PDF 以外的 160 多種格式連接器,LlamaIndex 是更全面的選擇。Haystack 3.0 處理結構化文件表現不錯,但開箱即用的連接器比 LlamaIndex 少。
RAG 框架要多少錢?
這篇文章裡的八個框架全部免費且開源。你的成本是基礎設施(向量資料庫托管,小規模通常每月 0-70 美元)和 LLM API 呼叫(持續性支出的大頭)。LangSmith、LlamaCloud 和 deepset Cloud 這類托管選項,會為可觀測性和托管加上訂閱費用。
選的框架會影響 RAG 延遲嗎?
影響很小。編排開銷佔典型端對端回應不到 4%。LLM 生成約佔 86%。2026 年 7 月的 arXiv 擴展性研究發現,檢索策略(BM25 vs. 密集 vs. agent 式)比編排管線重要得多。把最佳化預算花在檢索品質(MTEB 分數實際上告訴你的事)和生成速度,而不是框架選擇。