主题
默认情况下,LlamaIndex 的教程在 LLM 生成和嵌入两方面都使用 OpenAI 的托管 API,这意味着你的文档和查询会离开本机。对很多项目这没问题:OpenAI、Anthropic、Cohere 这类服务商都公布了数据处理政策,并提供数据保护条款更强的企业协议。但对于数据不能离开自有基础设施的项目,LlamaIndex 可以完全在本地跑通整条 RAG 流水线。
完全本地运行 LlamaIndex
一套全本地化的组合大致是这样:
- LLM:本地运行时,如 llama.cpp、vLLM、Hugging Face Transformers 或 Ollama。
- 嵌入:
HuggingFaceEmbedding,在你自己的硬件上运行任意 Sentence Transformers 模型。 - 重排器(可选但推荐):
SentenceTransformerRerank,一个本地运行的 cross-encoder,无需 API key。 - 向量库:默认的内存
SimpleVectorStore(可通过StorageContext.persist()落盘),或 Chroma、Qdrant、Postgres/pgvector、Milvus 这类自托管存储。
from llama_index.core import VectorStoreIndex, SimpleDirectoryReader, Settings
from llama_index.embeddings.huggingface import HuggingFaceEmbedding
from llama_index.llms.ollama import Ollama
from llama_index.core.postprocessor import SentenceTransformerRerank
Settings.embed_model = HuggingFaceEmbedding(
model_name="BAAI/bge-small-en-v1.5"
)
Settings.llm = Ollama(model="llama3.1", request_timeout=360.0)
documents = SimpleDirectoryReader("data").load_data()
index = VectorStoreIndex.from_documents(documents)
reranker = SentenceTransformerRerank(
model="cross-encoder/ms-marco-MiniLM-L6-v2", top_n=3
)
query_engine = index.as_query_engine(
similarity_top_k=10, node_postprocessors=[reranker]
)没有 API key,嵌入、重排与检索环节也不会发出任何对外网络请求。
接下来看哪里
- 本地起步教程:用 Ollama + Hugging Face 嵌入的逐步演示。
- 全本地 RAG 食谱(Chroma + Ollama):一条带评估的持久化本地流水线。
- 使用本地 LLM:本地 LLM 集成清单。
- 嵌入:本地模型,包括面向纯 CPU 环境的 ONNX / OpenVINO 加速。
使用托管 API 时的数据隐私
如果你使用托管的 LLM 或嵌入服务商,数据隐私由该服务商的条款约束。OpenAI、Anthropic、Cohere、Voyage 等都各自公布了政策并提供企业协议。LlamaIndex 本身不存储你的数据,但它会把请求发往你配置的各个服务商。
在还没有完全本地化之前,常见的缓解手段有:
- 使用 Azure OpenAI、AWS Bedrock、Google Vertex AI 或类似的云服务,你往往已经在这些地方签有数据保护协议。
- 自托管嵌入与重排这两步(它们很轻量),只把 LLM 调用留在云端。通常这是单位投入能换来最大风险降低的做法。
- 在索引之前用
PIINodePostprocessor清除文档中的个人身份信息。
向量库的隐私
LlamaIndex 集成了许多向量库,各家都有自己的数据处理政策。自托管选项(SimpleVectorStore、Chroma、Qdrant、Postgres/pgvector、Milvus,以及本地运行的 Weaviate)会把嵌入留在你的基础设施上。托管选项(Pinecone、托管版 Weaviate、Zilliz 等)则按服务商自己的条款把嵌入存在服务商侧。完整清单见向量库指南。