返回首页
Health4AllARCHITECTURE REVIEW
SOURCE-BASED REVIEW · 2026.10.30

从一份材料,
到一个可运营的
知识与内容系统。

组织架构 × 产品线 × 模块依赖 × 数据责任 × 处理流水线。基于当前源码分析,将已实现的执行路径与未来演进清楚分开。

分析范围:ai-web-ops依据:源码与项目记录单文件 · 无外部依赖
5分析归纳的产品线
28扫描的 runtime Python 模块
70静态本地依赖边
6可交互处理流水线
01 / EXECUTIVE VIEW

一个网站,五条产品线,三类执行边界。

Health4All 的核心是个人技术内容的生产、呈现与受控运营。下面的产品线是按用户价值归纳,并非源码里已经存在五个独立微服务。

事实

内容主权在源文件

site 内容与 catalog 负责公开内容;员工数据已用 PostgreSQL,访客和旧任务仍在 SQLite。

事实

Agent 是受限角色运行时

四角色 + 明确工具分派 + 云端模型解释;采用按需 CLI,不是四个常驻自治服务。

判断

当前是可运营的模块化系统

已有真实发布和反馈闭环,但统一版本域、跨阶段任务一致性与集中预算仍需演进。

范围澄清:本报告分析 ai-web-ops 网站运营项目。网站的 /opc/ 是被发布的架构介绍内容,不等于网站运行时就是 OPC 平台;其他项目和独立工具入口不被当成本项目模块。
02 / PRODUCT LOGIC

产品线不是页面栏目:一条内容会跨越多个产品能力。

projects / writing / research 是内容归属;制作、设计、发布、员工与访客服务才是功能边界。

P1

内容工作室

服务对象:作者 / 运营者

输入
文件夹材料、PDF 证据、工程记录
输出
规范稿、草稿、设计预览与可维护文章
P2

内容体验引擎

服务对象:作者 / 读者

输入
正文语义、结构化表、栏目目录
输出
自适应页面、发现检索、交互图、双语阅读
P3

发布与运维

服务对象:管理员

输入
已确认快照、构建源和部署策略
输出
正式版本、公开索引、巡检与回退回执
P4

Agent 员工

服务对象:本人 / 内容团队

输入
角色、明确命令、内容页、确认记忆
输出
受控工具结果、会话历史、研究线索
P5

访客服务与洞察

服务对象:访问者 / 运营者

输入
公开问题、建议、BUG 与截图
输出
阅读引导、私有反馈、待审核改进需求
03 / SYSTEM MAP

交互在本机,公开服务在云端,内容以不可变版本交付。

这是逻辑关系图:连线表示调用或产物流转,不代表所有模块彼此直接 import。模块的真实 Python 依赖在证据区另列。

指令任务RPC正文快照待构建源公开产物验收发布公开证据反馈/对话员工会话 / 任务 / 记忆发布授权材料待审核建议,不自动发布作者 / 管理者入口本机工作台控制与分派SSH 员工桥受限 RPC云端员工运行时推理与记忆材料归一 / 证据起草intake + content快照 / 本地暂存publication体验 / 翻译 / 组装Hugo + design部署与版本切换deploy + install反馈 / 每日建议私有留存访客阅读助手检索与模型正式网站与公开索引静态内容分域存储与备份文件 / SQLite / PG
点击图中模块查看职责与实现证据。公开面不拥有员工工作台或发布入口。
04 / PIPELINES

从输入到回执,把每一步和每个停止点说清楚。

切换下方流水线,点击步骤查看实现、产物与失败分支。流程演示只用于解释,不会调用系统或执行发布。

05 / AGENT ORGANIZATION

员工有岗位,不意味着每个岗位都有独立的自治控制器。

项目采用自建轻量角色框架,没有发现 LangGraph / AutoGen 等第三方多 Agent 编排框架的运行依赖。角色权限主要由应用层和工具入口限制。

