LlamaIndex 实战指南:RAG 应用开发从入门到生产

LlamaIndex vs LangChain 怎么选?5个真实场景代码示例

返回教程列表
进阶20 分钟

LlamaIndex 实战指南:RAG 应用开发从入门到生产

LlamaIndex vs LangChain 怎么选?5个真实场景代码示例

LlamaIndex 专为 RAG 应用而生,是构建企业知识库问答系统的首选框架。本文覆盖核心架构、与 LangChain 的关键区别,以及从文档加载到生产部署的 5 个完整代码示例。

LlamaIndexRAGLangChain知识库向量数据库Python

LlamaIndex 实战指南:RAG 应用开发从入门到生产

LlamaIndex vs LangChain 怎么选?

一句话:LlamaIndex 专注于数据索引和检索,LangChain 专注于 Agent 编排和链式调用。

维度LlamaIndexLangChain

核心定位数据 → AI 的桥梁AI 工作流编排 最强场景RAG、知识库问答Agent、多步骤任务 学习曲线相对平缓较陡 数据连接器100+ 原生 Reader需额外安装

选择原则:做 RAG 知识库用 LlamaIndex;做 Agent 工作流用 LangChain;两者可以组合使用。


安装

bash
pip install llama-index llama-index-llms-openai llama-index-embeddings-openai


场景 1:5 分钟搭建文档问答系统

python
from llama_index.core import VectorStoreIndex, SimpleDirectoryReader
from llama_index.llms.openai import OpenAI
from llama_index.core import Settings

Settings.llm = OpenAI(model="gpt-4o", api_key="sk-...") Settings.embed_model = "text-embedding-3-small"

加载文档(支持 PDF、Word、TXT、HTML 等)

documents = SimpleDirectoryReader("./docs").load_data() index = VectorStoreIndex.from_documents(documents)

query_engine = index.as_query_engine() response = query_engine.query("这份文档的核心结论是什么?") print(response)


场景 2:持久化存储(生产环境必备)

python
import os
from llama_index.core import StorageContext, load_index_from_storage

PERSIST_DIR = "./storage"

if not os.path.exists(PERSIST_DIR): documents = SimpleDirectoryReader("./docs").load_data() index = VectorStoreIndex.from_documents(documents) index.storage_context.persist(persist_dir=PERSIST_DIR) else: storage_context = StorageContext.from_defaults(persist_dir=PERSIST_DIR) index = load_index_from_storage(storage_context)


场景 3:带 Metadata 的多来源文档

python
from llama_index.core import Document
from llama_index.core.vector_stores import MetadataFilters, MetadataFilter, FilterOperator

docs = [ Document(text="Q3 财报显示营收增长 23%...", metadata={"source": "财报", "year": 2025, "quarter": "Q3"}), Document(text="产品路线图:2026年Q1发布新功能...", metadata={"source": "内部文档", "type": "roadmap"}) ] index = VectorStoreIndex.from_documents(docs)

按来源过滤查询

query_engine = index.as_query_engine( filters=MetadataFilters(filters=[ MetadataFilter(key="source", value="财报", operator=FilterOperator.EQ) ]) )


场景 4:连接 Qdrant 向量数据库

python
from llama_index.vector_stores.qdrant import QdrantVectorStore
import qdrant_client

client = qdrant_client.QdrantClient(url="http://localhost:6333") vector_store = QdrantVectorStore(client=client, collection_name="my_docs") storage_context = StorageContext.from_defaults(vector_store=vector_store) index = VectorStoreIndex.from_documents(documents, storage_context=storage_context)


场景 5:流式输出

python
query_engine = index.as_query_engine(streaming=True)
streaming_response = query_engine.query("请详细解释这个问题")
for text in streaming_response.response_gen:
    print(text, end="", flush=True)


生产最佳实践

增量更新索引(避免每次全量重建):

python
existing_docs = index.ref_doc_info
for doc in new_documents:
    if doc.doc_id not in existing_docs:
        index.insert(doc)

调整检索参数

python
query_engine = index.as_query_engine(
    similarity_top_k=5,
    response_mode="tree_summarize",  # 适合长文档汇总
)


FAQ

Q:支持哪些文档格式? A:PDF、Word、PPT、Excel、HTML、Markdown、TXT、CSV、JSON,以及数据库、Notion、Google Drive 等 100+ 来源。

Q:中文效果好吗? A:完全支持中文。推荐用 BGE 中文 Embedding 模型,效果比 OpenAI Embedding 更好且更便宜。

Q:和 Dify 是什么关系? A:Dify 提供可视化界面,底层可集成 LlamaIndex 的检索能力。需要定制开发用 LlamaIndex,需要快速搭建用 Dify。


延伸阅读

  • RAG 知识库避坑指南
  • 向量数据库选型指南
  • Dify 企业知识库实战
  • 相关工具

    LlamaIndexLangChainOpenAIQdrant