系统架构图集 ● 已上线运行 WAIC 2026 · 上海 7/17–20

WAIC 参展助手——一套会自己更新的活动数据系统

把散落在官网、公众号、边会里的 官方日程 + 边会周边 + 1020 家参展商 + 情报,聚合成一个免注册可搜索、AI 助手可接入的参会助手。数据每 2 小时自动刷新,全程无人值守。这份图集用一张张示意图,讲清楚:数据怎么分层、几条管线怎么跑、如何保证完整与最新、如何避免冲突、AI 在哪、以及 Agent Skill 与网站的关系。

公开层 · 网站浏览 私有全量层 · AI 后端 自动化管线 · 数据流 Skill · Agent 生态 服务器 · 用户数据库
图 00

一张图看全

数据从哪来 → 谁在算 → 存成几层 → 用户在哪触达
数据源
官方论坛 API
worldaic.com.cn
论坛 · 议程 · 嘉宾
参展商 API
servicer · 仅国内可达
1020 家 / 展台
WaytoAGI
/api/events
社群边会
飞书多维表格
小课堂 / 会客厅
超脑现场议程
Tavily 搜索
公网 + 公众号
WAIC 新闻/文章
运算 · 两台服务器
主刷新脑 · 国内节点刷新与构建
跑全部管线:拉源 → 采集 → 构建 → 门禁 → 日报 → 分层发布。参展商 API 屏蔽海外 IP,只有国内节点能拉全,所以主脑在国内。
cron 每 2h健康门禁
对外主站 · 海外节点托管与服务
主站 waic.sg.superbrain-ai.com:接收国内节点推来的数据,托管网站 + AI 后端 + 用户数据库。
接收镜像网站 + API
数据 · 分三层存放
私有全量层 · 只给 AI/…/waic-api/data
含议程 / 嘉宾 / 全文。nginx 不服务,外网拿不到,只经 API 逐条取。
公开精简层 · 给浏览器webroot/data + bundle
剥掉重字段的索引层,浏览/搜索够用;详情走 API。约 850KB。
用户数据库 · SQLiteuser_state.db
日程 / 兴趣 / 人脉对接 / 认领。仅服务端,与内容数据完全隔离。
用户触点
网站 · 免注册四大板块 + 搜索
浏览器直接 fetch 精简层渲染。
AI 助手 · 站内大白话问答
Qwen 函数调用查全量库,带可加入日程的卡片。
Agent Skill · 装进你的 AIClaude Code / OpenClaw
离线 bundle + 实时 API + 每日日报。

下面把这张图拆成 6 个关注点逐一放大。

图 01

产品的三个面

用户从三个入口触达同一套数据
面一 · 网站四板块 + AI 搭子
官方日程 / 边会周边 / 参展商 / 情报站。全局搜索、按天/片区/场馆筛、加入我的日程、导出日历、一键导航、人脉对接。
JSON 驱动localStorage 我的日程
面二 · 站内 AI 助手大白话问答
「7/18 有哪些 AI 教育活动」「从世博到张江来得及吗」——8 个函数工具查库,答案带活动卡片,绝不凭空编。
Qwen3.5-FlashSSE 流式
面三 · Agent Skill装进你的 AI
一条命令把全部日程装进 Claude Code / OpenClaw。数据与能力自动更新,每天早上按你的兴趣播报日报。
bundle 离线API 实时
图 02

数据怎么设计

同一份数据,两种详略、三处存放

没有传统关系数据库——活动内容只读、整体重建、约 2MB,JSON 就是数据库。关键在于「同一份全量数据,产出两个详略版本」:全量给 AI,精简给浏览器。需要随时写入的用户数据才用 SQLite。

