Skip to content

Repository files navigation

knowflow · 企业 AI 知识库管理平台

knowflow 是面向企业/机构内部场景的 AI 知识库系统。它把分散在文档、对话、反馈里的业务知识沉淀为可检索、可问答、可治理的知识资产,让员工能快速得到带来源的答案,让管理员能持续维护知识质量,并通过后端权限校验保证知识库严格隔离。

当前代码中已实现这些主要模块:账号与权限、知识库管理、文档上传解析、RAG 问答、对话记忆、专家 Agent、知识自动提炼、统计治理。

技术栈   Next.js · NestJS · LangGraph.js · BullMQ + Redis · PostgreSQL + pgvector · Drizzle ORM · TypeScript
模型     阿里云百炼 DashScope(对话 / Embedding 1024 维 / Rerank / 知识生产 / 视觉 OCR),支持后台多供应商配置

课题覆盖度

本项目完整实现课题基础要求与全部加分项:

课题要求 实现情况 位置
基础要求
知识管理(创建/编辑/删除/检索/状态) ✅ 完整实现 一、项目能力
知识消费(专家 Agent 对话) ✅ 完整实现 一、项目能力 · 第 45 行
加分项
自动提炼新知识形成闭环 ✅ 完整实现 一、项目能力 · 第 44 行
多模态知识(图片OCR) ✅ 完整实现 一、项目能力 · 第 40 行 + 常见问题
知识使用热度统计与可视化 ✅ 完整实现(图表展示) 一、项目能力 · 第 46 行
一键生成专家 Agent ✅ 完整实现(AI 自动生成) 一、项目能力 · 第 45 行

详细工程实现见 TECH.md,协作规则见 AGENTS.md.

演示视频

https://www.bilibili.com/video/BV1Wi7D6aEDb/


目录

  1. 项目能力
  2. 系统架构与关键实现
  3. 快速开始
  4. 目录结构
  5. 常见问题
  6. 协作说明
  7. 技术栈一览
  8. 开发过程

一、项目能力

knowflow 围绕知识的生产、管理、消费、治理构建完整闭环。

能力 说明
账号与权限 超级管理员 / 部门管理员 / 普通用户三级角色;知识库支持公开 / 部门 / 受限三层可见范围;权限由后端兜底校验。
知识库与文档 支持建库、上传 PDF / DOCX / TXT / MD / CSV / Excel / 图片,异步解析、父子分段、向量化入库,处理进度实时可见。
RAG 智能问答 基于 LangGraph 固定图执行问答流程,三路召回、真实 Rerank、父子块扩展、Token 预算、流式回答、引用来源与可信度分级。
对话与记忆 多轮对话持久化;短期窗口(最近 6 条原文)+ 异步滚动摘要(早期对话自动压缩)双层记忆架构,让 Agent 能理解上下文;摘要完全异步生成不阻塞回答,支持会话归档。
知识条目 面向人工维护的知识卡片 / FAQ,支持草稿、审核、发布、下架、归档、过期等状态。
知识自动提炼 从文档、点踩、纠错、无答案缺口中生成候选知识,经人工审核后入库;AI 只生成候选,不直接写正式库。
专家 Agent 支持全局助手、知识库官方 Agent、个人 Agent,并可基于知识库一键 AI 生成(自动生成名称、描述、系统提示、开场白、推荐问题)。
统计与治理 提供使用热度可视化(图表展示文档/条目/Agent 使用趋势)知识关系思维导图(AI 自动生成主题节点,管理员可编辑并发布)、检索测试、操作审计日志(完整筛选与查询)知识库回收站(软删除支持恢复) 等治理能力。

二、系统架构与关键实现

Monorepo 布局

apps/web          Next.js App Router 前端,负责页面、组件、交互状态与 API 调用
apps/api          NestJS 后端 + BullMQ Worker,负责接口、权限、RAG、文档处理、任务队列
packages/shared   前后端共享类型、DTO、常量、Zod schema
packages/db       Drizzle schema、migrations、db client、seed
docker-compose    仅启动 PostgreSQL(pgvector) + Redis;web/api/worker 本机 pnpm 运行

packages/shared 是前后端契约的单点来源,packages/db 被 API、Worker 和 seed 脚本共同复用。

后端领域模块

auth             登录 / Session / 三层权限 / 登录失败锁定 / CSRF
department       部门组织与归属
knowledge-base   知识库 CRUD / 成员 / 可见范围 / 知识条目 / 审核台 / 自动提炼
document         上传 / 解析 / 分段 / 向量化 / 进度回推
retrieval        三路召回 / Rerank / 父子扩展 / Token 预算 / 检索测试
agent            LangGraph 问答运行时 / 对话记忆 / 会话归档
model            模型供应商 / 用途映射 / 加密 Key / 热切换
analytics        使用热度统计
health           健康检查

