Skip to content

dyq-w/RAG

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

RAG 智能问答系统

项目概述

这是一个基于 RAG(Retrieval-Augmented Generation,检索增强生成) 技术的智能问答系统。该系统能够基于本地知识库文档,结合多种大语言模型,为用户提供准确、可靠的智能问答服务。

核心特性

🚀 多模型支持

  • OpenAI GPT:支持 GPT-3.5-turbo 等模型
  • Anthropic Claude:支持 Claude 系列模型
  • DeepSeek:支持国产 DeepSeek 模型
  • GLM(智谱AI):支持 GLM-4 等国产模型
  • Ollama:支持本地部署的开源模型

📚 多格式文档支持

  • 文本文档.txt 格式
  • PDF文档.pdf 格式,支持多页文档
  • Word文档.docx 格式

🔍 智能检索

  • 向量化检索:基于 Chroma 向量数据库
  • 语义相似度:使用 BGE-Large-ZH 中文嵌入模型
  • 增量更新:支持知识库文档的增量更新,无需全量重建

💬 交互式问答

  • 命令行界面:友好的交互式问答体验
  • 实时切换:支持运行时动态切换模型
  • 来源追溯:提供答案的文档来源和参考内容

项目架构

RAG/
├── src/                          # 源代码目录
│   ├── main.py                   # 主程序入口
│   ├── rag_system.py             # RAG系统核心类
│   ├── model_manager.py          # 模型管理器
│   ├── config.py                 # 配置管理
│   └── README.md                 # 项目介绍文档
├── knowledge_base/               # 知识库文档目录
├── chroma_db/                    # 向量数据库存储目录
├── embedding_model/              # 本地嵌入模型目录
├── requirements.txt              # Python依赖包列表
└── convert_bin_to_safetensors.py # 模型格式转换工具

核心模块详解

1. RAGSystem (rag_system.py)

RAG系统的核心类,负责整个检索增强生成流程:

主要功能

  • 文档加载:支持多种格式文档的批量加载
  • 文档切分:使用递归字符切分器,支持重叠切分
  • 向量化存储:使用 Chroma 向量数据库存储文档向量
  • 检索问答:结合检索和生成,提供准确答案
  • 增量更新:智能检测文档变化,支持增量更新

关键方法

# 初始化整个RAG系统
initialize_system(model_type="openai")

# 处理问答请求
ask_question("什么是人工智能?")

# 增量更新向量数据库
incremental_update_vectorstore()

# 分析文档变化
analyze_file_changes()

2. ModelManager (model_manager.py)

统一管理多种语言模型和嵌入模型:

支持的模型类型

  • OpenAI:GPT-3.5-turbo, GPT-4 等
  • Anthropic:Claude-3, Claude-4 等
  • DeepSeek:deepseek-chat 等
  • GLM:glm-4 等
  • Ollama:llama2, mistral 等本地模型

关键功能

  • 模型检测:自动检测可用模型
  • 动态切换:运行时切换不同模型
  • 统一接口:为不同模型提供统一的调用接口

3. Config (config.py)

集中管理所有配置参数:

配置类别

  • 知识库配置:文档路径、向量库路径
  • 文档处理配置:切分大小、重叠参数
  • 模型配置:各模型的参数设置
  • API配置:各种API密钥和端点

环境支持

  • 开发环境:DEBUG模式
  • 生产环境:优化配置

技术栈

核心框架

  • LangChain:大语言模型应用开发框架
  • ChromaDB:向量数据库,用于文档向量存储
  • Sentence Transformers:中文文本嵌入模型

文档处理

  • PyPDF:PDF文档解析
  • python-docx:Word文档解析
  • RecursiveCharacterTextSplitter:智能文档切分

模型接口

  • OpenAI API:GPT系列模型
  • Anthropic API:Claude系列模型
  • Ollama:本地模型部署
  • 各类国产模型API

安装与配置

1. 环境要求

  • Python 3.8+
  • 足够的磁盘空间(用于存储模型和向量数据库)

2. 安装依赖

pip install -r requirements.txt

3. 配置环境变量

创建 .env 文件并配置以下参数:

# OpenAI配置
OPENAI_API_KEY=your_openai_api_key

# Anthropic配置
ANTHROPIC_API_KEY=your_anthropic_api_key
ANTHROPIC_BASE_URL=your_anthropic_base_url

# DeepSeek配置
DEEPSEEK_API_KEY=your_deepseek_api_key

# GLM配置
GLM_API_KEY=your_glm_api_key
GLM_BASE_URL=https://open.bigmodel.cn/api/paas/v4

# 运行环境(可选)
RAG_ENV=development

4. 准备知识库

将文档文件(.txt, .pdf, .docx)放入 knowledge_base/ 目录。

5. 下载嵌入模型

系统使用 BGE-Large-ZH 中文嵌入模型,模型文件应放置在 embedding_model/ 目录。

使用指南

1. 启动系统

python src/main.py

2. 选择模型

系统启动后会显示可用模型列表,选择要使用的模型。

3. 交互式问答

系统提供以下命令:

  • help - 显示帮助信息
  • info - 显示系统信息
  • models - 显示可用模型
  • switch <model> - 切换模型
  • reload - 重新加载知识库
  • quit/exit - 退出程序

4. 问答示例

请输入问题或命令: 什么是人工智能?

问题: 什么是人工智能?
答案: 人工智能(Artificial Intelligence,简称AI)是计算机科学的一个分支,它企图了解智能的实质,并生产出一种新的能以人类智能相似的方式做出反应的智能机器...

参考来源 (使用模型: openai):
  1. AI基础知识.pdf - 第1页
     内容: 人工智能(Artificial Intelligence,简称AI)是计算机科学的一个分支...
  2. 科技发展趋势.txt - 第1页
     内容: 人工智能技术的发展现状和应用前景...

高级功能

1. 增量更新

系统能够智能检测知识库文档的变化:

  • 新增文档:自动添加新文档到向量数据库
  • 修改文档:更新已修改文档的向量表示
  • 删除文档:从向量数据库中移除已删除文档

2. 自定义配置

可以通过修改 config.py 文件来自定义:

  • 文档切分参数
  • 检索返回文档数量
  • 模型参数(温度、最大token数等)
  • 各种API的端点和密钥

3. 模型格式转换

项目包含 convert_bin_to_safetensors.py 工具,用于将PyTorch模型转换为SafeTensors格式,提高模型加载效率和安全性。

系统优势

1. 高度模块化

  • 清晰的模块划分,易于维护和扩展
  • 统一的配置管理,便于部署和调试

2. 多模型支持

  • 支持主流的大语言模型
  • 运行时动态切换,灵活应对不同需求

3. 智能更新

  • 增量更新机制,提高效率
  • 自动检测文档变化,减少人工干预

4. 中文优化

  • 使用BGE-Large-ZH中文嵌入模型
  • 针对中文问答场景优化提示词

5. 可扩展性

  • 易于添加新的文档格式支持
  • 可轻松集成新的语言模型

常见问题

Q: 如何添加新的文档格式支持?

A: 在 rag_system.pyload_documents() 方法中添加新的文档加载器。

Q: 如何添加新的语言模型?

A: 在 model_manager.py 中添加新的模型支持,并在 config.py 中配置相应参数。

Q: 向量数据库占用空间过大怎么办?

A: 可以调整 CHUNK_SIZECHUNK_OVERLAP 参数,或者定期清理不需要的文档。

Q: 如何提高回答质量?

A: 可以:

  1. 优化知识库文档质量
  2. 调整检索参数(SEARCH_K)
  3. 优化提示词模板
  4. 选择更强大的语言模型

注意:使用本系统前请确保遵守相关API服务条款和法律法规。

获取嵌入模型的方式

from modelscope import snapshot_download
model_dir = snapshot_download(
    model_id='BAAI/bge-large-zh-v1.5',      #约1.2G
    cache_dir=r'D:/code/RAG/embedding_model'
)

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages