Skip to content

分享一个基于检索增强生成(RAG)技术的红楼梦问答系统的完整实现。这个项目展示了如何将传统文学作品与现代AI技术相结合,为用户提供智能化的文学问答体验。

License

Notifications You must be signed in to change notification settings

taskPyroer/RedMansionRAG

Repository files navigation

红楼梦RAG问答系统

一个基于DeepSeek API的红楼梦智能问答系统,通过RAG(检索增强生成)技术实现精准的文本问答。

ps: 本项目仅供学习参考,代码不够优雅的地方可自行优化,代码比较简洁,易扩展,欢迎star

🌟 特性

  • 📚 智能文档检索: 基于TF-IDF和余弦相似度的高效文档检索
  • 🤖 AI问答: 集成DeepSeek API,提供准确、优雅的回答
  • 🔍 中文优化: 使用jieba分词,专门优化中文文本处理
  • 💾 智能缓存: 自动缓存向量索引,提升响应速度
  • 🎯 精准匹配: 多层次文本分块,确保检索精度
  • 🎨 优雅界面: 清晰的命令行交互界面
  • 🌐 Web界面: 基于Streamlit的现代化交互界面
  • 💬 聊天体验: 类ChatGPT的对话式问答体验
  • 📱 响应式设计: 支持桌面和移动设备访问

📋 系统要求

  • 建议Python 3.9+(本人使用3.11)
  • DeepSeek API密钥
  • 约50MB磁盘空间(用于依赖和缓存)

🚀 快速开始

1. 安装依赖

pip install -r requirements.txt

2. 配置API密钥

方法一:使用环境变量(推荐)

# Windows
set DEEPSEEK_API_KEY=your_deepseek_api_key_here

# Linux/Mac
export DEEPSEEK_API_KEY=your_deepseek_api_key_here

方法二:使用配置文件

  1. 复制配置文件模板:
copy .env.example .env
  1. 编辑 .env 文件,填入您的API密钥:
DEEPSEEK_API_KEY=your_deepseek_api_key_here

3. 获取DeepSeek API密钥

  1. 访问 DeepSeek平台
  2. 注册并登录账户
  3. 在API管理页面创建新的API密钥
  4. 复制密钥并按上述方法配置

4. 运行系统

方式一:Streamlit Web界面(推荐)

streamlit run streamlit_app.py

方式二:命令行界面

# 完整交互模式
python rag_system.py

使用说明

Streamlit Web界面(推荐)

  1. 启动应用:

    streamlit run streamlit_app.py
  2. 功能特性:

    • 🎨 现代化界面: 美观的Web界面,支持响应式设计
    • 💬 聊天体验: 类似ChatGPT的对话式交互
    • ⚙️ 实时配置: 侧边栏实时配置API密钥和系统参数
    • 📊 系统监控: 实时显示系统状态和文档加载情况
    • 💡 示例问题: 预设常见问题,一键提问
    • 📖 文档引用: 显示答案来源的文档片段和相似度
    • 🗑️ 历史管理: 支持清空聊天历史
  3. 使用步骤:

    • 在侧边栏输入DeepSeek API密钥
    • 点击"初始化系统"按钮
    • 等待文档加载完成
    • 在聊天框中输入问题或点击示例问题
    • 查看AI回答和相关文档片段

命令行界面

交互模式

运行 rag_system.py 进入完全交互模式:

=== 红楼梦智能问答系统 ===
输入您的问题,输入 'quit' 或 'exit' 退出
示例问题:
- 甄士隐是谁?
- 贾雨村的故事是什么?
- 通灵宝玉是什么?
- 英莲发生了什么事?

请输入您的问题: 

示例问答

问题: 甄士隐是谁?

答案: 甄士隐是《红楼梦》开篇的重要人物,姓甄,名费,字士隐,住在姑苏阊门外十里街仁清巷葫芦庙旁。他是一位乡宦,嫡妻封氏,情性贤淑,深明礼义。虽然家中不甚富贵,但在本地也算是望族。甄士隐禀性恬淡,不以功名为念,每日只以观花修竹、酌酒吟诗为乐,可谓神仙一流人品...