关键设计与核心实现

README 只保留总览;完整的「设计意图 -> 实现要点 -> 关键代码位置」见 TECH.md

技术支柱 核心实现 深入阅读
权限隔离 后端 Guard + SQL 前置过滤;私有 / 部门 / 公开知识库严格隔离。 TECH.md
文档处理链路 BullMQ Worker + Redis Pub/Sub + SSE 进度回推;传入队 → 认领解析 → 文本清洗 → 父子分段 → 批量向量化 → 标记完成 → 触发知识提炼;断连时轮询兜底。 TECH.md
RAG 检索链路 向量 + Full Text Search + 知识条目三路召回 -> 合并去重 -> DashScope Rerank -> 父子扩展 -> Token 预算。 TECH.md
LangGraph 编排 12 个固定节点:加载 Agent、校验权限、解析知识范围、加载记忆、检索、构建提示词、流式回答、引用、置信度、trace。 TECH.md
对话记忆 最近 6 条消息同步注入;早期对话由 Worker 异步生成滚动摘要;全部按不可信背景注入,防 Prompt Injection。 TECH.md
知识生产闭环 文档导入、点踩、纠错、无答案信号 -> 候选任务 -> 审核通过 -> 发布知识条目 -> 纳入 RAG。 TECH.md
模型与向量空间 chat / embedding / rerank / knowledge_production 等用途映射;pgvector 统一 vector(1024) 并强校验维度。 TECH.md

三、快速开始

前置依赖

  • Node.js 22+
  • pnpm 10+
  • Docker(仅用于 PostgreSQL + Redis)
  • 阿里云百炼 DashScope API Key(用于对话、Embedding、Rerank、知识生产;图片 OCR 需额外配置 OCR 用途模型)

环境变量

复制环境变量模板:

cp .env.example .env

重点检查:

变量 用途 说明
DATABASE_URL PostgreSQL 连接 需与 docker compose 端口一致。
REDIS_URL Redis 连接 Worker、队列、进度回推依赖 Redis。
SESSION_SECRET Session 签名 本地开发也必须配置。
MODEL_API_KEY_ENCRYPTION_KEY 模型 Key 加密 32 字节 base64。
ALIYUN_API_KEY 默认模型供应商 Key seed 会写入默认模型配置。
SEED_ADMIN_USER 初始超管账号 首次登录使用。
SEED_ADMIN_PASSWORD 初始超管密码 首次登录使用。

启动步骤

# 1. 安装依赖
pnpm install

# 2. 启动基础设施:PostgreSQL(pgvector) + Redis
docker compose up -d postgres redis

# 3. 执行迁移并写入种子数据
pnpm seed

# 4. 启动 api + web + worker
pnpm dev:all

启动后访问:

服务 地址
Web 前端 http://localhost:3000
API http://localhost:4000
健康检查 http://localhost:4000/health

默认登录使用 .env 中的 SEED_ADMIN_USER / SEED_ADMIN_PASSWORD。seed 还会创建部门管理员、普通用户、默认部门、演示知识库骨架、模型供应商与用途映射。

注意:pnpm dev:all 会同时启动 api、web、worker。Worker 是文档处理、知识自动提炼、定时扫描、对话摘要的执行进程。只运行 pnpm dev 会启动 api + web,但不会启动 worker。

质量检查

本地检查命令与 CI 保持一致:

pnpm lint
pnpm typecheck
pnpm build

提交前至少确保 lint、typecheck、build 通过。功能验收还需要真实启动应用,按演示路径走一遍关键流程。

常用脚本

命令 作用
pnpm dev:all 一键启动 api + web + worker,推荐用于开发和演示。
pnpm dev 仅启动 api + web,不包含 worker。
pnpm seed 执行迁移并写入种子数据。
pnpm db:migrate 仅执行数据库迁移。
pnpm db:generate 由 Drizzle schema 生成迁移文件。
pnpm --filter @knowflow/api worker 单独启动 Worker 进程。

四、目录结构

apps/web/src/app                      前端页面与路由
  ├── _components/                    公共前端组件
  ├── _hooks/                         自定义 React Hooks
  ├── admin/                          管理后台页面(部门、用户、操作审计)
  ├── agents/                         专家 Agent 页面(列表、详情、对话)
  ├── knowledge-bases/                知识库主页面(列表、详情、文档、条目、统计)
  ├── login/                          登录页面
  └── models/                         模型配置后台页面

