COMSOL Multiphysics®软件中的人机交互功能

Author Image
作者 Bjorn Sjodin
2025年 6月 12日

许多资深用户可能已经十分熟悉,在使用 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 窗口的说明,请参阅这篇学习中心文章。)

请注意:

  1. 为了使用Chatbot窗口功能,用户需要注册 OpenAI 账户并获得 OpenAI API 密钥,这通常需要付费。目前,Chatbot窗口支持使用 OpenAI™ 和 Azure® OpenAI™ GPT-4 大语言模型。
  2. 实际的大语言模型并未安装在 COMSOL Multiphysics®中,Chatbot窗口仅用于方便与大语言模型之间进行通信。

演示:使用 Chatbot 窗口

  1. 创建几何结构
  2. 生成标注
  3. 调试代码
  4. 提出与建模有关的问题
  5. 查找模型的设置错误

创建几何结构

在使用 COMSOL API 时,掌握一些 Java 的基础知识可能会有所帮助。但是,在使用Chatbot窗口时,这些知识并不是必需的,因为其中已经包含帮助处理 Java 语法和代码结构的功能。

首先,让我们来看下Chatbot窗口如何帮助创建一个圆柱体几何。点击空模型按钮,这样就可以使用 API 接口从头开始创建模型的各个方面。

模型向导和空模型按钮的特写,其中突出显示了空模型按钮。

接下来,打开Chatbot窗口:在主屏幕选项卡上,转到窗口菜单并选择Chatbot

显示了Windows 按钮的下拉菜单,突出显示了 Chatbot 窗口选项。Chatbot窗口将在桌面环境的右下方区域被打开。

COMSOL Multiphysics 用户界面显示了模型开发器,选择参数节点,相应的设置窗口和图形窗口。

Chatbot窗口中,有三个聊天主题选项:常规编程建模。本例中选择了编程

Chatbot 窗口及其聊天主题选项的特写,包括通用、编程和建模。接下来,输入提示语Create a geometry of a cylinder

Chatbot 窗口的特写,其提示设置为创建圆柱体的几何形状。这个提示语将生成创建任意半径和高度的圆柱体的代码,但不会运行代码。如果要运行此段代码,用户需要将它发送到Java Shell窗口。

右键单击代码块,选择发送到 Java Shell

Chatbot 窗口及其快捷菜单的特写,选中了发送到 Java Shell 选项。Java Shell窗口将打开,并显示相同代码块的副本。

A close-up of the Java Shell window.单击Java Shell窗口底部的运行按钮,将生成圆柱体。

COMSOL Multiphysics 用户界面显示了选择圆柱体节点的模型开发器,相应的设置窗口,以及图形窗口中的圆柱体模型。本文显示的示例中,生成了以下代码:

// 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>电磁目录下打开“起搏器电极”的教程模型。

案例库的特写,突出显示了起搏器电极模型。如果模型尚未求解,请单击计算按钮。此计算需要几秒钟。

COMSOL Multiphysics 用户界面显示了选择了 3D 绘图组的模型开发器,相应的设置窗口,以及图形窗口中的起搏器模型。接下来,使用软件内置的代码录制功能学习如何添加标注。在功能区中,转到开发工具选项卡,然后单击录制方法开始录制。

开发工具选项卡的特写,突出显示了 Java Shell 和方法录制。

系统会提示您将录制一个名为method1的方法,这对于本文示例来说没有问题(当然,您也可以根据需要重命名此方法)。现在,模型开发器将以红色轮廓显示,表明录制正在进行中。

在模型树中,右键单击三维绘图组 3并选择标注

COMSOL Multiphysics 用户界面显示了模型开发器,其中选中了 3D 绘图组 3,以及相应的下拉菜单,突出显示了标注。标注节点的设置窗口,在文本框中输入eval(V),这将计算并显示电势场的局部值。然后,在位置设置中,分别在x坐标、y坐标和z坐标输入0.001,0.002,0.003

COMSOL Multiphysics 用户界面显示了模型开发器,选中了标注和相应的设置窗口。单击绘制按钮创建标注。

心脏起搏器电极模型的特写,附标注。开发工具选项卡上,单击停止录制

开发工具选项卡的特写,突出显示了停止录制和 Java Shell。接下来,单击 App 开发器按钮,然后双击树中的method1节点,在方法编辑器中将显示已录制的代码。

模型开发器的特写,其中突出显示了方法1节点和相应的方法1窗口。复制这段代码并切换回模型开发器。

在使用Chatbot窗口自动创建标注节点之前,您需要删除刚刚生成的标注节点,以避免冲突。在模型树中,右键单击标注节点并选择删除

注释1节点的特写和相应的快捷菜单,选中了删除选项。

接下来,在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).

按回车键或点击提交按钮。

Chatbot 窗口的近景图,提示语设置为: Create a geometry of a cylinder。右键单击已生成代码的区域,然后选择发送到 Java Shell

在快捷菜单中突出显示的 Send to Java Shell 选项的特写。Java Shell窗口中,单击运行以应用标注。

Java Shell 窗口的近景图,选中了运行选项。

COMSOL Multiphysics 用户界面显示了模型开发器,选中了标注节点,相应的窗口和图形窗口的起搏器模型。现在,让我们试试更高级的方法。首先删除所有生成的标注节点,即按住 Shift 键选择多个节点,然后右键单击并从上下文菜单中选择删除

A close-up of 突出显示了 10 个标注节点,以及删除选项。转到Chatbot窗口并输入提示语:

Instead, create annotations in a helix pattern centered along the same line with helix radius 0.0025.

Chatbot 窗口中提示的特写,设置为:Instead, create annotations in a helix pattern centered along the same line with helix radius 0.0025。单击提交按钮或按 Enter 键。

Chatbot 窗口的提示近景图。

接下来,重复之前的步骤。右键单击生成的代码,将其发送到Java Shell窗口,然后单击运行,以绘制标注。

起搏器模型的近景图,显示了10 个注释节点。

接下来,我们来增加标注内容的密度。首先,删除已创建的 10 个标注节点。然后,在Chatbot窗口中使用以下提示语:

Now, make the frequency twice as high and create 20 annotations.

再次右键单击生成的代码并将其发送到Java Shell窗口,将显示如下内容。

Java Shell 窗口的近景图,显示了用于创建标注而生成的代码。单击运行,像之前一样绘制标注。

起搏器模型的近景图,显示了20个标注。通过上述示例,您已经深入了解了如何在 COMSOL 中使用 Chatbot 功能快速解决复杂的自动化任务。通过结合使用录制方法(或录制代码)和Chatbot窗口提示语,您可以引导 Chatbot 做出响应,从而快速增加代码的复杂性。对于需要重复使用相同代码的情况,可以在方法编辑器中的方法中输入代码,而无需使用Java Shell窗口。另外请注意,我们也可以记录删除标注节点的操作过程,并将这部分流程自动化。

调试代码

Chatbot 功能的另一个用途是查找代码中的细微错误,而不仅仅是简单的语法错误。为了说明这一点,我们以案例库中COMSOL Multiphysics> App 下的“音叉” 模型为例(此案例不需要任何附加产品)。

案例库的近景图,突出显示了音叉 App。转到 App 开发器,在方法分支中双击setMaterial

模型开发器的用户界面,选择了 setMaterial 方法,相应的设置窗口,并打开了底部的 Chatbot 窗口要查找语法错误,可以单击方法选项卡上的检查语法按钮。该功能不使用Chatbot窗口,而是编译器级别的检查;通过内置的 Java 编译器,方法编辑器会在离开窗口或保存 App 或模型时自动编译方法。

方法选项的近景图,突出显示了查看 Syntax 选项。要查找代码中与语法无关的错误,Chatbot窗口可以提供帮助。

让我们在代码中引入一个错误来演示如何使用这一功能。在方法setMaterial中,用 mat3 替换材料 mat4 的引用。现在,当用户选择标记为 mat4 的铁材料时,程序将改为使用标记为 mat3 的铜材料属性。

Chatbot 窗口的特写,打开了一个快捷菜单 , 选择了 Find Bugs in setMaterial 选项。现在,该方法中的代码已附加到Chatbot窗口,并带有预定义提示语:I need help finding potential bugs in setMaterial, ignoring any code style issues(注意,发送至 Chatbot子菜单中的其他两个选项,即关于 setMaterial 的对话对 setMaterial 的改进建议,有不同的预定义提示语。)

按回车键或点击提交按钮。

Chatbot 窗口的特写,对话设置为:New conversation.Chatbot窗口会发现错误,并输出以下信息:

**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 窗口的特写,对话设置为: I need help find potential bugs in setMaterial, ignoring any code style issues.

