Skip to content

liusu514/rag-langchain

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

RAG 智能问答助手

基于 RAG(检索增强生成)架构的本地知识库问答系统。上传文档后,系统会自动进行向量化存储,结合大语言模型实现智能问答,并以流式打字机效果逐字输出回答。

技术架构

组件 技术选型 说明
前端框架 Streamlit 快速构建交互式 Web 界面
RAG 框架 LangChain 文档处理、检索、对话链
嵌入模型 Ollama (qwen3-embedding) 本地运行,免费
向量数据库 Chroma 轻量级,本地持久化
大语言模型 小米 mimo API 云端调用,OpenAI 兼容接口

核心功能

  • 文档管理:支持上传 PDF、TXT、DOCX 格式文件,自动向量化入库
  • 文档查重:基于 MD5 哈希算法自动检测重复内容,避免重复入库
  • 智能问答:双重回答策略——文档有相关内容时基于文档回答(标注「基于文档」),无相关内容时使用 AI 自身知识回答(标注「基于AI知识」)
  • 流式输出:逐字输出 AI 回答,附带光标动画,提升交互体验
  • 多轮对话:保留最近 10 轮对话历史,支持上下文连续问答
  • 会话管理:对话自动持久化存储,支持新建、切换、重命名、置顶、删除等操作
  • 历史分组:会话按时间自动分组显示(今天、昨天、最近7天、按月)
  • 来源追溯:回答时可查看参考文档来源及原文内容

项目结构

rag-chat-assistant/
├── app.py                    # Streamlit 主应用(前端界面与交互逻辑)
├── requirements.txt          # Python 依赖
├── CHANGELOG.md              # 更新日志
├── config/
│   └── settings.py           # 全局配置(从环境变量读取)
├── core/
│   ├── __init__.py
│   ├── embeddings.py         # Ollama 嵌入模型封装
│   ├── vectorstore.py        # Chroma 向量数据库服务(含查重、文档管理)
│   ├── llm.py                # 小米 mimo LLM API 封装
│   └── rag_chain.py          # RAG 对话链(检索 + 生成 + 记忆)
├── utils/
│   ├── __init__.py
│   ├── document_loader.py    # 文档加载器(PDF/TXT/DOCX)
│   ├── text_splitter.py      # 文本分割器(递归字符分割)
│   └── session_manager.py    # 会话管理器(JSON 持久化)
└── data/
    ├── chroma_db/            # Chroma 向量数据库持久化目录
    └── sessions/             # 会话历史 JSON 文件

环境变量配置

所有配置均通过系统环境变量读取,不使用 .env 文件。

变量名 说明 示例值
OLLAMA_BASE_URL Ollama 服务地址 http://localhost:11434
EMBEDDING_MODEL 嵌入模型名称 qwen3-embedding
MIMO_API_KEY 小米 mimo API 密钥 -
MIMO_API_BASE 小米 mimo API 地址 https://api.xiaomi.com/v1
MIMO_MODEL 小米 mimo 模型名称 mimo-v2.5-pro
CHROMA_PERSIST_DIR Chroma 数据存储目录 ./data/chroma_db
COLLECTION_NAME 向量集合名称 rag_collection
CHUNK_SIZE 文本分块大小 500
CHUNK_OVERLAP 分块重叠大小 50
TOP_K 检索返回的文档数量 3

快速开始

1. 环境准备

确保已安装并启动 Ollama,并拉取嵌入模型:

ollama pull qwen3-embedding

2. 设置环境变量

# PowerShell 示例
$env:OLLAMA_BASE_URL = "http://localhost:11434"
$env:EMBEDDING_MODEL = "qwen3-embedding"
$env:MIMO_API_KEY = "your-api-key"
$env:MIMO_API_BASE = "https://api.xiaomi.com/v1"
$env:MIMO_MODEL = "mimo-v2.5-pro"
$env:CHROMA_PERSIST_DIR = "./data/chroma_db"
$env:COLLECTION_NAME = "rag_collection"
$env:CHUNK_SIZE = "500"
$env:CHUNK_OVERLAP = "50"
$env:TOP_K = "3"

3. 安装依赖

pip install -r requirements.txt

4. 启动应用

streamlit run app.py

启动后浏览器会自动打开,默认地址为 http://localhost:8501

使用说明

  1. 在左侧边栏「知识库管理」区域上传文档,点击「处理文档」完成入库
  2. 在底部输入框输入问题,系统会检索知识库并给出回答
  3. 展开「参考来源」可查看回答所依据的文档片段
  4. 左侧「会话管理」区域可管理历史对话,支持置顶、重命名、删除

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages