沐沐 8b7a233354 push 1 개월 전
..
car_info_knowledge_db 8b7a233354 push 1 개월 전
chroma_db1 8b7a233354 push 1 개월 전
chroma_db1_db 8b7a233354 push 1 개월 전
investment_knowledge_db 8b7a233354 push 1 개월 전
my_knowledge_db 8b7a233354 push 1 개월 전
02_RAG_task.py 826d65b14b 初步搭建RAG系统 1 개월 전
3.RAG系统搭建实战.md 8b7a233354 push 1 개월 전
4.RAG全链路优化:多路召回、查询测优化、Reranker.md 8b7a233354 push 1 개월 전
CONFIG.md 8b7a233354 push 1 개월 전
HOW_TO_VIEW.md 8b7a233354 push 1 개월 전
README_RAG.md 8b7a233354 push 1 개월 전
car_info.pdf 8b7a233354 push 1 개월 전
check_pdf_images.py 8b7a233354 push 1 개월 전
quick_start.py 8b7a233354 push 1 개월 전
rag_test.ipynb 8b7a233354 push 1 개월 전
requirements.txt 8b7a233354 push 1 개월 전
show_chunks.py 8b7a233354 push 1 개월 전
simple_view.py 8b7a233354 push 1 개월 전
test_pdf.py 8b7a233354 push 1 개월 전
test_rag.py 8b7a233354 push 1 개월 전
view_chunks.py 8b7a233354 push 1 개월 전

README_RAG.md

RAG系统实战 - 投资方法论知识库

基于 LangChain 构建的检索增强生成(RAG)系统,用于对《疯狂的里海 · 投资方法论》进行智能问答。

功能特性

  • PDF文档加载:使用 PyMuPDFLoader 快速加载PDF文档
  • 数据清洗:自动清洗PDF解析产生的噪声(换行符、特殊符号、多余空格等)
  • 智能分块:使用递归字符分割器,保持语义完整性
  • 向量化存储:使用阿里通义 Embedding 模型进行向量化,存储到 ChromaDB
  • 智能检索:基于余弦相似度检索最相关的文档片段
  • 答案生成:使用通义千问大模型生成准确回答

系统架构

用户问题
    ↓
检索器将问题转为向量
    ↓
在向量库中查找语义最近的文档块
    ↓
返回 Top-K 相关文档
    ↓
拼接上下文 + 问题 → 大模型生成答案

环境要求

1. 安装依赖

pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

2. 配置 API Key

在项目根目录的 .env 文件中配置以下API Key:

# DeepSeek API(用于大语言模型)
OPENAI_API_KEY=your_deepseek_api_key
OPENAI_API_BASE=https://api.deepseek.com/v1
MODEL_NAME=deepseek-chat

# DashScope API(用于文本向量化)
DASHSCOPE_API_KEY=your_dashscope_api_key
EMBEDDING_MODEL=text-embedding-v3

获取 API Key

  1. DeepSeek API Key: 访问 DeepSeek官网 注册并获取
  2. DashScope API Key: 访问 阿里云DashScope控制台 获取

3. 技术栈

  • 大语言模型: DeepSeek(通过OpenAI兼容接口)
  • Embedding模型: 阿里通义 text-embedding-v3
  • 向量数据库: ChromaDB
  • 框架: LangChain

使用方法

方式1:运行完整系统

python 02_RAG_task.py

首次运行会自动构建知识库:

  1. 加载 PDF 文档
  2. 清洗数据
  3. 分块处理
  4. 向量化并存储

后续运行会直接加载已有的向量数据库。

方式2:在代码中调用

from 02_RAG_task import RAGSystem

# 创建 RAG 系统实例
rag = RAGSystem(
    pdf_path=r"D:\investment\疯狂的里海 · 投资方法论 — 基于 367 篇投资周记提炼.pdf",
    persist_directory="./investment_knowledge_db"
)

# 构建知识库(首次运行)
rag.build_knowledge_base()

# 或者加载已有知识库
# rag.load_vectorstore()
# rag.create_retriever()

# 提问
answer = rag.query("什么是价值投资的核心原则?")
print(answer)

方式3:分步骤调用

# 步骤1:加载文档
pages = rag.load_pdf()

# 步骤2:清洗数据
rag.clean_all_pages()

# 步骤3:分块
docs = rag.split_documents(chunk_size=800, chunk_overlap=160)

# 步骤4:创建向量库
vectorstore = rag.create_vectorstore()

# 步骤5:创建检索器
retriever = rag.create_retriever(k=3)

# 步骤6:检索相关文档
relevant_docs = rag.retrieve("投资策略有哪些?")

# 步骤7:生成答案
answer = rag.generate_answer("投资策略有哪些?", relevant_docs)

参数说明

分块参数

  • chunk_size:每个块的最大字符数(推荐 500-1000)
  • chunk_overlap:相邻块之间的重叠字符数(推荐 chunk_size 的 10%-20%)
# 调整分块大小
rag.split_documents(chunk_size=1000, chunk_overlap=200)

检索参数

  • k:返回的最相关文档数量(推荐 3-5)
# 返回更多相关文档
rag.create_retriever(k=5)

目录结构

02_RAG_study/
├── 02_RAG_task.py           # RAG系统主程序
├── README_RAG.md             # 本说明文档
├── investment_knowledge_db/  # 向量数据库存储目录(自动生成)
│   ├── chroma.sqlite3
│   └── ...
├── rag_test.ipynb           # 测试笔记本
└── 3.RAG系统搭建实战.md      # RAG系统搭建教程

常见问题

1. 提示 "未设置 DASHSCOPE_API_KEY"

原因:环境变量未配置
解决:在 .env 文件中添加 DASHSCOPE_API_KEY=your-api-key

2. PDF 文件不存在

原因:PDF 路径配置错误
解决:修改 main() 函数中的 pdf_path 变量,指向正确的 PDF 文件路径

3. 向量数据库加载失败

原因:向量数据库损坏或版本不兼容
解决:删除 investment_knowledge_db 目录,重新构建知识库

4. 检索效果不佳

优化建议

  • 调整 chunk_sizechunk_overlap 参数
  • 增加 k 值以获取更多相关文档
  • 检查数据清洗是否充分

技术栈

  • LangChain:LLM 应用开发框架
  • PyMuPDF:PDF 解析库
  • ChromaDB:向量数据库
  • DashScope:阿里云大模型服务
    • text-embedding-v3:文本向量化模型
    • qwen-plus:大语言模型

注意事项

  1. API 密钥安全:不要将 API Key 提交到代码仓库
  2. 成本控制:向量化过程会产生 API 调用费用,建议复用已有向量库
  3. 中文优化:本系统针对中文文档优化,使用通义千问 Embedding 模型
  4. 分块质量:分块策略对 RAG 效果影响很大,建议根据文档特点调整参数

扩展功能

可以基于此系统扩展:

  1. 多文档支持:加载多个 PDF 文档
  2. 对话历史:添加记忆功能,支持多轮对话
  3. 混合检索:结合关键词检索和语义检索
  4. 流式输出:实现打字机效果的答案输出
  5. Web界面:使用 Streamlit 或 Gradio 构建 Web 界面

许可证

MIT License