# LlamaIndex构建RAG应用
## 什么是LlamaIndex?
LlamaIndex是一个专门为LLM应用设计的数据框架,专注于检索和生成(RAG)场景。它提供了从数据加载到查询响应的完整解决方案。
## 安装
```bash
pip install llama-index
```
## 快速开始
```python
from llama_index.core import VectorStoreIndex, SimpleDirectoryReader
# 1. 加载文档
documents = SimpleDirectoryReader("data").load_data()
# 2. 创建索引
index = VectorStoreIndex.from_documents(documents)
# 3. 查询
query_engine = index.as_query_engine()
response = query_engine.query("什么是LlamaIndex?")
print(response)
```
## 核心概念
### 1. Document(文档)
原始数据的容器,包含文本和元数据。
### 2. Node(节点)
文档分割后的小块,是索引的基本单元。
### 3. Index(索引)
组织数据的结构,支持向量索引、关键词索引等。
### 4. Retriever(检索器)
从索引中获取相关节点。
### 5. Query Engine(查询引擎)
结合检索和LLM生成最终答案。
## 数据加载器
```python
from llama_index.readers.file import PDFReader
from llama_index.readers.web import SimpleWebPageReader
# PDF加载
pdf_reader = PDFReader()
docs = pdf_reader.load_data(file="document.pdf")
# 网页加载
web_reader = SimpleWebPageReader()
docs = web_reader.load_data(["https://example.com"])
# 数据库加载
from llama_index.readers.database import DatabaseReader
db_reader = DatabaseReader(uri="sqlite:///data.db")
docs = db_reader.load_data(query="SELECT * FROM documents")
```
## 索引类型
### 向量索引(最常用)
```python
from llama_index.core import VectorStoreIndex
index = VectorStoreIndex.from_documents(documents)
```
### 关键词索引
```python
from llama_index.core import KeywordTableIndex
index = KeywordTableIndex.from_documents(documents)
```
### 树索引
```python
from llama_index.core import TreeIndex
index = TreeIndex.from_documents(documents)
```
## 自定义LLM
```python
from llama_index.llms.openai import OpenAI
from llama_index.core import Settings
# 全局设置
Settings.llm = OpenAI(model="gpt-4", temperature=0)
# 局部设置
query_engine = index.as_query_engine(
llm=OpenAI(model="gpt-3.5-turbo")
)
```
## 使用本地模型
```python
from llama_index.llms.ollama import Ollama
from llama_index.embeddings.ollama import OllamaEmbedding
Settings.llm = Ollama(model="llama3")
Settings.embed_model = OllamaEmbedding(model_name="nomic-embed-text")
```
## 高级用法
### 检索后重排序
```python
from llama_index.core.postprocessor import SentenceTransformerRerank
reranker = SentenceTransformerRerank(
model="cross-encoder/ms-marco-MiniLM-L-6-v2",
top_n=3
)
query_engine = index.as_query_engine(
node_postprocessors=[reranker]
)
```
### 多文档Agent
```python
from llama_index.core.tools import QueryEngineTool
from llama_index.core.agent import ReActAgent
# 创建多个索引工具
tools = [
QueryEngineTool.from_defaults(query_engine=engine1, name="工具1"),
QueryEngineTool.from_defaults(query_engine=engine2, name="工具2")
]
agent = ReActAgent.from_tools(tools)
response = agent.chat("问题")
```
## 持久化存储
```python
# 保存
index.storage_context.persist(persist_dir="./storage")
# 加载
from llama_index.core import StorageContext, load_index_from_storage
storage_context = StorageContext.from_defaults(persist_dir="./storage")
index = load_index_from_storage(storage_context)
```
## 总结
LlamaIndex是构建RAG应用的专业框架,提供了丰富的数据连接器和查询工具。
暂无评论。成为第一个评论的人吧!