一、RAG加载文件一般包含4个步骤
- 加载文件(读取PDF / TXT / MD / DOCX)
- 拆分文本(切分成小块)
- 向量化(向量化模型生成向量)
- 存入向量库(Chroma / FAISS)
二、示例
安装依赖
pip install langchain langchain-ollama langchain-chroma pypdf python-dotenv
完整示例
# 1. 导入需要的包
from langchain_ollama import OllamaEmbeddings, ChatOllama
from langchain_chroma import Chroma
from langchain_text_splitters import RecursiveCharacterTextSplitter
# ===== 【1】加载文件的核心代码 =====
from langchain_community.document_loaders import (
TextLoader, # 加载 .txt
PyPDFLoader, # 加载 .pdf
UnstructuredMarkdownLoader # 加载 .md
)
# 选择你要加载的文件(改这里即可)
FILE_PATH = "test.pdf" # 可以是 txt / md / pdf
# 根据后缀自动选择加载器
if FILE_PATH.endswith(".txt"):
loader = TextLoader(FILE_PATH, encoding="utf-8")
elif FILE_PATH.endswith(".pdf"):
loader = PyPDFLoader(FILE_PATH)
elif FILE_PATH.endswith(".md"):
loader = UnstructuredMarkdownLoader(FILE_PATH)
else:
raise ValueError("不支持的文件类型")
# 加载文档
documents = loader.load()
# ===== 【2】文本拆分(必须做,否则太长LLM吃不消) =====
text_splitter = RecursiveCharacterTextSplitter(
chunk_size=500, # 每块大小
chunk_overlap=100, # 重叠,保证上下文连贯
)
splits = text_splitter.split_documents(documents)
# ===== 【3】向量化(你本地的 bge-m3) =====
embedding = OllamaEmbeddings(
model="bge-m3:latest" # 你本地已有的向量模型
)
# ===== 【4】存入向量库(Chroma 自动本地存储) =====
vectorstore = Chroma.from_documents(
documents=splits,
embedding=embedding,
persist_directory="./chroma_db" # 存在本地,下次直接加载
)
# ===== 【5】创建检索器 =====
retriever = vectorstore.as_retriever(search_kwargs={"k": 3})
# ======================
# RAG 问答链(可直接提问)
# ======================
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
from langchain_core.runnables import RunnablePassthrough
# 提示词
prompt = ChatPromptTemplate.from_template("""
根据下面的上下文回答问题,不要编造内容。
上下文:{context}
问题:{question}
回答:
""")
# 本地 LLM
llm = ChatOllama(model="qwen:7b") # 你本地的聊天模型
# 构建 RAG 链
rag_chain = (
{"context": retriever, "question": RunnablePassthrough()}
| prompt
| llm
| StrOutputParser()
)
# 测试提问
question = "这份文件讲了什么内容?"
answer = rag_chain.invoke(question)
print("答案:", answer)
三、支持哪些文件?
LangChain几乎支持所有文件:
-
.txt→ TextLoader -
.pdf→ PyPDFLoader -
.md→ MarkdownLoader -
.docx→ DocxLoader -
.csv→ CSVLoader -
.json→ JSONLoader -
.excel→ UnstructuredExcelLoader - 网页、YouTube、Notion、GitHub 等
四、关键点
1. 必须拆分文本
大文件不能直接给 LLM,会超限,必须切成 300~800 字符的小块。
2. 必须向量化
用向量化模型把文本变成向量,才能做相似度检索。
3. 必须存入向量库
Chroma / FAISS 都是本地轻量向量库,不用数据库,直接存文件夹。