用户上传产品手册、FAQ、制度文档等资料,系统自动建立检索索引;随后可用自然语言提问,系统基于知识库内容生成回答,并附带引用来源与相关度。知识库中没有相关内容时明确提示,不编造答案(防幻觉)。
核心链路:文档上传 → 解析 → 切块 → 向量化入库 → 用户提问 → 向量检索召回 → 组装上下文 → LLM 生成 → SSE 流式返回。
技术栈:Python 3.13 · FastAPI · pydantic · httpx · numpy · 原生 HTML/CSS/JS(无构建、无 CDN)。
功能与业务实现描述1. 登录与访客进入
业务功能:进入工作台前的访问门槛;支持账号登录或「访客进入」一键使用。
实现方式:前端用 localStorage 维护会话标记(askbase_auth),登录表单/访客按钮触发进入工作台。演示环境不接真实鉴权(可平滑替换为后端 JWT/会话鉴权)。
2. 知识库文档上传
业务功能:上传产品手册、FAQ、制度文档(txt/md/pdf/docx),自动建立检索索引,上传后即可提问。
实现方式:前端 multipart 上传 → POST /api/documents → extract_text() 按扩展名解析 → chunk_text() 切块(优先按段落聚合到 500 字、超长硬切并保留 50 字 overlap)→ 批量向量化 → store.add_document() 持久化到 data/store.json 与 data/vectors.json。
3. 文档管理(列表 / 删除)
业务功能:查看已入库文档及入库时间;删除某文档时同步清除其索引片段。
实现方式:GET /api/documents 返回文档元信息;DELETE /api/documents/{id} 同时删除对应 chunks 与 vectors 并写回磁盘。
4. RAG 智能问答(流式)
业务功能:用自然语言提问,系统基于知识库作答,回答以流式逐字呈现(体验更接近真实产品)。
实现方式:POST /api/chat → 检索召回 top_k 个最相关片段 → 组装带编号的上下文 → 调用大模型生成 → 通过 SSE 依次下发 sources → delta×N → done 事件;前端用 fetch + ReadableStream 手动解析 SSE 并逐片渲染。
5. 引用溯源
业务功能:回答下方展示「来源文档 + 片段原文 + 相关度」,让结果可查证、可信。
实现方式:后端将命中片段(含 doc_name、text、score 余弦相似度)随 SSE 的 sources 事件下发;前端渲染为可折叠引用卡片,并画出相关度百分比进度条。
6. 防幻觉兜底
业务功能:知识库中没有相关内容时,明确回答「资料中没有找到」,而非编造答案。
实现方式:检索结果先经 similarity_threshold(默认 0.15)过滤;无命中时直接返回固定兜底文案,不进入 LLM 生成环节。
7. 模型与检索参数设置
业务功能:可视化配置模型接口地址、模型名、API Key,以及分块大小、重叠长度、召回数 Top-K、相似度阈值。
实现方式:GET /api/settings 返回当前配置(API Key 只返回「是否已配置」);POST /api/settings 将参数写入项目根 settings.json,config.py 在启动时加载该文件