治理岗位与软件员工分开看:主管负责方向与发布授权;内容岗位负责采集与草稿;审核岗位核对来源、定位与敏感信息;发布运维岗位负责构建、验收和回退。这些是 AGENTS.md 中的责任分工,不代表已经实现四个互相审批的独立自治进程。当前四类软件员工通过同一工作台接受本人指令。
角色工作内容真实执行方式边界
网站运维巡检 / 明确发布 / 员工备份执行由本机后台的受控分派完成,云端解释工具回执不提供通用 shell;回退目前为既有运维链路和协作能力
内容设计美化当前页 / 设计讨论命令匹配后调用整站预览,不是只重算一个段落当前命令会重新生成整站预览;复杂自由语句未必触发工具
知识研究两类官方 RSS + 有来源选题通常本机采集,再给云端模型;每源硬时限 18 秒非全网搜索、非持续热点监控,不自动生成并发布文章
站内客服公开证据 + 阅读路线员工内的私有会话;与公网 assistant 服务分离公网助手没有员工记忆和运营权限
记忆

明确确认后才入长期记忆

“记住”是角色内,“全体记住”是共享;当前仅关键词相关性排序,不是向量语义数据库。

上下文

有限历史,而非无限记忆

候选记忆最多读取 30 条,注入最多 8 条;最近会话注入 6 条,每条截断。共享记忆排序优先于相似度。

06 / DATA OWNERSHIP

存储的关键是“谁说了算”,而不仅是用了什么数据库。

当前架构是有意分域、尚未完全整合的混合存储。模型服务只处理输入上下文,不是内容主库或任务权威。

领域对象介质含义 / 生命周期
公开内容权威site 源文件 + catalog本地文件原稿、栏目、既有 URL;员工 PG 不是这些数据的统一主库。
发布设计状态私有 job/document JSON、HTML 快照本地文件来源与设计哈希、处理事件、选择;需保留本机环境才能完整重放。
起草任务 / 额度tasks / budgetSQLite预算按运行状态目录分开,不能推导成一个全局财务预算。
访客记录interactions + 图片 + 日报SQLite / 私有文件原始记录与关联图片保留 90 天,日报不成为可执行指令。
员工协作sessions / messages / tasks / memoriesPostgreSQL独立业务库,按需 psql 调用;本机测试可回退 SQLite。
已发布快照静态站 + 公开索引 + 版本 manifest不可变文件读者不直接读取员工库;网站回退不回滚业务数据。
员工备份单业务库归档 + 检查结果私有备份文件每日云端保留 30 天;异机副本由显式备份命令取回,不是每日自动异机同步。
07 / CONTROL & SAFETY

三条隔离线,四个不同性质的回执。

发布、模型、数据库和 UI 状态的成功条件不同,不能用一条“任务完成”概括所有结果。

权限线

公开访问 ≠ 运营操作

访客只有公开索引、问答和反馈;员工/文章后台只在本机开放,并通过 SSH 访问私有操作。

证据线

材料与模型输出都不是指令权威

输入脚本被清理;已知图表纯数据解析。模型只在允许的工具回执范围内解释。

提交线

预览确认 ≠ 生产验收

发布要求来源/快照哈希、构建检查、备份、HTTP 与文件哈希;数据库备份恢复是另一条链。

运行节奏执行内容不能误解为
内容作业每 5 分钟日报 + 最多十个可信输入起草每五分钟自动发稿
健康巡检每 5 分钟页面 / 索引 / 磁盘状态已经接入站外通知
员工备份每日北京时间 03:10单库 dump 与归档校验每日自动异机副本与持续 PITR
模型调用边界访客/起草/日报一侧默认 50 次/UTC 日;员工侧默认 20 次/日润色/翻译也被统一计入这一额度,或已实现金额预算
08 / ENGINEERING REVIEW

当前能运行,与长期可托管,是两种验收尺度。

以下为本次源码审阅结论,不是生产压测结果,也不自动证明已发生数据丢失。优先级表示建议处理顺序。

P1

工具副作用与任务领取不在同一事务

console 先 begin→执行工具→run;employees 的原子 claim 发生在 run 中。进程在工具成功后、回执入库前退出,任务与实际世界可能不一致。

