项目目标

将个人笔记和 PDF 文档转化为可交互的知识库,让 AI 能回答关于你学习内容的问题。

RAG 流程图

第一步:文档处理

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 应用 提供了另一个实践视角。