我没把 AI 当写代码的工具。
我把它的三个约束,当成了设计原则。
做这个文博产品,真正难的不是让 AI 写出 demo。是 AI 自己带着三条硬约束——角色有边界、上下文冷启动、文件系统即状态。 多数人把它们当限制绕过去;我把它们翻成产品和协作的设计原则。点一张卡,看每条约束逼出了什么决定。
AI PM 的关键不是用 AI 写代码,是把 AI 的约束当成设计原则。
这是一个完整的作品集:给博物馆中度爱好者的 AI 原生陪看 / 收藏产品,以青铜器为第一个垂类。产品定位、PRD、四份 ADR、一个能跑的 demo、277 件结构化文物数据、一套 RAG 知识发现管道——以及把这一切做出来的方法。
但它不是一个「功能很全的 demo」。它最强的气质是诚实纪律:拒绝伪造数字、把找不到当产品哲学、主动抓自己的双标。下面这一页,我让方法论先讲——多 agent 怎么搭、审计怎么驱动迭代、RAG 怎么把幻觉挡在门外——产品和 demo,是这套方法指向的实物证据。
一个 CC0 的反讽底座
THE FOUNDING IRONY做中文文博 AI,第一个工程问题是:图像和元数据的底座从哪来。国内没有一家馆达到 Met、V&A、Smithsonian 那种开放度——没有公开 API、没有 CC0,立体文物的高清摄影还在著作权灰区。
反讽在这里:约 1900 年起大量流散海外的中国文物(北朝佛造像、青铜、玉、瓷),近十年被 Met、克利夫兰、弗利尔、V&A 等海外馆以 CC0 释出了高清图加元数据。
做一个面向中国大陆用户的 AI 文博产品,最稳、最干净、最可放心向量化的图像底座,不是任何一家国内馆,而是这些海外馆的 CC0 数据集。
于是一期切片定为「天龙山:从晋阳到世界——北朝佛造像的流散与数字回归」。流散叙事本身就是产品的内容,不是被叙事服务的题材。这条线后面会在地图上画出来。
把一个人,拆成一支队伍
THE AGENT TOPOLOGY一开始是我一个人。下了 4,466 张 Met 的图、写了 800 行 chunks pipeline 之后才意识到一件事:我既出方案又评方案,没有任何制衡。这正是第一个 AI 约束——角色有边界——给的解法:与其要一个全能助手,不如组一支职责单一、互相制衡的 agent 队伍。
每个 agent 有自己的 constitution。Builder 只从已签的清单取活、不评自己的产出、不顺手扩 scope、产出要 PM-Critic 和 Strategy-Curator 双签才能合并。点节点看它的边界;切换两套拓扑——白天的常驻团队,和夜跑时的生产编队。
全程 escalations.md 是 0 条目——这支队伍从没真正需要打断我。成本也按判断重量路由:Opus 给判断重的角色,Sonnet 给执行,全 Opus 要贵三倍以上。
审计者,直接驱动下一轮
AUDIT-DRIVEN ITERATION审计者写完 report,同时产出 next-iteration-brief,直接驱动下一轮;严重的问题可以推翻整轮,回到 Researcher 或 Designer 级重做,而不是在 Builder 级打补丁。六个审计人格,各看一个面:
然后出了一件事,它成了整个作品集最强的反思信号。v3 的 demo 被这五个只读审计全部放行。我自己一点——点了后母戊鼎和何尊以外的任何一件——每次都跳回后母戊鼎。
根因:2 条硬编码的 MOCK 静默覆盖了其余 275 件。五个只读审计都是「近视读者」,读源码、看一两页,没人真去点。于是我加了第 7 个 Runtime Auditor——唯一一个真去点击、开 DevTools、查 network 的审计,它的判定对其他审计 binding,外加 8 项强制验证清单。
Persona Auditor 判 demo 好不好;Runtime Auditor 判 demo 存不存在。
反幻觉,靠一台状态机硬门
OPEN DISCOVERY PIPELINE知识底座需要为每件展品,从馆方、海外 OA、学术、现场、数字人文五类源里,拼出一个多维 bundle。幻觉就藏在这一步。我没让模型「自觉别编」——我让它走一台状态机:每条资料必须带齐五个字段,缺一个就降级或拒收。喂一条进去看它怎么判:
三个子 agent 不能合并,因为三件样本暴露的是三种不同的幻觉:Discovery 只列 URL 候选不抓,Verifier 逐条抓加指纹加 license,Compiler 装订加反幻觉硬门。它们还跑在两个环境里——沙箱对所有外网返回 403(白名单只剩 GitHub 和 pypi),所以拆成「沙箱动脑、我本机动手」。
最后我连操作员都不想当了:贴一段 prompt 给本机的 Claude 就去睡。7 个阶段各带时间盒、8 小时硬截止、不中断我。2026-06-07 那夜约 1 小时跑完——104 条 verified chunk(100 ok / 4 failed)、28 个 bundle、平均 3.6 类源每件,T3 零违反:0 次注册、0 封邮件、0 次绕过。
诚实,不是态度是纪律
THE HONESTY GENE反幻觉硬门最干净的一次自证,是它拒绝替我编一个真相。同一件文物,三套互相打架的产地叙事——AI 没有挑一个当真相,而是把三层叠在一起,呈现张力。点「让 AI 编一个真相」看它怎么回。
「北齐白石佛立像(响堂山系)」——暗示来源在河北响堂山、邺城域。
上博展线 + 澎湃报道 · (c) all-rights题名「石佛像」,北齐,高 144cm;产地『山西』,来源『山西省博物院调拨』。馆方自己的字段,并不背书『响堂山 / 河北』。
shanghaimuseum.net · CI00159756 · (c) all-rightsV&A:『probably from Xiangtangshan, Hebei』;Met 42704:culture『China (Southern Xiangtangshan)』——同窗口北齐佛头,出处都写河北响堂山。
V&A / Metropolitan Museum · V&A unknown · Met CC0三方说法并不一致。反幻觉硬门只认实抓到的字段——它把这件的旧样本,从『馆方自标响堂山 → V&A 闭环』当场改写成『山西 vs 响堂山』的张力件,因为抓回的馆方字段不支持原说法。AI 把这三层叠给你看,不替馆方拍板哪个是真相。
定为红山文化(约前 4500–3000)。私立馆无公开编号,本件无考古出处——私人收藏捐入。
震旦博物馆典藏 · (c) all-rights2020《玉出红山》专题,以牛河梁科学发掘背书『红山五千年』的文化序列。
中国国家博物馆 · (c) all-rights『所有被归为红山的玉神人,没有一件经科学发掘出土;它们的红山归属基于风格判断,不是地层学。』
OCS 讲座 + MDPI Arts(CC-BY) · CC-BY / OA馆方说明牌大概不会写『本件无考古出处』。AI 可以 surface 这层——不是说馆方错,是把『谁在用什么底气说这是红山』摊给你看。找不到一手出土叙事,本身就是产品要呈现的素材。
这条纪律也对着我自己。round-2 的冷审计逐字抓出我的双标:
你在 §5.9 拒绝伪造一个 CLIP 的 P@5 数字、说「假数字直接 disqualify」,却在同一周的商业文档里伪造了 9 个 load-bearing 的商业指标、零引用——这种诚实是选择性表演,不是纪律。
指控成立。这是双标。修法不是道歉,是上标签纪律:建一份 assumptions-register,24 个数字逐个打 [M] 实测 [B] benchmark [A] 假设,任何假设数字出现的地方必须带「假设」标注,不许裸奔成事实。沙箱里那个 pHash 基线真跑出 P@5 = 0.667——一个故意诚实的、近乎无用的真数字,作为 CLIP 必须打败的下限,而不是一个好看的假数字。
方法论指向的实物:一个能跑的 demo
THE RUNNING DEMO上面那套方法,落地成 14 个 HTML、28/28 Playwright 绿的可跑 demo。最能说明问题的是这个三联动 dashboard:六个 window 事件(带 source 字段防环)把时代柱、古国地图、文物卡串起来。点任一处,三处一起响应。
诚实标一句:这套事件总线不能跨标签页(CustomEvent 的局限),同屏三联动是 workaround——5 个审计和 D2 都把它标成 P0。它证明的是联动这件事成立,不是它已经产品化。
流散与数字回归
THE DIASPORA MAP接 01 那条反讽底座,把它画出来。真实地理地形——12 条山脉、6 大河、盆地——用兰勃特等积圆锥投影渲染,不是示意图。它回答两个产品要讲的问题:为什么三星堆在那里(它和中原之间隔着整个秦岭加大巴山),以及这些文物如今流散在哪。切换三视图,海外那一档会画出从出土地到海外馆的流散弧。
一个反成瘾的收藏产品
THE PRODUCT, RESTRAINED产品的人格是「同行的资深爱好者」,不是讲解员——自称我和咱们、默认不教学、先反问。它有一条克制基因:零 push、零红点、零徽章、零连胜,黑底巨大留白,每张卡都有一个「合上手机」按钮,把人推回到实物面前。
青铜器的意义被拆成 7+1 个维度,每个维度映射一个产品形态,再挂一个驱动收集的动机钩子:
北极星是 WAC——周活跃收藏者,过去 7 天往个人博物馆加过至少 1 件的注册用户。我特意没用 DAU 或时长:用 DAU 当北极星会逼出打卡推送,等于用一个指标做坏产品;时长还跟核心价值负相关。下面这些是我明确拒绝做的:
它不是什么
WHAT IT IS NOT没有小程序移植。这是作品集与原型,不是上线产品。
沙箱防火墙挡了 HuggingFace / Wikimedia / pytorch,CLIP 识别只是生产形态 stub,真 P@1/P@5 待本机跑。
只有 9 人粗访。所有 KPI——含 WAC 目标、商业模型——都是标了「假设」的数字。
CustomEvent 不能跨标签页。同屏三联动是 workaround,被 5/5 审计标 P0。
摊在桌上的数字
BY THE NUMBERS杠杆大约 30–40×:8 到 9 个人周的活,2 个夜班里跑完。$40–50 的成本、4.5M tokens 都有账,人周折算是我自己拍的,标「假设」。
现在的状态
STATUS这个项目最值钱的不是 demo,也不是那 277 件数据。是一套能复用的方法:把 AI 的约束当设计原则,把审计做成能推翻自己的牙齿,把诚实做成挡在门口的状态机。对一个 AI 产品经理,这比多做几个功能更说明问题。
版本号有两套口径,我按「做了什么」讲、少纠缠编号。数据与交互的真实数据出自源仓库分支 claude/museum-photo-sharing-8qJiz;dashboard 的 12 件是 277 件里 curate 的样例子集(已标),地图的地形、出土点、馆藏点是真实 geojson,流散弧为示意路径。RAG 夜跑日期 2026-06-07。