FHMinyi个人作品集
← 返回作品目录
项目手记 / 03 · 个人项目

Knowledge Hub

个人知识库与问答

把文档管理、混合检索与问答放在一起,支持从回答回到原始文档查看来源。

技术栈

  • TypeScript
  • NestJS
  • React
  • LangChain
  • Elasticsearch
  • PostgreSQL
  • Redis
  • RabbitMQ
  • AI SDK
文档工作台 · 演示数据
01 / MY WORK

我的工作

这是我负责前后端的个人项目。前端使用 React 与 Ant Design,后端使用 NestJS;我实现了文档管理、发布后的索引处理、混合检索,以及带来源信息的问答界面。

完成文档管理前后端

实现列表、编辑、发布、下架与文件解析入口,并把个人、团队和公开文档的可见性带进页面与接口。

串起文档到检索的处理链路

发布后通过消息队列触发全文索引、分块和向量索引;问答侧组合关键词召回、向量召回、结果融合与重排。

做可追溯的问答体验

前端呈现会话、流式消息、工具状态和来源;后端组织检索与回答,在没有相关资料时返回明确说明,并为引用保留文档与片段信息。

02 / CONTEXT

业务背景

我希望把文档管理和知识库问答放在同一个项目里:文档有草稿、发布和权限,问答也要遵守这些边界。重点不仅是让模型回答,还包括文件怎么入库、哪些内容可以被检索、没有足够资料时怎么办。

03 / PROCESS

核心流程

  1. 01

    文档解析与发布

    文件先进入文档管理流程。发布后触发后续索引任务,下架或删除时也有对应的索引删除消息。

  2. 02

    按用户范围检索

    问题同时进入关键词与向量召回;候选结果按排名融合,再按配置进行相关性重排与过滤。两条召回路径都携带可见性条件。

  3. 03

    回答并保留来源

    检索结果交给回答流程,前端展示消息与引用。用户可以从回答回到对应文档;检索无相关内容时明确说明。

回答里的 [2],从哪段原文来?

回答里的 [2],从哪段原文来?发布前要做什么检查?可读范围公开 / 本人 / 本团队关键词检索向量近邻检索排名融合 · 重排筛选送入回答的资料片段[1] 项目指南 · 版本命名[2] 研发手册 · 发布检查回答运行回归测试。[2][2] 原文摘录同一编号定位来源卡,再按文档 ID 打开原文。
图 03 · 机制速写
以普通团队成员的一次问答为例。两路检索都按公开、作者本人和所属团队过滤。命中的片段获得编号,回答中实际使用的编号决定展示哪些来源卡。
04 / ENGINEERING

技术难点

01

两种检索的分数不能直接相加

关键词搜索擅长精确词,向量检索擅长语义,但两者的分数并不是同一个尺度。只用其中一种会受问题表达影响,直接加分也不合理。

我并行取两路候选,用 RRF 按排名融合,不直接混加原始分数;随后调用可配置的重排服务,按相关性阈值过滤。查询向量化失败时退回关键词检索,重排未配置或调用失败时保留融合结果。

关键词与语义检索共同提供候选内容,融合后再按相关性筛选;向量化或重排服务不可用时,仍有明确的检索路径。

02

问答不能绕过文档权限

前端把私有文档隐藏,并不能阻止检索把内容送给模型。文档可见范围发生变化后,旧索引也可能继续保留旧条件。

我把公开、作者本人、所在团队的访问范围统一成检索条件,分别带到关键词查询与向量 KNN 查询中。已发布文档调整可见性时同步索引里的权限字段,不为了权限变化重跑向量化;发布与下架通过消息管线连接索引生命周期。

公开、个人与团队的可见范围直接参与检索,文档发布、下架和权限修改也有对应的索引处理。问答与文档管理共用访问规则。

05 / RESULTS

项目成果

  • 连通文档管理与知识问答

    完成文档编辑、发布、文件解析、全文搜索和 RAG 问答。用户可以整理资料,再围绕这些资料发起会话。

  • 把回答连接到原始资料

    问答界面同时呈现流式回答和来源引用,保留文档与片段信息,方便继续阅读和核对上下文。

  • 让检索遵守文档可见范围

    将公开、个人和团队权限带进关键词与向量检索,并处理发布、下架和权限变更后的索引更新。

下一个项目词见↗