🦙 LlamaIndex RAG完整开发教程

最适合RAG开发的框架 - 80行代码搭建生产级系统

⏱️ 30分钟 📊 难度:⭐⭐ 简单 💻 80行代码 🎯 生产级

🌟 为什么LlamaIndex最适合RAG开发?

LlamaIndex 是专门为RAG设计的数据索引框架,API简洁直观,代码量比LangChain少30%, 内置10+向量数据库和20+Embedding模型。

它的设计哲学是"让RAG开发变得简单",自动处理文档分块、向量化、索引构建等复杂流程。

🎯

专注RAG

为RAG而生,API更简洁,学习曲线平缓

🔌

集成丰富

10+向量库,20+模型,Rerank一行集成

🚀

功能强大

多种索引类型,Query优化,Chat模式

📝 完整开发流程(9个步骤)

llamaindex_rag.py

# ============ 步骤1:安装依赖(3分钟) ============
pip install llama-index llama-index-llms-openai llama-index-embeddings-openai
pip install chromadb  # 向量数据库

# ============ 步骤2:导入并配置(2分钟) ============
import os
from llama_index.core import VectorStoreIndex, SimpleDirectoryReader, Settings
from llama_index.core.node_parser import SentenceSplitter
from llama_index.embeddings.openai import OpenAIEmbedding
from llama_index.llms.openai import OpenAI
from llama_index.core.postprocessor import SentenceTransformerRerank
from llama_index.vector_stores.chroma import ChromaVectorStore
import chromadb

# 配置API密钥
os.environ["OPENAI_API_KEY"] = "sk-your-api-key-here"

# 配置全局设置
Settings.llm = OpenAI(model="gpt-4o-mini", temperature=0.3)
Settings.embed_model = OpenAIEmbedding(model="text-embedding-3-small")
Settings.node_parser = SentenceSplitter(chunk_size=512, chunk_overlap=50)

print("✅ 配置完成")

# ============ 步骤3:加载文档(5分钟) ============
# 方式1:从目录加载
documents = SimpleDirectoryReader("./docs").load_data()

# 方式2:从文本创建
from llama_index.core import Document
documents = [
    Document(text="RAG是检索增强生成系统,结合信息检索和LLM。"),
    Document(text="向量数据库用于存储文档向量,实现快速检索。"),
    Document(text="Embedding模型将文本转为向量表示。")
]

print(f"📄 加载了 {len(documents)} 个文档")

# ============ 步骤4:配置向量数据库(3分钟) ============
chroma_client = chromadb.PersistentClient(path="./chroma_db")
chroma_collection = chroma_client.get_or_create_collection("my_rag")

vector_store = ChromaVectorStore(chroma_collection=chroma_collection)

print("✅ 向量数据库初始化完成")

# ============ 步骤5:构建索引(10分钟) ============
index = VectorStoreIndex.from_documents(
    documents,
    vector_store=vector_store,
    show_progress=True
)

print("✅ 索引构建完成")

# ============ 步骤6:添加Rerank(可选但推荐,3分钟) ============
reranker = SentenceTransformerRerank(
    model="BAAI/bge-reranker-base",
    top_n=3
)

print("✅ Rerank模型加载完成")

# ============ 步骤7:创建查询引擎(2分钟) ============
query_engine = index.as_query_engine(
    similarity_top_k=10,  # 先检索10个候选
    node_postprocessors=[reranker],  # Rerank精排到3个
    response_mode="compact"
)

print("✅ 查询引擎创建完成")

# ============ 步骤8:查询函数(2分钟) ============
def query_rag(question):
    """查询RAG系统"""
    response = query_engine.query(question)
    
    print(f"\n❓ 问题:{question}")
    print(f"💡 回答:{response}")
    print(f"\n📚 来源文档:")
    for i, node in enumerate(response.source_nodes, 1):
        print(f"  {i}. {node.text[:100]}... (分数: {node.score:.3f})")
    
    return response

# ============ 步骤9:使用示例 ============
if __name__ == "__main__":
    # 单次查询
    query_rag("什么是RAG系统?")
    
    # 持续对话模式
    chat_engine = index.as_chat_engine()
    response = chat_engine.chat("RAG有什么优势?")
    print(f"\n对话模式:{response}")

print("\n🎉 LlamaIndex RAG系统开发完成!")

LlamaIndex 核心优势

📊

代码量少30%

  • • 仅80行完成完整RAG
  • • 自动处理文档分块
  • • 配置即代码理念
  • • 学习曲线平缓
🔧

集成开箱即用

  • • 10+ 向量数据库
  • • 20+ Embedding模型
  • • Rerank一行集成
  • • Chat模式内置
📚

文档质量高

  • • 官方文档详细
  • • 示例代码丰富
  • • 社区活跃
  • • 37K+ GitHub Stars

支持的组件生态

🗄️ 向量数据库(10+)

Chroma
Qdrant
Pinecone
Milvus
Weaviate
FAISS

🧬 Embedding模型(20+)

OpenAI
bge-large-zh
m3e-base
text2vec
Cohere
Jina AI

🎯 Rerank模型

Cohere Rerank
bge-reranker
ColBERT
Cross-Encoder

🤖 LLM模型(30+)

GPT-4
Claude
通义千问
Llama 3
GLM-4
DeepSeek

继续探索

掌握了LlamaIndex基础,接下来可以学习LangChain的高级功能或深入Agent开发