在这种情况下,即使没有Chatbot窗口的帮助,这个错误也相对容易被发现。但试想一下,如果该 App 支持的不只是 5 种材料, 而是 40 或 50 种材料,对于这种情况,当处理较长的代码块时,使用Chatbot窗口可以大大加快代码调试过程。

您还可以在Chatbot窗口中询问建模技巧。假设我们是静电仿真领域的新手,想知道对于此类模型而言,哪些边界条件更为重要。为此,可以在Chatbot窗口中选择建模主题选项,并输入提示语:

Which are some of the most important boundary conditions for electrostatics?

Chatbot窗口给出了很好的答案。不过,请注意它提到了“混合边界条件”类型。虽然 COMSOL®软件中提供了这种边界条件,但需要 AC/DC 模块,并且有一个不同的名称:分布电容

Chatbo 窗口的特写,提示设置为:Which are some of the most important boundary conditions for electrostatics?

一般来说,对于入门级建模问题,Chatbot窗口可以提供一个有用的起点。但是,对于更高级的主题,建议您同时查阅COMSOL 文档(也可通过软件中的帮助窗口获取)以及相关主题的教科书。如果选择常规主题选项而不是编程建模,您可以提交任何主题的提示语,包括与 COMSOL Multiphysics®无关的主题。

查找模型的设置错误

您还可以使用Chatbot窗口查找建模设置中的简单错误。虽然 Chatbot 功能并不了解建模和仿真的所有方面,但它仍然可以提供帮助。例如,它可以识别模型开发器中使用的表达式中的错别字。

要试用此功能,请从案例库中COMSOL Multiphysics>传热下打开“硅晶片激光加热”教程模型。该模型演示了激光在硅晶片上移动的瞬态仿真,不需要任何附加产品。

案例库的特写,突出显示了激光加热晶圆教程模型。
COMSOL Multiphysics 用户界面显示了选择了体积节点的模型开发器,相应的设置窗口,以及图形窗口中的激光加热晶圆模型。

现在,让我们人为地在一个变量定义中引入一个错别字。定义焦点距离的表达式正确的写法是:

sqrt((x-x_focus)^2+(y-y_focus)^2)

COMSOL Multiphysics 用户界面显示了模型开发器,选择了变量1节点和相应的设置窗口。我们将把它改成下面这个错误的表达式,其中第二项错误地使用了x_focus而不是y_focus:

sqrt((x-x_focus)^2+(y-x_focus)^2)

然后,从文件菜单中选择另存为,并选择Java 模型文件(.java)选项来保存文件。

文件下拉菜单的近景图, 突出显示了保存为...

文件下拉菜单的近景图,突出显示了 Model File for Java。

这将创建一个扩展名为 .java 的文本文件,可以被编译成 Java .class 文件,用作独立的 Java 组件。这种方法无需使用 COMSOL Desktop®用户界面即可运行 COMSOL Multiphysics®。 Java 文件通过 API 代码包含整个模型设置。但在本例中,我们将仅使用该文件来识别模型设置中的潜在问题。(请注意,使用此功能与使用 COMSOL Compiler™ 编译 App 无关。)

在任意文本编辑器中打开 .java 文件,复制代码并粘贴到Chatbot窗口,使用类似以下的提示语:

Can you find any errors in this model:

Chatbot窗口的近景图,其提示设置为:Can you find any errors in this model;。事实上,Chatbot窗口指出的第一个问题就是我们刚才引入的那个错别字。它指出 :

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 窗口的特写,列出了所提供的模型代码中的一些潜在问题。这种调试对于发现模型设置中的小错误非常有用。对于更复杂的模型,在将模型保存为 .java 文件之前,您可能需要删除冗余并简化代码(即压缩历史记录),使文件只包含当前的模型设置(文件>压缩历史记录)。

下一步

在这篇博客中,我们使用“起搏器电极”教程模型重点介绍了Chatbot窗口功能。如果您想亲自探索创建起搏器电极示例的模型文件,请单击下面的按钮。

扩展阅读

想了解有关 App 开发器和 COMSOL API 的更多信息吗?请查看相关学习文档:

Microsoft 和 Azure 是微软公司集团的商标。OpenAI 是 OpenAI 公司的商标。Oracle 和 Java 是 Oracle 和/或其关联公司的注册商标。

博客分类


评论 (0)

正在加载...
浏览 COMSOL 博客
Baidu
map