- 项目:EAIS LAB 边缘智能实验室中英文官网。
- 用途:以静态页面展示实验室介绍、研究方向、成员与校友、论文、新闻、专利、招生及资源;内容由 Markdown 集合和
_data/数据维护。仓库提供静态管理后台页面,认证和图片服务由外部 Worker 提供。 - 仓库:EdgeAI-2000/EdgeAI-2000.github.io,后台目标分支为
main。 - 自定义域名:
CNAME配置为eaislab.com;后台站点地址为https://eaislab.com。 _config.yml的url仍为https://edgeai-2000.github.io,baseurl为空;维护 SEO、规范链接和站点地图时应核对这一配置与自定义域名的关系。- 中文首页
/zh/,英文首页/en/;根路径/的源码使用 HTML 跳转到英文首页,尽管全局lang为zh。 - 研究方向:多智能体协同感知、边缘大模型推理与部署、代理式人工智能。
- 项目展示:EdgeCoSense 协同感知平台、EdgeModelBridge 大小模型协同引擎、EdgeAgentWorks 边缘多智能体应用平台。
| 部分 | 当前源码配置 |
|---|---|
| 静态站点 | Jekyll、Liquid、Markdown、YAML front matter |
| 前端 | HTML、CSS、原生 JavaScript;主样式为 assets/css/style.css,表情脚本为 assets/js/mascot.js |
| Ruby | .ruby-version 指定 3.2.0 |
| 锁定依赖 | GitHub Pages 232、Jekyll 3.10.0、Minima 2.5.1、Bundler 2.7.2 |
| 站点插件 | SEO、sitemap、feed、titles-from-headings |
| 内容后台 | Decap CMS 3.16.3,GitHub 登录与编辑工作流 |
| 图片服务 | Cloudflare Worker + Images + KV,独立于静态站点 |
| 论文同步 | Python、requests、PyYAML、scholarly,可使用 SerpAPI |
| 自动化测试 | Node.js 内置测试运行器 |
版本信息来自仓库文件,不代表服务器当前运行时版本已经验证。
| 路径 | 用途 |
|---|---|
_config.yml、Gemfile、Gemfile.lock |
站点配置及 Ruby 依赖 |
index.md、zh/、en/ |
根路径跳转、中英文页面及英文详情入口 |
_people/ |
成员统一记录,包含中英文资料 |
en/people/、en/news/ |
引用统一成员、新闻记录的英文详情入口 |
_publications/auto/ |
Scholar 同步输出;当前也存在 source: manual 的记录 |
_publications/manual/ |
后台配置的手工论文目录,当前检查时尚未创建 |
_themes/、_projects/ |
研究方向、项目介绍 |
_news/、_patents/ |
新闻、专利;部分目录包含下划线开头的模板 |
_data/nav/ |
中英文导航 |
_data/page_visibility.yml |
中英文共用的页面显示开关 |
_data/scholar.yml |
Scholar 作者与同步数量配置 |
_data/member_submission.yml、assets/data/member-profiles.json |
成员资料提交入口配置、从 site.people 生成 JSON 的 Liquid 模板(不是独立成员数据源) |
_data/venue_aliases.yml、_data/venue_ranks.yml |
期刊会议别名和评级映射 |
_data/brand.json、_data/mascots.json |
品牌图片 CDN 地址及表情视口配置 |
_data/ 的其他文件 |
经费、愿景、公告、组会、友情链接等结构化内容 |
_layouts/、_includes/ |
页面布局、导航、页脚、语言切换、吉祥物组件 |
assets/ |
CSS、JavaScript、本地图片与品牌备份 |
admin/ |
后台入口、内容配置、图片上传插件和设置页面 |
workers/images/ |
图片服务 Worker 与 Wrangler 配置 |
scripts/scholar_sync.py |
论文抓取与 Markdown 生成脚本 |
.github/workflows/scholar_sync.yml |
定时论文同步工作流 |
CNAME |
GitHub Pages 自定义域名配置 |
tests/ |
图片服务、媒体选择器、设置访问测试 |
docs/admin-setup.md |
后台权限、图片服务部署、配置与验收说明 |
docs/brand-identity.md |
品牌资源来源、更新和视觉检查说明 |
_site/ |
已跟踪的构建输出,不作为内容编辑入口;vendor/ 和 .sass-cache/ 为可能产生的本地依赖和缓存目录 |
截至本次源码核对(2026-10-13),共有 43 份成员记录、89 份 auto 论文记录、3 个研究方向、3 个项目、2 条新闻、4 项专利;统计排除了下划线开头的模板,不等于网站实际显示数量。
在本地仓库根目录操作,先准备 .ruby-version 指定的 Ruby 3.2.0 与锁定的 Bundler;无需服务器固定路径、SSH 转发或 npm 构建步骤:
cd EdgeAI-2000.github.io
gem install bundler -v 2.7.2
bundle install
bundle exec jekyll serve --host 127.0.0.1 --port 4000 --destination /tmp/eais-lab-preview浏览器访问 http://127.0.0.1:4000/zh/ 或 http://127.0.0.1:4000/en/;根路径跳转到英文首页。配置文件更改后重启预览。本地静态预览不代表外部 OAuth、图片上传或成员资料服务可用。
构建与已有测试:
bundle exec jekyll build --destination /tmp/eais-lab-preview
node --test tests/*.test.mjs使用临时输出目录可以避免覆盖已跟踪的 _site/。测试需另行准备 Node.js,使用内置测试运行器和 fetch、Request、Response 等 API,覆盖图片 Worker、媒体选择器和设置权限;不代替整站构建或线上验收。docs/admin-setup.md 另有旧 Ruby 环境下的备用构建方法,但该方法不能证明锁定依赖可正常安装。
成员资料统一写入 _people/<slug>.md。新增时可参考 _people/kang-ling-wen.md 等现有记录;更新时保留原文件名,避免改变详情页地址。主要字段:
name/name_en、bio_zh/bio_en、research_areas/research_areas_en、affiliation/affiliation_en:中英文资料。role、status、period:角色、在读/校友状态和分组时间;现有记录还使用entry_year、graduation_year。_layouts/people.html当前展示的在读角色为pi、faculty、postdoc、phd、master、undergrad、engineer,status使用current或alumni;后台虽提供ra选项,列表当前没有该在读分组。avatar、style_photo、email、homepage、scholar、dblp、github:图片及联系链接;链接使用完整 HTTP(S) 地址。个人页只在有效字段存在时显示相应联系入口。destination/destination_en、thesis_title/thesis_title_en:校友去向和学位论文资料。
中文详情页为 /people/<slug>/。新增成员还应建立 en/people/<slug>.md,英文入口引用同一份资料,不复制简介正文:
---
layout: person
lang: en
person_slug: example-member
title: Example Member
permalink: /en/people/example-member/
---资料页布局为 _layouts/person.html,成员列表布局为 _layouts/people.html。修改后核对中英文成员列表及两版详情页;角色和状态会影响分组,不能只确认文件已保存。
_data/member_submission.yml 当前启用 https://services.eaislab.com/member-profile/ 入口;_includes/member-submission.html 展示登录、审核后发布的提示。此仓库配置入口,不包含该外部服务的后端源码;服务运行和审核结果需独立核验。
后台的“手工论文”集合写入 _publications/manual/;该目录当前尚未创建。直接维护时,在该目录新增 <year>-<slug>.md,例如:
---
title: "Example Paper"
authors:
- 示例作者
year: 2026
venue: "IEEE Transactions on Mobile Computing"
type: journal
source: manual
---使用整数 year、作者列表和实际 venue;type 可为 conference、journal 或 preprint,可选字段包括 pdf、code、ccf 和 Markdown 正文。中英文论文列表共用 site.publications,不需要另建英文入口。新增前搜索 _publications/ 中的标题,避免与自动同步记录重复。
_layouts/publications.html 仅列出 2020 年及以后且 venue 能从 _data/venue_ranks.yml 匹配到 CAS 或 CCF 评级的论文,_data/venue_aliases.yml 用于 venue 展示名称归一化。仅填写论文的 ccf 字段并不能绕过列表筛选;未显示时检查年份和评级表匹配,而不是反复新增同一论文。
_data/scholar.yml 当前包含两个作者档案,max_per_author: 100。脚本优先在环境变量存在 SERPAPI_API_KEY 时使用 SerpAPI;未取到结果则回退到 scholarly。虽然配置写有 prefer_serpapi,当前脚本主逻辑实际依据密钥是否存在选择 SerpAPI。
GitHub Actions 每天 02:17 UTC / 北京时间 10:17 运行,也支持手动触发。流程安装 Python 3.11 与依赖,执行同步、检查输出非空,然后直接提交并推送论文更新;没有创建审核 PR 的步骤。SerpAPI 密钥应配置在仓库 Actions Secret 中。
手动执行方法:
python3 -m venv /tmp/eais-scholar-venv
. /tmp/eais-scholar-venv/bin/activate
python -m pip install requests pyyaml scholarly
python scripts/scholar_sync.py执行前检查 Git 差异并备份需要保留的内容。 scripts/scholar_sync.py 的 ensure_output() 会先删除 _publications/auto/*.md,再抓取并按年份和标题生成文件;不仅覆盖同名文件,抓取失败时也可能留下空目录。当前 auto 中有 source: manual 的记录,该字段不能保护文件免于删除;需要长期保留的手工论文应维护在 manual 目录,并检查重复记录。脚本不清理 manual。
工作流会拒绝零文件结果,但没有恢复删除文件的步骤;其提交命令为 git add _publications/auto/*.md,需额外检查未重新生成文件的删除是否已暂存,不能把工作流成功等同于整个目录完整同步。
在 _news/ 新建 YYYY-MM-DD-<slug>.md,或更新现有记录。可参考 _template-paper.md、_template-award.md 的字段,实际双语详情以 _news/2026-09-29-wei-quanmin-tmc-paper-accepted.md 为例:
- 填写
title、title_en、lang: zh、date: YYYY-MM-DD、type、summary、summary_en;type使用news、award或press。可选cover、authors、venue、link。 - 使用
layout: news,在 front matter 的content_en: |中填写英文 Markdown 正文,在 front matter 后填写中文 Markdown 正文。旧模板未指定此布局,_config.yml默认使用detail,因此复制模板后需要补齐双语详情字段。 - 新建
en/news/<同名文件>.md,引用中文记录 URL;参考下面的英文入口,不复制新闻正文。
---
layout: news
lang: en
title: Example News
news_url: /news/2026-10-13-example-news/
permalink: /en/news/2026-10-13-example-news/
---zh/news.md、en/news.md 使用 _layouts/list.html 按日期倒序展示同一新闻集合。英文列表和首页仅在 content_en 存在时链接到 /en/news/.../,因此必须同时创建对应英文入口;否则会出现失效链接。核对 /zh/news/、/en/news/、首页及两版详情页。后台新闻表单当前没有 content_en 字段,也没有创建英文入口的集合,需要在仓库中补齐。
当前 _data/page_visibility.yml 中 projects: false,其余已列开关为 true,包括 news: true。现有后台说明中的 News 默认关闭描述不代表当前配置。
开关影响导航、首页板块及相关入口;隐藏页面的原 URL 仍可访问,不能用于权限控制。后台页面设置由仓库 Admin 保存,直接更新 main,不经过内容草稿发布流程。
- 后台入口:
https://eaislab.com/admin/。 - 仓库 Write 或更高权限可维护内容与上传图片;Admin 才能配置图片服务及保存页面显示设置。仅加入 GitHub 组织不足以获得编辑权限。
- 内容采用 Decap
editorial_workflow:保存草稿后发布至main,等待网站部署完成。 - OAuth 地址配置为
https://eais-cms-oauth.neardws.workers.dev,认证路径/oauth;此 OAuth Worker 源码不在当前项目中。 - 图片 Worker 地址配置为
https://eais-cms-images.neardws.workers.dev,源码位于workers/images/worker.mjs;Wrangler 服务名为eais-cms-images,KV 绑定为SETTINGS。 - 当前允许上传服务来源为
https://eaislab.com;增加其他域名或进行本地上传调试时,需明确配置对应来源。 - 后台保存的 Images Token 经 AES-GCM 加密写入 KV,
SETTINGS_ENCRYPTION_KEY存在 Worker Secret 中;Token 与加密密钥不要写入仓库或 README。 - 默认规格:头像
600×600 / cover,封面1200×675 / cover,正文1600×1600 / scale-down。 - 媒体选择器支持上传或插入已有 CDN、本地资源地址,不提供整个图片库的浏览和删除。取消草稿不会自动删除已上传图片。
首次部署、权限配置、换账号与验收步骤见 后台与图片服务说明。配置中已存在 endpoint 与 KV 标识,不能仅凭文件断定服务当前可用,勿重复初始化或随意轮换加密密钥。
品牌原始资源来自 EdgeAI-2000/logos。页面读取 _data/brand.json 中的 Cloudflare Images 地址;assets/images/brand/ 保留本地备份。表情组件通过 _data/mascots.json 与共享表情图实现。修改资源与 CDN 后按 品牌维护说明 检查桌面、390px 和 320px 页面及图片透明区域。
- 发布源是仓库根目录的 Jekyll 源码:
_config.yml、各内容集合、zh/、en/和assets/。admin/config.yml将内容发布目标设为main;docs/admin-setup.md描述更新main后等待 GitHub Pages 部署。不要把_site/当作日常内容源。 - 部署前在仓库 Settings → Pages 核对发布方式、分支和目录;若使用分支源码构建,应与
main的根目录配置一致。本仓库仅包含 Scholar 同步 workflow,没有自定义 Pages 构建/部署 workflow;文件本身不能证明 Pages 后台当前设置或线上部署状态。 - 自定义域名文件
CNAME内容为eaislab.com,后台site_url/display_url也使用此域名;但_config.yml的url为https://edgeai-2000.github.io。上线前核对 Pages 域名、DNS、HTTPS 与生成页面的规范链接/站点地图,不应把配置文件视为域名已经生效的证明。 - 常规发布:本地检查 Markdown/YAML 和构建输出 → 审核源码差异 → 合并内容到
main(或通过 Decap 发布)→ 检查 GitHub Pages 构建/部署结果 → 在目标域名核对中英文页面。Scholar workflow 的成功只证明其同步步骤完成,不单独证明网站已经重新部署。 - Jekyll 的
exclude当前排除README.md、node_modules、vendor、scripts、workers、tests、docs;图片 Worker 不由 GitHub Pages 部署,独立部署说明见docs/admin-setup.md。OAuth 和成员资料服务也需独立验证。
- 内容更新前后检查 Git 差异,避免将生成目录和运行时文件一并提交;本地预览和构建建议使用上述临时输出目录。
- 当前
.gitignore只忽略.DS_Store、图片 Worker 的.dev.vars与.wrangler/;_site/中已有跟踪文件,不能假定生成产物会自动被忽略。 - 如在本地添加代理上下文、运行记录或其他内部文件,先核对
_config.yml的排除列表和实际构建输出,避免将它们作为站点资源发布;不要沿用旧环境的目录状态作为当前证据。 - 本 README 根据仓库源码核对;依赖安装、构建成功、外部服务可用、GitHub Pages 部署成功和线上页面验收是不同检查项,不能相互替代。