拒绝鼠标:基于Google GenAI的SolidWorks自动化交互接口设计
0. 前言
传统CAD二次开发主要依赖参数化建模或VBA/C#宏命令,操作逻辑僵化,用户必须熟知具体API入口或预设UI界面。随着大语言模型(LLM)技术在垂直领域的落地,通过自然语言驱动工业软件已成为提升设计效率的新路径。
本项目采用 Google GenAI (Gemini 模型) 作为语义理解核心,Python 作为控制层,C# 封装 SolidWorks API 作为执行层。本文重点讨论在此架构下,LLM 在提示词(Prompt)层面的角色定义与职责划分。核心目标是将非结构化的自然语言指令,转换为计算机可执行的结构化数据。
1. 技术架构与数据流向
系统采用分层架构设计,确保决策层(LLM)与执行层(SolidWorks)解耦。
| 层级 | 技术栈 | 核心职责 |
|---|---|---|
| 交互层 | Python / Web UI | 接收用户自然语言指令,管理上下文。 |
| 决策层 | Google GenAI (Gemini) | 意图识别、参数提取、逻辑编排、生成结构化指令。 |
| 桥接层 | Python Interop | 解析 LLM 响应,校验数据合法性,调用后端接口。 |
| 执行层 | C# / SolidWorks API | 封装底层几何操作,执行具体建模命令,返回执行结果。 |
数据流向图:
User Input -> Python (Google GenAI SDK) -> Prompt Injection -> LLM Inference -> JSON Output -> Python Parser -> C# DLL/Service -> SolidWorks
2. 智能体角色定义策略
在 Prompt Engineering 中,LLM 的“角色”决定了其输出的稳定性与可用性。针对 CAD 建模场景,根据业务需求的不确定性程度,规划了三种角色模型。
| 角色模型 | 适用场景 | 核心能力 | 输出格式 | 稳定性 |
|---|---|---|---|---|
| API 调度员 | 功能明确,参数精准 | 意图分类、参数槽位填充 | Strict JSON | 高 |
| 设计助理 | 指令模糊,需补充工程常识 | 推理默认值、几何逻辑补全 | CoT + JSON | 中 |
| 脚本生成器 | 需复杂逻辑(循环/判断) | 编写控制流代码 | Python Script | 低 |
3. 角色一:API 调度员 (The API Orchestrator)
这是工程化落地最推荐的模式。利用 Gemini 1.5 Pro 等模型对 JSON Mode 或 Function Calling 的原生支持,将自然语言“翻译”为预定义函数的调用请求。LLM 不直接生成 C# 代码,而是生成中间层数据。
职责:
-
映射用户意图到特定工具(如
CreateExtrude,CutHole)。 -
提取关键几何参数(尺寸、基准面)。
-
确保操作序列符合 CAD 建模依赖关系(先草图后特征)。
System Prompt 示例:
**Role:** SolidWorks Automation Orchestrator.**Objective:** Translate natural language requests into executable JSON commands based on the defined toolset.
**Constraints:**1. Do not generate C# code. Output ONLY JSON.2. Identify missing parameters based on engineering logic. If critical parameters are missing, request clarification.3. Ensure topological validity (e.g., Sketch must precede Extrude).
**Tool Definitions:**- `CreateSketch(plane, geometry_type, dimensions)`- `ExtrudeFeature(depth, direction)`- `Fillet(edge_selection, radius)`
**Response Schema:**{ "operations": [ { "function": "string", "args": { "key": "value" } } ]}输入: “在上视基准面做一个100x50x10的铝板。“
输出:
{ "operations": [ { "function": "CreateSketch", "args": { "plane": "Top", "type": "Rectangle", "width": 100, "height": 50 } }, { "function": "ExtrudeFeature", "args": { "depth": 10 } }, { "function": "SetMaterial", "args": { "material": "Aluminum_6061" } } ]}4. 角色二:设计意图推演 (The Senior CAD Copilot)
当用户指令缺乏具体参数(如“设计一个电机底座”)时,API 调度员模式会失效。此时需要引入思维链(Chain-of-Thought)机制,让 LLM 扮演资深工程师,基于上下文补充合理的工程默认值。
职责:
-
解析模糊意图,推断几何特征。
-
填充合理的工程默认值(如默认倒角 2mm,板厚 10mm)。
-
输出推理过程供用户确认。
System Prompt 示例:
**Role:** Senior Mechanical Design Engineer.**Context:** User instructions may be vague. Infer design intent and apply standard metric (mm) engineering defaults.
**Process:**1. Analyze the request.2. Explain the design logic and assumed dimensions.3. Output the structured command block.
**Example Interaction:**User: "Make a vertical cylinder."Response:"Analysis: Creating a cylinder on Top Plane.Defaults: Diameter 50mm, Height 100mm (standard stock size).[JSON_START]{ "function": "CreateCylinder", "args": { "r": 25, "h": 100, "plane": "Top" } }[JSON_END]"5. 角色三:动态脚本生成 (The Code Generator)
针对需要逻辑控制的场景(如“阵列一排孔,直径依次递增”),单纯的 JSON 序列无法描述循环逻辑。此时 Prompt 将指示 LLM 生成 Python 控制代码,调用封装好的 sw_client 库。
注意: 此模式存在代码幻觉风险,必须在 Python 端实施严格的 try-catch 和沙箱隔离。
System Prompt 示例:
**Role:** Python Automation Developer for SolidWorks.**Library Context:** Access to custom library `sw_ops`. Do NOT use raw `SldWorks` COM objects directly.
**Library API:**- `sw_ops.sketch_circle(x, y, r)`- `sw_ops.cut_extrude(depth)`
**Task:** Generate Python code to execute the user's logic. Wrap strictly in try-except blocks.输入: “创建5个孔,半径从5mm开始每次增加1mm。“
输出:
import sw_ops
try: base_radius = 5.0 for i in range(5): current_radius = base_radius + i # Center X position shifts by 20mm each time sw_ops.sketch_circle(x=i*20, y=0, r=current_radius) sw_ops.cut_extrude(depth="ThroughAll")except Exception as e: print(f"Error executing script: {e}")6. 实施建议与容错机制
在 Python (google-genai) 开发中,建议配置如下参数以增强鲁棒性:
-
结构化输出强制 (Structured Outputs):
在 Gemini API 调用中,设置response_mime_type: "application/json",强制模型输出标准 JSON,避免正则表达式解析的麻烦。 -
闭环反馈 (Feedback Loop):
SolidWorks API 若执行失败(例如几何拓扑错误),C# 端应返回具体错误码。Python 端需将错误信息回传给 LLM,Prompt 自动追加:“上一步操作失败,错误为{Error_Msg},请修正参数并重试。” -
Prompt 迭代方向:
-
初期: 使用 Few-Shot Prompting(少样本提示),提供 3-5 个标准的 “指令 -> JSON” 案例。
-
后期: 随着工具集增加,采用 RAG(检索增强生成)动态注入当前相关的 API 定义,避免 Context Window 溢出。
-
7. 总结
利用 Google GenAI 驱动 SolidWorks,核心难点不在于 API 的对接,而在于如何限制 LLM 的发散性。通过将 LLM 定义为**“API 调度员”并强制 JSON 输出,能够以最小的开发成本实现高可靠性的 CAD 自动化控制。对于复杂逻辑场景,可按需切换至脚本生成器**模式,但需配套完善的代码审查与异常处理机制。