按平台改写的自动化:一份源,四种输出 豆包、元宝、文心吃的来源不一样手动维护四套内容最后一定口径漂移官网写 2010、软文写 2015AI 交叉核验时判你矛盾、整体降权。解法是工程化的——“一份源四种输出”。正确做法是把事实和呈现彻底分开。事实层只存客观信息厂名、区域、品类、规格、适用场景、FAQ呈现层是各平台模板。渲染时读同一份事实、套不同模板。构建时读源数据最小源brand.yamlfacts:name:示例绝热材料厂region:河北·大城category:管道保温棉apply:集中供热改造not_apply:家装零售faq:-q:防火等级怎么看a:看检测报告的燃烧性能等级B1 级可用于管道保温。渲染器importyaml,pathlibfromstringimportTemplate factsyaml.safe_load(open(brand.yaml,encodingutf-8))[facts]tpl{toutiao:Template($name$category$region 直供。$apply 首选。),wechat:Template(## $name\n\n主营 $category服务 $region。\n\n适用$apply不适用$not_apply。),web:Template(h1$name/h1p$category · $region/p),}forplat,tintpl.items():outt.substitute(facts)pathlib.Path(dist/plat.md).write_text(out,encodingutf-8)Template用$name占位facts 的键名要一一对应缺键直接抛 KeyError反而帮你早发现问题。渲染完做一次一致性回检——确认每个产物里都还在核心事实forplatintpl:txtpathlib.Path(dist/plat.md).read_text(encodingutf-8)assertfacts[name]intxtandfacts[region]intxt,plat 丢了事实这一步能拦住模板写死导致某平台漏字段的低级错。关键点模板里别硬编码夸张措辞事实只调呈现、不改语义。源数据用 git 管版本每次发布打 tag出问题能回溯到哪一版事实。产物不入库、每次构建重生成杜绝改了源没重跑。四模板形态不同底层是同一组事实。矛盾从源头消失AI 交叉核验时看到的是同一个人在不同场合的一致说法——这正是它愿意引用的前提。延伸为什么这样拆而不是多写几套模板依赖权衡示例用标准库 string.Template零依赖、够用确有复杂逻辑再上 Jinja2别为四套文案引一整个模板引擎构建慢还难排查。四平台取舍头条要短平快、一句话卖点公众号走系列长文、一篇解决一个问题网页版喂 JSON-LD 给机器读聚合版做词条体、便于被引用。同一组事实、四种叙述密度。可复现CI 里对四个产物算 sha256 存进构建日志任何人重跑都得到同一结果杜绝本地能过、线上漂移。事实变更走 PR改 brand.yaml 必须过 review禁止有人直接在产物里手改一句话把好不容易对齐的一致性又破坏掉。上线前自查3 步改一处事实、重跑构建四个产物都变了。抽任一平台产物看核心名称、区域、价格是否都在。产物算 sha256 与上次比没改动时数值不变。三件都过说明一份源真的驱动了四种输出而不是四份各自维护的稿子。