Skip to content

Repository files navigation

RAG 知识库问答 & 学习辅助系统

基于本地 Markdown 文档 + Claude 大模型的 RAG(检索增强生成)系统,支持知识库问答、面试练习、资源聚合等一站式学习辅助功能。

功能概览

Tab 功能 说明
🌸 知识问答 RAG 检索问答 从文档检索相关内容,Claude 生成回答,来源高亮定位
🌺 技术趋势 多渠道聚合 GitHub/Hacker News/Dev.to/B站 热门资源,按领域筛选
🌻 资源导入 三合一导入 URL 抓取 / 音视频上传转录 / 手动编写,统一保存到知识库
🌼 智能出题 自动出题 基于知识库生成问答题 + 笔试题,支持指定文档范围
🌹 AI 对练 模拟面试 AI 面试官逐题问答,实时评分反馈,支持语音输入
🍀 文档助手 简历优化 上传 PDF + JD → AI 生成优化简历(HTML 排版 + PDF 打印)
📖 精读笔记 深度阅读 选择 KB 文档精读,记笔记,AI 提炼核心概念 + 生成思考题
📹 自习室 视频学习 Jitsi 在线视频自习 + 腾讯会议快捷入口,和伙伴一起学习
📈 学习进度 数据追踪 面试评分、精读/笔记统计、学习计划、AI 学习报告

知识问答功能详情

  • RAG 检索问答:输入问题,系统自动检索知识库相关片段 + Claude 生成回答
  • 参考来源展示:每次回答标注匹配的文档来源(文件名 + 相似度百分比)
  • 来源高亮定位:点击来源按钮打开文档预览,匹配段落自动高亮(粉色左边框)
  • 智能过滤:同一文件只显示最高相似度的一条,低于 20% 的不相关结果自动过滤
  • 通用知识兜底:知识库无相关内容时用 AI 通用知识回答,并标注来源类型
  • 对话上下文:保留最近 100 条消息,支持连续多轮对话

资源导入功能详情

三种导入方式统一在一个 Tab 中:

方式 说明
🔗 URL 导入 支持 YouTube/TED/GitHub/语雀/网页文章,自动抓取 + AI 整理为结构化笔记
📁 文件上传 上传 MP4/MP3/M4A/WAV,自动转录 + AI 分析重点/薄弱点
✏️ 手动编写 直接编写 Markdown 内容,选择分类后保存到知识库

界面主题

系统支持双主题切换(侧边栏切换按钮):

主题 风格
浅色(默认) 粉蓝碎花渐变,柔和花园风
深色 深紫花园,紫粉霓虹感

环境要求

快速开始

1. 克隆项目

git clone <仓库地址>
cd rag

2. 安装依赖

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

3. 配置 API Key

cp .env.example .env

编辑 .env 文件,填入配置:

ANTHROPIC_API_KEY=sk-ant-xxxxx
YOUTUBE_API_KEY=AIzaSyXXX          # YouTube 数据抓取(可选)
SERVERCHAN_KEY=SCTxxx,SCTyyy       # Server酱推送(可选,多人逗号分隔)
GIT_TOKEN=                         # GitHub PAT,Streamlit Cloud 数据持久化用(本地留空)

4. 添加知识库文档

将 Markdown 文件放入 kb/ 目录(支持按分类建子目录):

kb/
├── english/
│   ├── interview.md
│   └── introduction.md
├── frontend/
│   └── vue2.md
└── your-notes.md

5. 启动应用

python -m streamlit run app.py --server.headless true

浏览器访问 http://localhost:8501

使用说明

知识问答

  1. 打开 🌸 知识问答 标签页
  2. 在输入框输入问题(如"Vue3 有哪些性能优化?")
  3. 系统自动检索相关文档片段并生成回答
  4. 点击「参考来源」展开查看引用的文档来源
  5. 点击来源按钮打开文档预览,匹配段落自动高亮
  6. 知识库无相关内容时用通用知识回答并标注

资源导入

  1. 打开 🌻 资源导入 标签页
  2. 选择导入方式:
    • URL 导入:粘贴链接,自动识别类型(YouTube/TED/GitHub/语雀/网页),AI 整理为笔记
    • 文件上传:上传音视频文件,自动转录 + AI 分析重点与薄弱点
    • 手动编写:直接编写 Markdown 内容,选择分类保存
  3. 预览确认后保存到对应分类
  4. 保存后点击侧边栏「重建索引」更新向量数据库

智能出题

  1. 打开 🌼 智能出题 标签页
  2. (可选)选择指定的知识库文档,不选则使用全部
  3. 点击「生成问答题」或「生成笔试题」
  4. 生成完成后可在线查看或下载 Markdown 文件

AI 对练(模拟面试)

  1. 打开 🌹 AI 对练 标签页
  2. 选择面试分类和题目数量
  3. AI 面试官逐题提问,你输入/语音回答
  4. 每题实时评分 + 建议,结束后给出总分

技术趋势

  1. 打开 🌺 技术趋势 标签页
  2. 选择语言/领域(JavaScript、Python、AI、大模型、英语等),或选「自定义」输入关键词
  3. 选择时间范围(今天/本周/本月)
  4. 查看四大渠道聚合结果:
    • GitHub — 高星新项目
    • Hacker News — 热门技术讨论
    • Dev.to — 开发者社区热文
    • B站 — 科技/数码区热门视频
  5. 数据每小时自动缓存,点「刷新」强制更新

文档助手(简历优化)

  1. 打开 🍀 文档助手 标签页
  2. 上传 PDF 简历,可点击「从此 PDF 生成 HTML 模板」自动生成匹配风格
  3. 输入目标公司简介 + 职位描述(支持图片上传识别)
  4. 点击「生成优化简历」→ 预览 HTML 排版 / 中英文 Markdown
  5. 下载 HTML 文件,浏览器打开后 Ctrl+P 打印为 PDF

精读笔记

  1. 打开 📖 精读笔记 标签页
  2. 从下拉框选择一篇知识库文档
  3. 左侧阅读全文,右侧记录笔记(支持多条保存)
  4. AI 辅助:
    • 「提炼核心概念」— 从文档中提取 3-5 个关键概念 + 解释
    • 「生成思考题」— 基于文档和笔记生成深入问题,检验理解

自习室

  1. 打开 📹 自习室 标签页
  2. 两种方式:
    • 在线视频(Jitsi):输入房间名 → 新标签页打开视频自习室,和伙伴输入相同名字即可连线
    • 腾讯会议:保存常用会议链接,一键拉起客户端加入
  3. 首次使用 Jitsi 需 Google 账号登录(免费),之后直接进入

学习进度

  1. 打开 📈 学习进度 标签页
  2. 查看面试次数、平均分、精读篇数、笔记总数、学习天数等指标
  3. 管理学习计划(待办列表,支持添加/勾选/删除)
  4. 点击「生成 AI 学习报告」获取个性化建议

知识库管理

  • 侧边栏文件浏览:按分类查看所有知识库文档,点击可预览/编辑
  • 分类管理:新增/重命名/删除分类
  • 重建索引:添加新文档后点击侧边栏「重建索引」按钮更新向量数据库

微信推送(Server酱)

系统支持将每周技术资讯自动推送到微信,通过 Server酱 实现。

功能

  • 手动推送:在「技术趋势」Tab 点击「📬 推送本周资讯到微信」按钮
  • 定时推送:GitHub Actions 每周一北京时间 9:00 自动推送
  • 多人推送:支持逗号分隔多个 SendKey,同时推送给多人
  • Markdown 格式:推送内容为结构化 Markdown,微信内可读性好

配置

  1. 打开 sct.ftqq.com,微信扫码登录
  2. 复制你的 SendKey(格式 SCTxxx
  3. .env 中添加(多人用逗号分隔):
    SERVERCHAN_KEY=SCTxxx,SCTyyy
    
  4. GitHub Actions 自动推送需在仓库 Settings → Secrets 中添加 SERVERCHAN_KEY

数据自动持久化(Git Sync)

Streamlit Cloud 文件系统是临时的,每次重启都从 GitHub 拉取代码。本系统通过 git_sync.py 模块实现运行时数据自动同步:

  • 自动 commit + push:修改学习进度、知识库文件时自动推送到 GitHub
  • 5 秒防抖:频繁操作合并为一次提交,避免过多 commit
  • 后台异步:不阻塞 UI 操作
  • 静默降级:本地开发无 GIT_TOKEN 时自动跳过

配置

  1. 创建 GitHub Personal Access Token(Fine-grained,repo Contents 读写权限)
  2. Streamlit Cloud Secrets 中添加:
    GIT_TOKEN = "github_pat_xxx"
    
  3. GitHub Actions 需在 Settings → Secrets 中添加 GIT_TOKEN

GitHub Actions

Workflow 触发 功能
Weekly Tech Digest Push 每周一 09:00(北京时间)/ 手动 自动获取本周技术热点并推送到微信

配置方法:仓库 Settings → Secrets and variables → Actions → New repository secret,添加 SERVERCHAN_KEYYOUTUBE_API_KEY

项目结构

rag/
├── kb/                # 知识库文档目录(按分类建子目录)
├── resume/            # 简历模板 PDF 存放目录
├── fonts/             # 中文字体(NotoSansSC,PDF 生成用)
├── templates/         # HTML 简历模板目录
├── styles/            # CSS 主题样式
│   ├── __init__.py    # load_theme_css() / load_dialog_css()
│   ├── light.css      # 浅色主题
│   ├── dark.css       # 深色主题
│   ├── dialog_light.css  # 浅色对话框样式
│   └── dialog.css     # 深色对话框样式
├── tabs/              # Tab 模块(每个 Tab 一个文件)
│   ├── tab_chat.py    # 知识问答
│   ├── tab_trends.py  # 技术趋势
│   ├── tab_resource.py # 资源导入(URL/文件/手动)
│   ├── tab_exam.py    # 智能出题
│   ├── tab_interview.py # AI 对练
│   ├── tab_resume.py  # 文档助手
│   ├── tab_reading.py # 精读笔记
│   ├── tab_studyroom.py # 自习室(Jitsi + 腾讯会议)
│   └── tab_progress.py # 学习进度
├── .github/workflows/ # GitHub Actions 自动化
│   └── weekly_push.yml # 每周技术资讯推送
├── app.py             # Streamlit 应用入口(9 个 Tab + 双主题)
├── sidebar.py         # 侧边栏(KB 管理 + 文档预览)
├── rag_engine.py      # RAG 核心:向量检索、文档加载、资源抓取、AI 分析
├── resume.py          # 简历解析、版本管理、AI 优化生成
├── resume_html.py     # HTML 简历渲染(Jinja2 模板 + PDF Vision 模板生成)
├── trends.py          # 技术趋势聚合(GitHub/HN/Dev.to/B站 API)
├── progress.py        # 学习进度追踪(面试/资源/查询记录 + 统计)
├── push_wechat.py     # 微信推送(Server酱,支持多人)
├── git_sync.py        # 数据自动持久化(防抖 + 后台 commit+push)
├── requirements.txt   # Python 依赖
├── .env.example       # 环境变量模板
└── chroma_db/         # ChromaDB 向量数据库(自动生成)

模型选择指南

侧边栏支持多模型切换,各功能推荐如下:

Tab 核心任务 推荐模型 理由
🌸 知识问答 理解+回答 sonnet-4-6 / deepseek-v4-flash 日常用 flash 省钱,复杂问题切 sonnet
🌺 技术趋势 API 聚合 纯 API 抓取,不调用 LLM
🌻 资源导入 内容整理/转录分析 haiku-4-5 / deepseek-v4-flash 格式化工作,便宜快速的就够
🌼 智能出题 生成题目 sonnet-4-6 / glm-5 需要理解力+中文表达
🌹 AI 对练 面试官角色 sonnet-4-6 / opus 需要追问和评分能力
🍀 文档助手 简历优化 opus / gpt-5.5 创作质量要求最高
📖 精读笔记 概念提炼/思考题 sonnet-4-6 / glm-5 需要理解文档+中文总结
📹 自习室 视频连线 不调用 LLM
📈 学习进度 生成报告 sonnet-4-6 / haiku-4-5 数据总结,不需要太强

可用模型一览:

模型 定位 价格(输入/输出 per 1M tokens)
claude-sonnet-4-6 均衡之选,速度快质量高,性价比最佳 $3 / $15
claude-sonnet-5 Sonnet 最新版,推理更强 $2 / $10
claude-haiku-4-5 最快最便宜,简单任务首选 $1 / $5
claude-opus-4-6 最强推理,复杂分析/创作 $5 / $25
claude-opus-4-7 Opus 进化版,深度思考 $5 / $25
claude-opus-4-8 Opus 最新,顶级智能 $5 / $25
gpt-5.5 OpenAI 旗舰,多模态强 $5 / $30
glm-5 智谱 GLM,中文理解优秀 $1 / $3.2
kimi-k2.5 月之暗面,超长上下文 $0.6 / $3
deepseek-v4-pro DeepSeek 旗舰,代码/数学强 $0.43 / $0.87
deepseek-v4-flash DeepSeek 快速版,极致性价比 $0.14 / $0.28

💡 日常推荐:claude-sonnet-4-6(默认)。省钱场景用 deepseek-v4-flash,高质量创作用 opus / gpt-5.5

技术栈

组件 技术
框架 LangChain
LLM 多模型支持(侧边栏切换,默认 claude-sonnet-4-6)
Embedding FastEmbed (ONNX Runtime)
向量数据库 ChromaDB(chunk_size=200, overlap=30)
Web UI Streamlit
PDF 解析 PyPDF2 + PyMuPDF
HTML 简历 Jinja2 + WeasyPrint + Claude Vision
技术趋势 GitHub API / HN Firebase API / Dev.to API / Bilibili API
微信推送 Server酱(sctapi.ftqq.com)
数据持久化 git_sync(自动 commit+push,5s 防抖)
CI/CD GitHub Actions(定时推送)
视频转录 SpeechRecognition + pydub
网页抓取 trafilatura + BeautifulSoup
YouTube youtube-transcript-api

常见问题

Q: 首次启动很慢?

首次运行会自动下载 Embedding 模型(约 50MB),之后会缓存到本地。

Q: 报错 "team not allowed to access model"?

检查 .env 中的 API Key 对应的团队是否有模型访问权限。可在 rag_engine.py 中修改 model 参数为你可用的模型。

Q: 如何更换模型?

在侧边栏「🤖 模型」下拉框中选择即可实时切换,支持 11 个模型。如需新增模型,编辑 rag_engine.py 中的 AVAILABLE_MODELS 字典。

Q: 知识库支持什么格式?

目前支持 Markdown (.md) 文件。放入 kb/ 目录即可,支持按子目录分类。

Q: ChromaDB 报错 "no such table: tenants"?

向量数据库文件损坏。系统已内置自动检测修复:启动时验证数据库完整性,异常时自动删除并重建索引。也可手动删除 chroma_db/ 目录后重启。

Q: 如何切换主题?

点击侧边栏右上角的 🌙/☀️ 按钮即可在浅色碎花与深紫花园主题之间切换。

Q: 搜索不到知识库内容?

添加/修改文档后需点击侧边栏「重建索引」按钮更新向量数据库。若知识库确实无相关内容,系统会用通用知识回答并标注。

About

RAG 知识库问答 面试题 笔试题 生成 简历 最新技术 知识库录入

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages