NL2CGA 自主学习系统开发计划

让自然语言生成引擎随语法演进自动进化 — 2026 Q2~Q4 技术路线图

📋 更新日志

架构CGA 全球建筑代码资产库 — 92 个 .cga 文件骨架完成 2026-06-10 17:15
  • 8 大建筑分类,92 个 .cga 文件
    • base/ 6 个 — 屋顶/立面/结构/材质/装饰/工具(LOD 集中控制层)
    • config/ 3 个 — 全局参数 / LOD 设置 / 风格映射常量表(共 60+ 常量)
    • residential/ 33 个 — 亚洲传统(5) + 欧洲传统(10) + 美洲传统(8) + 现代当代(10)
    • public/ 6 个 — 教育/医疗/文化/体育/会展/行政
    • commercial/ 8 个 — 零售(3) + 酒店度假(2) + 餐饮/金融/服务
    • industrial/ 7 个 — 重工业/轻工业/高新技术/仓库/物流/堆场/能源
    • transportation/ 7 个 — 公路/铁路/地铁/停车/桥梁/港口/机场
    • religious_monumental/ 8 个 — 基督教/伊斯兰教/佛教/道教/印度教/犹太教/锡克教/纪念性
    • agricultural_rural/ 4 个 — 种植/养殖/加工/乡村公共
    • special/ 4 个 — 军事/娱乐/应急/市政
    • custom/ 2 个 — 用户自定义风格占位
    • examples/ 3 个 — 中式村落/欧洲街区/现代商务区
  • main.cga 总调度入口(248 行):按 buildingType + buildingStyle 自动路由到对应分类规则,统一对外接口 Generate(floorCount, lod)
  • LOD 集中控制设计:L0/L1/L2 三级精度仅在 base/roof.cgabase/facade.cga 中实现,上层分类规则只覆盖风格参数(roofAngle / wallColor / windowWidth),不写 LOD 逻辑
  • 风格参数化:每个 .cga 文件顶部定义 attr 风格参数,支持前端 UI 动态调整或 GIS 批量导入
  • 关键发现:引擎 evaluator 当前不支持 import 跨文件规则调用(parser 已解析 import 声明,但 evaluator 未加载被 import 的文件)。短期通过 NL2CGA Python 层内联组装解决,中期需在引擎层实现 import 加载器
  • 代码位置/www/wwwroot/nl2cga-service/library/
模板引擎Phase 1:参数化模板引擎 — 系统主导生成 2026-06-10 01:05
  • 三层生成架构
    • Layer 1 模板引擎:常见建筑直接匹配模板,AST 组装生成,0轮LLM调用,精度100%
    • Layer 2 结构化组装(未来):从构件库组合,跳过文本parse阶段
    • Layer 3 LLM辅助:创意建筑兜底,Prompt注入白名单函数约束
  • 5个参数化模板
    • 太和殿(重檐庑殿顶)— 11个参数:面阔/进深/坡度/柱网/颜色
    • 天安门(重檐歇山顶)— 6个参数
    • 六角亭(攒尖顶)— 5个参数
    • 牌坊(牌楼)— 5个参数
    • 城墙 — 4个参数
  • 编译验证闭环:生成 → 编译 → 错误 → 自动修复 → 再验证,最多3轮
  • NL2CGA 集成:用户说"生成太和殿" → 模板引擎匹配 → 0ms生成 → 编译通过 → 输出代码,不经过LLM
  • 速度对比:模板引擎 100ms vs LLM 3-5s,快30-50倍
  • 代码位置/www/wwwroot/cgajs-api/nl2cga/template_engine/
智能地块@LotSize 自动地块判读 — 无需手动调节 2026-06-10 00:40
  • 去掉手动调节:移除 Inspector 地块尺寸滑块,用户不再需要手动猜地块大小
  • CGA 自声明机制:代码第一行添加 # @LotSize(宽, 深),IDE 编译前自动解析并设置初始 shape
  • 示例已更新:所有标准示例均加入 @LotSize 声明
    • 柱子/柱础 → @LotSize(2, 2)
    • 斗拱 → @LotSize(3, 3)
    • 庑殿顶/歇山顶 → @LotSize(17, 13)
    • 太和殿 → @LotSize(64, 37)
  • NL2CGA 自动生成:Prompt 已更新,LLM 生成时会根据建筑实体库的 recommended_lot 自动加入 @LotSize
  • 向后兼容:没有 @LotSize 的代码仍使用默认 10×10m 地块
布尔运算3D Boolean CSG 优化 + 5个标准古建示例 2026-06-10 00:30
  • union 去重优化:合并几何时启用顶点焊接(tolerance=0.001),消除重复顶点,减少面数
  • subtract 精确化:从重心测试升级为顶点级包围盒测试(全部在内→剔除/全部在外→保留/部分重叠→保留),大幅减少误删
  • intersect 保持:Sutherland-Hodgman 多边形裁剪,精度中等,已满足基本需求
  • inline 支持:append(默认)/ unify / recompose 三种合并策略
  • 5个标准古建示例已发布到 CGA 市场
  • 示例代码位置/www/wwwroot/www.cgajs.com/assets/examples-standard/(01-column.cga ~ 05-gable-roof-double.cga)
  • 稳定性:npm test 19/19 文件通过,374/374 测试通过
大尺度支持地块尺寸控制 + 太和殿体量适配 2026-06-09 23:35
  • 地块尺寸控制面板:IDE Inspector 面板新增"地块尺寸(Lot Size)"区域,含 X/Z 方向滑块(5-200m)和 10m/50m/100m 一键预设按钮。调节后自动触发重新编译
  • 默认地块扩展:原 createScope(0,0,0,0,0,0,10,1,10)(10×10m)改为通过 window.__lotSize 全局变量控制,支持任意尺寸地块
  • 太和殿地块适配:CGA 代码中加入 scale_factor = min(scope.sx/64, scope.sz/37, 1.0) 自动缩放,小地块也能生成比例正确的太和殿(但会提示"效果会失真")
  • 建筑实体库地块要求:8个实体均加入 min_lot_sizerecommended_lot。太和殿:最小 50m×30m,推荐 64m×37m
  • NL2CGA Prompt 注入地块警告:知识检索器现在输出 "⚠ 重要:太和殿需要至少 50m × 30m 的地块,否则柱网比例会失真",大模型生成时会被告知地块要求
  • 文件位置
    • 完整LOD版:https://rulepackage.com/assets/private-examples/taihe-palace-lod.cga
    • 简化适配版:https://rulepackage.com/assets/private-examples/taihe-palace-lod-minimal.cga(294行,含LOD+地块缩放)
性能架构LOD自动精度控制 + FPS监控面板 2026-06-09 23:25
  • 太和殿面数预估:高精度(Lod3)约 146万三角面,远超引擎50万面流畅阈值。瓦片占55.9%(91万面)、斗拱占25.5%(42万面)是两大瓶颈
  • LOD四级精度体系
    • Lod0 极远鸟瞰:~4.7万面,方块柱+纯色屋顶,Draw Call ~47
    • Lod1 城市级:~14万面,6面柱+贴图瓦片,Draw Call ~142
    • Lod2 街区级:~75万面,10面柱+简化瓦片,Draw Call ~751
    • Lod3 特写级:~146万面,16面柱+完整瓦片+斗拱,Draw Call ~1,458
  • CGA层LOD控制taihe-palace-lod.cga 新增 @Enum("Lod0","Lod1","Lod2","Lod3") attr lodstep,通过 column_facenum / tile_density / has_dougong 等LOD驱动常量,在代码层面控制几何精度
  • 渲染器FPS监控ide-core.js?v=19 新增性能面板(左上角),实时显示:
    • FPS 帧率
    • Mesh 数量
    • 三角面数(K为单位)
    • 当前LOD级别
    • 自动建议(⚠ FPS<25持续3秒建议降级 / ▲ FPS>50持续5秒建议升级)
  • 自动LOD逻辑:渲染器每帧统计FPS,维护10秒历史窗口。低FPS持续触发降级建议,高FPS持续触发升级建议,用户可在Attributes面板手动调整 lodstep 参数
  • 面数瓶颈分析:瓦片随机颜色(rand())导致无法按材质合并Mesh,是Draw Call飙升的主因。Lod1用贴图替代几何瓦片可解决此问题
  • LOD模板lod-control-template.cga 提供通用LOD控制代码片段,可复制到任意建筑CGA中使用
架构升级NL2CGA 知识增强架构 + 私有建筑实体库 2026-06-09 23:15
  • NL2CGA增强架构:从"直接丢给大模型"升级为"意图识别 → 知识检索 → Prompt注入 → 大模型生成 → 编译器验证"五级流水线
  • 意图识别器intent_router.py 支持5类意图:generic(通用)/ entity(建筑实体)/ pattern(CGA模式)/ fix(报错修复)/ explain(解释询问)。实体关键词覆盖太和殿/角楼/千秋亭/保和殿/中和殿/紫禁城/城墙/瓦片等
  • 知识检索器knowledge_retriever.py 检索3层知识库:
    • 建筑实体库(8个实体:柱网比例、屋顶层数、关键函数、推荐参数)
    • CGA模式库(11大模式:柱网/重檐/歇山/斗拱/F形网格等)
    • RAG向量索引(361代码片段,本地TF-IDF检索)
  • Prompt组装器prompt_assembler.py 自动将检索到的实体信息、模式模板、RAG代码片段注入System Prompt,大模型生成时拥有"太和殿是67×31柱网、三层roofHip嵌套"等精确知识
  • API集成nl2cga_service.py 在RAG检索后新增步骤2.5(私有知识库检索),已集成到 POST /api/v1/nl2cga/generate 主流程,语法验证通过
  • 建筑实体库building-entities.json 定义8个实体:
    • 太和殿(67×31柱网,重檐庑殿顶,3层屋顶)
    • 角楼(F形十字布局,十字脊重檐)
    • 千秋亭(圆形攒尖顶,递归屋顶)
    • 保和殿(53×25柱网,歇山顶,LOD四级)
    • 中和殿(31×31柱网,攒尖顶,斗拱系统)
    • 宫殿城市布局(setback+splitArea+innerRectangle)
    • 城墙系统(墙垛+城门楼+马道)
    • 瓦片系统(高精度瓦片+随机颜色)
  • 注释与知识库更新机制
    • ✅ 注释越清楚,RAG检索准确率越高(注释是TF-IDF检索的核心文本)
    • ⚠️ 当前不会自动更新:RAG索引是静态文件,代码内容相同但注释更新后,需要手动运行 build_rag_index.py 重建索引
    • 📝 建议流程:更新注释 → 运行重建脚本 → 验证新索引包含新注释
  • 效果示例:用户说"生成太和殿" → 意图识别为ENTITY → 检索到"67×31柱网、base_roof_angle=27、三层roofHip" → Prompt注入 → 大模型生成精确代码