建议 采用可恢复 tool_attempt、幂等业务键、回执日志与重放检查;明确至少一次语义。

依据:console / employees
P1

“completed”表示回答处理完成,不总是工具成功

失败 receipt 仍可进入模型解释并将任务记 completed;前端通过 receipt.status 单独提示。统一审计和指标若只看任务状态会高估成功率。

建议 拆分 orchestration_status / tool_status / model_status / publication_status。

依据:employees / employees.js
P1

预算分散,构建期模型调用不在统一成本账本

访客与员工使用不同状态目录的预算库;润色与翻译直接调用模型,并未共用 reserve_model_call。

建议 统一模型网关、按任务与用途记账;在构建前预估并限制翻译/润色成本。

依据:assistant / editorial_copy / translate_site
P2

定时日报与内容起草存在故障耦合

worker 先直接调用 analyze_daily,再处理 inbox;该调用异常可令本轮起草队列不执行。

建议 拆分两个作业,或隔离异常与记录独立回执。

依据:worker
P2

内容身份与版本事实分布在多种存储

catalog、Markdown front matter、设计 JSON 和员工任务关联主要靠应用约定;PG schema 当前没有数据库外键关系。

建议 先引入统一 ContentVersion / RenderSnapshot 契约和迁移层,不直接全量搬库。

依据:publication / content / employees
P2

存储访问与领取策略尚不是分布式队列

员工数据库每次查询启动 psql;10 分钟过期状态只在初始化时刷新,无持续心跳或租约延长。

建议 引入参数化驱动、短事务、显式租约/心跳、持久协调器;按负载再决定消息中间件。

依据:employees
P2

视觉规则存在渐进覆盖与遗留命名

gallery 样式累计覆盖原博客/展览规则;旧 a/b/c、generation 相关代码仍保留,但当前仅产生单方案。

建议 提炼设计 token 与组件层,清理失效分支,增加页面类型的视觉回归。

依据:gallery.css / designs / site_review
P2

备份恢复与运营系统恢复不是一回事

静态站回退保留业务数据库;员工每日同机备份,电脑离线时没有新的本机副本。

建议 明确 RPO/RTO、独立异机备份计划和全链恢复演练,避免只演练单库恢复。

依据:employee_backup / install_release
09 / EVOLUTION

先让状态和回执一致,再扩展自治与规模。

下列为建议路线;未纳入“已经上线”的能力清单。

下一步 / 一致性

统一任务与版本契约

先定义内容版本、设计快照、工具执行、审核与发布回执 ID;补足跨阶段故障恢复。

随后 / 可运营

统一成本与可观测性

模型调用账本、独立日报作业、任务心跳、错误分类和真正的站外告警;建立恢复目标。

再扩展 / 自治

受控协作与知识规模化

审核后的热点→草稿→设计交接、对象存储与检索评测。跨机器编排、向量库、全量 PG 迁移依据负载决定。

10 / SOURCE EVIDENCE

每个判断都能回到实现,而不是回到一张愿景图。

扫描仅做 AST 静态解析,没有 import 或执行项目模块,没有读取凭据、业务对话或生产数据库。本报告没有进行新的线上部署验收。

