想让大模型读懂你的PDF、Word和网页,又不想把数据传给第三方?用LlamaIndex搭一个本地RAG知识库,半小时就能跑通。
实测步骤
1. 装环境。Python 3.10以上,执行 `pip install llama-index llama-index-llms-ollama llama-index-embeddings-huggingface`。本地模型用Ollama,先 `ollama pull qwen2.5:7b` 和 `ollama pull nomic-embed-text`。
2. 建索引。把文档丢进 `data` 文件夹,写个 `ingest.py`:
“`python
from llama_index.core import VectorStoreIndex, SimpleDirectoryReader
from llama_index.llms.ollama import Ollama
from llama_index.embeddings.huggingface import HuggingFaceEmbedding
embed_model = HuggingFaceEmbedding(model_name=”BAAI/bge-small-zh-v1.5″)
llm = Ollama(model=”qwen2.5:7b”, request_timeout=120.0)
documents = SimpleDirectoryReader(“data”).load_data()
index = VectorStoreIndex.from_documents(documents, embed_model=embed_model)
index.storage_context.persist(persist_dir=”./storage”)
“`
运行一次,索引就存到本地了。
3. 查询。新建 `query.py`,加载索引后直接问:
“`python
query_engine = index.as_query_engine(llm=llm, similarity_top_k=3)
print(query_engine.query(“这份合同里的违约金比例是多少?”))
“`
终端里就能看到基于你文档的回答,并附带引用来源。
真实体验
优点:数据全程不出本机,隐私放心;对中文PDF表格和扫描件(配合OCR)识别尚可;索引持久化后,第二次启动只要几秒。不足:7B模型在复杂推理上会胡编,需要把 `similarity_top_k` 调大或换14B;默认分块512字符,遇到长条款容易截断,得手动改 `chunk_size`;Ollama并发差,多人用会排队。
适合什么人用
手里有大量内部文档、又不想付API费用的个人开发者或小团队;对数据合规敏感的法务、医疗、金融场景;想学RAG但不想碰LangChain复杂链路的初学者。
上手建议
先拿10份以内的PDF跑通全流程,再逐步加文档。遇到回答不准,优先调 `chunk_size` 和 `similarity_top_k`,别急着换模型。