Skip to content

Repository files navigation

KnowFusion — 跨源知识聚合与洞察 Agent

CI TypeScript pnpm NestJS React

不是笔记软件,不是套壳聊天机器人。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

1. 克隆项目

git clone https://github.com/your-username/knowfusion.git
cd knowfusion

2. 安装依赖

pnpm install

3. 启动基础设施

pnpm docker:up

这会启动 PostgreSQL、Redis、MinIO (对象存储) 和 Qdrant (向量数据库)。

4. 配置环境变量

cp .env.example .env
# 编辑 .env,填入你的 OPENAI_API_KEY

5. 初始化数据库

cd apps/server
npx prisma generate
npx prisma db push      # 推荐路径
cd ../..

Windows + Docker Desktop 注意:如果 prisma db pushP1000 ... 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 启动

6. 启动开发服务器

pnpm dev

前端 → http://localhost:5173
后端 → http://localhost:3000

Demo 模式(无需 API Key)

如果不配置 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 篇技术深度文章:

  1. 从 0 到 1:我用 pnpm+Turborepo 搭了一个 AI Agent Monorepo
  2. 拒绝 LangChain:手写 LLM Adapter 的正确姿势
  3. RAG 分块策略深度对比——语义分块 vs 固定截断
  4. Hybrid Search 融合:当向量检索遇上 BM25
  5. Agent Tool Loop:从零实现 Function Calling 编排
  6. 让用户看见思考——Agent 思维链流式可视化的前端实践

License

MIT

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages