
许多资深用户可能已经十分熟悉,在使用 COMSOL® 开发多物理场仿真模型和仿真 App 时,可以通过编写代码自动运行模拟过程、为仿真 App 添加功能,以及与外部工具进行集成。在COMSOL Multiphysics® 6.3 版本中,新增的 Chatbot 窗口为用户提供了全新的人机交互功能,可以连接到 OpenAI™ 公司的大语言模型——GPT 模型,帮助用户生成或调试运行 COMSOL® 所需要的代码。这项新功能可以帮助用户通过 AI 工具大幅简化建模和分析过程中的工作。例如,将重复性的任务自动生成循环代码(如 for 循环),或者检测模型方法中的逻辑错误,等等。此外,用户还可以在 Chatbot 窗口中与 AI 进行对话,咨询通用仿真建议。
在这篇博客文章中,我们将通过几个简单直观的示例来展示如何使用这一新功能为建模过程提供助力。
Chatbot 与 Java Shell 窗口结合使用
使用 COMSOL Multiphysics® 软件 Chatbot 窗口中的人机对话功能非常简单,用户无需外部 AI 工具就可以在软件内获取与建模和仿真相关的内容,还可以通过附加方法来检查信息是否存在错误,或运行 AI 模型建议的 API 代码,并在模型开发器和 图形 窗口中查看运行结果。
COMSOL 6.3 版本还新增了一个 Java Shell 窗口功能,用于交互式运行 Java 代码,用户可以在 Java Shell 窗口中运行由 Chatbot 连接的 AI 工具生成的代码。在接下来的示例中,我们将向您演示如何操作。
如果您想进一步了解如何使用 COMSOL API 和 Java Shell 窗口,请查看 COMSOL 官网【学习中心】栏目中的 COMSOL API 概述一文,文中 “在 Java Shell 窗口中运行代码” 部分对此项功能有较为详细的介绍。
步骤 1:启用 Chatbot 窗口
Chatbot 窗口适用于 COMSOL Multiphysics® 的 Windows® 版本,包含在 COMSOL 平台产品中,但默认情况通常没有安装。(有关如何安装和设置 Chatbot 窗口的说明,请参阅这篇学习中心文章。)
请注意:
- 为了使用 Chatbot 窗口功能,用户需要注册 OpenAI 账户并获得 OpenAI API 密钥,这通常需要付费。目前,Chatbot 窗口支持使用 OpenAI™ 和 Azure® OpenAI™ GPT-4 大语言模型。
- 实际的大语言模型并未安装在 COMSOL Multiphysics® 中,Chatbot 窗口仅用于方便与大语言模型之间进行通信。
演示:使用 Chatbot 窗口
创建几何结构
在使用 COMSOL API 时,掌握一些 Java 的基础知识可能会有所帮助。但是,在使用 Chatbot 窗口时,这些知识并不是必需的,因为其中已经包含帮助处理 Java 语法和代码结构的功能。
首先,让我们来看下 Chatbot 窗口如何帮助创建一个圆柱体几何。点击 空模型 按钮,这样就可以使用 API 接口从头开始创建模型的各个方面。
接下来,打开 Chatbot 窗口:在 主屏幕 选项卡上,转到 窗口 菜单并选择 Chatbot。
在 Chatbot 窗口中,有三个聊天主题选项:常规、 编程 和 建模。本例中选择了 编程。
右键单击代码块,选择 发送到 Java Shell。
// Create a 3D geometry
model.geom().create("geom", 3);
// Add a cylinder to the geometry
model.geom("geom").feature().create("cyl", "Cylinder");
// Set cylinder properties: radius and height
model.geom("geom").feature("cyl").set("r", 1); // radius
model.geom("geom").feature("cyl").set("h", 5); // height
// Build the geometry
model.geom("geom").run();
不过,请注意,由于 Chatbot 窗口的回应具有一定的随机性,因此每次生成的代码可能会略有不同。
生成标注
虽然与 Chatbot 功能交互的 AI 模型并不一定全面了解 COMSOL API, 但是通过使用 App 开发器中的 录制代码 或 录制方法 功能,可以引导它生成有用的代码建议。在接下来的示例中,我们将演示如何为模型添加标注,然后在此基础上向 Chatbot 窗口寻求帮助。如果您准备和我们一起开始学习,请从软件案例库中的 COMSOL Multiphysics >电磁 目录下打开“起搏器电极”的教程模型。
系统会提示您将录制一个名为 method1 的方法,这对于本文示例来说没有问题(当然,您也可以根据需要重命名此方法)。现在,模型开发器将以红色轮廓显示,表明录制正在进行中。
在模型树中,右键单击 三维绘图组 3 并选择 标注。
在使用 Chatbot 窗口自动创建 标注 节点之前,您需要删除刚刚生成的 标注 节点,以避免冲突。在模型树中,右键单击 标注 节点并选择 删除 。
接下来,在 Chatbot 窗口中选择 编程 主题选项,然后输入以下指令,并粘贴从方法编辑器中复制的代码:
This is how you create an annotation in COMSOL Multiphysics:
model.result(“pg3”).create(“ann1”, “Annotation”);
model.result(“pg3”).feature(“ann1”).set(“posxexpr”, 0.001);
model.result(“pg3”).feature(“ann1”).set(“posyexpr”, 0.002);
model.result(“pg3”).feature(“ann1”).set(“poszexpr”, 0.003);
model.result(“pg3”).feature(“ann1”).set(“text”, “eval(V)”);
Can you create a for loop that places these annotations at 10 locations along a line from (x,y,z)=(0,0,-0.02) to (x,y,z)=(0,0,0).
按回车键或点击 提交 按钮。
Instead, create annotations in a helix pattern centered along the same line with helix radius 0.0025.
接下来,重复之前的步骤。右键单击生成的代码,将其发送到 Java Shell 窗口,然后单击 运行 ,以绘制标注。
接下来,我们来增加标注内容的密度。首先,删除已创建的 10 个 标注 节点。然后,在 Chatbot 窗口中使用以下提示语:
Now, make the frequency twice as high and create 20 annotations.
再次右键单击生成的代码并将其发送到 Java Shell 窗口,将显示如下内容。
调试代码
Chatbot 功能的另一个用途是查找代码中的细微错误,而不仅仅是简单的语法错误。为了说明这一点,我们以案例库中 COMSOL Multiphysics > App 下的“音叉” 模型为例(此案例不需要任何附加产品)。
让我们在代码中引入一个错误来演示如何使用这一功能。在方法 setMaterial 中,用 mat3 替换材料 mat4 的引用。现在,当用户选择标记为 mat4 的铁材料时,程序将改为使用标记为 mat3 的铜材料属性。
按回车键或点击提交 按钮。
**Duplicate Material Selection for Copper and Iron:**
– Both “copper” and “iron” are setting the selection for `mat3`. This might be intentional, but if different materials are expected, this is a bug.
它还指出了其他两个潜在问题。不过,在这种情况下,这些都是误报,因为 Chatbot 窗口并没有获得关于该 App 的其他方法和功能的所有信息。
在这种情况下,即使没有 Chatbot 窗口的帮助,这个错误也相对容易被发现。但试想一下,如果该 App 支持的不只是 5 种材料, 而是 40 或 50 种材料,对于这种情况,当处理较长的代码块时,使用 Chatbot 窗口可以大大加快代码调试过程。
您还可以在 Chatbot 窗口中询问建模技巧。假设我们是静电仿真领域的新手,想知道对于此类模型而言,哪些边界条件更为重要。为此,可以在 Chatbot 窗口中选择 建模 主题选项,并输入提示语:
Which are some of the most important boundary conditions for electrostatics?
Chatbot 窗口给出了很好的答案。不过,请注意它提到了“混合边界条件”类型。虽然 COMSOL® 软件中提供了这种边界条件,但需要 AC/DC 模块,并且有一个不同的名称:分布电容。
一般来说,对于入门级建模问题,Chatbot 窗口可以提供一个有用的起点。但是,对于更高级的主题,建议您同时查阅 COMSOL 文档 (也可通过软件中的 帮助 窗口获取)以及相关主题的教科书。如果选择 常规 主题选项而不是 编程 或 建模,您可以提交任何主题的提示语,包括与 COMSOL Multiphysics® 无关的主题。
查找模型的设置错误
您还可以使用 Chatbot 窗口查找建模设置中的简单错误。虽然 Chatbot 功能并不了解建模和仿真的所有方面,但它仍然可以提供帮助。例如,它可以识别模型开发器中使用的表达式中的错别字。
要试用此功能,请从案例库中 COMSOL Multiphysics > 传热 下打开“硅晶片激光加热”教程模型。该模型演示了激光在硅晶片上移动的瞬态仿真,不需要任何附加产品。
现在,让我们人为地在一个变量定义中引入一个错别字。定义焦点距离的表达式正确的写法是:
sqrt((x-x_focus)^2+(y-y_focus)^2)
sqrt((x-x_focus)^2+(y-x_focus)^2)
然后,从 文件 菜单中选择 另存为,并选择 Java 模型文件(.java) 选项来保存文件。
这将创建一个扩展名为 .java 的文本文件,可以被编译成 Java .class 文件,用作独立的 Java 组件。这种方法无需使用 COMSOL Desktop® 用户界面即可运行 COMSOL Multiphysics® 。 Java 文件通过 API 代码包含整个模型设置。但在本例中,我们将仅使用该文件来识别模型设置中的潜在问题。(请注意,使用此功能与使用 COMSOL Compiler™ 编译 App 无关。)
在任意文本编辑器中打开 .java 文件,复制代码并粘贴到 Chatbot 窗口,使用类似以下的提示语:
Can you find any errors in this model:
Here are a few potential issues in the provided code:
1. **Duplicate Variable Definition**: The variable `r_focus` is defined twice with different expressions. The first definition is correct:
“`java
model.component(“comp1”).variable(“var1”).set(“r_focus”, “sqrt((x-x_focus)^2+(y-y_focus)^2)”);
“`
The second definition at the end of the method seems incorrect:
“`java
model.component(“comp1”).variable(“var1”).set(“r_focus”, “sqrt((x-x_focus)^2+(y-x_focus)^2)”);
“`
Ensure you use the correct expression for `r_focus`.
下一步
在这篇博客中,我们使用“起搏器电极”教程模型重点介绍了 Chatbot 窗口功能。如果您想亲自探索创建起搏器电极示例的模型文件,请单击下面的按钮。
扩展阅读
想了解有关 App 开发器和 COMSOL API 的更多信息吗?请查看相关学习文档:
- Get an introduction to using the Application Builder
- Learn more about programming using the COMSOL API
Microsoft 和 Azure 是微软公司集团的商标。OpenAI 是 OpenAI 公司的商标。Oracle 和 Java 是 Oracle 和/或其关联公司的注册商标。
评论 (0)