剪藏#Jack Bytes#剪藏

手把手教大家部署这个开源 AI 工具!太强了。。。支持碎片知识整理、知识图谱!

2026 年 4 月 25 日1 分钟
分享Twitter / XTelegram微博

大家好,我是 Jack Bytes,一个专注于将人工智能应用于日常生活的程序猿,平时主要分享 AI、NAS、开源项目等。

兄弟们,你们是不是阅读了大量文章,但是过了一两天就回想不起来了?

明明自己摄取了很多知识,但却始终无法串起来,这些知识在大脑中存在,但却不知如何运用。

造成这个问题最主要的原因是我们每天获取了大量碎片化的知识,却没办法将其整理成个人的知识体系。

今天,手把手教大家部署一个 AI 功能,能够收藏你阅读过的文档、并自动整理成知识图谱!让你通过可视化的方式构建知识体系

下面一起来看下吧!

一、什么是SparkNoteAI

知语拾光 · 让知识如光般照亮你的世界

SparkNoteAI 是一个现代化的知识整理与管理系统,融合了大模型智能总结、知识图谱可视化和多平台内容采集能力。帮助你从碎片化信息中构建结构化知识体系。

目前支持Web 端、桌面端、手机端,通过后端服务实现三端互通!

Notion image

具备如下功能特点:

  • 笔记管理:Markdown 编辑器、实时预览、标签分类、笔记导出(ZIP)

  • 碎片化内容采集: 支持微信公众号、小红书多平台导入,后台任务队列异步处理

  • 知识图谱: LLM 智能提取概念与关系,2D 力导向图可视化,构建状态实时轮询

  • AI助手: 支持 多 LLM 提供商支持(OpenAI / Anthropic / Azure / 阿里云),可切换模型

同时具备可扩展的架构设计、安全机制、主题切换,最终的是支持本地部署

项目地址(Github):spark-ai-boy/SparkNoteAI

二、部署

接下来,手把手教大家在腾讯云上部署这个开源项目。

2.1 准备部署环境

在部署之前,需要先创建一个服务器。

可以通过下面的链接购买服务器,限时99/年,也可以点击原文直接购买:

https://curl.qcloud.com/6zr7XNOj

Notion image

服务器创建完成之后,就可以在控制台看到了:

Notion image

进入到服务器详情页,把服务器的操作系统重装为 ubuntu:

Notion image

等系统重装完成之后,通过 ssh 登录到服务器,执行下面命令安装宝塔面板:

JAVASCRIPT
if [ -f /usr/bin/curl ];then curl -sSO https://download.bt.cn/install/install_panel.sh;else wget -O install_panel.sh https://download.bt.cn/install/install_panel.sh;fi;bash install_panel.sh ed8484bec

宝塔面板安装完成之后,进入到面板首页(注意需要在腾讯云对应服务器的防火墙放行宝塔面板的端口):

Notion image

点击进入到 Docker 页面,并点击立即安装:

Notion image

安装完成之后,所依赖的环境就准备好了。

2.2 部署SparkNodeAI

在宝塔的 Docker 页面点击「容器编排」,并点击添加容器编排:

Notion image

在弹出的页面中依次填写「编排名称」、「Compose 内容」、「.env内容」:

Notion image

其中「Compose 内容」按如下填写:

JAVASCRIPT
# 生产环境 Docker Compose 配置
# 包含前端 + 后端 + 数据库 + Redis + Neo4j
# Nginx 内置反向代理:/api 自动转发到后端,无需额外配置

services:
# ==================== 前端服务 ====================
frontend:
    image:sparknoteai/frontend:${APP_VERSION:-latest}
    container_name:sparknoteai-frontend
    ports:
      -"20080:80"
    depends_on:
      backend:
        condition:service_healthy
    networks:
      -sparknoteai-network
    restart:unless-stopped
    labels:
      -"com.sparknoteai.service=frontend"

# ==================== 后端服务 ====================
backend:
    image:sparknoteai/backend:${APP_VERSION:-latest}
    container_name:sparknoteai-backend
    ports:
      -"8000:8000"
    environment:
      # 注意:不使用 env_file,避免 APP_VERSION 覆盖 Docker 镜像构建时的版本号
      -DATABASE_URL=postgresql://${POSTGRES_USER:-sparknoteai}:${POSTGRES_PASSWORD}@db:5432/${POSTGRES_DB:-sparknoteai}
      -REDIS_URL=redis://:${REDIS_PASSWORD}@redis:6379/0
      -SECRET_KEY=${SECRET_KEY}
      -ACCESS_TOKEN_EXPIRE_MINUTES=${ACCESS_TOKEN_EXPIRE_MINUTES:-10080}
      -ENCRYPTION_KEY=${ENCRYPTION_KEY}
      -COMPATIBLE_CLIENT_VERSIONS=${COMPATIBLE_CLIENT_VERSIONS:-}
      -ADMIN_USERNAME=${ADMIN_USERNAME:-admin}
      -ADMIN_PASSWORD=${ADMIN_PASSWORD}
      -ADMIN_EMAIL=${ADMIN_EMAIL:-admin@example.com}
      -NEO4J_URI=bolt://neo4j:7687
      -NEO4J_PASSWORD=${NEO4J_PASSWORD}
      -DEBUG=false
    volumes:
      -backend_uploads:/app/data/uploads
    depends_on:
      db:
        condition:service_healthy
      redis:
        condition:service_healthy
      neo4j:
        condition:service_healthy
    networks:
      -sparknoteai-network
    restart:unless-stopped
    healthcheck:
      test:["CMD","curl","-f","http://localhost:8000/api/health"]
      interval:30s
      timeout:10s
      retries:3
      start_period:40s
    labels:
      -"com.sparknoteai.service=backend"

# ==================== PostgreSQL 数据库 ====================
db:
    image:postgres:15-alpine
    container_name:sparknoteai-db
    env_file:
      -.env
    en
JAVASCRIPT
vironment:
      POSTGRES_DB:${POSTGRES_DB:-sparknoteai}
      POSTGRES_USER:${POSTGRES_USER:-sparknoteai}
      POSTGRES_PASSWORD:${POSTGRES_PASSWORD}
    volumes:
      -postgres_data:/var/lib/postgresql/data
      -./postgres/init.sql:/docker-entrypoint-initdb.d/init.sql:ro
    networks:
      -sparknoteai-network
    restart:unless-stopped
    healthcheck:
      test:["CMD-SHELL","pg_isready -U sparknoteai -d sparknoteai"]
      interval:10s
      timeout:5s
      retries:5
    labels:
      -"com.sparknoteai.service=database"

# ==================== Redis 缓存 ====================
redis:
    image:redis:7-alpine
    container_name:sparknoteai-redis
    env_file:
      -.env
    command:redis-server--appendonlyyes--requirepass${REDIS_PASSWORD}
    expose:
      -"6379"
    volumes:
      -redis_data:/data
    networks:
      -sparknoteai-network
    restart:unless-stopped
    healthcheck:
      test:["CMD","redis-cli","--pass","${REDIS_PASSWORD}","ping"]
      interval:10s
      timeout:5s
      retries:5
    labels:
      -"com.sparknoteai.service=redis"

# ==================== Neo4j 知识图谱 ====================
neo4j:
    image:neo4j:5-community
    container_name:sparknoteai-neo4j
    environment:
      -NEO4J_AUTH=neo4j/${NEO4J_PASSWORD}
      -NEO4J_PLUGINS=["apoc"]
      -NEO4J_dbms_security_procedures_unrestricted=apoc.*
    expose:
      -"7474"
      -"7687"
    volumes:
      -neo4j_data:/data
    networks:
      -sparknoteai-network
    restart:unless-stopped
    healthcheck:
      test:["CMD","wget","--no-verbose","--tries=1","--spider","http://localhost:7474/"]
      interval:15s
      timeout:10s
      retries:5
    labels:
      -"com.sparknoteai.service=neo4j"

# ==================== 数据卷 ====================
volumes:
# 后端
backend_uploads:

# 数据库
postgres_data:
redis_data:
neo4j_data:

# ==================== 网络 ====================
networks:
sparknoteai-network:
    driver:bridge

「.env内容」按如下填写:

JAVASCRIPT
# SparkNoteAI 环境变量配置
# 复制此文件为 .env 即可使用
#   开发环境:cp docker/.env.example docker/.env
#   生产环境:复制后修改密码和域名

# ==================== 版本配置 ====================
# APP_VERSION 由 Docker 镜像构建时写入(--build-arg),不需要在 .env 中设置
# 仅用于 docker-compose 的 image 标签引用
APP_VERSION=latest

