AI
AI 助手
用自然语言修改模型、跑仿真和优化
Dreapex TMM 内置 AI 聊天助手,可以用自然语言完成「加一层 100 nm SiO₂」「把波长扫到 400–800 nm,开 R / T / A」「跑一次优化」这类操作,无需手动切换页面。它通过工具调用直接修改 Pinia store 中的模型,并在执行前对破坏性操作做内联确认。
入口
任意页面右下角的浮动按钮(图标 pi pi-comments)会唤起右侧 Drawer。再点一次按钮、或点 Drawer 标题栏右侧的 X 关闭。
| 项目 | 行为 |
|---|---|
| 开关状态 | 持久化到浏览器 tmm-settings;下次访问保持上次状态 |
| 默认宽度 | 480 px |
| 可调宽度 | 桌面端可拖拽,范围 320 ~ 1200 px,数值同样持久化 |
本地
pnpm dev 启动的 Vite 不会运行 /api/ai/chat Edge function;需要使用 vercel dev 才能完整体验 AI 助手。生产环境通过 Vercel AI Gateway 鉴权,无需额外配置。用法示例
你:加一层 100 nm 的 SiO2 在末尾
AI:好的,调用 structure.addLayer 完成,当前 4 层。
你:把波长扫到 400-800nm,5nm 步长,开 R T A 三个探测器
AI:调用 setWavelengthSampling + setDetectors 完成。
你:跑计算
AI:调用 simulation.runCalculation,正在等待后端返回...
你:删掉第 2 层
AI:[内联弹出 DiffPreview]
Remove Layer #2 (name='TiO2', thickness=80nm)
将影响 1 个 optimization variable
[Cancel] [Confirm Delete]
你:[点 Confirm]
AI:已删除。
工具调用面板
每次 AI 调用工具时,Drawer 中会出现折叠面板,状态以颜色标记:
| 状态 | 颜色 | 含义 |
|---|---|---|
| Pending | 黄色 | 工具正在执行,spinner 转动 |
| Succeeded | 绿色 | 工具完成,可展开看 input / output |
| Failed | 红色 | 工具失败,展示 error code 和原因 |
工具调用如果引发校验警告(例如改了波长后某层 RI 数据覆盖不足),下方会出现黄色 warnings 横幅。AI 在下一轮会读到这些 warnings 自主修复或向你确认。
破坏性操作的内联确认
以下三个工具会触发强制确认对话,在 Drawer 内联展示 before / after 对比和依赖关系:
| 工具 | 行为 | 影响示例 |
|---|---|---|
structure.removeLayer | 删除单层 | 影响 N 个 optimization variable |
structure.clearStructure | 清空整个结构 | 高严重度,按钮变红 |
model.importSnapshot | 用快照覆盖当前模型 | 同 .tmm 导入流程,但由 AI 触发 |
点 Cancel 后,AI 收到 USER_CANCELLED 错误,不会立即重试同一调用。
当前可调用的工具
按 8 个 domain 共 43 个工具:
| 分类 | 数量 | 主要工具 |
|---|---|---|
| Structure | 8 | addLayer / updateLayer / removeLayer / clearStructure / duplicateLayer / reorderLayers / addLayerGroup / updateLayerGroup |
| Surroundings | 1 | setSurroundingMedium |
| Optics | 9 | setWavelengthSampling / setDetectors / setConeAngle / setIncidentSpectrumEnabled / setIncidentSpectrumSource / loadIncidentSpectrumFile / setColorCalculation / setDepthDistributionResolution / setIncidentAngleAzimuth |
| Sweep | 4 | addSweepParameter / updateSweepParameter / removeSweepParameter / setSweepParameterList |
| Optimization | 10 | startRun + addObjective / updateObjective / removeObjective / setObjectiveList + addVariable / updateVariable / removeVariable / setVariableList + setAlgorithmSettings |
| Simulation lifecycle | 5 | runCalculation / cancelRun / runSweep / cancelSweep / cancelOptimization |
| RI 数据库 | 3 | searchCatalog / applyMaterialToLayer / detachMaterialFromLayer |
| Model + URL | 3 | importSnapshot / exportSnapshot / encodeConfig |
完整规格见 tmm-vite 仓库的 packages/tmm-core/src/operations/catalog.ts。
当前限制
| 不支持的能力 | 说明 |
|---|---|
| 速率限制 / 计费上限 | 平台模式按 Vercel team account 统一付费,无任何 throttle |
| 对话持久化 | 刷新页面 = 新会话;关闭 Drawer ≠ 清空当前对话 |
| 对话分支 / regenerate / undo | 仅支持线性单线程对话 |
| 文件 / 图片上传 | 仅支持文字 + 工具调用 |
| 跨会话记忆 | 每次会话从 system prompt 起点开始,不读取历史 |
故障排查
| 现象 | 原因 | 处理方式 |
|---|---|---|
| 点击发送后无响应 | 本地用了 pnpm dev 而非 vercel dev,Edge function 未运行 | 改用 vercel dev 启动 |
提示 Service unavailable | Vercel AI Gateway 集成未启用,或 AI_GATEWAY_API_KEY 未注入 | 在 Vercel 项目设置中启用集成;本地用 vercel env pull 拉取环境变量 |
工具调用反复 PRECONDITION_FAILED | 输入引用了不存在的 layerId | 让 AI 先调用 model.exportSnapshot 看当前 id,再继续 |
| 破坏性确认弹出后无法点击 | 同时打开了多个 Drawer / Dialog | 关闭其它对话框后再操作 |
与其他持久化方式的关系
AI 助手只修改当前 store 中的模型快照。修改后会触发本地自动保存。需要把状态固化到外部时仍按常规流程:
- 长期归档 →
.tmm文件导入导出 - 一次性复现 → URL 配置分享
- 进入工作模型 → 案例库