引擎能力CGA 函数实现度全景统计 2026-06-10 17:15
  • 解析层:evaluator.ts 中 94 个唯一 simple operation(103 个 case label,含 9 组大小写别名)全部有实现或别名映射,无空占位
  • 内置函数层:builtins.ts + 12 类插件共注册 163 个 built-in 函数(math 29、asset 22、string 20、array 17、list 16、color 15、file 13、context 9、conversion 9、misc 7、probability 2 等)
  • 测试通过率
    • 函数契约测试 64/64 通过,100%(A级 12/12、B级 27/27、C级 25/25)
    • 函数基础审计 82/82 通过,100%(0 parse failed、0 runtime crashed)
  • 核心选择器:comp() 支持 8 个选择器 — f e v fe fv g m h top
  • 全功能可用函数(约 60+):extrude、s/t/r、translate/scale/rotate、rotateScope、center、mirror、primitiveCube/Sphere/Cylinder/Cone/Disk/Quad/Pyramid、roofGable/Hip/Pyramid/Ridge/Shed/Radial/Dutch/Gambrel/HalfHip/Round、comp(f/e/v/fe/fv/g/m/h/top)、split、setback、setbackPerEdge、setbackToArea、innerRectangle、splitAndSetbackPerimeter、color、texture、setupProjection、projectUV、rotateUV/scaleUV/translateUV/tileUV/deleteUV/normalizeUV/copyUV、tag/untag/label、union/subtract/intersect、print/report/assert 等
  • 部分实现 / 简化函数(约 15~20)
    • insert / i:有解析分发,但未完整接入 OBJ/gltf 资产加载管线
    • scatter / search:基础 case 存在,算法较简化
    • shapeL / shapeU / shapeO / modify / offset / envelope:有实现,但与 CityEngine 完整行为存在差距
    • geometry.* 部分属性:isConcave/nHoles/isPlanar/hasTags 等多为 fallback 默认值,未做真实几何分析
  • 与 CityEngine 对比:CityEngine 约 200+ operations + 150+ functions;当前核心建筑生成能力(extrude/split/comp/roof/transform/material)覆盖度约 70~80%,全功能可用率约 30%,解析覆盖率约 45%
  • 结论:常用建筑生成函数基本齐全,可支撑 NL2CGA 生成标准中式/现代建筑;资产插入、高级几何修改、上下文感知、LOD/报告类函数仍是后续重点补齐方向
完成CityEngine 文档对比 + 函数补全 + Marketplace 发布 2026-06-09 22:35
  • CityEngine 文档爬取:成功获取 220 个官方文档页面列表,对比分析后确认核心函数覆盖率 > 95%
  • 新增 isnull 函数:空值检查函数 isnull(value) → 1/0,注册于 builtins.ts
  • 新增 10 个函数别名:projectUv/rotateUv/scaleUv/tileUv/translateUv/deleteUv/insertAlongUv/alignScopeToGeometryBox/normalizeUv/copyUv → 对应驼峰命名,兼容 CityEngine 大小写不敏感风格
  • Marketplace 批量发布:18 个新 CGA 示例(ID #1066~#1083),含纹理 UV 操作、primitives、transformations、shapeU、roofs、materials、offset、stochastic、repeat 等教程
  • 引擎构建:npm run build 零错误,dist 已同步到 dist-stable,ide.html importmap v=18
完成全站备份 + 性能检测 + CityEngine 函数补全 2026-06-09 21:35
  • 全站备份:351MB 完整备份(含 PostgreSQL dump 1.6MB + SQLite + SSL 证书 + Nginx 配置 + systemd)
  • 性能检测:API 响应 50-100ms,内存 46-108MB,磁盘 42%,并发 20 请求 ~1s/次,无异常日志
  • 新增 14 个 CityEngine 兼容函数:assert(condition, msg)、flatten(y)、geometry.area、geometry.volume、geometry.height、geometry.boundaryLength、geometry.nFaces、geometry.nEdges、geometry.nVertices、geometry.isPlanar、geometry.isRectangular、geometry.hasTags、geometry.hasUVs
  • Marketplace 新发布:ID #1065「CityEngine 官方风格商业大厦 (10层)」— 展示 assert + geometry.area + 完整 split(y) 楼层分割
  • 本地贴图上传功能:✅ 已完成 — Attributes 面板 texture() 参数旁添加 📤 上传按钮,支持点击选择和拖拽上传,上传后自动替换 CodeMirror 中的 URL
修复comp(f) 侧面 scope 轴方向错误 — 贴图拉伸 2026-06-09 21:14
  • 根因computeMergedFaceScope 使用最长边界边作为 xAxis。建筑侧面最长边是高度(120),导致 comp(f) 后 scope.x = 高度、scope.y = 长度/宽度
  • 后果:用户写 split(y) 期望沿高度分楼层,实际沿水平方向分割;setupProjection(0, scope.xy) 投影平面错误 → 两个对面贴图正确、另两个对面拉伸
  • 修复:垂直面(法向量接近水平)优先使用世界水平方向(x/z 轴)作为 xAxis,yAxis 保持垂直方向。所有侧面 scope.y = 高度,split(y) 统一沿高度分割
  • 验证:npm test 374/374 全过,已部署 dist-stable?v=5
修复贴图渲染 + SSL 统一 + Marketplace 贴图替换 2026-06-09 20:57
  • 贴图透明/不显示修复:scene-builder.ts 中 setIndex(Float32BufferAttribute)setIndex(Uint32BufferAttribute),index buffer 类型错误导致三角面索引解析失败,面片错乱/消失
  • 纹理颜色空间修复:ide-core.js 添加 renderer.outputColorSpace = THREE.SRGBColorSpace,纹理颜色从暗淡恢复为正常
  • SSL 统一证书:rulepackage-com-unified 证书覆盖 rulepackage.com + www/api/marketplace/pic/beta/vip/apihand 共 8 个域名,自动续期
  • Marketplace 外部贴图替换:6 个文件中的 raw.githubusercontent.com / images.unsplash.com 链接全部替换为 pic.rulepackage.com
  • 构建验证:npm test 374/374 全过,npm run build 零错误
完成pic.rulepackage.com SSL + Marketplace 示例发布 + Roadmap 更新 2026-06-09 20:40
  • pic.rulepackage.com SSL 证书:Let's Encrypt 申请成功,HTTPS 正常访问,CORS 跨域头已配置
  • Marketplace 发布:ID #1064「现代商业办公楼 (纹理贴图示例)」— 使用 pic.rulepackage.com 6 种贴图(红砖/石材/玻璃/金属/屋顶瓦片/混凝土),展示完整 setupProjection + projectUV + texture 工作流
  • roadmap.html 更新:Phase 1/2/2.5 标记完成,新增 Phase 5「渲染器性能与材质系统」8 项任务看板
  • 渲染器承载数据:优化前 ~1000 Mesh @ 60fps → 优化后 ~50万三角面 @ 60fps
功能材质贴图站点 pic.rulepackage.com + 渲染器性能优化 2026-06-09 20:33
  • 新建贴图站点https://pic.rulepackage.com — 11 种测试材质(混凝土/砖/木/金属/玻璃/草地/石材/屋顶瓦片),支持 CORS 跨域
  • 渲染器性能瓶颈修复:原 buildScene() 为每个 shape 创建独立 Mesh → 24638 三角面分布在 ~8000+ draw call 中严重卡顿
  • 按材质自动合并:相同材质(颜色+粗糙度+金属度+纹理)的 shape 自动合并为单个 BufferGeometry,draw call 从 ~8000 降至 ~10
  • 承载能力提升:优化前 ~1000 独立 Mesh @ 60fps → 优化后 ~500000 三角面 @ 60fps
  • cleanupGeometry 等效实现:无需在 CGA 代码中手动调用,buildScene 层自动完成共面合并
  • 构建验证:npm test 374/374 全过,npm run build 零错误,已同步到 dist-stable
紧急修复IDE 编辑器黑屏 + 3D 黑屏 — 已修复 2026-06-09 19:49
  • 故障现象:CodeMirror 编辑器无代码显示、3D 渲染窗口黑屏无模型
  • 根因:Phase 2 重构时 plugins/context/index.ts 引用了未定义的 getShapeAABB / aabbContains / aabbOverlaps / aabbTouchesplugins/asset/index.ts 引用了未定义的 _assetMetaCache
  • Vite 行为:esbuild 报 TS2304 错误但仍继续构建,导致 CONTEXT_FUNCTIONS 变量在产物中缺失,浏览器加载抛出 ReferenceError: CONTEXT_FUNCTIONS is not defined
  • 连锁效应ide-core.js 为 ES 模块,顶层 import 'cgajs-engine' 失败导致整个脚本不执行 → CodeMirror 和 Three.js 均不初始化
  • 修复:补充 context 插件 AABB 辅助函数、补充 asset 插件 _assetMetaCache Map,重建后 npm run build 零错误
  • 验证:Node.js 模块加载测试通过,dist-stable 已同步,importmap 添加 ?v=2 缓存清除
  • 操作:请按 Ctrl+F5 强制刷新浏览器缓存
计划Phase 1 快速修复函数工作流启动 2026-06-09 17:29
  • 开发计划来源:插件式函数库 + 快速修复系统(dazzler-gamora-rictor.md)
  • 新增后端端点:POST /api/v1/nl2cga/diagnose-function — 函数诊断(返回当前实现、测试覆盖率、已知问题)
  • 新增后端端点:POST /api/v1/nl2cga/submit-function-fix — 提交修复(保存到 FunctionRepairLog + Nl2CgaHumanFix)
  • 前端 AI 面板新增 "🔧 函数诊断" 模态框:搜索函数 → 显示源码 → 在线编辑 → 快速测试 → 提交修复
  • MVP 约束:仅支持 builtins(162 个函数),evaluator 操作修复放到 Phase 3
  • 备份目录:/root/backups/cgajs_prod_20260609_172916
完成Phase 2 插件式函数库架构 — 交付 2026-06-09 18:50
  • 新建目录结构src/functions/plugins/{math,probability,array,string,conversion,color,list,file,context,edge,asset,misc,topology,user}/ — 13 个插件目录
  • 拆分 builtins.ts:原 1243 行集中式文件 → 13 个独立插件文件。每个类别一个插件:MATH(27函数)、PROBABILITY(4函数)、ARRAY(16函数)、STRING(19函数)、COLOR(13函数)、CONVERSION(8函数)、CONTEXT(8函数)、EDGE_ATTR(7函数)、ASSET(5函数)、FILE(16函数)、MISC(12函数)
  • 新建 registry.ts:全局插件注册表,支持 registerPlugin()loadPlugin()(运行时加载用户插件)、unloadPlugin()getPluginFunctions()
  • 提取共享模块core/random-state.tscurrentRandom/setCurrentRandom/getCurrentRandom/ensureRandom,避免 probability/list 插件与 builtins.ts 循环依赖; core/context-shapes.ts_contextShapes/setContextShapes,避免 context/edge 插件循环依赖; plugins/file/virtual-files.ts_virtualFileRegistry/registerVirtualFile/clearVirtualFiles
  • builtins.ts 重构为聚合文件:保留 callBuiltin()BUILTIN_REGISTRYALL_BUILTINS、类型定义等核心基础设施,所有函数类别改为从插件目录 import
  • 向后兼容:所有现有 import 路径不变,callBuiltin(name, args) 接口不变,旧代码零改动
  • 验证npm run build 零错误通过;npm test 19/19 测试文件通过,374/374 测试通过;dist 已同步到 dist-stable
开发中Phase 2 插件式函数库 + Phase 2.5 扩展启动 2026-06-09 18:37
  • 决策:Phase 3 暂停,优先完成 Phase 2.5(参数类型系统扩展到更多函数族)+ Phase 2(插件式目录重构)
  • Phase 2 目标:将 builtins.ts(1243行,162个函数)按类别拆分到 src/functions/plugins/ 目录,实现热插拔插件架构
  • Phase 2.5 扩展目标:在拆分到插件的同时,为每个函数补充完整签名元数据(参数名、类型、枚举值、默认值)
  • 关键约束:① callBuiltin() 接口不变;② BUILTIN_REGISTRY 不变;③ 374测试全部通过;④ 向后兼容旧调用方式
  • 执行顺序:设计目录结构 → 逐个类别迁移(math → array → string → color → geometry → probability → file)→ 创建 registry.ts → 验证构建 + 测试
  • 备份目录:/root/backups/cgajs_prod_20260609_183706
评估Phase 3 Evaluator插件化 — 风险评估 2026-06-09 18:34
  • 结论:Phase 3 对生产稳定性影响较大,不建议直接在 prod 上执行
  • 核心原因:evaluator.ts(1785行)是引擎心脏,60+个操作全部从 switch/case 拆到独立文件。每个操作都直接依赖 EvalContextctx.random(确定性随机)、ctx.userFuncs(用户函数)、ctx.script(规则查找)、ctx.currentDepth/maxDepth(递归深度控制)、ctx.traceLog(调试追踪)。拆出后任何一项传递错误都会导致编译失败。
  • 具体风险点: ① setCurrentRandom(ctx.random) 在每个操作前调用,拆出后极易遗漏 → 随机结果错乱; ② BlockOperation(comp/split/setback)分支逻辑复杂,迁移容易出错 → 孔洞/面拆分异常; ③ 规则调用时的 ctx.currentDepth++ 和 random fork,拆出后逻辑可能断裂 → 无限递归或随机不一致; ④ 操作链依赖(extrude→comp→split→roofHip)一个错全链失败,374单元测试可能覆盖不了边界case
  • 生产影响:cgajs-api 有 12 个常驻 engine_worker 进程,每个编译请求都经过 evaluate()。如果引擎构建产物有 bug,所有编译请求全部失败,网站核心功能瘫痪。
  • 建议方案: ❌ 禁止直接修改 prod evaluator.ts; ✅ 必须在 beta 分支完成,374测试全过 + 额外操作链集成测试后再部署; ✅ 分批次迁移:第一批 10 个简单操作(color/texture/translate/rotate)→ 第二批中等复杂度(extrude/primitive*)→ 第三批复杂操作(comp/split/setback/roof); ✅ 每批次独立构建 + 测试 + beta 验证,通过后再下一批。
完成Phase 2.5 参数类型系统 — roof 系列交付 2026-06-09 18:23
  • 新增文件cgajs-engine/src/functions/signatures.ts — 函数签名元数据类型系统,定义 CGAFunctionSignature / CGAParameter 接口,含参数名、类型、枚举值、默认值、可选性、描述
  • 修改 roof.ts:9 个 roof 函数全部新增 valueType: RoofValueType = 'byAngle' 参数;新增 resolveRoofAngle() 辅助函数,将 byHeight 按 footprint 半宽自动转换为等效角度
  • 修改 evaluator.ts:9 个 roof case 全部支持新旧签名自动识别——如果 argVals[0] 是字符串 byAngle/byHeight 按新签名解析,否则回退旧签名(完全向后兼容)
  • 修改 cga-autocomplete.js:roof 系列 9 个函数补全提示全部更新为含 valueType 的新签名;新增 roofGambrel、roofHalfHip 补全条目
  • 修改 grammar-knowledge.json:9 个 roof operation 的参数元数据已更新,含 enumValues、optional、example
  • 构建验证npm run build 零错误通过;dist 已同步到 dist-stable
  • 编译测试roofHip(30, 1)(旧签名)✅、 roofHip("byAngle", 30, 1, false) ✅、 roofHip("byHeight", 5, 1, false) ✅ 全部编译通过
开发中Phase 2.5 参数类型系统 — 启动 2026-06-09 18:15
  • 目标:建立函数签名元数据,让解析器、补全系统、运行时实现三层对齐 CityEngine 2025.1
  • 首批修复范围:roof 系列 9 个函数(roofHip/roofGable/roofPyramid/roofShed/roofRidge/roofRadial/roofDutch/roofGambrel/roofHalfHip)
  • 签名元数据格式:src/functions/signatures.ts — 定义参数名、类型、枚举值、默认值、是否可选
  • 修改文件清单:evaluator.ts(增加 valueType 分支)、roof.ts(支持 byAngle/byHeight)、grammar-knowledge.json(参数类型注入)、cga-autocomplete.js(补全提示更新)
  • 备份目录:/root/backups/cgajs_prod_20260609_181534
分析CityEngine 函数签名差距 + Phase 2 影响评估 2026-06-09 18:07
  • 问题发现:以 roofHip 为例,cgajs 当前签名 roofHip(angle, overhang)(2参数),CityEngine 2025.1 官方签名 roofHip(valueType, value, overhang, even)(4参数),缺少 valueType ∈ {byAngle, byHeight} 枚举参数
  • 根因定位cga-autocomplete.js 硬编码签名 roofHip(${1:angle}, ${2:overhang})grammar-knowledge.json 参数名为 arg1/arg2 无类型信息; evaluator.ts switch/case 直接按位置取值 argVals[0], argVals[1],无 valueType 分支; 底层 roof.ts 实现同样只接受 angle+overhang
  • 影响范围:不仅 roof 系列(roofGable/roofPyramid/roofShed 等均有类似缺失),大量函数的参数类型、枚举值、默认值均未与 CityEngine 2025.1 对齐。这导致:① 代码补全误导用户;② NL2CGA 生成的代码使用错误签名直接编译失败;③ 用户无法使用 byHeight 等高级参数模式
  • Phase 2 影响评估: 若仅做目录重构(builtins.ts → plugins/)→ 影响很小,callBuiltin + BUILTIN_REGISTRY 接口不变,374测试可守护兼容性; 但若同时引入参数类型系统 → 影响中等,需在 parser / evaluator / autocomplete / grammar-knowledge 四层联动修改
  • 建议执行顺序Phase 2.5 参数类型系统(先建立签名元数据,修复 roof 等函数实现)→ Phase 2 目录重构(再拆分到插件目录,避免二次重写)→ Phase 3 Evaluator插件化
  • roadmap.html 已更新:新增「架构升级路线图」类别,含 Phase 1~4 共 22 项任务看板
完成Phase 1 快速修复函数工作流交付 2026-06-09 17:40
  • 后端 POST /api/v1/nl2cga/diagnose-function — 从 builtins.ts 提取函数源码、查询修复历史、返回语法知识,已验证通过(abs / rand 等函数正常返回)
  • 后端 POST /api/v1/nl2cga/submit-function-fix — 保存修复到 FunctionRepairLog 表,已验证通过(id=5 记录成功入库)
  • 前端 IDE AI 面板新增 "🔧 函数诊断与修复" 按钮,点击打开模态框
  • 模态框功能:搜索函数 → 显示当前实现源码 + 行号 → 展示已知修复记录 → 在线编辑修复代码 → 填写修复说明 + 测试用例 → 提交保存
  • 涉及文件:main.py(+2端点)、nl2cga_service.py(诊断逻辑)、ide.html(CSS+HTML+JS)
  • 服务已重启,4 workers 运行正常,内存 177MB
修复API 服务依赖修复 2026-06-09
  • 修复 uvicorn main:app 启动失败问题,根因:monitoring.py 引入 prometheus_clientpsutil 但未安装
  • 安装缺失依赖后服务恢复正常,4 workers 运行中,内存 169MB
  • 所有 NL2CGA 端点验证通过:health / styles / repairs / generate
基础设施Phase 3 训练基础设施就绪 2026-06-09
  • export_training_data.py — 从数据库导出训练数据(成功案例+反馈数据)
  • train_lora.py — LoRA 微调脚本,基于 unsloth 框架,支持 4bit QLoRA,结构完整(数据量不足时自动跳过)
  • evaluate.py — 4 维度评估:编译成功率、BLEU/ROUGE-L、函数正确率、语法完整性
  • benchmark.jsonl — 50 样本基准数据集,覆盖 13 种建筑风格,100% 编译通过
APIFunction Repair Memory 上线 2026-06-09
  • 新增 FunctionRepairLog 数据库表,记录函数修复历史(function_name, file_path, repair_summary, before/after_snippet, test_case)
  • NL2CGA Prompt 自动注入最近 7 天/最多 10 条修复记录,让 LLM 了解引擎最新变更
  • 前端 IDE 底部展示近期修复列表(GET /api/v1/nl2cga/repairs
  • 已入库 4 条记录:roofGambrel、roofHalfHip、roofRound、compHoles
  • 自动捕获脚本:编译失败后自动记录错误上下文到修复队列
运维监控与数据飞轮系统 2026-06-09
  • admin-monitor.html — 实时仪表盘:QPS、编译成功率、NL2CGA 调用量、用户活跃度、资源监控
  • log_analyzer.py — 每日自动分析 access_log,生成日报(请求量、状态码分布、Top 端点、错误聚类)
  • resource_alert.py — CPU/内存/磁盘阈值告警,自动通知
  • 数据飞轮自动化:编译失败自动入队、每小时自动测试、每 6 小时高频案例 AI 修复
引擎内置函数调用重构:162 函数 Map 查找 2026-06-08
  • callBuiltin 从 O(n) if-else 链重构为 O(1) Map.get() 查找
  • BUILTIN_REGISTRY: Map<string, Function> 扁平注册表,分类:MATH(24)、PROBABILITY(4)、ARRAY(16)、STRING(19)、COLOR(13)、CONVERSION(8)、CONTEXT(8)、EDGE_ATTR(7)、ASSET(5)、FILE(16)、TOPOLOGY(2)、MISC(12)
  • 保留 ALL_BUILTINS 对象向后兼容
  • 验证:TypeScript 编译零错误,374 个现有测试全部通过
引擎DeterministicRandom 确定性随机 2026-06-08
  • 新增 DeterministicRandom(seed) 基于 xorshift 的确定性随机数生成器
  • setCurrentRandom() / getCurrentRandom() 线程本地存储
  • EvalContext 新增 random 字段,createEvalContext 中初始化
  • 分支间随机隔离:evalStochasticBodyevalSplitOperation / evalCompOperation 中使用 ctx.random.fork()
  • rand / rand.int / rand.gaussian / p 全部接入
  • 验证:相同 seed 产生完全相同的随机序列;374 个现有测试全部通过
APINL2CGA 后端服务上线 2026-06-07
  • nl2cga_service.py (907 行) 从 createurban-cga-lite 移植,7 个 API 端点
  • /api/v1/nl2cga/generate — 预建模板匹配(免认证)+ LLM 生成(需认证)
  • /api/v1/nl2cga/refine — 基于 LLM 的代码优化
  • /api/v1/nl2cga/fix — 自动修复编译错误
  • /api/v1/nl2cga/explain — 代码解释(开放访问)
  • /api/v1/nl2cga/validate-code — 语法验证
  • 编译闭环:生成 → 编译验证 → 报错 → LLM 修复 → 最多 2 轮自动重试
  • 语法注入build_context_prompt() 自动加载 grammar-knowledge.json 注入当前引擎能力边界
APIRAG 语义检索系统 2026-06-07
  • rag_service.py — Marketplace 188 个 .cga 文件向量化
  • 关键词 + 向量混合匹配(Hybrid Search)
  • CJK 同义词扩展:中式 → [chinese, temple, pagoda]玻璃 → [glass, panel, window]
  • 检索延迟 ~10-30ms,结果直接拼接到 LLM Few-shot 上下文
前端IDE AI 生成面板 2026-06-07
  • ide.html 新增 320px 可折叠侧边栏
  • 功能:自然语言输入、风格选择(11种预建模板)、楼层滑块、生成/复制/插入/解释
  • aiGenerate() → POST /api/v1/nl2cga/generate
  • aiExplainSelection() → 获取编辑器选中文本 → POST /explain
  • 风格列表动态加载:GET /styles
  • 底部展示近期修复:GET /repairs
P0修复3 个屋顶函数真正实现 2026-06-06
  • roofGambrel(shape, angle, height2) — 谷仓屋顶,使用 extractFootprintVerts + breakFrac 控制折线高度
  • roofHalfHip(shape, angle, hipFrac=0.3) — 半坡屋顶,ridgeInset 控制 ridge 缩进比例
  • roofRound(shape, angle) — 球形穹顶,3 层 ring + peak 球冠近似
  • 此前这 3 个函数仅为空壳/异常占位,导致 AI 生成相关代码时直接报错
P0修复comp(h) 孔洞检测实现 2026-06-06
  • compHoles(shape) — 支持两种 hole 来源检测
  • 来源 1:PolygonData 显式 holes 数组
  • 来源 2:BufferGeometry.userData.contours 内环(如 shapeO 生成的 O-ring)
  • 使用 earcut 重新三角化,计算贴合孔洞平面的 scope
  • compMeta = { sel: 'hole', index, total }
引擎语法文档自动提取器 2026-06-06
  • extract-grammar-docs.mjs — 自动扫描源码生成结构化语法知识库
  • 输出 grammar-knowledge.json:163 个函数 + 90 个操作,含签名、参数、返回值、使用示例
  • 输入:CGAGrammar.g4 + builtins.ts + evaluator.ts
  • 绑定到构建流程,每次部署自动更新
  • NL2CGA Prompt 动态读取,无需人工维护
引擎引擎核心架构确立 2026-05-25
  • ANTLR4 驱动解析器,语法覆盖完整
  • 1727 行核心求值器,支持 60+ Shape 操作
  • 162 个内置函数基础注册
  • 14 组 e2e 测试覆盖 happy path
核心目标:构建一个自我进化的 NL2CGA 系统。每当你新增一个 CGA 函数、修改语法规则或引入新操作符时,AI 生成引擎能够在无需人工重写 Prompt的情况下,自动学习新能力并指导用户正确使用。

一、现状诊断

CGA 引擎现状

  • 解析器:ANTLR4 驱动,语法覆盖完整,错误恢复能力基础可用
  • 运行时:1727 行核心求值器,支持 60+ Shape 操作、162 个内置函数
  • 几何模块:Extrude / Split / Comp / Roof / UV / Boolean / Setback 等已实现,但部分为简化方案
  • 测试:14 组 e2e 测试覆盖 happy path,边缘 case 不足

NL2CGA 现状

  • 严重缺失引擎层 nl2cga_bridge.ts 仅为接口空壳,prompt_templates.ts 全部为空
  • 部分可用API 层 ai_service.py 有 LLM 客户端,但仅用于编译错误分析(修代码),不能生成代码
  • 闭环存在learning_routes.py 已建立"失败案例 → LLM 分析 → 修复建议 → 人工审核"的学习闭环
  • 资产可用createurban-cga-lite 中有预建模板 + LLM 生成实现,可直接移植

二、NL2CGA 三阶段路线图

🚀 第一阶段:Template + RAG(2~3 周)

目标:立即可用的零成本 NL2CGA,不依赖外部 LLM API 也能工作
  • 移植 createurban-cga-lite 的预建模板系统,扩展至 20~30 种建筑风格
  • Marketplace 188 个 .cga 文件向量化,构建语义检索库
  • 前端 IDE 增加 "🎨 AI 生成" 面板(输入框 + 风格选择 + 参数滑块)
  • 设计语法自描述文档生成器(核心,见下文第三节)

🔧 第二阶段:编译器反馈闭环(4~6 周)

目标:LLM 生成的 CGA 必须保证可编译通过
  • 新增 /api/v1/nl2cga/generate 端点,接入 ai_service.py 的 LLM 客户端
  • 实现 "生成 → 编译 → 报错 → LLM 修复" 的自动迭代循环(最多 3 轮)
  • 将编译器作为判别器(Discriminator):只有编译成功的代码才返回给用户
  • 每次成功的"生成-编译"对自动存入训练数据集,为第三阶段积累燃料

🧠 第三阶段:Fine-tuned CGA 专用模型(3~6 个月)

目标:拥有自我进化能力的专属小模型,推理成本降低 10 倍
  • 基于 Qwen2.5-Coder-7BDeepSeek-Coder-V2-Lite 做 LoRA 微调
  • 训练数据来源:Marketplace 描述-CGA 对、学习闭环的成功案例、用户反馈数据
  • 语法变更时自动触发模型增量微调,实现真正的自主学习
  • 本地 vLLM 部署,单条生成成本 < ¥0.01

三、自主学习语法结构的核心机制

这是整个计划的重点。以下 5 个子系统构成 NL2CGA 的自进化引擎,确保每次你修改 CGA 语法时,AI 都能自动跟上:

3.1 语法文档自动提取器(Grammar Document Extractor)

问题:当前 Prompt 中硬编码"已支持语法",每次新增函数都要手动改 Prompt,极易遗漏和过时。

方案:编写一个构建时脚本,自动扫描源码生成结构化语法知识库:

# 自动提取脚本(建议放在 cgajs-engine/scripts/extract-grammar-docs.mjs)
# 输入:CGAGrammar.g4 + builtins.ts + evaluator.ts
# 输出:grammar-knowledge.json(被 RAG 和 Prompt 动态加载)

提取内容1. 从 CGAGrammar.g4 提取:规则定义语法、操作序列结构、条件/随机分支写法
  2. 从 builtins.ts 提取:162 个函数的签名、参数类型、返回值、使用示例
  3. 从 evaluator.ts 提取:60+ Shape 操作的用法和约束
  4. 从 tests/ 提取:每个函数/操作的真实运行示例

输出格式(JSON):
{
  "version": "1.3.2",
  "generatedAt": "2026-06-09",
  "operations": [
    { "name": "extrude", "params": ["height"], "returns": "Shape[]",
      "example": "Lot --> extrude(10) comp(f) { top: Roof }",
      "constraints": ["height > 0"] }
  ],
  "functions": [
    { "name": "rand.int", "category": "probability",
      "signature": "rand.int(min, max) -> int",
      "description": "返回 [min, max) 范围内的随机整数" }
  ],
  "annotations": ["@StartRule", "@Group", "@Range", "@Hidden"]
}

触发方式:将脚本绑定到 npm run build 或 Git 预提交钩子,每次构建自动更新。Prompt 加载时动态读取此 JSON,而非写死。

3.2 实时语法注入系统(Live Syntax Injection)

当用户请求 NL2CGA 生成时,后端自动将当前引擎的完整语法快照注入 LLM 上下文:

# 动态 Prompt 组装(cgajs-api 层实现)
system_prompt = f"""
你是 CGA.js v{engine_version} 专家。当前引擎支持的语法如下:

## 可用 Shape 操作({len(operations)} 个)
{format_operations(grammar_knowledge['operations'])}

## 可用内置函数({len(functions)} 个)
{format_functions(grammar_knowledge['functions'], top_used=30)}

## 关键约束
- 必须使用 @StartRule 标记入口规则
- split 轴只能是 x|y|z|u|v(当前 u/v 未实现,避免使用)
- comp(h) 孔洞检测暂不支持,避免依赖

只输出有效 CGA 代码,不要解释。
"""

价值:新增 roofGambrel 函数后,重新部署即自动出现在 AI 的知识范围内,零人工维护 Prompt

3.3 编译器反馈强化学习(Compiler-RL)

这是让 NL2CGA "越用越聪明" 的核心飞轮:

步骤动作数据沉淀
1 用户输入"中式寺庙" → LLM 生成 v1
2 编译器解析 v1 → 发现 2 个错误 (prompt, v1, error_json) → CgaFailureCase
3 错误信息 + v1 喂给 LLM → 生成修复版 v2 (v1, error, v2) → AiSuggestion
4 v2 编译通过 → 返回给用户 (prompt, v2) → CgaSuccessCase
5 用户点击 👍/👎 反馈 修正标签 → 高质量训练对

语法变更时的自动适应:当你修改了语法(如新增 @Import 注解),过去积累的"错误-修复"对中涉及旧语法的数据会被自动标记为 legacy,新语法的成功案例会被赋予更高权重进入训练集。

3.4 语义向量索引(Semantic Vector Index)

不仅要知道"有哪些函数",还要知道"什么时候该用什么函数"。

  • 将 Marketplace 中每个 .cga 文件 + 标题 + 描述向量化(使用代码嵌入模型)
  • 将 162 个函数的文档和 3~5 个典型用例向量化
  • 用户输入自然语言时,检索 Top-5 最相关的 CGA 源码片段和函数文档
  • 检索结果直接拼接到 LLM 上下文(Few-shot 示例),让 AI "看到"别人是怎么写的
# RAG 检索示例
用户输入:"做一个带飞檐的中式屋顶"
检索结果:
  1. "03_japanese_pagoda.cga" — 相似度 0.91(roofHip 多层叠加)
  2. "temple style guide" — 相似度 0.87(飞檐参数说明)
  3. "roofHip 函数文档" — 相似度 0.85

LLM 上下文追加:
  "参考以下实现飞檐屋顶的方式:" + 检索到的代码片段

3.5 语法变更感知流水线(Grammar Change Detection Pipeline)

这是自主学习的触发器,确保语法变更被 NL2CGA 系统第一时间感知:

# 绑定到 CI/CD 或 Git 钩子的流水线
触发条件:grammar/CGAGrammar.g4 或 src/functions/builtins.ts 发生变更

自动执行:
  1. 运行 extract-grammar-docs.mjs → 更新 grammar-knowledge.json
  2. 运行全量 e2e 测试 → 确认新语法行为正确
  3. 运行回归测试 → 确认旧语法未被破坏
  4. 用新语法重新索引 Marketplace 文件 → 更新向量数据库
  5. 重新编译预建模板 → 验证模板仍有效
  6. 若存在 Fine-tuned 模型 → 触发增量微调任务(用新语法案例扩充数据集)

结果:你提交一个 PR 新增 geometry.isRectangular 函数,10 分钟后 NL2CGA 系统已经知道它的存在、签名、用法,并能在生成代码时正确推荐。

四、关键缺陷修复清单(与 NL2CGA 协同)

缺陷对 NL2CGA 的影响优先级
roofGambrel / roofHalfHip / roofRound 有签名无实现 AI 生成这些屋顶时代码直接报错,严重损害信任 P0
comp(h) 孔洞检测返回空数组 AI 无法正确指导用户使用孔洞相关建模 P0
rand / p 未接入 DeterministicRandom 相同 seed 产生不同结果,AI 的"示例"不可复现 P1
split(u/v) 未实现 AI 生成的 UV 分割代码无效 P1
callBuiltin 使用 if-else 链而非 Map 函数调用慢,批量生成时吞吐受限 P1
解析器使用 BailErrorStrategy 一次只报一个错误,AI 修复效率低 P2

五、数据飞轮:让系统越用越聪明

核心设计理念:NL2CGA 不是一次性写好的功能,而是一个持续吸收数据的生命体

📥 数据源

  • Marketplace:188 个文件 ×(标题+描述+标签+CGA 源码)= 基础语料
  • 编译日志:每次 /compile 调用的 (source, success/fail, error) = 监督信号
  • 学习闭环:learning_routes 积累的 (failure, suggestion, accepted) = 高质量修正对
  • 用户反馈:👍/👎 按钮 + 手动编辑后的最终代码 = 人类偏好数据

⚙️ 处理层

  • 语法提取器:自动从源码生成结构化知识(随版本更新)
  • 向量化引擎:将 CGA 代码和自然语言描述嵌入同一语义空间
  • 质量过滤器:只有编译通过且用户点赞的数据才进入训练集

🚀 输出层

  • RAG 检索:实时语义搜索最相关的代码示例
  • 动态 Prompt:每次请求携带最新语法快照
  • Fine-tuned 模型:专为 CGA 语法优化的小参数模型

六、执行时间表

时间里程碑交付物
第 1~2 周语法提取器 + RAG 索引grammar-knowledge.json 自动生成、Marketplace 向量化、IDE AI 面板
第 3~4 周Template NL2CGA 上线20+ 预建模板、语义搜索、零 LLM 成本可用
第 5~8 周编译器反馈闭环/api/v1/nl2cga/* 端点、生成-编译-修复循环、数据沉淀
第 9~12 周P0 缺陷清零roofGambrel 等 3 个屋顶实现、comp(h) 孔洞检测、DeterministicRandom
第 3~6 月专用模型微调LoRA 微调 7B 模型、本地 vLLM 部署、单条成本 < ¥0.01
持续自进化运维每次语法变更自动触发知识库更新 → 回归测试 → 向量索引重建 → 模型增量微调

七、总结

CGA.js 的解析器和运行时已经具备专业级骨架,NL2CGA 是从"工具"跃迁为"平台"的决定性能力

本计划的核心不是"写一个更好的 Prompt",而是构建一个自我维护、自我增强的技术体系

  1. 语法文档自动提取消除 Prompt 与源码的同步问题
  2. 编译器反馈闭环保证生成质量并持续积累训练数据
  3. 语义向量索引让 AI 能"看到"社区的最佳实践
  4. 语法变更感知流水线确保系统随引擎同步进化

当你下次新增一个函数时,这个系统会在 10 分钟内自动学会它,并在接下来的每一次用户请求中正确使用它——这才是真正的自主学习