news 2026/9/3 9:06:48

Hallmark 如何让连续生成的AI页面不重样:.hallmark/log.json 项目记忆完整机制

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Hallmark 如何让连续生成的AI页面不重样:.hallmark/log.json 项目记忆完整机制

Hallmark 如何让连续生成的AI页面不重样:.hallmark/log.json 项目记忆完整机制

【免费下载链接】hallmarkAnti-AI-slop design skill for Claude Code, Cursor, and Codex.项目地址: https://gitcode.com/GitHub_Trending/hal/hallmark

Hallmark 是一款面向 Claude Code、Cursor、Codex 等 AI 编码工具的防 AI 味(anti-AI-slop)设计技能。它会在项目根目录维护一个.hallmark/log.json项目记忆文件,记录每次生成的页面结构与主题;每次生成前先读取这份记忆、自动排除最近用过的组合,让连续运行十次,产出的页面也各不相同。本文拆解这套"记忆"机制的完整运转逻辑。

为什么 AI 连续生成的页面总是一样

先问一个问题:AI 生成的页面,最大的毛病是什么?是"长得都一样"——顶部大标题 hero、中间三张功能卡片、CTA 按钮、四栏页脚,同一套字体、同一种版式节奏,换皮也认得出是同一个模板。

根源在于两点:其一,AI 在两次运行之间是无状态的,它不记得上次生成过什么;其二,模型被海量同构页面训练过,一旦没人约束,它就会退回到训练数据里出现频率最高的"默认答案"。🧠

Hallmark 的对策分两层:

  1. 换结构,而不只是换色——每次生成前必须从 21 种命名宏观结构(页面骨架)和 22 种命名主题(字体 + 配色)里各挑一个;
  2. 把记忆外置——把每次选择写进项目里的.hallmark/log.json,下次生成前先读这个文件,知道"最近用过什么"并主动排除。

前者给它"不同"的能力,后者让"不同"成为硬规则。

项目记忆机制如何运转:读历史 → 排除重复 → 留记录

整套机制可以概括为三步循环,全程自动发生,不需要任何手动维护。

① 生成前,先读历史

当 Hallmark 接到设计任务时,如果发现项目根目录存在.hallmark/log.json,会先读取再挑选宏观结构和主题。文件是一个 JSON 数组,最新的生成记录排在最前面,每条包含 5 个字段(示例摘自 skills/hallmark/SKILL.md):

[ { "date": "2026-04-30", "macrostructure": "Bento Grid", "theme": "Linen", "enrichment": "E1 clipped-edge", "brief": "Tracejam · SaaS observability" }, { "date": "2026-04-28", "macrostructure": "Long Document", "theme": "Linen", "enrichment": "E5 hand-built SVG", "brief": "Maple Street Bread · bakery" }, { "date": "2026-04-25", "macrostructure": "Manifesto", "theme": "Manifesto", "enrichment": "none", "brief": "Meridian · studio manifesto" } ]
字段含义
date生成日期
macrostructure使用的页面骨架(21 种之一,如 Bento Grid、Manifesto、Letter)
theme使用的主题(22 种之一,或 custom 定制主题)
enrichment首屏视觉增强方式(E1–E8,或 none 纯排版)
brief需求的一句话摘要

② 挑选结构时,执行排除

光读历史还不够,规则规定了挑选时的三条"不许"(见 SKILL.md Step 2.5):

  • 结构不重复:宏观结构不得与最近 3 条记录中的任何一个相同;
  • 主题"三轴不同":连续两次的主题,必须在 ① 纸张明度带(暗 / 中 / 亮)② 展示字体风格(斜体衬线 / 等宽 / 几何无衬线……)③ 强调色相(暖 / 冷 / 中性……)中至少有一个轴不同
  • 首屏增强不重复:enrichment 原型不得与上一次相同——连用两次同样的首屏处理,即使内容不同也会读起来像模板。

导航和页脚原型同样纳入轮换:连续两次输出不得共享同一个导航原型或页脚原型(见 SKILL.md)。

③ 生成后,留下记录

写完 CSS 文件后,Hallmark 把新记录追加到数组最前面,并把文件裁剪到最近20条(最老的被移出),规则见 SKILL.md Step 6。这个文件正是下一次运行 Step 2.5 要读的东西——形成闭环。文件不存在?第一次生成时自动创建.hallmark/目录和文件;用户不想把它提交进仓库,加进.gitignore即可,机制完全尊重用户选择。

为什么 AI 必须"把挑选说出来"

机制还要求 Hallmark 在挑选前用文字公开轮换过程,例如:

最近 5 次构建:Bento Grid(Tracejam)· Bento Grid(Foundry)· Long Document(Maple)· Manifesto(Meridian)· Quote-Led(Tide)。Bento Grid 用了 2/5 —— 这次从 {Marquee Hero, Stat-Led, Workbench, Letter} 里挑,我选 Marquee Hero。

这是给用户的"问责线":如果 AI 跳过这段声明,你一眼就能看出它是否在敷衍差异化规则。三种典型形态各有处理方式——首次运行(无 log.json)不声明、直接挑结构;成熟项目(5 条以上记录)按"频率统计 + 排除清单 + 选择"完整声明;用户明确要求"再来一次同样的结构"时,Hallmark 会保留结构但更换内部参数旋钮,做到"同骨架、不同指纹"。

真实轮换案例:Tide 播客页面两次生成的变化

仓库里有一个可直接阅读的实例:同一个需求"给我的独立播客 Tide 做个落地页"生成了两次,完整记录见 site/_tests/01-tide-podcast/brief.md。

维度第一次(v1)第二次(v2)
宏观结构Quote-Led(引言先行)Letter(信件先行)
主题AtelierSalon
主题三轴亮 / 斜体衬线 / 暖亮 / 等宽展示 / 暖
微交互仅光标闪烁一处

同一个需求,产出了两个气质完全不同的页面:v1 用听众的引言来"框定"播客,v2 由主播第一人称写给听众的信;主题轮换在"展示字体风格"轴上不同(斜体衬线 → 等宽展示),顺利通过差异化门槛。官方测试报告还确认:八个不同需求在一次轮换会话中连跑,没有任何两个页面共享宏观结构或主题——见 site/_tests/README.md。

下面是官方示例集中的两个需求产出,一明一暗、骨架不同、首屏不同:

值得知道的细节:什么时候写、什么时候不写

几个边界情况 📝:

  • 组件范围不写记忆:只让 AI 设计一个按钮、卡片、输入框时,页面级装置(宏观结构、页脚、项目记忆)整体不适用,log.json不会写入任何条目——组件不参与轮换;
  • 定制主题条目多两个字段theme_axes(三轴的具体取值)和可选vibe(4–8 个词的氛围描述),格式见 custom-theme.md § F。差异化规则是"主题路由无关"的——定制主题对比目录主题,执行完全相同的检查,没有豁免通道;
  • 只有 CSS 戳记、没有 log.json:Hallmark 会从 CSS 戳记推断出一条记录,照常轮换;
  • 多页面重设计只写一条:带"scope": "app"标记,而不是每页一条,见 redesign.md。

项目记忆规则在哪里定义:模块路径

内容路径
主规则文件(Step 2.5 读取 + Step 6 写入)skills/hallmark/SKILL.md
读历史与排除规则(Step 2.5)skills/hallmark/SKILL.md#L292-L327
主题三轴定义(明度带 / 字体风格 / 色相)skills/hallmark/SKILL.md#L272-L274
写入 log.json、裁剪至 20 条(Step 6)skills/hallmark/SKILL.md#L457
定制主题条目格式skills/hallmark/references/custom-theme.md#L202-L218
22 个主题的三轴取值来源site/css/tokens.css
真实轮换记录site/_tests/01-tide-podcast/brief.md
"同一配方跑两次应产出不同结构"docs/recipes.md#L185

一句话总结

.hallmark/log.json是 Hallmark 的"生成台账":每次生成写一行,每次生成前读一遍,只保留最近 20 行。它把"别和上次一样"从一句口号,变成了可执行、可检查、可追溯的硬规则 ✅——这正是设计技能让连续 AI 生成页面"像做出来的,而非像生成的"的关键所在。

【免费下载链接】hallmarkAnti-AI-slop design skill for Claude Code, Cursor, and Codex.项目地址: https://gitcode.com/GitHub_Trending/hal/hallmark

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/3 9:06:05

Unity与Godot UI架构对比:容器布局、主题资源与工程实践

如果你用 Unity 做过几年 UI,心里应该攒了不少“别扭感”。比如界面层级一多,Anchor、Offset、Scale 就开始互相打架;比如一套皮肤想全局换色,要么写一大堆静态配置,要么在预制体里翻半天颜色;比如程序想动…

作者头像 李华
网站建设 2026/9/3 9:05:24

工业级焊缝缺陷检测系统:YOLOv8轻量化+领域适配实战

简介:本资源是一套面向计算机、人工智能、自动化等专业在校学生及初学者的化工管道焊缝缺陷检测实战项目,基于YOLOv8实现高精度目标检测,解决工业质检中焊缝裂纹、气孔、未熔合等典型缺陷的自动识别问题,适用于毕业设计、课程设计…

作者头像 李华
网站建设 2026/9/3 9:04:30

从iri2016安装到应用:Python调用Fortran电离层模型的完整指南

简介:本资源是面向大气科学、无线电通信及空间物理领域研究者的Python专用库iri2016-1.5.1,封装了国际无线电咨询委员会(ITU-R)2016年推荐的大气折射率模型,用于高精度计算不同高度、时间与地理位置下的电波传播路径弯…

作者头像 李华
网站建设 2026/9/3 9:03:36

AI代码审查毕业设计:从概念到实践的分层架构与实现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/3 9:01:08

雷达杂波与干扰仿真:从统计模型到MATLAB实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华