LlamaIndex 深度解析
架构概览
LlamaIndex 的核心流程:数据加载 → 索引构建 → 查询执行。
数据源(文件/DB/API) → Documents → 索引(Vector/Tree/KG) → 查询引擎 → LLM → 回答
数据连接层
内置连接器
- 文件:PDF、Word、Markdown、CSV 等
- 数据库:SQL、MongoDB 等
- 云服务:S3、Google Drive、Notion、Slack
- 网页:爬虫、RSS
自定义连接器
通过 SimpleDirectoryReader、VectorStoreIndex 等扩展,可接入任意数据源。
索引类型
| 索引类型 | 说明 | 适用场景 |
|---|---|---|
| VectorStoreIndex | 向量索引 | 语义检索、RAG |
| TreeIndex | 树 形结构 | 层次化文档、摘要 |
| KeywordTableIndex | 关键词索引 | 精确匹配 |
| KnowledgeGraphIndex | 知识图谱 | 实体关系查询 |
| ComposabilityGraphIndex | 组合索引 | 多源、多策略 |
查询引擎
- VectorIndexRetriever:向量检索 + 重排序
- ResponseSynthesizer:组装上下文并生成回答
- SubQuestionQueryEngine:子问题分解、并行检索、结果汇总
- RouterQueryEngine:根据问题类型路由到不同索引
与 RAG 的集成
LlamaIndex 是 RAG 的天然实现框架:
- 加载文档并分块
- 使用 Embedding 生成向量
- 构建 VectorStoreIndex 或存入外部向量库
- 通过 QueryEngine 检索 + 生成
- 支持重排序、Hybrid Search、多文档融合
与 LangChain 的关系
- 互补:LlamaIndex 做数据与检索,LangChain 做链与 Agent
- 集成:可通过
LlamaIndexLangChainRetriever等桥接两者 - 选型:数据密集型、RAG 优先选 LlamaIndex;编排复杂、多工具选 LangChain
Agent 与工具
LlamaIndex 支持 ReAct、OpenAI Function 等 Agent 模式,可将检索、计算等封装为工具,由 LLM 调用。与 Agent、MCP 结合可扩展能力。
代码示例:最小 RAG 流程
from llama_index.core import VectorStoreIndex, SimpleDirectoryReader, Settings
from llama_index.embeddings.huggingface import HuggingFaceEmbedding
# 1. 设置 Embedding 模型
Settings.embed_model = HuggingFaceEmbedding(model_name="BAAI/bge-large-zh-v1.5")
# 2. 加载文档
documents = SimpleDirectoryReader("./docs").load_data()
# 3. 构建向量索引
index = VectorStoreIndex.from_documents(documents)
# 4. 创建查询引擎
query_engine = index.as_query_engine()
# 5. 提问
response = query_engine.query("什么是 RAG?")
print(response)
工作流与 Agent
LlamaIndex 的工作流(Workflow)支持事件驱动编排,可将检索、生成、工具调用组成有向图,支持分支、循环与并行,适合复杂 Agent 流程。与 Agent 结合时,可将 QueryEngine 作为工具暴露给 LLM。
评估与迭代
- 检索质量:Recall@K、MRR、命中率
- 生成质量:Faithfulness(与检索内容一致性)、Relevancy
- 端到端:人工标注或用户反馈
- LlamaIndex 提供
ResponseEvaluator、FaithfulnessEvaluator等,可集成到评估 pipeline
与本地推理的配合
LlamaIndex 支持 Ollama、vLLM 等本地推理后端,通过 Ollama、OpenAI(base_url 指向自建)等 LLM 类对接,实现全本地 RAG 与 Agent。参见 本地推理。
总结
LlamaIndex 以「数据优先」为设计理念,与 RAG、Embedding、向量数据库形成闭环,是构建知识库与数据应用的首选框架之一。掌握索引类型、查询引擎与工作流,可灵活应对从简单问答到复杂 Agent 的各类场景。