核心模块职责表
模块职责实现解释领域
console.py交互与调度入口本机文件夹发布、CRUD、员工窗口与预览 API。Host/Origin 检查;线程分派受控工具;最多两个本机员工任务。控制平面
intake.py材料归一化主文件发现、HTML/Markdown 清理、来源/图片指纹、栏目判断、已有 URL 识别。PDF 在此是参考附件,不直接作为主稿。内容制作
content.py证据与草稿五种 pipeline 的统一任务模型,PDF 物理页码证据、权利检查、模型起草及审核入库。内容制作
publication.py快照与发布事务来源/设计哈希校验、选择当前单方案、修改本地源、调用部署、失败恢复源文件。发布核心
site_review.py整站预览构建临时站点,再按目录生成单一自适应预览;旧样式 URL 仅兼容。内容制作
site_builder.py全站组装汇合 catalog 与已公开 Hugo 文章,生成首页/栏目/正文,检查设计覆盖和栏目入口,移除撤稿链接。体验引擎
semantic_design.py语义排版规则判断五种文章类型,识别观点/风险/定义/证据/步骤;明确单系列数值表可视化,保护原表。体验引擎
editorial_copy.py表达润色摘要与适合的纯文本段落,每篇最多七段;数值、标识、限定语与长度检查;原文对照与缓存。体验引擎
gallery_design.py内容发现版式栏目与首页作品编排、原创装饰性 SVG 图版、搜索和分类控件;不是数据图生成器。体验引擎
translate_site.py构建期英语缓存模型译文,覆盖正文和控件;发布只输出当前仍引用的词条,避免撤稿译文残留。体验引擎
deploy.py本地发布执行器Hugo→全站组装→翻译→断链/敏感信息检查→公开索引→版本包→受控远端安装。发布核心
install_release.py远端版本切换备份配置/旧指针,生产锁、不可变目录、服务切换、HTTP/哈希验收,失败恢复;不回滚业务数据库数据。发布核心
employees.py角色与记忆运行时四个角色、持久任务、原子领取、历史与作用域记忆;模型围绕工具回执解释,不是通用 shell Agent。员工协作
employees_remote.py员工通信桥本机后台经 SSH 调用受限云端 CLI;备份工具可取回本机副本。无公开员工 RPC。员工协作
assistant.py访客阅读服务公开索引、中文双字/英文词检索、单轮模型解读、引用、限流与降级;无发布能力。访客服务
visitor_data.py反馈与日报对话、建议、BUG/截图私密保存;前一完整 UTC 日汇总,90 天清理,日报仅待审核。访客服务
article_admin.py文章管理现有文章查看/编辑/删除与新增,版本摘要检查、防覆盖、私有备份及预演后执行部署。控制平面
worker.py定时内容作业每次先做日报,再处理最多十个可信 inbox 作业;产生待审核草稿,不直接上线。运行保障
employee_backup.py员工库备份单业务库 dump、归档校验、可选临时库恢复演练、30 天保留;每日调度仅在云端备份。运行保障
health.py网站巡检HTTP/索引/磁盘状态,落私有健康记录;定时触发不等于站外告警。运行保障
完整运行时源码清单 · 行号与内容摘要哈希
相对项目路径行数SHA-256 前 12 位顶层函数 / 类起始行
runtime/admin_remote.py332ea3259afc33invoke:9, feedback:21, status:25, image:31
runtime/article_admin.py1697be12e340004catalog:20, editable:26, resolve:30, read:38, listing:75, perform:83
runtime/assistant.py21443faa03de19eText:28, build_index:44, tokens:70, retrieve:78, reserve_model_call:92, answer:106, handler:128, main:200
runtime/blog_designs.py85a72819e4dc4csidebar:22, shell:32, article:47, cards:64, home:76, section_page:81
runtime/common.py397c4416226759state_dir:10, generate:18
runtime/console.py251299b46079f6fhandler:29, main:232
runtime/content.py1878f02cf4bb473database:20, check_slug:33, extract:38, checks:53, create:65, approve:112, import_task:136, main:162
runtime/deploy.py149a676e5331a53read_env:24, connect:33, main:47
runtime/designs.py151e0a69f5b3f7eskill_text:24, design_plan:34, frame:79, home:84, section_page:99, render:112, build_candidates:133
runtime/editorial_copy.py92515e3ae215c4cache_path:12, load:15, key:19, invariant:22, valid:28, candidates:34, ensure:45, apply:78
runtime/employee_backup.py42a7dd1f8d946frun:11, main:14
runtime/employee_install.py249dd306444594setup:7
runtime/employees.py198f3f85c9f53b7now:26, literal:27, Store:30, public_evidence:74, headlines:82, inspect_site:98, begin_task:110, run_task:126, rpc:165, main:186
runtime/employees_remote.py39a7fcf8f9efe0invoke:9, backup:23
runtime/gallery_design.py6078c0a9ef7692artwork:14, directory:34
runtime/health.py29cd0fa0ccf59fmain:9
runtime/install_release.py184eeab2358f010run:15, switch:19, fetch:27, install:33, restore:145
runtime/intake.py252d04b1c8caee0fingerprint:41, discover:45, safe_file:59, markdown_body:68, normalize:75, inspect_folder:198
runtime/publication.py233d2f252307916jobs_root:21, job_dir:25, load:32, save:36, event:44, register:50, register_document:54, unchanged:73, prepare:87, select:107, stage:124, publish:198, list_jobs:231
runtime/report_charts.py10471dcd9bfb9d4literal_array:8, number:32, text:38, chart:42, bars:49, recover:65
runtime/resource_cleanup.py80c33c09d80972command:13, main:18
runtime/semantic_design.py1176e20a7193d5aquantitative:16, analyze:39, compose:53
runtime/site_builder.py1274b87ae53ccacsection_for:14, output_path:20, catalog_rows:24, enhance:44
runtime/site_review.py147470129e8bbearegistry:22, write_registry:27, prepare:32, resolve:111, render_preview:121, wrapper:144
runtime/translate_site.py974c75dcbf4f91text_nodes:19, translate:23, collect:42, ensure:66, main:90
runtime/validate_public.py31c325e1220713Links:9, validate:17
runtime/visitor_data.py1122e5e81362d73database:17, redact:30, save:36, recent:71, mark:76, analyze_daily:83
runtime/worker.py420b464f286b16main:12
静态 Python 本地依赖 · 包括条件 / 延迟导入

