Skip to main content

【阻力 1】Cursor 批量生成组件 Schema

完全可以,而且这正是目前大厂前端架构师在推进“组件标准化”时效率最高、最接地气的落地方式。 你提到的这个思路非常赞,因为它巧妙地避开了自己从零去写大模型批处理脚本的开发成本,直接复用了 Cursor 强大的本地上下文理解能力。 但在实际操作中,不能只是简单地对 Cursor 说一句“帮我生成 Schema”,必须配合结构化的 Prompt(提示词模板)和 Cursor 的高级功能,才能生成真正能给低代码引擎消费的高质量文档。 以下是利用 Cursor 高效生成规范 Schema 的具体实操指南:


一、核心技巧:编写一份“主厨级”的 Prompt 模板

Cursor 底层使用的是 Claude 3.5 Sonnet 或 GPT-4o,它们对代码的理解能力极强,但对“JSON Schema 的格式要求”需要非常明确的规范。 你可以在项目的根目录下创建一个 .cursorrules 文件,或者在和 Cursor 对话(Ctrl + K 或 Chat 侧边栏)时,直接丢给它下面这段黄金提示词(Prompt):

Role: 你是一个极其严苛的前端架构师和低代码专家。
Task: 请阅读我选中的 TypeScript 组件源码,为该组件生成一份用于低代码引擎消费的 schema.json。
Specification:

1. 严格符合 JSON Schema 草案规范。
2. 必须深度解析 TS Props 类型。遇到外部 import 的类型,请结合上下文推断。
3. 属性描述 (description):必须是高质量、大白话的中文业务描述,写明该属性在电商活动中的具体作用(例如:不要写“按钮类型”,要写“大促按钮的视觉风格,如爆款红、高亮黄”)。
4. 约束挖掘 (enum/default):请深度阅读组件内部的 if/else、switch 或样式逻辑,挖掘出隐藏的枚举值(enum)和默认值(default)。
5. 输出格式:只返回纯 JSON 块,不要任何解释,不要 Markdown 包装。

二、借助 Cursor 的高级功能破除“依赖盲区”

前面提到过,纯模型处理最大的痛点是“顺藤摸瓜”,即组件引了外部文件的类型,模型看不见。在 Cursor 中,我们可以通过以下两个功能完美解决:

  1. 使用 @Files 或 @Folders 喂入上下文: 在 Chat 面板中,不要只选中当前组件。使用 @ 符号,把组件依赖的 types.ts 或者公共定义文件一起加入到上下文。

    • 示例@LiveCountdown.tsx @global-types.ts 请按照规则生成 schema
  2. 利用 Composer 功能(Ctrl + I)进行批量重构: 如果你想给整个组件库的所有文件批量在同级目录下生成 schema.json,可以使用 Cursor 的 Composer 模式。直接下达指令:

    “遍历 src/components/ 目录下的所有 .tsx 文件,读取其类型,并在各自的同级目录下创建一个对应的 schema.json 说明书。”

    Cursor 会自动开启多文件编辑流,挨个帮你创建和填满这些文件。


三、这样做依然存在的“坎”:如何做工程化卡点?

用 Cursor 代替自己写脚本,把研发效率提升了 10 倍,但从架构师的角度看,它依然属于“半自动/人工辅助”阶段。在团队多人协作时,需要注意以下两点:

  • 防止开发人员“作弊”: 有些组员用 Cursor 生成了 Schema 之后,自己偷偷改了组件代码(比如删掉了一个属性),但忘记让 Cursor 重新生成 Schema。这会导致线上的低代码引擎和 AI 拿到错误的说明书。
  • 架构师的解法(CI 卡点): 虽然文档是用 Cursor 生成的,但前端架构师必须在 Git 提交阶段(使用 husky + lint-staged)或 GitLab CI 流程中,加一道静态自动化卡点测试——用脚本比对组件的 TS 类型和 schema.json 的字段数量是否一致。如果不一致,直接拒绝代码合并(MR),逼迫开发人员用 Cursor 重新生成。

四、Schema 向量化入库:切割维度与 MCP 按需召回

Cursor 批量生成 schema.json 只是资产生产阶段。要让 AI 在运行时「查得到、查得准、不撑爆上下文」,还必须设计 Chunk 切割策略 + 向量库索引 +(可选)MCP 精确回源。这与 阻力 3 两阶段 RAG 直接对接。

