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 自动化控制。对于复杂逻辑场景,可按需切换至脚本生成器模式,但需配套完善的代码审查与异常处理机制。

发表回复