箭头语义为 import:调用方 → 被导入方。静态出现不代表每次运行都调用,也不覆盖 SSH、HTTP、子进程和文件读写关系。

导入方被导入方
admin_remote.pydeploy.py
article_admin.pyblog_designs.py
article_admin.pycommon.py
article_admin.pycontent.py
article_admin.pyintake.py
article_admin.pypublication.py
article_admin.pysite_builder.py
assistant.pycommon.py
assistant.pyvisitor_data.py
blog_designs.pydesigns.py
blog_designs.pyeditorial_copy.py
blog_designs.pygallery_design.py
blog_designs.pysemantic_design.py
console.pyadmin_remote.py
console.pyarticle_admin.py
console.pycommon.py
console.pydeploy.py
console.pyemployees.py
console.pyemployees_remote.py
console.pyintake.py
console.pypublication.py
console.pysite_review.py
content.pyassistant.py
content.pycommon.py
deploy.pyassistant.py
deploy.pycommon.py
deploy.pycontent.py
deploy.pysite_builder.py
deploy.pytranslate_site.py
deploy.pyvalidate_public.py
designs.pyassistant.py
designs.pyblog_designs.py
designs.pycommon.py
designs.pyeditorial_copy.py
designs.pysemantic_design.py
editorial_copy.pycommon.py
editorial_copy.pydeploy.py
employees.pyassistant.py
employees.pycommon.py
employees.pycontent.py
employees_remote.pycommon.py
employees_remote.pydeploy.py
gallery_design.pyblog_designs.py
health.pycommon.py
install_release.pyemployee_install.py
intake.pycommon.py
intake.pycontent.py
intake.pyreport_charts.py
publication.pycommon.py
publication.pydesigns.py
publication.pyintake.py
site_builder.pyblog_designs.py
site_builder.pycommon.py
site_builder.pyeditorial_copy.py
site_builder.pyintake.py
site_review.pyblog_designs.py
site_review.pycommon.py
site_review.pydesigns.py
site_review.pyeditorial_copy.py
site_review.pyintake.py
site_review.pypublication.py
site_review.pysite_builder.py
translate_site.pycommon.py
translate_site.pydeploy.py
translate_site.pysite_builder.py
visitor_data.pyassistant.py
visitor_data.pycommon.py
worker.pycommon.py
worker.pycontent.py
worker.pyvisitor_data.py

补充依据:PRODUCT.md、README.md、docs/employee-workbench.md、docs/adaptive-design.md、deploy/*.timer、ops/state.md。历史记录中的 52 项测试 / 22 个浏览器用例属于此前交付证据,本次报告的自检单独记录,不将其当成新的功能测试。