🏗️ 系统架构

红楼梦RAG系统
├── 文档加载模块
│   ├── 文档读取
│   └── 文本预处理
├── 向量化模块
│   ├── 中文分词 (jieba)
│   ├── TF-IDF向量化
│   └── 向量索引构建
├── 检索模块
│   ├── 查询向量化
│   ├── 相似度计算
│   └── 相关文档排序
└── 生成模块
    ├── 上下文构建
    ├── DeepSeek API调用
    └── 答案生成

📁 项目结构

RagDemos/
├── docs/                    # 文档目录
│   └── 1.txt               # 红楼梦文本
├── cache/                   # 缓存目录
│   ├── doc_chunks.pkl      # 文档块缓存
│   └── doc_vectors.pkl     # 向量索引缓存
├── rag_system.py           # 核心RAG系统
├── streamlit_app.py        # Streamlit Web应用
├── requirements.txt        # 依赖列表
├── .env.example           # 环境变量模板
├── .env                   # 环境变量文件(需要创建)
└── README.md              # 项目说明

⚙️ 配置选项

可以通过修改 rag_system.py 中的参数来调整系统行为:

# 文档分块参数
chunk_size = 300      # 文档块大小
overlap = 50          # 重叠字符数

# 检索参数
top_k = 3             # 返回最相关的文档块数量
min_similarity = 0.01 # 最小相似度阈值

# TF-IDF参数
max_features = 5000   # 最大特征数
ngram_range = (1, 2)  # N-gram范围

🔧 高级功能

添加更多文档

  1. 将新的文本文件放入 docs/ 目录
  2. 删除 cache/ 目录中的缓存文件
  3. 重新运行系统,会自动重建索引

自定义分词

可以在 rag_system.py 中自定义jieba分词:

# 添加自定义词典
jieba.load_userdict('custom_dict.txt')

# 添加关键词
jieba.add_word('贾宝玉')
jieba.add_word('林黛玉')

API参数调整

可以修改DeepSeek API调用参数:

response = self.client.chat.completions.create(
    model="deepseek-chat",
    temperature=0.7,      # 创造性程度
    max_tokens=1000,      # 最大回复长度
    top_p=0.9,           # 核采样参数
    frequency_penalty=0.1 # 重复惩罚
)

🐛 故障排除

常见问题

  1. API密钥错误

    错误: 401 Unauthorized
    解决: 检查API密钥是否正确设置
    
  2. 依赖安装失败

    # 升级pip
    python -m pip install --upgrade pip
    
    # 使用国内镜像
    pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple/
  3. 中文分词问题

    # 重新安装jieba
    pip uninstall jieba
    pip install jieba
  4. 缓存问题

    # 清除缓存重建索引
    rmdir /s cache  # Windows
    rm -rf cache    # Linux/Mac

性能优化

  1. 增加缓存: 系统会自动缓存向量索引,首次运行较慢,后续运行会很快
  2. 调整块大小: 较小的块提供更精确的检索,较大的块提供更多上下文
  3. 优化检索数量: 增加 top_k 可以获得更全面的上下文,但会增加API调用成本

📊 系统指标

  • 文档处理速度: ~1000字符/秒
  • 检索响应时间: <100ms
  • API调用时间: 1-3秒(取决于网络)

🙏 致谢

  • DeepSeek - 提供强大的AI模型
  • jieba - 优秀的中文分词工具
  • scikit-learn - 机器学习工具包
  • 《红楼梦》- 中华文学瑰宝

没人比我更懂红楼梦! 🏮

About

分享一个基于检索增强生成(RAG)技术的红楼梦问答系统的完整实现。这个项目展示了如何将传统文学作品与现代AI技术相结合,为用户提供智能化的文学问答体验。

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages