LlamaIndex 实战指南:RAG 应用开发从入门到生产
LlamaIndex vs LangChain 怎么选?5个真实场景代码示例
LlamaIndex 实战指南:RAG 应用开发从入门到生产
LlamaIndex vs LangChain 怎么选?5个真实场景代码示例
LlamaIndex 专为 RAG 应用而生,是构建企业知识库问答系统的首选框架。本文覆盖核心架构、与 LangChain 的关键区别,以及从文档加载到生产部署的 5 个完整代码示例。
LlamaIndex 实战指南:RAG 应用开发从入门到生产
LlamaIndex vs LangChain 怎么选?
一句话:LlamaIndex 专注于数据索引和检索,LangChain 专注于 Agent 编排和链式调用。
选择原则:做 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 SettingsSettings.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_storagePERSIST_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, FilterOperatordocs = [
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_clientclient = 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。
延伸阅读
相关工具