1. 是否需要 MCP?什么时候用?

阶段是否需要 MCP说明
研发期:Cursor 批量生成 Schema❌ 不需要本地 @Files + Composer 已足够;MCP 无增量价值
运行时:低代码 AI 配置 Agent✅ 强烈建议向量库负责「模糊召回」,MCP 负责「精确取数」——按需拉完整 schema.json 片段,避免把几百个组件说明书全塞进 Prompt
预览 / 校验服务⚠️ 可选若已有 BFF 暴露 REST,可不单独建 MCP;MCP 的优势是 Agent 工具调用标准化、与 Cursor / Claude Code 生态一致

结论:MCP 不是 Schema 生成的必需品,而是 Schema 消费(RAG 第二阶段参数配置)的推荐基础设施。向量库解决「找哪个组件」,MCP 解决「这个组件有哪些合法字段、enum 是什么」。

[运营需求]


[阶段 1:向量检索] ── 召回 Top-K 组件卡片 Chunk(L1)


[阶段 2:MCP 精确回源] ── get_component_schema(id, props?) 拉 L2 属性 Chunk


[AI 填参] ── JSON Schema 校验 ── 写入 pageSchema

2. 切割维度:五层 Chunk 模型

切忌「整份 schema.json 一个向量」——几百行 JSON 语义稀释,召回精度差,且 Stage 2 仍要把整文件塞进上下文。按检索意图分层切割

层级Chunk 类型切割粒度向量化文本来源主要服务阶段
L1组件卡片(Catalog)1 组件 = 1 Chunktitle + description + 业务分类 + 适用场景标签 + props 名列表摘要阶段 1:组件级召回
L2属性颗粒(Prop)1 属性 = 1 ChunkpropName + description + enum 值中文释义 + default + 关联约束阶段 2:参数级增强
L3场景标签(Scenario)1 场景 = 1 Chunk,可跨组件「大促倒计时」「新人礼包」「满减联动」等运营语义 + 推荐组件 ID 列表阶段 1 增强 / Open Design Palette
L4配置案例(Example)1 成功案例 = 1 Chunk历史 pageSchema 片段 + 活动类型 + 转化率备注阶段 2 Few-Shot
L5约束摘要(Constraint)1 组件内成组约束 = 1 Chunk「theme 与 backgroundColor 互斥」「couponId 必填时 showTag 必开」等规则 prose校验失败自愈 / 拦截幻觉

L1 + L2 是 MVP 必做;L3 对接 阻力 4 preset 映射;L4/L5 可在组件库稳定后迭代。

L1 组件卡片 Chunk 示例(向量化正文)

组件:LiveCountdown(直播倒计时)
分类:营销 / 紧迫感
适用场景:大促首页、直播间引流、限时秒杀
能力摘要:支持国潮/黑金主题切换,可绑定优惠券 ID,倒计时结束触发跳转
属性概览:theme, endTime, couponId, jumpUrl, heroStyle

L2 属性颗粒 Chunk 示例

组件:LiveCountdown | 属性:theme
业务含义:大促倒计时的视觉主题,影响背景色与数字动画风格
合法枚举:default(标准红)| nationalTide(国潮)| darkGold(黑金高端)
默认值:default
注意:选 darkGold 时不应再手动传 backgroundColor,由主题包接管

每条 Chunk 的 metadata(用于混合检索过滤,不参与 embedding 或少量参与):

{
"chunk_type": "prop",
"component_id": "LiveCountdown",
"prop_path": "theme",
"category": "marketing",
"tags": ["大促", "倒计时", "国潮"],
"schema_version": "2.1.0",
"required": false
}

3. 切割流水线(CI 自动化,非 Cursor 手工)

schema.json (Git)


[Chunker 脚本] ── 按 L1~L5 规则拆分为 *.chunk.jsonl

├──> [Embedding] ──> 向量库(Milvus / pgvector / Pinecone)

└──> [MCP Schema Store] ── 存原始 JSON 片段,供精确回源(不走向量)
  1. 触发时机schema.json 变更合并 main 后,CI 自动 re-chunk + re-embed(与第三节 TS/Schema 字段数卡点同一流水线)。
  2. 版本戳:每个 Chunk 带 schema_version;MCP 回源时校验 Agent 持有的版本,避免旧向量 + 新 Schema 不一致。
  3. 禁止整文件 embeddingschema.json 原文只存 MCP / 对象存储,向量库只存 Chunk 正文 + metadata。

