不是笔记软件,不是套壳聊天机器人。KnowFusion 帮助你发现不同信息之间的隐藏关联——自己动手实现 RAG、Function Calling、Memory 三大 Agent 核心底层机制。
- 自研 RAG Pipeline:从 Chunking → Embedding → Hybrid Search → Rerank 完整实现,不做 LangChain 的奴隶
- Agent Tool Loop:自实现 Function Calling 编排,最多 5 轮工具调用循环
- 三层记忆架构:会话上下文(滑动窗口+摘要压缩)+ 用户知识画像 + 知识关联图谱
- 思维链可视化:SSE 流式展示 Agent 的思考过程,让用户"看见" Agent 如何工作
- Monorepo 架构:pnpm + Turborepo,严格的 TypeScript 类型覆盖
| 层级 | 技术 | 说明 |
|---|---|---|
| 工程化 | pnpm + Turborepo + TypeScript 5.4 | Monorepo,8 个子包 |
| 前端 | React 18 + Vite + Tailwind CSS + Zustand + ECharts | SPA,知识图谱力导向图 |
| 后端 | NestJS 10.3 + Fastify | 模块化架构,SSE 流式响应 |
| 数据 | PostgreSQL 16 + pgvector + Redis + Qdrant | 向量检索 + 关系存储 |
| AI | OpenAI/Anthropic Adapter + BGE Reranker | 自研 Adapter 层,可切换模型 |
| 部署 | Docker Compose + GitHub Actions CI/CD | 一键启动,自动构建 |
knowfusion/
├── packages/
│ ├── shared/ 共享 TypeScript 类型与常量
│ ├── llm/ LLM Adapter (OpenAI/Anthropic) + ToolRegistry
│ ├── rag-core/ RAG Pipeline: 分块 → 向量化 → 混合检索 → 重排序
│ ├── memory/ 会话缓冲 + 用户画像 + 知识图谱构建器
│ └── ingestors/ 多源文档解析 (Markdown/PDF/网页) + 文本清洗
├── apps/
│ ├── server/ NestJS 后端:Agent 编排 / 文档摄入 / 认证
│ └── web/ React 前端:知识库 / Agent 对话 / 知识图谱
├── docker/ PostgreSQL + Redis + MinIO + Qdrant
└── .github/workflows/ CI: lint → typecheck → build → deploy
- Node.js >= 20
- pnpm >= 9
- Docker Desktop
git clone https://github.com/your-username/knowfusion.git
cd knowfusionpnpm installpnpm docker:up这会启动 PostgreSQL、Redis、MinIO (对象存储) 和 Qdrant (向量数据库)。
cp .env.example .env
# 编辑 .env,填入你的 OPENAI_API_KEYcd apps/server
npx prisma generate
npx prisma db push # 推荐路径
cd ../..Windows + Docker Desktop 注意:如果
prisma db push报P1000 ... credentials for (not available)而psql直连正常,这是 Docker Desktop 在 Win 11 26200 下对 Postgres 容器端口的握手问题(已观察到 TCP 三次握手成功但 startup 包被丢)。临时替代方案:# 直接把 SQL schema 推到 Postgres,绕开 Prisma 引擎 docker cp apps/server/prisma/init.sql knowfusion-pg:/tmp/init.sql docker exec knowfusion-pg psql -U knowfusion -d knowfusion -f /tmp/init.sql # 然后在 apps/server/.env 里设 PRISMA_STUB=1 让 server 用内存 stub 启动
pnpm dev前端 → http://localhost:5173
后端 → http://localhost:3000
如果不配置 OPENAI_API_KEY 或设为 demo,Agent 会进入 Demo 模式,使用模拟数据展示完整的 Tool Loop 流程。前端知识库也会加载 6 篇 Demo 文档。
pnpm dev # 仅前端可运行, 展示 Demo 页面
pnpm dev:web # 只启动前端| 命令 | 说明 |
|---|---|
pnpm dev |
启动前后端开发服务器 |
pnpm dev:web |
仅启动前端 |
pnpm dev:server |
仅启动后端 |
pnpm build |
构建所有包 |
pnpm test |
运行 63 个单元测试 |
pnpm typecheck |
TypeScript 类型检查(8 包全量) |
pnpm lint |
ESLint 代码检查 |
pnpm docker:up |
启动 Docker 基础设施 |
pnpm docker:down |
停止 Docker 服务 |
pnpm test
# Test Files 11 passed (11)
# Tests 63 passed (63)覆盖范围:
- SemanticChunker (7 tests) — 分块策略、空文档、超大段落
- HybridRetriever (4 tests) — RRF 融合算法验证
- ConversationBuffer (5 tests) — 消息管理、截断、摘要压缩
- ToolRegistry (8 tests) — 注册/执行/确认/卸载/异常
- TextCleaner (7 tests) — HTML/空白/编码/实体/URL 清洗
- AuthService (7 tests) — 注册、登录、刷新、错误路径
- KnowledgeCardService (5 tests) — 增删改查、用户隔离
- IngestionService.getStatus (3 tests) — 状态映射、回归保护
- JwtAuthGuard (4 tests) — 真验签、伪造拒绝、Optional 模式
- url-fetcher (6 tests) — HTML→Markdown、og:title、entity 解码、错误分支
- knowledge-tools (7 tests) — 真 RAG/Graph/save_insight tool handler 行为
User Browser (React SPA)
│ SSE / HTTP
▼
API Gateway (NestJS + Fastify)
│
├─→ AgentOrchestrator (Tool Loop, max 5 steps)
│ ├─→ RAGPipeline
│ │ ├─→ SemanticChunker ← 按段落+标题的语义分块
│ │ ├─→ EmbeddingService ← OpenAI / bge-large-zh
│ │ ├─→ HybridRetriever ← Dense Vector + BM25 (RRF融合)
│ │ └─→ BGE Reranker ← Cross-encoder 精排 Top-30→Top-5
│ ├─→ ConversationBuffer ← 滑动窗口 + 摘要压缩
│ ├─→ UserProfileManager ← 标签权重衰减
│ ├─→ KnowledgeGraphBuilder ← 实体+关系 BFS 查询
│ └─→ LLM Adapter ← OpenAI / Anthropic 流式
│
├─→ Ingestion Pipeline
│ ├─→ MarkdownParser (PDF/Webpage 可扩展)
│ ├─→ TextCleaner
│ ├─→ BullMQ Queue (异步处理)
│ └─→ QdrantService (向量存储)
│
└─→ Storage Layer
├─→ PostgreSQL 16 + pgvector
├─→ Redis (缓存 + 会话)
├─→ Qdrant (向量检索)
└─→ MinIO (文件存储)
本项目配套 6 篇技术深度文章:
- 从 0 到 1:我用 pnpm+Turborepo 搭了一个 AI Agent Monorepo
- 拒绝 LangChain:手写 LLM Adapter 的正确姿势
- RAG 分块策略深度对比——语义分块 vs 固定截断
- Hybrid Search 融合:当向量检索遇上 BM25
- Agent Tool Loop:从零实现 Function Calling 编排
- 让用户看见思考——Agent 思维链流式可视化的前端实践
MIT