基于本地 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 内容,选择分类后保存到知识库 |
系统支持双主题切换(侧边栏切换按钮):
| 主题 | 风格 |
|---|---|
| 浅色(默认) | 粉蓝碎花渐变,柔和花园风 |
| 深色 | 深紫花园,紫粉霓虹感 |
- Python 3.10+
- Anthropic API Key(获取地址)
git clone <仓库地址>
cd ragpip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simplecp .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 数据持久化用(本地留空)
将 Markdown 文件放入 kb/ 目录(支持按分类建子目录):
kb/
├── english/
│ ├── interview.md
│ └── introduction.md
├── frontend/
│ └── vue2.md
└── your-notes.md
python -m streamlit run app.py --server.headless true浏览器访问 http://localhost:8501
- 打开 🌸 知识问答 标签页
- 在输入框输入问题(如"Vue3 有哪些性能优化?")
- 系统自动检索相关文档片段并生成回答
- 点击「参考来源」展开查看引用的文档来源
- 点击来源按钮打开文档预览,匹配段落自动高亮
- 知识库无相关内容时用通用知识回答并标注
- 打开 🌻 资源导入 标签页
- 选择导入方式:
- URL 导入:粘贴链接,自动识别类型(YouTube/TED/GitHub/语雀/网页),AI 整理为笔记
- 文件上传:上传音视频文件,自动转录 + AI 分析重点与薄弱点
- 手动编写:直接编写 Markdown 内容,选择分类保存
- 预览确认后保存到对应分类
- 保存后点击侧边栏「重建索引」更新向量数据库
- 打开 🌼 智能出题 标签页
- (可选)选择指定的知识库文档,不选则使用全部
- 点击「生成问答题」或「生成笔试题」
- 生成完成后可在线查看或下载 Markdown 文件
- 打开 🌹 AI 对练 标签页
- 选择面试分类和题目数量
- AI 面试官逐题提问,你输入/语音回答
- 每题实时评分 + 建议,结束后给出总分
- 打开 🌺 技术趋势 标签页
- 选择语言/领域(JavaScript、Python、AI、大模型、英语等),或选「自定义」输入关键词
- 选择时间范围(今天/本周/本月)
- 查看四大渠道聚合结果:
- GitHub — 高星新项目
- Hacker News — 热门技术讨论
- Dev.to — 开发者社区热文
- B站 — 科技/数码区热门视频
- 数据每小时自动缓存,点「刷新」强制更新
- 打开 🍀 文档助手 标签页
- 上传 PDF 简历,可点击「从此 PDF 生成 HTML 模板」自动生成匹配风格
- 输入目标公司简介 + 职位描述(支持图片上传识别)
- 点击「生成优化简历」→ 预览 HTML 排版 / 中英文 Markdown
- 下载 HTML 文件,浏览器打开后 Ctrl+P 打印为 PDF
- 打开 📖 精读笔记 标签页
- 从下拉框选择一篇知识库文档
- 左侧阅读全文,右侧记录笔记(支持多条保存)
- AI 辅助:
- 「提炼核心概念」— 从文档中提取 3-5 个关键概念 + 解释
- 「生成思考题」— 基于文档和笔记生成深入问题,检验理解
- 打开 📹 自习室 标签页
- 两种方式:
- 在线视频(Jitsi):输入房间名 → 新标签页打开视频自习室,和伙伴输入相同名字即可连线
- 腾讯会议:保存常用会议链接,一键拉起客户端加入
- 首次使用 Jitsi 需 Google 账号登录(免费),之后直接进入
- 打开 📈 学习进度 标签页
- 查看面试次数、平均分、精读篇数、笔记总数、学习天数等指标
- 管理学习计划(待办列表,支持添加/勾选/删除)
- 点击「生成 AI 学习报告」获取个性化建议
- 侧边栏文件浏览:按分类查看所有知识库文档,点击可预览/编辑
- 分类管理:新增/重命名/删除分类
- 重建索引:添加新文档后点击侧边栏「重建索引」按钮更新向量数据库
系统支持将每周技术资讯自动推送到微信,通过 Server酱 实现。
- 手动推送:在「技术趋势」Tab 点击「📬 推送本周资讯到微信」按钮
- 定时推送:GitHub Actions 每周一北京时间 9:00 自动推送
- 多人推送:支持逗号分隔多个 SendKey,同时推送给多人
- Markdown 格式:推送内容为结构化 Markdown,微信内可读性好
- 打开 sct.ftqq.com,微信扫码登录
- 复制你的 SendKey(格式
SCTxxx) - 在
.env中添加(多人用逗号分隔):SERVERCHAN_KEY=SCTxxx,SCTyyy - GitHub Actions 自动推送需在仓库 Settings → Secrets 中添加
SERVERCHAN_KEY
Streamlit Cloud 文件系统是临时的,每次重启都从 GitHub 拉取代码。本系统通过 git_sync.py 模块实现运行时数据自动同步:
- 自动 commit + push:修改学习进度、知识库文件时自动推送到 GitHub
- 5 秒防抖:频繁操作合并为一次提交,避免过多 commit
- 后台异步:不阻塞 UI 操作
- 静默降级:本地开发无 GIT_TOKEN 时自动跳过
- 创建 GitHub Personal Access Token(Fine-grained,repo Contents 读写权限)
- Streamlit Cloud Secrets 中添加:
GIT_TOKEN = "github_pat_xxx" - GitHub Actions 需在 Settings → Secrets 中添加
GIT_TOKEN
| Workflow | 触发 | 功能 |
|---|---|---|
| Weekly Tech Digest Push | 每周一 09:00(北京时间)/ 手动 | 自动获取本周技术热点并推送到微信 |
配置方法:仓库 Settings → Secrets and variables → Actions → New repository secret,添加 SERVERCHAN_KEY 和 YOUTUBE_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: 搜索不到知识库内容?
添加/修改文档后需点击侧边栏「重建索引」按钮更新向量数据库。若知识库确实无相关内容,系统会用通用知识回答并标注。