Architecture

HiCAD 技术架构设计

HiCAD 采用前后端分离的 Monorepo 架构,核心目标是把自然语言建模需求转化为可执行、可编辑、可评测的参数化 JSCAD 代码,并在浏览器中通过 Worker 与 Three.js 完成安全渲染。

1. 架构总览

核心链路:用户输入 Prompt → 前端发起 SSE 请求 → NestJS AI 服务识别意图 → 单阶段或双阶段生成 JSCAD → WebWorker 执行 → Three.js 渲染 → 自动质量评分 → 用户保存、导出、发布或续改。
UI
Vue 3 前端工作台

负责 AI 对话、Monaco 代码编辑、参数面板、3D 预览、质量评分面板、模型保存和导出交互。

API
NestJS 业务后端

负责认证、配额、模型文件、模板市场、支付、管理员后台、AI 编排和 Langfuse 观测。

AI
多模型与多 Agent 编排

通过统一 Adapter 调度 DeepSeek、Kimi、通义千问、豆包,并用意图分析、代码生成、质量评测等 Agent 分工降低不确定性。

CAD
JSCAD Harness + Three.js

用 Harness 约束 AI 生成装配关系,再由 Worker 执行建模代码并交给 Three.js 渲染工程级预览。

2. 技术选型

层级技术作用
前端框架Vue 3 + Vite + TypeScript快速开发 SPA,Composition API 适合编辑器与渲染状态组织。
状态管理Pinia管理 AI 生成、编辑器、用户登录、配额和质量评分状态。
代码编辑Monaco Editor提供 JSCAD/JavaScript 编辑、主题、补全和错误提示体验。
3D 渲染Three.js加载几何、材质渲染、相机控制、尺寸标注、截图和导出。
CAD 建模JSCAD API + 自研 Worker Runtime用 JavaScript 表达参数化几何,并通过内置 API 注入降低 AI 输出复杂度。
AI 编排NestJS + Adapter + Prompt Skills完成多模型路由、系统 Prompt 构建、双阶段生成、续改和评测。
Agent 扩展.qoder/agents + .qoder/skills项目已预留 Qoder 代理与技能目录;当前业务内通过 Prompt Skills 和服务层 Agent 思想落地。
数据存储JSON 文件 + 文件系统MVP 阶段部署简单,便于私有化、备份和迁移。
观测Langfuse记录 AI Trace、模型、意图、管线、Prompt、输出长度、耗时和失败原因。

3. 前端分层

前端由页面、组件、Store、Composables 和 Utils 五层组成。最重要的是 EditorPage,它把 AI 对话、代码编辑、参数化调整、3D 视图、质量评分和导出能力连接起来。

frontend/src/
├── pages/EditorPage.vue              # 编辑器主页面,编排 AI、代码、参数、预览和导出
├── components/ai/AiChatBox.vue       # AI 对话、模型选择、自定义 Key、生成与停止
├── components/editor/CodeEditor.vue  # Monaco 编辑器、补全、主题、debounce 写回
├── components/editor/ParamPanel.vue  # 参数解析、滑块/输入控件、变量反写
├── components/editor/QualityPanel.vue # 质量评分、低分建议、一键优化
├── components/viewer/ThreeViewer.vue # 3D 预览容器和视图控制
├── stores/aiStore.ts                 # SSE、消息、模型、续改、自动评测
├── stores/editorStore.ts             # 当前代码、渲染状态、质量结果、脏状态
├── stores/userStore.ts               # 登录态、会员、配额、发布权限
├── composables/useJscad.ts           # Worker 管理、requestId、防抖、STL 导入
└── composables/useThreeScene.ts      # Three.js 场景、材质、几何更新、NaN 防护

前端的关键设计是“状态驱动渲染”:AI 生成完成写入 editorStore.code,useJscad 监听代码执行 Worker,ThreeViewer 根据 GeometryGroup 更新场景,QualityPanel 根据评测结果更新建议。

4. 后端分层

后端使用 NestJS 的模块化组织方式,每个业务域拥有 Controller、Service 和 DTO。AI 模块是核心,它同时包含 Prompt、Adapter、双阶段 codegen、质量评测和观测。

