Skip to content

yshtcn/AIBark

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

76 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

AIBark

English

AI 驱动的 Bark 消息推送中间层服务 + 跨平台桌面客户端。

项目简介

Bark 是一款支持个人部署服务端、以设备为基本推送目标的 iOS/macOS 推送工具。AIBark 在 Bark 之上构建了一个完全兼容的智能中间层,核心解决三个问题:

  1. 推送消息太原始 — 外部系统(监控告警、NAS 通知、定时任务)推来的消息往往冗长混乱。AIBark 通过 AI 自动改写为简洁的标题 + 摘要,并根据内容智能选择推送分组和优先级。
  2. 一个用户多台设备 — 原版 Bark 一个 key 对应一台设备,多设备需手动逐一推送。AIBark 引入用户 key(AU_)和用户组 key(AG_),一次请求广播到所有设备。
  3. Windows/Linux 没有 Bark — AIBark 提供桌面客户端,通过增量同步 API 在非 Apple 平台也能接收和浏览推送消息。

功能特性

服务端

  • 完全兼容 Bark API — 支持所有 Bark URL 格式和参数,可直接替换 Bark 服务端地址
  • AI 智能路由 — 根据消息内容自动分组(告警 / 新闻 / 系统通知 / 通用),每组独立的 AI 提示词和处理模型
  • AI 内容改写 — 将原始消息改写为适合移动端推送的标题 + 摘要格式,支持 {{original_body}} 等变量引用原文
  • 多模型支持 — 兼容所有 OpenAI 格式 API(GPT / Claude / GLM / Ollama 等),支持模型组 fallback / random 策略
  • 自定义 API 参数 — 模型配置中的 choices 字段支持任意参数,点号表示法自动展开为嵌套对象
  • 消息持久化 — 所有推送内容保存到 SQLite,点击通知可查看完整原文
  • 消息更新与召回 — 支持通过 Bark ID 更新已推送的通知内容,或从通知中心召回
  • 管理后台 — 内置 Web 管理界面:用户管理、AI 配置、消息历史、处理队列
  • MCP 协议 — 兼容 Bark MCP,可作为 AI Agent 的推送工具
  • Docker 部署 — 提供 Dockerfile 和 docker-compose,一键部署

桌面客户端

  • 系统托盘驻留 — 常驻右下角,单击显示/隐藏主窗口
  • 分组标签页浏览 — 以消息分组为标签页,按最新消息时间排序
  • 增量同步 — 以云端消息为主、推送为辅,本地仅做展示缓存
  • 通知弹窗 — 新消息桌面通知,点击打开对应消息
  • CLI 模式 — 打包后支持命令行查询消息

架构概览

外部调用方 (curl / MCP / 脚本 / App)
        │
        ▼
┌─────────────────────────────┐
│    AIBark Server (API)      │  ← 兼容 Bark URL 格式
│    ┌──────────────────────┐ │
│    │  Key 解析器          │ │  ← 区分设备key / 用户key / 组key
│    │  AI 路由器 (Step 1)  │ │  ← 关键词匹配 → AI 自动分组
│    │  AI 处理器 (Step 2)  │ │  ← 改写标题/内容/调整参数
│    │  Bark 推送 (Step 3)  │ │  ← 批量转发到 Bark 服务端
│    │  消息存储 (SQLite)   │ │  ← 持久化 + 查阅 URL
│    │  增量同步 API        │ │  ← 供桌面客户端拉取
│    └──────────────────────┘ │
└─────────┬───────────────────┘
          │
    ┌─────┴─────┐
    ▼           ▼
 iOS/macOS   Windows/Linux
 (Bark App)  (AIBark Client)

快速开始

Docker 部署(推荐)

# 1. 创建工作目录
mkdir aibark && cd aibark

# 2. 创建 docker-compose.yml
cat > docker-compose.yml << 'EOF'
services:
  aibark:
    image: your-registry/aibark:latest
    container_name: aibark-server
    ports:
      - "8000:8000"
    volumes:
      - ./config:/app/config
      - ./data:/app/data
    environment:
      - AIBARK_CONFIG_DIR=/app/config
      - AIBARK_DATA_DIR=/app/data
    restart: unless-stopped
EOF

# 3. 启动
docker-compose up -d

# 4. 打开浏览器完成初始设置
#    http://your-server:8000/setup

首次启动时,若 config/ 为空,会自动从内置样例复制默认配置并生成 admin key(记录在日志和 config/admin.json 中)。

本地运行

cd aibark-server

# 安装依赖(Python 3.12+)
pip install -r requirements.txt

# 启动(默认端口 8999,开发模式自动重载)
python -m uvicorn main:app --host 0.0.0.0 --port 8999 --reload

# 或使用脚本(Windows PowerShell)
.\run.ps1
.\run.ps1 -Port 9000 -NoReload

初始设置向导

首次访问 http://your-server/setup,设置:

  1. 服务端外网地址 — 用于生成消息查阅链接(如 https://aibark.example.com
  2. Bark 服务端地址 — 实际推送的目标 Bark 服务器(如 https://api.day.app 或你自建的地址)
  3. 管理员密钥 — 自动生成,用于登录管理后台

设置完成后访问 /admin/dashboard 登录管理后台。

API 使用

基本推送

AIBark 完全兼容标准 Bark 的 URL 格式:

# URL 路径格式
GET  /:key/:body
GET  /:key/:title/:body
GET  /:key/:title/:subtitle/:body

# GET 请求
curl "https://aibark.example.com/AU_abc123/推送内容?group=分组"

# POST JSON
curl -X POST "https://aibark.example.com/AU_abc123" \
     -H 'Content-Type: application/json' \
     -d '{"title": "标题", "body": "内容"}'

# /push 端点
curl -X POST "https://aibark.example.com/push" \
     -H 'Content-Type: application/json' \
     -d '{"device_key": "AU_abc123", "title": "标题", "body": "内容"}'

Key 类型

Key 类型 前缀 示例 说明
原版设备 key aBcDeFgH... 直接透传到 Bark 服务端,不经过 AI
用户 key AU_ AU_abc123 AI 处理后广播到该用户所有设备
用户组 key AG_ AG_team01 AI 处理后广播到组内所有用户的所有设备

AIBark 扩展参数

在标准 Bark 参数之上,AIBark 新增:

参数 说明 默认值
ai 设为 0 跳过 AI 处理,原文直接推送 1(启用)
ai_history 设为 1 将同分组历史消息作为上下文传给 AI 0

MCP 协议

{
  "servers": {
    "aibark": {
      "type": "http",
      "url": "https://aibark.example.com/mcp/{key}"
    }
  }
}

AI 消息处理流程

收到推送请求
    │
    ├─ 原版设备 key → 直接代理转发到 Bark
    │
    └─ 用户/组 key → 展开为所有目标设备
         │
    Step 1: 路由
         │  指定分组 → 直接使用
         │  分组映射 → 映射到系统分组
         │  关键词匹配 → 快速分组(无 AI 调用)
         │  以上都不匹配 → 调用路由 AI 选择分组
         │
    Step 2: 处理
         │  分组设置为 direct → 原文直发
         │  否则 → 调用处理 AI 改写标题/内容/参数
         │  支持 {{original_body}} 等变量引用原文
         │
    Step 3: 推送
         │  保存到 SQLite,生成查阅 URL
         │  设置 url 参数为查阅链接
         │  调用 Bark 批量接口推送到所有设备
         ▼
    推送完成

配置说明

所有配置文件位于 config/ 目录,JSON 格式。首次启动自动从 config-sample/ 复制。

admin.json — 系统设置

{
  "admin_key": "自动生成的管理员密钥",
  "setup_completed": true,
  "server_url": "https://aibark.example.com",
  "bark_server": "https://api.day.app"
}

users.json — 用户管理

{
  "user1": {
    "aibark_key": "AU_example_key",
    "bark_url": [
      "https://api.day.app/device_key_1",
      "https://api.day.app/device_key_2"
    ],
    "nickname": "用户一",
    "default_Router": "",
    "default_MessageHandler": ""
  }
}
  • bark_url:该用户所有设备的 Bark 推送地址,支持不同 Bark 服务器
  • default_Router / default_MessageHandler:用户级别的模型组覆盖

groups.json — 用户组

{
  "family": {
    "aibark_key": "AG_family_group",
    "user_ids": ["user1", "user2"]
  }
}

models.json — AI 模型配置

{
  "models": {
    "gpt4o-mini": {
      "model": "gpt-4o-mini",
      "API_type": "OpenAI",
      "url": "https://api.openai.com/v1/chat/completions",
      "API_key": "sk-your-api-key",
      "timeout": 30,
      "choices": {
        "response_format": "json_object"
      }
    },
    "glm-4.7-nothink": {
      "model": "glm-4.7",
      "API_type": "OpenAI",
      "url": "https://open.bigmodel.cn/api/coding/paas/v4/chat/completions",
      "API_key": "your-api-key",
      "timeout": 120,
      "choices": {
        "response_format": "json_object",
        "thinking.type": "disabled"
      }
    },
    "local-ollama": {
      "model": "qwen2.5:7b",
      "API_type": "OpenAI",
      "url": "http://localhost:11434/v1/chat/completions",
      "API_key": "ollama",
      "timeout": 120,
      "choices": {
        "response_format": "json_object",
        "options.temperature": 0.7
      }
    }
  },
  "model_Group": {
    "default_group": {
      "type": "random",
      "models": ["gpt4o-mini", "glm-4.7-nothink"]
    },
    "fast_group": {
      "type": "fallback",
      "models": ["gpt4o-mini", "local-ollama"]
    }
  },
  "default_Router": "default_group",
  "default_MessageHandler": "default_group"
}

模型组策略:

  • random:随机选择一个模型,失败后尝试其余
  • fallback:按顺序逐个尝试,第一个成功即停止

choices 自定义参数:

choices 中的所有字段会合并到 API 请求 payload。支持点号表示法自动展开为嵌套对象:

{"thinking.type": "disabled"}     → 发送为 {"thinking": {"type": "disabled"}}
{"options.temperature": 0.7}      → 发送为 {"options": {"temperature": 0.7}}
{"response_format": "json_object"} → 发送为 {"response_format": {"type": "json_object"}}

适用于不同 AI 服务商的特有参数(GLM thinking 开关、Ollama options 等)。

prompts.json — AI 分组与提示词

{
  "router": {
    "system_prompt": "路由器系统提示词...",
    "model_group": "default_group",
    "group_mapping": {
      "stock": "finance",
      "crypto": "finance"
    }
  },
  "groups": {
    "alerts": {
      "description": "告警和监控类消息",
      "keywords": ["alert", "告警", "error"],
      "handler_model_group": "default_group",
      "use_history": false,
      "handler_prompt": "你是一个告警消息处理器...",
      "default_params": {
        "level": "timeSensitive",
        "sound": "glass"
      }
    }
  }
}

路由优先级: 指定分组 → 分组映射 → 关键词匹配 → AI 路由

分组配置项:

  • description:分组描述(AI 路由时参考)
  • keywords:关键词列表,用于快速分组(无需调用 AI)
  • handler_model_group:该分组使用的模型组(设为 direct 则跳过 AI 原文直发)
  • use_history:是否将同分组历史消息作为上下文
  • handler_prompt:AI 处理提示词(描述角色和规则即可,JSON 输出格式由系统自动附加)
  • default_params:默认 Bark 推送参数(level / sound / badge 等)

管理后台

访问 /admin/dashboard,使用 admin_key 登录。

功能:

  • 概览 — 系统状态、用户数、消息统计
  • 用户管理 — 增删改查用户、设备、模型组覆盖
  • 用户组 — 管理广播组
  • AI 分组与提示词 — 路由器配置、分组管理、提示词编辑
  • AI 模型 — 模型和模型组管理
  • 处理队列 — 查看处理状态,支持重试 / 跳过 / 编辑 / 删除
  • 消息记录 — 历史消息浏览,支持重发 / 召回 / 批量删除
  • 发送消息 — 向用户或组发送测试消息
  • 系统设置 — 服务端地址、Bark 服务器配置

消息详情页展示完整的 AI 传递过程(3 步 timeline):

  • Step 1 路由:路由来源、处理分组、使用模型、AI API 请求参数
  • Step 2 处理:AI 输入/输出、提示词、原始回复
  • Step 3 推送:Bark 推送地址、设备数量、完整载荷

桌面客户端

弥补 Bark 仅支持 iOS/macOS 的不足。

安装

cd aibark-client
pip install -r requirements.txt
python main.py

打包

# Windows: PyInstaller 打包为单文件 exe
pyinstaller aibark-client.spec

# Linux: 同样使用 PyInstaller,或直接 python main.py

配置

首次启动时通过界面配置,或编辑 data/client.json

{
  "server_url": "https://aibark.example.com",
  "aibark_key": "AU_your_key"
}

项目结构

aibark-server/                   # 服务端
├── main.py                      # FastAPI 应用入口
├── Dockerfile / docker-compose.yml
├── requirements.txt
├── routers/
│   ├── bark.py                  # Bark 兼容推送端点
│   ├── mcp.py                   # MCP 协议端点
│   ├── message.py               # 消息查阅页面
│   ├── sync.py                  # 客户端增量同步 API
│   ├── admin.py                 # 管理后台 API
│   └── admin_ui.py              # 管理后台前端
├── core/
│   ├── key_resolver.py          # Key 类型判断与展开
│   ├── ai_router.py             # AI 分组路由 (Step 1)
│   ├── ai_handler.py            # AI 消息处理 (Step 2)
│   ├── ai_client.py             # AI 模型调用(支持 fallback/random)
│   ├── bark_client.py           # Bark 推送转发 (Step 3)
│   ├── async_processor.py       # 后台异步处理队列
│   └── config_manager.py        # 配置文件管理
├── models/
│   └── db.py                    # SQLite 数据模型
├── config-sample/               # 配置样例
└── utils/
    ├── first_run.py             # 首次启动初始化
    └── oauth2.py                # OAuth2 登录(可选)

aibark-client/                   # 桌面客户端
├── main.py                      # 程序入口
├── requirements.txt
├── aibark-client.spec           # PyInstaller 打包配置
├── ui/
│   ├── tray.py                  # 系统托盘图标
│   └── main_window.py           # 主窗口
├── core/
│   ├── sync.py                  # 增量同步
│   ├── cache.py                 # 本地 SQLite 缓存
│   └── cli.py                   # CLI 接口
└── config/
    └── client.json              # 客户端配置

环境变量

变量 说明 默认值
AIBARK_CONFIG_DIR 配置文件目录 ./config
AIBARK_DATA_DIR 数据目录(SQLite + 日志) ./data
AIBARK_PORT 服务端口(仅影响日志提示) 8999

开发

AIBark/
├── main/                              # 主线分支(与远端同步)
└── vibe-YYMMDD-00X-TaskerName/       # Vibe Coding 工作分支

License

MIT

About

AIBark 是搭配 https://bark.day.app 使用,基于其之上构建的 AI 智能消息推送中间层。它完全兼容 Bark 的 API 格式,在此之上引入用户级广播(一次推送到达同一用户的所有设备)、用户组广播,以及 AI驱动的自动分组路由与消息处理(标题生成、铃声/优先级调整)。服务端基于 FastAPI + SQLite,支持 Docker一键部署;桌面客户端覆盖 Windows / Linux,弥补了 Bark 仅支持 iOS/macOS 的不足。

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors