项目目标
将个人笔记和 PDF 文档转化为可交互的知识库,让 AI 能回答关于你学习内容的问题。
第一步:文档处理
from langchain.document_loaders import DirectoryLoader, PyPDFLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
loader = DirectoryLoader("./my-notes/", glob="**/*.md")
docs = loader.load()
splitter = RecursiveCharacterTextSplitter(
chunk_size=800,
chunk_overlap=100,
separators=["\n## ", "\n### ", "\n", "。", ".", " "]
)
chunks = splitter.split_documents(docs)
print(f"分割出 {len(chunks)} 个文本块")
第二步:向量化存储
选择合适的 Embedding 模型和向量数据库:
| 方案 | 适用场景 |
|---|---|
| OpenAI Embedding + Pinecone | 快速原型 |
| BGE Embedding + Milvus | 本地部署 |
| Jina Embedding + Chroma | 轻量级本地方案 |
第三步:构建问答链
from langchain.chains import RetrievalQA
from langchain.llms import OpenAI
qa = RetrievalQA.from_chain_type(
llm=OpenAI(model="gpt-4"),
chain_type="stuff",
retriever=vector_store.as_retriever(search_kwargs={"k": 4})
)
response = qa.run("Transformer 的核心机制是什么?")
优化建议
- 调整 chunk_size 和 overlap 提升召回质量
- 使用 HyDE 技术对查询进行增强
- 引入重排序模型提升 Top-K 精度
参考 RAG 技术综述 了解更多技术背景,LangChain 实战:构建 RAG 应用 提供了另一个实践视角。