apps/api/src/modules                  NestJS 领域模块
  └── domains/                        业务领域模块集合
      ├── auth/                       登录、Session、三层权限、CSRF
      ├── department/                 部门组织与归属
      ├── knowledge-base/             知识库 CRUD、成员、可见范围、知识条目、自动提炼
      ├── document/                   文档上传、解析、分段、向量化、进度回推
      ├── retrieval/                  三路召回、Rerank、父子扩展、检索测试
      ├── agent/                      LangGraph 问答运行时、对话记忆、会话归档
      ├── model/                      模型供应商、用途映射、加密 Key、热切换
      ├── analytics/                  使用热度统计
      └── health/                     健康检查

apps/api/src/worker.ts                Worker 入口:文档处理、知识提炼、定时扫描、对话摘要
apps/api/src/scripts/                 维护脚本
apps/api/src/shared/                  后端共享工具(decorators、guards、filters)

packages/shared/src                   前后端共享契约
  ├── schemas/                        Zod schema 与 DTO 定义
  ├── constants/                      常量枚举(权限、状态、错误码)
  └── types/                          TypeScript 类型定义

packages/db/src                       数据库层:schema、seed、client、加密工具

五、常见问题

文档一直不解析

优先确认 Worker 是否运行。文档解析、分段、向量化、知识自动提炼都依赖 Worker。推荐使用:

pnpm dev:all

或单独启动:

pnpm --filter @knowflow/api worker

Redis 6379 端口在 Windows 上启动失败

如果 docker 报 bind: ...forbidden,可能是 6379 落入 Windows 保留端口段。可以把 .env 中的 REDIS_PORT / REDIS_URL 改到范围外端口,例如 16379,并重新启动 docker compose。

图片 OCR 不工作

图片解析依赖模型配置中的 ocr 用途模型。seed 默认配置了对话、Embedding、Rerank、知识生产等用途,但 OCR 可能需要在模型配置后台单独启用。

支持的图片场景:整图上传(PNG/JPG)、扫描件 PDF(逐页渲染 OCR)、PDF 内嵌图片、DOCX 内嵌图片。

Rerank 失败是否会导致问答失败

不会。检索服务会尝试调用 DashScope Rerank;如果 Rerank 失败,会兜底使用初排结果,避免整个问答链路中断。

AI 会不会直接把错误知识写入正式库

不会。知识自动提炼只生成候选,必须由管理员审核通过后才会发布为正式知识条目并进入 RAG 检索。


六、协作说明

本项目由本人与多 AI Agent 在统一规则下串行协作开发:

角色 职责 边界
人类负责人 把控产品方向、架构决策、需求边界与最终合并。 --
Claude Code主控 需求澄清、PRD、任务拆解、API 契约、最终审查。 不作为主要前后端实现方
Codex后端/Code审查 后端接口、数据库 schema、权限、RAG、文档处理/检索、测试与工程配置。 不大改正式前端页面与视觉
Gemini前端/Claude Code前端
Gemini审查/Claude Code审查
前端页面、组件、路由、交互状态、前端 API 调用、浏览器端验证。 不改后端核心 / schema / 权限 / RAG 逻辑
Trellis PRD、任务、spec、上下文沉淀。 --

完整协作规则、分支策略、审查流程与 Definition of Done 见 AGENTS.md。长期技术约定见 CONTEXT.md


七、技术栈一览

选型
前端 Next.js(App Router)· React · shadcn/ui · Radix UI · Tailwind
后端 NestJS · LangGraph.js(Agent 运行时)
异步 BullMQ + Redis(任务队列 / 定时 / Pub-Sub)
存储 PostgreSQL + pgvector(向量 1024 维)+ Full Text Search(关键词)· Drizzle ORM · 本地文件存储
模型 阿里云百炼 MaaS(对话 / Embedding 1024 维 / Rerank / 知识生产 / 视觉 OCR),后台多供应商热切换
工程 pnpm workspace · TypeScript strict · ESLint + Prettier · husky / lint-staged · GitHub Actions CI

八、开发过程

本项目是本人首次尝试多agent协作开发的项目(之前都是单个agent开发)。使用一个claude code作为主控(cc主控),使用codex作为后端代码的实现以及审核,使用gemini和claude code来进行前端代码的编写和审查。三个agent共用同一份agent,这样在迭代过程中不会发生漂移。同时为了保证代码和审查质量,不允许自写自审。

流程:先让claude code使用grill-with-doc对我进行提问,确定一些边界情况,将得到的内容存进文档,接着再使用trellis的brainstorm 对我进行提问,得到我对项目更细节的描述。接着交由cc主控进行任务拆解和规划。产生handoff文档,并给出对应的prompt。我再交给codex或者gemini进行实现,完成后再交给另一个对话进行审查,每一个都会跑三件套。

目前与后续会继续探索多agent协作更优雅的方式。

About

一个 AI 知识库管理平台 (字节跳动2026工程训练营)

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages