【免费下载链接】openpencil
The world's first open-source AI-native vector design tool and the first to feature concurrent Agent Teams. Design-as-Code. Turn prompts into UI directly on the live canvas. A modern alternative to Pencil.
OpenPencil 的 AI 设计引擎内置了一套"文案纪律"——copywriting技能,它用几条硬性字数约束把 AI 生成的界面文案压缩到"可读、可信、可转化"的密度。本文以 copywriting.md 为核心,逐条拆解这些规则,并深入 op-ai-skills 的 frontmatter 解析、意图匹配、预算裁剪管线,说明这份知识包是如何被触发、被调度、被注入最终生成提示词的。读完你将掌握:OpenPencil 中文案规则的确切边界、它们与 landing-page / anti-slop / text-rules 等技能的配合方式,以及如何在get_design_prompt等工具中单独提取这套文案指南。
一份 1000 token 的"文案纪律"知识包
copywriting是 op-ai-skills 技能语料库(crates/op-ai-skills/skills/)中knowledge/子目录下的一份知识型技能。它的正文极短,是典型的"规则即技能"设计——全部约束浓缩成几行:
COPYWRITING: - Headlines: 2-6 words. Subtitles: 1 sentence <=15 words. - Feature titles: 2-4 words. Descriptions: 1 sentence <=20 words. - Buttons: 1-3 words. Card text: <=2 sentences. Stats: number + 1-3 word label. - NEVER 3+ sentence paragraphs. Distill to essence. Power words > vague adjectives.这份正文由 YAML 风格的 frontmatter 元数据驱动,先看它的完整头部:
--- name: copywriting description: Concise copywriting rules for design text content phase: [generation] trigger: keywords: [landing, marketing, hero, website, 官网, 首页, 产品页, copy, text, headline, content, 文案, 标题, 内容] priority: 40 budget: 1000 category: knowledge ---逐字段含义如下(对应 frontmatter.rs 中parse_skill_frontmatter的解析逻辑,见该文件 L189-L249):
| 字段 | 取值 | 工程含义 |
|---|---|---|
name | copywriting | 技能唯一标识,get_skill_by_name("copywriting")直接按此查找 |
description | Concise copywriting rules for design text content | 技能语义说明 |
phase | [generation] | 仅在 generation(生成)阶段参与解析,planning / validation / maintenance 不加载 |
trigger | 13 个中英文关键词 | 意图触发条件,命中任一关键词即激活(SkillTrigger::Keywords) |
priority | 40 | 同类别技能内优先级排序,数值越小越靠前 |
budget | 1000 | 单技能 token 上限,超出会被裁剪(Step 1 per-skill cap) |
category | knowledge | 预算填充中的最低优先级类别,仅在预算有余量时加入 |
注意 types.rs 中SkillCategory::from_str的解析:"knowledge"映射为Knowledge,未知或缺失则默认Domain。所以这份技能的类别是显式声明的——它在整个预算体系中属于"锦上添花"的一档。
触发机制:哪些设计意图会激活文案规则
copywriting的触发词覆盖了营销向设计最常见的意图,中英文各有一套:
- 英文:
landing、marketing、hero、website、copy、text、headline、content - 中文:
官网、首页、产品页、文案、标题、内容
匹配语义由 resolver.rs 的match_keyword实现,它复刻了 TS 版解析器的词边界语义:
- ASCII 关键词按词边界匹配:
copy能命中 "write the copy for this landing page",但不会命中 "copyright" 这类包含子串的单词(resolver.rs 有对应单测keyword_respects_word_boundaries)。 - 中文等非 ASCII 关键词退化为子串匹配:
文案命中 "帮我写一段首页文案",因为 CJK 没有空白词边界概念。 - 触发是"任一命中"(any):
match_trigger对Keywords使用.any(),只要用户消息里出现 13 个词中的任何一个(大小写不敏感),技能就进入候选集(resolver.rs)。
在 loader.rs 的测试中,copywriting与role-definitions、cjk-typography一起被当作"换行数组 / 块列表触发语法"的回归用例——它的keywords数组把[放在下一行开头,解析器必须正确处理这种续行格式,否则技能会静默失效。
从触发词的重合度可以看出,copywriting与 landing-page.md(触发词 landing/marketing/hero/homepage)、anti-slop.md(触发词 landing/website/marketing/homepage)高度联动:一份落地页生成请求往往会同时命中这三份技能,分别贡献"文案纪律"、"转化深度"与"反 AI 味"。
规则逐条拆解:界面文案的六条硬约束
copywriting的正文是给生成模型的指令,用词精确、阈值明确。逐条拆解并给出实战含义:
1. Headlines: 2-6 words(主标题 2-6 个单词)
主标题是页面第一屏的唯一焦点。2-6 词意味着:要么是短促有力的价值主张,要么是情感化的一句话。这与 landing-page.md 的标题强度层级(Headline hierarchy)直接呼应——该技能要求从强到弱排列:transformation("Finally feel in control of your inbox")> outcome("Ship more content, grow your audience")> benefit("Write 10x faster")> feature("AI-powered writing assistant"),并明确"Lead the hero with transformation or outcome; benefit/feature only in supporting copy"。两条规则叠加后的结论是:主标题不仅要短,还要落在强度层级的高位。
2. Subtitles: 1 sentence <=15 words(副标题一句话、不超过 15 词)
副标题负责补全主标题的语境,但只允许一句话。落地页的 hero 区在 landing-page.md 中定义为"ONE headline (40-56) + ONE subtitle (16-18) + ONE CTA"的结构,即每个模块只有一个主标题、一个副标题、一个行动按钮——文案规则从字数上保证了这一点。
3. Feature titles: 2-4 words. Descriptions: 1 sentence <=20 words(特性标题 2-4 词,描述一句话不超过 20 词)
特性网格(feature-grid)里的每个卡片:标题极短,描述一句话封顶。20 词约等于一行半正文,配合 text-rules.md 的排版约束(Body 16-18px、正文行宽 50-75 字符)正好能形成干净整齐的卡片网格。
4. Buttons: 1-3 words(按钮文案 1-3 词)
按钮是转化路径的终点,文案必须是最小可行动的祈使短语,如 "Sign up"、"Get started"、"Book a demo"。这与 role-definitions.md 的 button 角色默认值(padding=[12,24]、height=44、cornerRadius=8)配合,短文案能确保按钮在默认尺寸下不会溢出或换行。
5. Card text: <=2 sentences. Stats: number + 1-3 word label(卡片正文不超过两句;统计数字 + 1-3 词标签)
卡片正文最多两句话;统计数据必须是一个数字配一个极短标签(如 "12K+ users")。后者与 landing-page.md 的stats-section原型(3-4 个大数字 + 标签)完全一致。
6. NEVER 3+ sentence paragraphs(禁止三段以上长段落)
这是全篇唯一的"绝对禁令"(NEVER)。长段落会破坏界面节奏,也与 landing-page 的节奏原则("Alternate density: never stack two sections of similar weight")互为表里——文案短,视觉才能呼吸。
7. Distill to essence. Power words > vague adjectives(提炼到本质;力量词优先于含糊形容词)
"Power words"指具体、有画面感、能触发情绪反应的词;"vague adjectives"指 "great"、"nice"、"modern" 这类空泛修饰。这条规则要求模型在措辞选择上做减法:宁可 "launch"、"grow"、"ship" 这种动词,也不用空洞的形容词堆砌。
调度机制:knowledge 类技能如何进入最终提示词
copywriting的 category 是knowledge,这决定了它在解析管线中的命运。整个解析由 resolve.rs 的resolve_skills入口驱动,四步流水线(与 lib.rs 的 crate 级文档描述一致):
- phase filter:只保留
phase: [generation]的技能; - intent match:
filter_by_intent按触发词/标志过滤,并按priority升序排序; - memory injection:注入
{{recentHistory}}等占位符(generation 阶段自动填充近期生成历史); - budget trim:
trim_by_budget_pinned按预算裁剪。
关键的第四步在 budget.rs 中实现,按类别分四段填充:
- Step 1:每个技能先按自己的
budget封顶——copywriting的 1000 token 上限在这里生效,内容超限会被截断到 1000 token 内; - Step 2:
Base类技能永远保留(预算豁免); - Step 3:
Domain类技能按 (priority, relevance) 填充剩余预算; - Step 4:
Knowledge类技能只在预算还有余量时按相关性排序加入,只跳过、永不截断。
这意味着:copywriting是"有则加,无则弃"的尾段技能。在 generation 阶段默认 13500 token 预算(见 types.rs 的default_budget与DEFAULT_BUDGETS)下,它通常能与landing-page、anti-slop、role-definitions一起进入最终提示词;但若预算被高优先级技能占满,它会是首批被BudgetExhausted标记丢弃的技能之一。
另外,budget.rs 有一条回归测试no_skill_silently_exceeds_its_own_budget,遍历整个注册表断言每个技能的实际 token 数不超过自身budget——copywriting的正文(约 150 字符,估算约 40 token)远低于 1000 上限,因此永远走不到 Step 1 的截断分支。
实际调用链:从 MCP 工具到 orchestrator 编排
copywriting的内容在两条路径上被消费:
路径一:MCPget_design_prompt工具(按需取段)
在 design_prompt.rs 中,copywriting被列进PROMPT_SECTIONS的 30 个可查询分段之一。调用get_design_prompt工具并传section="copywriting"时,section_content直接返回skill_content("copywriting")(见 design_prompt.rs),即完整读取注册表中这份技能的全部正文——这也是外部 Agent 想单独获取"OpenPencil 文案规范"时的标准入口。
路径二:orchestrator 技能过滤(按设备形态裁剪)
在 compact_skills.rs 的基础过滤中有一条针对移动屏的规则:
if is_mobile_screen && (name == "landing-page" || name == "copywriting" || name == "anti-slop") { return false; }即移动端屏幕会整体丢弃copywriting——移动屏的文案天然更短、节奏更紧凑,营销向的文案深度规则与移动端布局深度(mobile-app 技能)冲突,因此被裁剪。对应的单测在 compact_skills.rs(base_filter_drops_landing_copy_antislop_on_mobile)。此外该文件还提到copywriting不在 Basic 档模型的 ALLOWED 集合中(compact_skills.rs 的测试注释)。
拼装层:compose_system_prompt
当需要把多个技能拼成一个系统提示词时,compose.rs 的compose_system_prompt按名称顺序拼接内容,超出字符预算时从尾部整体丢弃技能——因此调用方通常把copywriting放在列表靠前位置以保证其优先保留。拼装结果最终嵌入到设计 Agent 的工具循环提示词中,成为get_guidelines之外另一条注入文案纪律的通道。
实战:把文案规则用进 AI 生成页面
综合上述机制,在 OpenPencil 里让 AI 产出"有文案质量"的页面,可以遵循这套工作流:
- 先写文案,再定布局:这是 landing-page.md 明确要求的工作顺序("Define the copy first, then design around it — words drive layout, not the reverse")。在提示词中先给出主标题、副标题、CTA 的具体措辞,再让模型围绕它们设计结构。
- 让触发词自然命中:在生成请求中使用
landing、hero、文案、标题等词,确保copywriting(以及联动的 landing-page、anti-slop)进入候选集。 - 按模块核对六条规则:生成结果可逐模块套用下表检查:
| 模块 | 规则 | 上限 |
|---|---|---|
| 主标题 Headline | 2-6 words,落在 transformation/outcome 层级 | 6 词 |
| 副标题 Subtitle | 一句话 | 15 词 |
| 特性标题 Feature title | 短语 | 4 词 |
| 特性描述 Description | 一句话 | 20 词 |
| 按钮 Button | 祈使短语 | 3 词 |
| 卡片正文 Card text | 短句 | 2 句 |
| 统计 Stats | 数字 + 短标签 | 1-3 词标签 |
| 任意段落 | 禁止 3 句以上长段落 | — |
- 移动端注意裁剪:若目标是手机屏(375-812 等),orchestrator 会主动丢弃
copywriting,文案约束改由移动端相关的设计原则兜底——不要期望移动屏提示词里出现这份技能。
延伸阅读
- copywriting.md:本文核心技能原文
- landing-page.md:文案强度层级、hero 结构、转化节奏
- role-definitions.md:语义角色系统与默认属性
- text-rules.md:字号层级与换行规则
- anti-slop.md:反 AI 味与跨生成多样性
- frontmatter.rs:frontmatter 解析实现
- resolver.rs:关键词触发匹配语义
- budget.rs:预算裁剪四步流程
- resolve.rs:技能解析主入口
- design_prompt.rs:MCP 按段取用文案技能
- compact_skills.rs:移动屏/低档模型的技能裁剪
【免费下载链接】openpencil
The world's first open-source AI-native vector design tool and the first to feature concurrent Agent Teams. Design-as-Code. Turn prompts into UI directly on the live canvas. A modern alternative to Pencil.
相关推荐
Lightdash AI Writeback 的跨仓库共享规则:`_shared.md` 技能文件的机制、规则与实现拆解
Lightdash AI Writeback 的跨仓库共享规则: _shared.md 技能文件的机制、规则与实现拆解 Lightdash 的 AI Write
后端前端数据分析数据可视化人工智能AI AgentClawX 上下文压缩进度与边界规范:keepRecentTokens=0 下 OpenClaw 压缩行为的完整解析
ClawX 上下文压缩进度与边界规范:keepRecentTokens=0 下 OpenClaw 压缩行为的完整解析 本篇文章围绕 ClawX 对 OpenCl
人工智能AI 应用桌面应用交互助手caveman-shrink:压缩 MCP/OpenAI 工具目录的 Token 工程——caveman 项目中 fail-open 与可逆压缩的设计拆解
caveman shrink:压缩 MCP/OpenAI 工具目录的 Token 工程——caveman 项目中 fail open 与可逆压缩的设计拆解 ca
人工智能AI 应用AI 技能AI 插件LLMOps开发工具
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考