源 raw/*.json官方 API · WaytoAGI · 飞书 · Tavily 采集 · 公众号抽取
▼  build.py 归一化·去重·场馆归类·权重/来源标注
全量成品 build-output/data/*.json含 schedule 议程 · guests 嘉宾 · 全文
这是「事实上的数据库」的完整形态。
└─ 原样 →
私有全量层两台节点各存一份
只给 AI 后端读。放在 nginx 不服务的私有目录,外网访问不到。详情经 /api/activity/{id} 逐条取。
└─ make_light 剥重字段 →
公开精简索引层webroot/data + bundle.tar.gz
剥掉议程/嘉宾/全文,描述截断,保留 search_text 搜索不退化。2313KB → 889KB。给浏览器 + skill 离线。
— — — — — 与内容数据完全隔离 — — — — —
用户数据库 · SQLite user_state.db(仅 SG)日程 · 兴趣 · 行为推断 · 人脉对接名片/匹配 · 展商认领 · 纠错
高频操作先落浏览器 localStorage 即时生效,1.2 秒防抖再低频同步到服务端(LWW 合并)。会被随时写入,所以才用数据库
图 03

五条自动化管线

全部无人值守,7/20 大会结束后自动停

四条数据管线跑在南京国内机,一条巡检跑在云端。都到 2026-07-20 自动摘除、退场。

TIER 1
数据刷新 + 分层发布南京 cron · 每 2h(06–22 整点)+ 23:50
refresh.py 拉源fetch_intel 采集build.py 构建validate 门禁make_digest 日报make_light 分层全量→私有层+重启API精简→公开层
拉官方论坛 / 参展商 / WaytoAGI,构建全量,健康门禁通过后:全量推两台机的 AI 私有层并重启 API,精简索引推两台机的公开层。单源失败保留旧数据,绝不清空。
TIER 3
议程同步(飞书 → 专题页)南京 cron · 每 20 分钟
拉 SG 线上页做基底读飞书小课堂/会客厅重生成 SB_AGENDA替换进 superbrain.html推 SG + 南京镜像
超脑现场议程(45 会客厅 + 13 小课堂)写死在专题页里,改飞书表 ≤20 分钟自动上线。每轮先以线上最新页为基底,让网页 UI 更新和议程更新互不覆盖。
TIER 4
资讯采集(新需求)随 Tier 1 · 每 2h
Tavily 搜公网+搜公众号 mp.weixin+搜官网报道URL+标题去重并入情报站 intel
每 2 小时搜一次 WAIC 相关新闻与文章,重点覆盖官方公众号;有些文章不在议程里,收进情报站,也进日报。失败降级跳过,绝不 block 数据管线。
TIER 5
每日日报(新需求)随 Tier 1 · 每 2h 翻新
昨日文章集锦+今日活动池·按权重排序digest-latest.jsonskill 每天首用拉取按兴趣本地个性化
早 6 点那轮即备好当天日报。装了 skill 的用户,每天早上自动收到「前一天文章速记 + 按你兴趣推荐的今日活动」。个性化在用户端算,兴趣不上传
TIER 2
AI 巡检(只读,不改数据)claude.ai 云端 routine · 每天 08:00
web 多源搜遗漏边会报分类异常中文简报
唯一的「AI 参与运维」环节:每天扫一遍有没有漏掉的边会、有没有分类错,生成简报供人工补录。只读、不写数据,出错也不影响主管线。
图 04

怎么保证完整与最新

坏数据进不来,好数据不丢,永远够新
健康门禁拦坏数据
数量落在合理区间、schema 完整、相对上次骤降 >25% 一律拦下。
validate.py · 不过 = 不发布 + 告警
单源失败保旧数据
某个 API 拉不到,就用上次的旧数据,绝不把已有内容清空。
refresh.py · 部分失败照常发布
每日快照可回滚
每天存一份数据快照,保留 7 天。源数据异常穿过门禁也能一键回退。
snapshots/YYYY-MM-DD
永远够新 · 每 2h
06:00–24:00 每两小时刷一遍;新增/撤销的论坛自动进出。
实测抓到 +联通/蚂蚁 2 场、−1 撤销
防泄露门禁
发布前 grep 检查:精简层一旦混入议程/嘉宾全文,立即拒发。护城河数据不裸奔。
公开层 schedule/guests = 0(实测)
无变化不打扰
数据没变就跳过发布(比对校验和),只有真变了才推、才通知。
.last_deployed_sha
图 05

怎么避免冲突

多管线、多写入方、多设备,各行其道

这次全局 review 揪出并根治了几处真实冲突(红色=曾经发作、已修)。

专题页双写互相覆盖 · 已根治
议程管线和网页 UI 部署都在写 superbrain.html,各持旧副本互相回退(今天真的发作过一次)。现在议程管线每轮先拉线上最新页做基底再改,双向 ≤20 分钟自愈。
Tier3 v3 · 以线上为准
两个进程管理器抢端口 · 已根治
南京 AI 后端曾被 PM2 和 systemd 同时拉起,抢 8790 端口反复重启 90 次。现统一归 systemd 管,摘除 PM2。
单一进程管理器
管线不重叠 · flock 锁
一次刷新可达 8 分钟,加文件锁防止两轮叠着跑;被锁时 2 毫秒秒退。
exec 9>lock · flock -n
推送失败自动补推
以「上次成功推送的内容指纹」为基准,某次推失败,下轮即使源没变也会自动补推,远端不会永久滞后。
.agenda_pushed_sha / 删 sha 强制重推
用户数据单写者 · LWW
同一同步码多设备写入,按客户端时间戳「后写胜」合并,客户端与服务端同一策略,不打架。
last-write-wins
sidecar 文件保护
API 启动必需但构建不产出的文件(venues.json),私有层同步不带 --delete,避免被误删导致 API 崩溃循环。
rsync 保留 sidecar
图 06

AI 在哪儿

三处 AI,各司其职
① 站内 AI 助手主站后端
Qwen3.5-Flash + 函数调用(8 个工具)。读私有全量层,所有日程事实必查库、不凭空答。SSE 流式返回,带活动卡片。
/api/chat读全量跨天日期已修
② 镜像后端国内节点 · 低延迟
国内镜像,精简端点(问答/详情/日报/动线)。与 SG 代码对齐:来源三档标注、跨天匹配同步。
systemd国内低延迟
③ 用户自己的 Agent装了 Skill 的 AI
Claude Code / OpenClaw 等。拿 bundle + 实时 API 就地回答,每天播报个性化日报。数据与能力自动更新
bundle 离线自升级

此外 Tier 2 巡检用的是云端 claude.ai routine,只读、不写数据——是「AI 帮忙运维」,不在产品服务链路里。

图 07

Skill 与网站的关系

同一套数据,网站直接看,skill 装进 AI 用

Skill 不是另做一套数据,而是网站数据的「可接入分身」:能离线、能实时、能跨端同步、能每天播报、能自己升级。

Agent 侧你的 AI 助手 + WAIC Skill
安装后常驻。用户在自己的 AI 里直接问 WAIC、维护日程、收日报,会期结束还能继续追后续报道。
  • 离线 bundle:断网也能查索引层
  • 兴趣档案存本地,不上传
  • 失忆可恢复:约定文件重建上下文
下载bundle.tar.gz 精简索引层
实时/api/chat · /api/activity · /api/route
跨端同步匿名同步码 · /api/state · LWW
每日日报digest-latest.json 按兴趣本地过滤
自更新/VERSION 换数据 · /SKILL_VERSION 换说明书
网站 / 后端侧waic.sg.superbrain-ai.com
同一份数据的两种呈现:网站免注册直接浏览搜索;后端为 skill 与站内 AI 提供全量详情、个性化与实时能力。
  • 网页 = 精简层,浏览器本地搜索
  • API = 全量层,逐条取详情
  • 同步码把「我的日程/兴趣」在手机·电脑·Agent 之间打通

跨端同步的桥梁是一个匿名同步码——不登录、不留手机号,就能让网页上加的日程出现在你的 AI 助手里,反之亦然。