# ==================== 应用配置 ====================
DEBUG=false

# ==================== 数据库配置 ====================
POSTGRES_USER=sparknoteai
POSTGRES_PASSWORD=sparknoteai123
POSTGRES_DB=sparknoteai

# ==================== Redis 配置 ====================
REDIS_PASSWORD=sparknoteai123

# ==================== Neo4j 配置 ====================
NEO4J_PASSWORD=sparknoteai123

# ==================== JWT 配置 ====================
# 生成方法:openssl rand -hex 32
SECRET_KEY=change-me-in-production
ACCESS_TOKEN_EXPIRE_MINUTES=10080

# ==================== 加密密钥 ====================
# 生成方法:openssl rand -base64 32
ENCRYPTION_KEY=change-me-in-production

# ==================== 客户端版本兼容 ====================
# 服务端兼容的客户端版本,多个用逗号分隔(空表示兼容所有版本)
COMPATIBLE_CLIENT_VERSIONS=

# ==================== 管理员账号 ====================
ADMIN_USERNAME=admin
ADMIN_PASSWORD=admin123
ADMIN_EMAIL=admin@example.com

有几点需要注意的:

  • SECRET_KEY需要实际执行这个命令生成,并替换到.env中:openssl rand -hex 32

  • ENCRYPTION_KEY需要实际执行这个命令生成,并替换到.env中:openssl rand -base64 32

  • 可以自行修改.env中的管理员信息

填写完成之后,点击保存,即可启动项目。出现下面内容表示启动成功:

Notion image

然后,需要在防火墙放行 20080 和 8000 端口。

这样,服务就部署好了。

2.3 web端

直接在浏览器输入http://ip:20080,即可访问 web 端界面:

Notion image

登录之后界面如下:

Notion image

可以在「设置」中配置大模型:

Notion image

然后在场景配置中,分别在「笔记管理」、「知识图谱」、「AI 助手」中选择刚才添加的大模型:

Notion image

接下来导入几篇文章看看:

Notion image

导入完成之后,就可以在笔记列表看到导入的内容了:

Notion image

同时系统也自动根据导入的笔记构建了知识图谱:

Notion image

在知识图谱界面,点击对应的实体概念(也叫做节点),能够在右侧显示出关联的笔记:

Notion image

除了支持导入笔记之外,还支持自己创建笔记:

Notion image

除此之外,SparkNoteAI还支持 AI 助手:

Notion image

2.4 桌面端

除了 web 端,SparkNoteAI还支持桌面端,可以在release页面下载:

Notion image

在桌面端可以设置后端服务器的地址:http://ip:8000

Notion image

在桌面端登录之后,所有数据会自动同步:

Notion image

知识图谱:

Notion image

2.5 手机端

由于 IOS 的封闭生态,目前手机端只支持安卓端下载,IOS 端需要大家自行编译。安卓端同样可以在release页面下载。

手机端也可以配置服务器地址:

Notion image

登录之后,可以看到刚才导入和创建的笔记:

Notion image

还有知识图谱:

Notion image

另外,大家在阅读公众号的时候,也可以直接把公众号文章分享到SparkNoteAI

Notion image

然后点击导入即可:

Notion image

极大的方便了大家将喜欢的文章快速收藏到SparkNoteAI,并自动构建知识图谱。

三、总结

针对大众普遍存在的碎片化知识难以沉淀、信息无法串联形成结构化知识体系的痛点,本文全面介绍了开源知识管理系统SparkNoteAI,并提供了保姆级的云端部署教程与全端使用指南。

大家感兴趣的话快去试试吧!

我是 Jack Bytes

一个专注于将人工智能应用于日常生活的半吊子程序猿!

平时主要分享 AI、NAS、Docker、搞机技巧、开源项目等技术,喜欢的话请关注吧!

Notion image

原文地址: https://mp.weixin.qq.com/s?__biz=Mzg4NTIyNTU0NQ==&mid=2247496860&idx=1&sn=d09251a954b8303edbe39912a5108bd4&chksm=cef02650fa24f918c9ad9cd651e77eaa8b65481bb52f6c478698784ed56fef35c50bf30bf8eb&mpshare=1&scene=1&srcid=0425NLa3dsRG2gaqTOgqBN91&sharer_shareinfo=35f1e3e1374d45458870858931d14603&sharer_shareinfo_first=35f1e3e1374d45458870858931d14603#rd

相关文章