这是一个基于 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 # 模型格式转换工具
RAG系统的核心类,负责整个检索增强生成流程:
- 文档加载:支持多种格式文档的批量加载
- 文档切分:使用递归字符切分器,支持重叠切分
- 向量化存储:使用 Chroma 向量数据库存储文档向量
- 检索问答:结合检索和生成,提供准确答案
- 增量更新:智能检测文档变化,支持增量更新
# 初始化整个RAG系统
initialize_system(model_type="openai")
# 处理问答请求
ask_question("什么是人工智能?")
# 增量更新向量数据库
incremental_update_vectorstore()
# 分析文档变化
analyze_file_changes()统一管理多种语言模型和嵌入模型:
- OpenAI:GPT-3.5-turbo, GPT-4 等
- Anthropic:Claude-3, Claude-4 等
- DeepSeek:deepseek-chat 等
- GLM:glm-4 等
- Ollama:llama2, mistral 等本地模型
- 模型检测:自动检测可用模型
- 动态切换:运行时切换不同模型
- 统一接口:为不同模型提供统一的调用接口
集中管理所有配置参数:
- 知识库配置:文档路径、向量库路径
- 文档处理配置:切分大小、重叠参数
- 模型配置:各模型的参数设置
- API配置:各种API密钥和端点
- 开发环境:DEBUG模式
- 生产环境:优化配置
- LangChain:大语言模型应用开发框架
- ChromaDB:向量数据库,用于文档向量存储
- Sentence Transformers:中文文本嵌入模型
- PyPDF:PDF文档解析
- python-docx:Word文档解析
- RecursiveCharacterTextSplitter:智能文档切分
- OpenAI API:GPT系列模型
- Anthropic API:Claude系列模型
- Ollama:本地模型部署
- 各类国产模型API
- Python 3.8+
- 足够的磁盘空间(用于存储模型和向量数据库)
pip install -r requirements.txt创建 .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将文档文件(.txt, .pdf, .docx)放入 knowledge_base/ 目录。
系统使用 BGE-Large-ZH 中文嵌入模型,模型文件应放置在 embedding_model/ 目录。
python src/main.py系统启动后会显示可用模型列表,选择要使用的模型。
系统提供以下命令:
help- 显示帮助信息info- 显示系统信息models- 显示可用模型switch <model>- 切换模型reload- 重新加载知识库quit/exit- 退出程序
请输入问题或命令: 什么是人工智能?
问题: 什么是人工智能?
答案: 人工智能(Artificial Intelligence,简称AI)是计算机科学的一个分支,它企图了解智能的实质,并生产出一种新的能以人类智能相似的方式做出反应的智能机器...
参考来源 (使用模型: openai):
1. AI基础知识.pdf - 第1页
内容: 人工智能(Artificial Intelligence,简称AI)是计算机科学的一个分支...
2. 科技发展趋势.txt - 第1页
内容: 人工智能技术的发展现状和应用前景...
系统能够智能检测知识库文档的变化:
- 新增文档:自动添加新文档到向量数据库
- 修改文档:更新已修改文档的向量表示
- 删除文档:从向量数据库中移除已删除文档
可以通过修改 config.py 文件来自定义:
- 文档切分参数
- 检索返回文档数量
- 模型参数(温度、最大token数等)
- 各种API的端点和密钥
项目包含 convert_bin_to_safetensors.py 工具,用于将PyTorch模型转换为SafeTensors格式,提高模型加载效率和安全性。
- 清晰的模块划分,易于维护和扩展
- 统一的配置管理,便于部署和调试
- 支持主流的大语言模型
- 运行时动态切换,灵活应对不同需求
- 增量更新机制,提高效率
- 自动检测文档变化,减少人工干预
- 使用BGE-Large-ZH中文嵌入模型
- 针对中文问答场景优化提示词
- 易于添加新的文档格式支持
- 可轻松集成新的语言模型
A: 在 rag_system.py 的 load_documents() 方法中添加新的文档加载器。
A: 在 model_manager.py 中添加新的模型支持,并在 config.py 中配置相应参数。
A: 可以调整 CHUNK_SIZE 和 CHUNK_OVERLAP 参数,或者定期清理不需要的文档。
A: 可以:
- 优化知识库文档质量
- 调整检索参数(SEARCH_K)
- 优化提示词模板
- 选择更强大的语言模型
注意:使用本系统前请确保遵守相关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'
)