backend/src/modules/
├── ai/
│   ├── ai.controller.ts              # /api/ai/generate、/modify、/history、/optimize-prompt
│   ├── ai.service.ts                 # AI 编排、配额检查、单/双阶段生成、续改、历史保存
│   ├── adapters/                     # AiAdapter、DeepSeekAdapter、MultiAdapter、OpenAIAdapter
│   ├── prompt-builder.ts             # JSCAD 系统 Prompt 与 Skill-Harness 规则
│   ├── design-prompt.ts              # 机械臂设计规格 Agent Prompt
│   ├── tank-prompt.ts                # 坦克/装甲车辆设计规格 Prompt
│   ├── car-prompt.ts                 # 汽车/超跑设计规格 Prompt
│   ├── design-spec.types.ts          # MechanicalArmSpec、TankSpec、CarSpec 与归一化
│   ├── jscad-codegen.ts              # Stage 2 确定性 JSCAD 代码生成器
│   └── ai-quality-evaluator.service.ts # 7 维质量评测与基准报告
├── auth/                             # JWT 登录和策略
├── user/                             # 用户、会员、配额
├── model/                            # 模型保存、分享、发布
├── template/                         # 模板市场
├── pay/                              # 支付和订单
├── admin/                            # 管理后台
└── feedback/                         # 用户反馈

5. Skills 技术与多 Agents 实现方案

项目中存在两类“技能/代理”概念:一类是 Qoder 工程化扩展目录,另一类是 HiCAD 业务运行时的 AI 建模技能与 Agent 编排。当前项目的 .qoder/agents.qoder/skills 是预留目录,适合后续沉淀专用文档、评测、建模优化代理;业务运行时则已经通过 Prompt Skills、多阶段 Agent 和确定性 Codegen 落地。

Qoder Skills / Agents

作为工程协作层,用于把“技术文档生成、AI 评测、建模规范审查、Prompt 优化”等流程固化成可复用技能或代理。

业务 AI Skills / Agents

作为产品运行层,内置在 prompt-builder、design-prompt、jscad-codegen、ai-quality-evaluator 等模块中。

Agent / Skill当前落点职责
Prompt Skillprompt-builder.ts定义 JSCAD 生成规则、坐标系、装配 Harness、材质语义和完整示例。
Design Agentdesign-prompt.ts / tank-prompt.ts / car-prompt.ts把自然语言转为结构化 DesignSpec,只做设计决策,不直接写定位代码。
Codegen Agentjscad-codegen.ts根据 Spec 确定性生成 JSCAD,负责精确坐标、嵌入量、参数声明和材质分层。
Model RouterMultiAdapter根据模型 ID 路由 DeepSeek、Kimi、Qwen、Doubao,并处理自定义 Key 与输出窗口。
Quality Agentai-quality-evaluator.service.ts从 7 个维度评测生成代码,输出评分、等级、warnings 和优化建议。
Observability Agentlangfuse-observability.service.ts记录 AI Trace,沉淀模型、意图、管线、Prompt、输出和错误数据。
多 Agents 协作链路

用户需求
  -> Intent Detector 判断 general / mechanical_arm / tank / car
  -> Design Agent 输出结构化 Spec
  -> Spec Normalizer 做范围裁剪和默认值兜底
  -> Codegen Agent 生成确定性 JSCAD
  -> Worker Runtime 执行代码并返回几何
  -> Quality Agent 评分并生成优化建议
  -> Modify Agent 基于当前代码续改

6. Harness 技术思想:让 AI 建模从“摆零件”变成“可装配”

HiCAD 的 Harness 不是单个函数,而是一套约束 AI 输出的建模思想:统一坐标系、底部对齐、锚点公式、轻微嵌入、最终装配、自检评测。它解决的是 AI CAD 最常见的问题:零件悬浮、方向错误、比例失衡、返回散件、材质语义缺失。

stack

按 Y 轴从下到上自动堆叠,减少手写高度偏移错误。

stackOverlap

堆叠时加入 1-3mm 嵌入量,减少视觉分离缝。

attachY

把 child 自动贴到 base 顶部并嵌入,适合竖向装配。

assemble

语义化最终装配,等价 union,但更利于 Prompt 约束和评测识别。

// Harness 心智模型
const base = cuboid({ size: [100, 10, 60] })
const body = roundedCuboid({ size: [80, 35, 45], roundRadius: 4 })
const cover = cuboid({ size: [70, 8, 40] })

// 从下到上堆叠,并让每层有轻微嵌入
return stackOverlap(2, base, body, cover)
约束说明解决的问题
Y 轴向上所有高度统一沿 Y 轴表达。避免模型方向混乱。
底部对齐cuboid、cylinder、cone 默认底面在 y=0,顶面在 y=height。避免反复计算 h/2。
锚点装配横向/前后装配写清尺寸公式,例如 bodyWidth/2 - pegRadius。避免目测 translate 导致悬浮。
轻微嵌入零件接触处保留 overlap。减少视觉裂缝和布尔分离。
语义材质colorize 第三个参数传 material ID。让 Three.js 能映射金属、玻璃、橡胶等材质。

7. AI 深度技术方案

7.1 单阶段生成

通用模型走 Prompt → AI → JSCAD 代码的单阶段链路,适合支架、外壳、齿轮、花瓶、文字铭牌等通用建模需求。系统 Prompt 会注入 JSCAD API、坐标系、Harness、材质、参数化注释和反模式约束。

7.2 双阶段精准建模

复杂领域模型走“AI 设计决策 + 确定性代码生成”模式。机械臂、坦克、汽车会先由 Design Agent 输出 JSON Spec,再由 jscad-codegen.ts 生成代码,避免大模型直接写复杂定位代码时出现方向错误和零件分离。

Stage 1:Design Agent
Prompt -> {
  type: 'car',
  material: 'painted_metal',
  style: 'supercar',
  params: { carLength, carWidth, carHeight, wheelRadius },
  features: { spoiler, sideIntakes, splitter, diffuser, glassRoof }
}

Stage 2:Deterministic Codegen
Spec -> 参数声明 -> 精确定位公式 -> JSCAD 几何 -> module.exports = { main }

7.3 多模型 Adapter

后端通过统一 AiAdapter 接口暴露 generateStream(),MultiAdapter 根据 modelId 路由不同供应商,并支持用户自定义 API Key 优先、环境变量兜底、模型输出窗口差异治理和自动重试。

模型供应商识别方式治理策略
DeepSeek默认或 deepseek-* 模型支持 chat、coder、reasoner;503/429 自动重试。
Kimimoonshot-* 模型优先使用 32K/128K 上下文,避免系统 Prompt 超窗。
通义千问qwen-* 模型适配 OpenAI 兼容接口,注意长代码续改上下文。
豆包doubao-* 或 ep-* 模型将 max_tokens 控制到 4096,避免供应商输出上限错误。

7.4 Prompt Skills 分层

prompt-builder.ts 不是简单提示词,而是一个可复用的技能包:强制输出纯代码、禁止散件、注入 Harness、定义材质 ID、提供参数化模板、补充齿轮/文字/曲面/戒指等垂直示例。

关键取舍:通用对象用大模型灵活生成;高风险垂直对象用双阶段降低随机性;所有输出再交给 Worker 修复、执行和质量评测,形成“生成、执行、评估、优化”的闭环。

8. AI 质量闭环

质量评测不是后台报表,而是产品体验的一部分。前端生成完成后会调用 /api/ai/evaluation/code,把评分、等级、低分指标和建议显示在编辑器内,并可进一步触发一键优化。

指标评测重点
可执行基础结构是否有 function main、module.exports、return,是否残留 Markdown fence。
参数化程度是否有带 unit/min/max 注释的参数,能否被 ParamPanel 识别。
几何丰富度primitive、transform、assembly/boolean 的数量和组合。
结构连贯与装配是否使用 union、assemble、stackOverlap、attachY,是否存在散件风险。
材质语义是否有 @material 和 colorize material ID,是否区分玻璃、橡胶、金属等。
需求匹配是否命中标准用例关键词、必备规则和反模式约束。
安全与可维护性是否包含 process、fs、fetch、eval 等危险 API,segments 是否过高。

项目内置标准用例覆盖 L 型支架、低趴超跑、现代坦克、工业机械臂、真实齿轮和电子设备外壳,便于持续回归 AI 生成质量。

9. 模型执行与安全治理

AI 输出代码必须先经过 Worker Runtime 清洗与沙箱执行,不能在主线程直接运行。HiCAD 在 Worker 中完成代码提取、导入清理、截断修复、变量冲突处理、API 注入、几何序列化和零拷贝传输。

1
代码清洗

去除 Markdown 代码块、语言标识和重复 require,兼容 CommonJS 与部分 export 写法。

2
截断修复

自动补齐未闭合花括号和 module.exports,降低流式输出中断导致的失败率。

3
冲突治理

检测局部变量名与注入函数同名的情况,并重命名非函数调用位置。

4
几何传输

把 positions、normals、indices 转为 TypedArray,并用 Transferable Objects 零拷贝传回主线程。

Worker Runtime
  -> extractCode(rawCode)
  -> autoRepairTruncatedCode(code)
  -> executeJscad(cleanCode)
  -> serializeGeometry(geometry)
  -> postMessage({ groups, triangleCount, warning }, transferables)

10. 数据与文件设计

当前项目采用 JSON 文件数据库,模型代码单独存储为 JSCAD 文件,便于迁移、备份和私有化部署。AI 相关数据则通过 sessions、Langfuse Trace 和评测报告沉淀。

文件职责
users.json用户、会员等级、AI 配额、权限信息。
models.json模型元数据、分享状态、市场发布状态。
templates.json官方模板与市场模板数据。
orders.json支付订单与会员开通记录。
sessions.jsonAI 对话历史、生成代码、模型元信息。
files/{userId}/{modelId}.jscad模型源码文件。
Langfuse TraceAI 调用、Prompt、输出、意图、管线、耗时、错误和质量观察。