返回作品
03

AskMyDocs

私有知识库问答系统

// Year

2026.02 – 2026.04

// Role

Full-Stack Developer

// Duration

2 months

AskMyDocs 对话界面

双栏布局 — 左侧知识库管理,右侧多轮对话

// Overview

一个你可以自己部署的知识库问答系统。上传 PDF、Markdown 或纯文本,系统自动分块、向量化、入库。之后用自然语言提问,它会从你的文档中检索相关内容,生成带引用来源的回答。支持语音输入输出,适合不想把数据交给第三方的场景。

// Challenge

挑战

文档解析的质量直接决定问答效果——分块太大会引入噪音,太小会丢失上下文。如何在不同格式(PDF 表格、Markdown 代码块、纯文本段落)之间找到统一的分块策略?另一个挑战是多轮对话的上下文管理,既要记住历史又不能让 prompt 爆掉。

// Approach

方案

异步文档处理管线:上传 → Redis 队列 → RQ Worker 异步解析 → 智能分块 → Chroma 向量化入库。多轮对话通过滑动窗口管理历史,每轮检索 top-k 相关片段拼入 prompt。SSE 流式输出保证响应的即时感,每段回答都标注引用来源。语音通过 Qwen3-ASR + CosyVoice-v3 实现。

// Tech Stack

技术栈

React 19TypeScriptVite 6FastAPIPostgreSQL 15ChromaDBRedis 7RQQwen3-ASRCosyVoice-v3Docker Compose
// Highlights

亮点

  • 01

    异步管线:Redis + RQ Worker 异步文档解析,不阻塞用户操作

  • 02

    RAG 检索:智能分块 + Chroma 向量检索 + SSE 流式输出 + 引用溯源

  • 03

    语音交互:Qwen3-ASR 语音识别 + CosyVoice-v3 语音合成

  • 04

    完整认证:JWT + 邮箱验证 + 密码重置 + 滑动窗口限流(30 req/min)

  • 05

    开源部署:Docker Compose 编排 6 服务,MIT 协议

// Result

成果

完整的私有知识库方案:支持 PDF/Markdown/TXT 三种格式,异步解析不阻塞主线程,多轮 RAG 对话带引用溯源,语音交互,JWT 认证 + 限流。Docker Compose 编排 6 个服务,MIT 开源。

// Reflection

反思与收获

这个项目是 Mock-Interview 的知识库模块独立出来的产物。独立之后反而做得更好——关注点分离让每个功能都能打磨到位。最有价值的经验是异步处理的设计:文档解析可能耗时几十秒,如果同步处理用户体验会很差,RQ Worker 的引入让上传变成了"提交即忘"的体验。

在 GitHub 查看
// Gallery
文档上传与解析

异步文档处理 — 上传即返回,后台自动分块入库

引用溯源

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