开源 MAD Platform 通过多 Agent 编排实现了自我修正的 WCAG 合规修复流程,用 RAG 验证图片 alt-text 上下文描述的准确性,替代传统规则扫描器。
静态代码扫描器的产品困局
传统网页无障碍(WCAG)工具对非技术背景的小企业主而言,从根上就是坏的。标准规则检查器本质上只是吵闹的扫描器——它们把海量的未经核实的违规一股脑倒给用户,既无法判断图片的 alt 文本是否真正具备上下文描述性,也无法提供任何上下文验证。这使得小企业极易遭受掠夺性 ADA 诉讼,因为一份原始的、未经验证的报告并不能解决底层代码漏洞。
为了弥合这个缺口,我把在 Google All Things Agentic Hackathon 上构建的一个原型,工程化成了一个完全生产就绪的开源公共服务:MAD Platform(Multi-Agent Defense),托管于 mad-platform.org。
它不是生成一份静态报告,而是部署了一种确定性的、自纠正的多智能体编排模式——爬取、可视化、通过 RAG 验证,并输出生产就绪的修复方案。以下是我构建它的技术架构。
核心架构:Analyst 与 Editor 验证循环
在高风险的合规环境中,依赖单一 LLM 调用是产品的死穴。模型会产生幻觉——导致假阴性(让企业面临法律风险)或假阳性(浪费开发者时间)。为了达到生产级准确度,MAD Platform 将认知劳动拆分到专业智能体中,让它们相互审查彼此的执行路径。
[Web Crawler / Playwright]
│
▼
┌─────────────────────────────────┐
│ 1. ANALYST AGENT │ ◄── Discovers violations via parallel visual & code checks
└────────────────┬────────────────┘
│ (Flags Finding)
▼
┌─────────────────────────────────┐
│ 2. EDITOR AGENT & RAG │ ◄── Cross-checks findings against live screenshot & official WCAG
└────────────────┬────────────────┘
│
┌───────┴───────┐
▼ ▼
[Dismissed] [Confirmed] ──► [Reporter Agent] ──► Jira CSV / HTML
管道首先使用 Playwright 进行无头渲染、截图捕获和计算样式提取。Analyst Agent(由 gemini-3.5-flash-lite 驱动,追求高容量的成本效益)对每个页面运行三项并行检查:
确定性检查:传统代码规则解析(如原始对比度、缺失的表单标签)。
语义检查:评估结构化布局层级和 ARIA 角色。
多模态视觉检查:对实际渲染截图进行推理,检测被糟糕样式隐藏的元素。
Analyst 标记的任何违规都被视为未经验证。它会被传递给 Editor Agent(利用 gemini-3.7-flash 的高判断力推理)。
为了完全突破「幻觉屏障」,系统不依赖脆弱的 LLM 记忆。相反,我工程化了一个高精度检索增强生成(RAG)架构。系统查询一个本地化的、精心策划的向量知识库(gemini-embedding-001),其中包含精确的、未篡改的 Web 内容无障碍指南(WCAG)成功标准。这份严格的监管文本被直接注入到提示上下文中。
Editor 独立地对照原始视觉截图和检索到的 WCAG 标准的绝对 Ground Truth,对 Analyst 的发现进行交叉审查。如果证据匹配严格的法规文本,发现被确认;如果不匹配,则以经过审计、有据可查的理由驳回。
为确保平台能在无需手动代码修改的情况下扩展,一个每周一次的 Cloud Run 后台任务(pattern-miner)运行一个批处理任务。它分析来自边缘案例升级的人工驳回日志,识别反复出现的误报模式,并将它们编纂为永久性系统 grounding。随着时间推移,产品实际上在自愈其自身的知识库。
基础设施优化:零扩展可持续性
为了让这个工具对小企业永久免费,我将整个技术栈工程化为无服务器、零扩展模型,使用 Google Cloud Run 和 Firestore,将运营成本降至接近零。基础架构的资金完全来自我个人口袋。
由于公共设施需要完全透明,代码 100% 开源,采用 AGPL-3.0 许可证。需要注意的是,我们在扫描提交时严格需要经过验证的电子邮件地址,作为反滥用措施以保护我们的 API 限额免受机器人利用——无需注册账户或登录。
在线工具:mad-platform.org
开源代码:Github
当 AI 从简单的聊天界面过渡到自主工作流时,最大的障碍不是底层模型——而是我们围绕它们构建的系统架构和验证循环。您在自己的自主 LLM 工作流中如何处理错误纠正循环?欢迎在下方讨论。