AskMyDocs
私有知识库问答系统
2026.02 – 2026.04
Full-Stack Developer
2 months

双栏布局 — 左侧知识库管理,右侧多轮对话
一个你可以自己部署的知识库问答系统。上传 PDF、Markdown 或纯文本,系统自动分块、向量化、入库。之后用自然语言提问,它会从你的文档中检索相关内容,生成带引用来源的回答。支持语音输入输出,适合不想把数据交给第三方的场景。
挑战
文档解析的质量直接决定问答效果——分块太大会引入噪音,太小会丢失上下文。如何在不同格式(PDF 表格、Markdown 代码块、纯文本段落)之间找到统一的分块策略?另一个挑战是多轮对话的上下文管理,既要记住历史又不能让 prompt 爆掉。
方案
异步文档处理管线:上传 → Redis 队列 → RQ Worker 异步解析 → 智能分块 → Chroma 向量化入库。多轮对话通过滑动窗口管理历史,每轮检索 top-k 相关片段拼入 prompt。SSE 流式输出保证响应的即时感,每段回答都标注引用来源。语音通过 Qwen3-ASR + CosyVoice-v3 实现。
技术栈
亮点
- 01
异步管线:Redis + RQ Worker 异步文档解析,不阻塞用户操作
- 02
RAG 检索:智能分块 + Chroma 向量检索 + SSE 流式输出 + 引用溯源
- 03
语音交互:Qwen3-ASR 语音识别 + CosyVoice-v3 语音合成
- 04
完整认证:JWT + 邮箱验证 + 密码重置 + 滑动窗口限流(30 req/min)
- 05
开源部署:Docker Compose 编排 6 服务,MIT 协议
成果
完整的私有知识库方案:支持 PDF/Markdown/TXT 三种格式,异步解析不阻塞主线程,多轮 RAG 对话带引用溯源,语音交互,JWT 认证 + 限流。Docker Compose 编排 6 个服务,MIT 开源。
反思与收获
这个项目是 Mock-Interview 的知识库模块独立出来的产物。独立之后反而做得更好——关注点分离让每个功能都能打磨到位。最有价值的经验是异步处理的设计:文档解析可能耗时几十秒,如果同步处理用户体验会很差,RQ Worker 的引入让上传变成了"提交即忘"的体验。
在 GitHub 查看→
异步文档处理 — 上传即返回,后台自动分块入库

RAG 回答带引用来源 — 每段回复标注出处文档和段落