4. MCP Server 工具设计(与向量库配合)

建议暴露最小三个 Tool,与 阻力 3 两阶段对齐:

Tool用途典型入参
search_components阶段 1 组件召回(也可由向量库 REST 替代,MCP 统一入口)query, top_k, category?
get_component_schema阶段 2 精确拉 Schemacomponent_id, props?: string[](只拉 L2 相关字段,省 Token)
get_config_examples拉 L4 历史成功案例component_id, scenario?, limit?
Agent 收到「我要国潮风倒计时」
→ search_components → LiveCountdown (score 0.89)
→ get_component_schema("LiveCountdown", ["theme", "endTime", "couponId"])
→ get_config_examples("LiveCountdown", "nationalTide", 2)
→ 生成 props JSON → JSON Schema 校验

MCP vs 纯 RAG:纯向量检索 L2 属性时,同名 prop(如各组件都有 theme)易混淆;先 L1 锁定 component_id,再 MCP 按 ID 取 L2,是标准做法(Atlassian ADS MCP 同款「Plan → Fetch detail」模式)。

5. 切割维度决策清单(架构师自检)

  1. 阶段 1 召回粒度:运营说的是「组件意图」还是「属性意图」?前者 L1,后者 L2(但仍需 L1 先过滤 component_id)。
  2. Chunk 大小:L2 单条控制在 150~400 中文 token;过长则按 enum 拆子 Chunk。
  3. Metadata 过滤维度category(营销/商品/互动)、tags(大促/直播/新人)、platform(H5/小程序)、deprecated
  4. 跨组件语义:L3 场景 Chunk 维护「运营黑话 → 组件 ID 列表」,与阻力 4 preset 共用一份源数据。
  5. 召回阈值:L1 score < 0.6 走 阻力 3 拦截,不进入 MCP 填参。

五、组件增量更新:改属性 / 新增 / 弃用

组件库是持续演进的。一次 MR 可能只是改了一个 prop 的 enum,也可能是全新组件入库,或老组件进入弃用。若仍靠「全量 re-chunk + 全量 re-embed」,成本高且容易漏删脏向量;若不同步,则 AI 会拿旧说明书填参,线上 pageSchema 与 Runtime 脱节。

1. 三类变更与影响面

变更类型典型例子Schema向量库 ChunkMCP Store存量 pageSchema
属性修改theme 新增 darkGold enum;couponId 改 required重生成该组件 schema.json仅 upsert 受影响 L2;L1 若 props 摘要变了则 upsertschema_version 覆盖该组件片段旧值仍合法则不动;非法则编译/发布时报错
新增组件新增 DragonBoatGame新增 schema.jsoninsert 全套 L1 + L2(+ 可选 L3)insert 新 component_id无影响
弃用组件OldTurntable 下线标记 deprecated,暂不删文件L1/L2 设 deprecated: true从默认检索过滤;向量可保留或降权保留只读,MCP 返回 status: deprecated已有页面继续渲染;新配置禁止选用

原则:Git 里的 schema.json 是唯一真相源;向量库与 MCP 都是派生索引,必须能增量对齐 Git diff。

2. 变更检测:CI Diff Gate(比「字段数比对」更细)

第三节的「TS 字段数 vs Schema 字段数」只能拦「忘了重新生成」,拦不住「enum 改了但数量没变」。增量流水线建议叠加:

[MR 变更文件]


[TS Props AST Diff] ── 对比同名组件 props 增/删/改/rename


[schema.json Diff] ── 是否同步变更?未同步 → 拒绝 MR


[SemVer 自动 bump] ── 写入 schema.json 的 x-component-version


[增量 Chunk Diff] ── 算出 upsert / delete 清单

版本号规则(x-component-version

变更版本 bump示例
仅改 description、文档PATCH1.2.0 → 1.2.1
新增 optional prop、新增 enum 值MINOR1.2.1 → 1.3.0
删除/重命名 prop、改 required、弃用组件MAJOR1.3.0 → 2.0.0

Agent 与 MCP 回源时携带 schema_version;MAJOR 升级触发存量 pageSchema 迁移检查(见下文第 5 小节)。

3. 向量库增量同步策略

每条 Chunk 必须有稳定主键,便于 upsert / delete,禁止只用 auto-id:

chunk_id = {component_id}:{chunk_type}:{prop_path|scenario|example_id}
操作触发条件向量库动作
upsertprop 新增/修改、L1 摘要变化重算 embedding,覆盖同 chunk_id
deleteprop 删除、组件物理移除component_id 前缀或精确 chunk_id 删除
deprecate组件/mark prop 弃用不删向量;metadata deprecated: true,检索默认 filter deprecated=false
CI 增量任务(仅 main 合并后)

├─ git diff HEAD~1 -- '**/schema.json'

├─ 对每个变更 component_id:
│ ├─ 属性级 diff → upsert/delete L2 chunk_id 列表
│ ├─ 组件级 summary 变 → upsert L1
│ └─ deprecated 标记 → 更新 metadata,不 embed 新正文

└─ MCP Schema Store 同步同一份 diff(原子提交)

禁止「每晚全量重建向量库」作为唯一手段——可以作为每周兜底对账,但日常必须走增量。

4. 弃用组件治理(Soft Deprecation,禁止硬删)

大厂组件库不能因 AI 低代码上线就物理删除老组件:线上成百上千个历史活动页仍引用 OldTurntable

推荐三阶段生命周期:

active ──(标记 deprecated)──> deprecated ──(观察期结束 + 迁移完成)──> removed
  1. active:RAG / Open Design Palette 正常召回。
  2. deprecated
    • schema.json 增加 "x-status": "deprecated""x-replaced-by": "NewTurntable"
    • 阻力 3 阶段 1 默认过滤;运营强搜时可提示「已弃用,推荐 NewTurntable」。
    • MCP get_component_schema 仍返回 Schema(只读),顶部带 deprecationNotice
    • Runtime 继续渲染存量页面;新保存的 pageSchema 禁止插入该 component_id(编译器卡点)。
  3. removed:确认无线上引用后,删 Git 文件 → CI delete 全部 Chunk + MCP 条目;MAJOR 版本升级。

schema.json 弃用标记示例:

{
"x-component-id": "OldTurntable",
"x-component-version": "3.0.0",
"x-status": "deprecated",
"x-deprecated-at": "2026-06-01",
"x-replaced-by": "NewTurntable",
"x-migration": {
"propMap": { "prizeList": "awards", "spinDuration": "durationMs" }
}
}

5. 存量 pageSchema 怎么办?

组件 Schema 变了,已发布的活动页不能 silently break。Schema Compiler 在发布 / 再编辑时做版本对齐:

Schema 变更对存量 pageSchema 的处理
新增 optional prop无感;缺省走 default
新增 enum 值无感
删除 enum 值 / 删除 prop编译报错 + 提示运营改配;或按 x-migration.propMap 自动 rename
组件 deprecated允许渲染,禁止新引用;编辑保存时提示替换为 x-replaced-by
组件 removed渲染降级为占位块 + 告警;阻断新发布

阻力 7 双向同步 衔接:AI 迭代时用 JSON Patch 改单个 prop,不要因组件 MINOR 升级就全量覆盖运营手工字段;MAJOR 升级才触发迁移向导。线上若仍异常,走 阻力 8 L2/L3 发布回滚与熔断;pageSchema 内 schemaPins 与本节 x-component-version 对齐,回滚时随版本一并恢复。

6. 研发侧 Cursor 工作流(增量,非全库重跑)

场景Cursor 指令示例
改了单个组件 props@Button.tsx @schema.json 按规则增量更新 schema,保留未变 prop 的 description,bump MINOR
新增组件@NewBanner.tsx 生成同级 schema.jsonx-status: active,version 1.0.0
弃用组件不删 TS 源码;改 schema.jsonx-status / x-replaced-by,Composer 批量更新 L3 场景 Chunk 中的推荐列表

MR 模板建议勾选:[] schema 已同步 [] version 已 bump [] 弃用已填 replaced-by


🚀 迈向下一个里程碑

用 Cursor 批量生成好这成百上千个组件的 schema.json,再经 L1~L5 分层切割 + 向量入库 + MCP 按需回源(见上文第四节),组件说明书才算真正进入 AI 运行时。接下来必须面对 【阻力 2:动态语义表达与跨组件联动】,以及 【阻力 3:RAG 两阶段拦截】如何消费这些 Chunk。