AI 技术的进步有望在包括工程、制造和科学研究在内的各个行业带来显著的效率提升。AI 智能体可以自主动作(例如,在软件工具中执行任务,同时让工程师参与重要决策),使其非常适合迭代仿真和设计研究。在这篇博客文章中,我们将讨论如何建立 OpenAI™Codex 智能体与 COMSOL Multiphysics®软件之间的连接,以及如何利用智能体能力执行非线性求解器调优,加速 CFD 仿真。
智能体循环
直到最近,大多数 AI 辅助工作流都集中在对话式界面上:用户向 AI 工具提出建模相关问题,并接收生成的代码或指导,仍然掌控着每一个单独步骤。COMSOL Multiphysics®中的智能助手窗口遵循这一范式,使工程师能够在软件内提出建模问题、生成和调试 COMSOL API 代码,并简化重复性任务。
AI 辅助工作流的下一步是从对话转向行动。AI 智能体可以规划任务序列,通过软件工具执行这些任务,检查结果,并决定下一步该做什么。简而言之,智能体可以被视为包裹在大型语言模型(LLM)外层的包装器,也可称之为一套专属的“运行框架”,用于执行由大语言模型推导出的操作。大语言模型编写一段代码,并将其包装成特定格式由执行工具调用,从而触发运行框架,例如,打开命令行并执行命令来运行这段代码。
理解智能体与 COMSOL®之间的交互
得益于 COMSOL Multiphysics®软件提供了丰富的编程接口 COMSOL API,使其非常适合探索向智能体工作流的转变。本文中,我们将探讨智能体如何利用 COMSOL API 作为助手协助工程师完成仿真工作流。
在 COMSOL Multiphysics®中设置智能体工作流有多种方式。对于交互式工作流,建议使用客户端-服务器设置,以便检查智能体的进度以及存储在 COMSOL Multiphysics®Server(注意:不要与COMSOL Server™混淆,后者是用于部署仿真 App 的附加产品)中的模型状态。用户和智能体都可以连接到 COMSOL Multiphysics®Server,查看模型状态并进行更改。
智能体在与运行中的 COMSOL 模型之间的典型交互过程中可以实现:
- 使用适配 Java 的 COMSOL API生成 Java 程序的源代码
- 使用 COMSOL Multiphysics®软件文件夹中附带的 Java 命令编译并运行代码。智能体可以据此:
- 连接到 COMSOL Multiphysics®服务器
- 查询模型属性、运行研究,和/或进行受控更改
- 与服务器断开连接
- 对输出进行推理,规划并执行后续步骤
如何连接 COMSOL®与 Codex
我们已经介绍了智能体与 COMSOL®模型交互的基础知识。接下来,我们将介绍在软件中设置智能体工作流的步骤。
由于我们已有可用的智能体,因此不必手动完成设置。相反,我们可以根据架构描述向智能体寻求帮助。为此,我们首先启动一个 COMSOL Multiphysics®Server 实例,连接 COMSOL®用户界面并加载一个模型(另请参阅以客户端-服务器模式运行 COMSOL Multiphysics®)。然后,我们安装并设置一个智能体。在本例中,我们将使用 OpenAI 的 Codex,由它可以创建一个技能,使我们能够操控位于服务器上的模型对象。技能将指令和脚本打包在一起,便于复用和共享。
以下是我们用于创建该技能简单版本的提示词:
Create a lightweight, local Codex skill named comsol-api. Install it as a repo-scoped skill. The skill lets Codex inspect and modify a COMSOL Multiphysics model located on a COMSOL Multiphysics server through the COMSOL API *for* use with Java.
The skill should work in a client-server configuration. The model is located on an already running COMSOL Multiphysics Server. The main part of the skill is a small wrapper script that compiles Java code using the COMSOL’s bundled Java compiler and API plugin classpath, and runs this program. The Java code should connect to the server, manipulate the model object and disconnect again. Before performing any changes, connect to the server and read the model tag.
Save the .java file of each agent interaction with the server in a workspace folder alongside a log of the output of the Java programs and the COMSOL progress log (showing computation time, memory requirement, degrees of freedom) for later reference.
Research here to learn more about the COMSOL API.
https://www.comsol.com/support/learning-center/article/overview-of-the-comsol-api-107912
Based on that, create an implementation plan and implement it. The skill should be intentionally light and only focus on running Java code against the already running server. No need for tests. Don’t install additional packages. Keep it package free.
Test the skill by adding a parameter and reading back the same parameter.
编者注:提示词的中文翻译如下:
创建一个轻量级的本地 Codex 技能,命名为 comsol-api,并将其安装为仓库范围的技能。该技能让 Codex 能够通过与 Java 配合使用的 COMSOL API 检查并修改 COMSOL Multiphysics Server 上的 COMSOL Multiphysics 模型。
该技能应在客户端-服务器配置中工作。模型位于已运行的 COMSOL Multiphysics Server 上。该技能的主要部分是一个小型包装脚本,可使用 COMSOL 附带的 Java 编译器和 API 插件类路径编译 Java 代码,并运行获得的程序。Java 代码应连接到服务器,操控模型对象,然后再次断开连接。在执行任何更改之前,需要连接到服务器并读取模型标记。
将每次智能体与服务器交互的 .java 文件保存在工作区文件夹中,同时保存 Java 程序输出的日志和 COMSOL 进度日志(显示计算时间、内存要求、自由度),以供后续参考。
在下面这个链接可以了解有关 COMSOL API 的更多信息:
https://www.comsol.com/support/learning-center/article/overview-of-the-comsol-api-107912
基于此,创建实现计划并实施。该技能应有意保持轻量,仅专注于针对已运行服务器运行 Java 代码。无需测试。不要安装额外的软件包,并保持无软件包依赖。
通过添加一个参数并读回同一参数来测试该技能。
Luna——高性价比的新一代 OpenAI 模型,推理设置为中等——能够在十分钟之内实现一个技能。
为了测试该技能,智能体添加了一个全局参数,然后从 COMSOL Multiphysics®Server 上的实时模型中读回同一参数。在测试期间,该参数出现在了 COMSOL Multiphysics®用户界面中。
智能体的可能性与挑战
现在我们已经建立了 COMSOL®与 Codex 之间的连接,我们可以用它做什么呢?用户界面中的每一次点击都有对应的 COMSOL API 命令序列。由于 COMSOL API 的全面性(使得可以对任意物理场执行仿真工作流的任意操作),Codex 可以执行任意操作。
API 可以为智能体暴露各种信息以供检查,例如:
- 已加载的模型标记和组件结构
- 参数、表达式、描述和单位
- 特征类型、标签和标记
- 几何与网格序列
- 物理场接口和边界条件设置
- 研究和求解器配置
- 数值结果和求值表达式
- 警告、错误和求解器日志
这些信息可以被提取、推理和操控,使智能体能够根据需要规划、运行和调整实验,并将结果总结为报告。通过这种方式,智能体可以定义参数和设置、添加物理场接口,以及创建绘图或数值计算。此外,这种智能体工作流能够执行通常无法通过参数化扫描研究进行的扫描。在正确设置的情况下,还可以让这样的系统长时间运行。
示例演示:散热器模型
为了演示这一能力,我们将使用智能体来试验非线性求解器参数,以减少非线性迭代次数并加速模型计算。以散热器教学案例为例,任务是分析可用设置,选择三个最有前景的方案,并分别运行它们。虽然智能体可以遍历模型对象并识别相应节点,或搜索 COMSOL®文档,但我们使用将代码复制到剪贴板子菜单提取了相关代码,以帮助智能体。这一功能在这里特别有用,因为我们实现的连接相当简陋。我们使用的提示词如下:
I am looking to speed up the computation, specifically reduce the number of nonlinear iterations necessary to achieve convergence. Analyze the parameters of the segregated solver, identify which might be good candidates to tune. Pick the most promising three and run three values each. Analyze the computation time, number of iterations in a report. Make only changes that are meaningful. I extracted the values that can be set in the segregated solver node.(编者注:提示词中文翻译———我希望加速计算,特别是减少达到收敛所需的非线性迭代次数。分析分离式求解器的参数,确定哪些可能是值得调优的候选参数。选择最具潜力的三个,并分别运行。在报告中分析计算时间和迭代次数。只进行有意义的更改。我已经提取了下面这些可在分离式求解器节点中设置的值)。
model.sol("sol1").feature("s1").feature("se1").set("segterm", "tol");
model.sol("sol1").feature("s1").feature("se1").set("maxsegiter", 200);
model.sol("sol1").feature("s1").feature("se1").set("ntolfact", 1);
model.sol("sol1").feature("s1").feature("se1").set("segtermonres", "auto");
model.sol("sol1").feature("s1").feature("se1").set("segreserrfact", 1000);
model.sol("sol1").feature("s1").feature("se1").set("segstabacc", "segcflcmp");
model.sol("sol1").feature("s1").feature("se1").set("segcfltech", "interp");
model.sol("sol1").feature("s1").feature("se1").set("subinitcfl", 5);
model.sol("sol1").feature("s1").feature("se1").set("submincfl", 10000);
model.sol("sol1").feature("s1").feature("se1").set("subforcecfl", true);
model.sol("sol1").feature("s1").feature("se1").set("subkppid", 0.65);
model.sol("sol1").feature("s1").feature("se1").set("subkipid", 0.15);
model.sol("sol1").feature("s1").feature("se1").set("subkdpid", 0.15);
model.sol("sol1").feature("s1").feature("se1").set("subcfltol", 0.2);
model.sol("sol1").feature("s1").feature("se1").set("subadaptcfltol", true);
model.sol("sol1").feature("s1").feature("se1").set("segcflaa", "on");
model.sol("sol1").feature("s1").feature("se1").set("segcflaacfl", 9000);
model.sol("sol1").feature("s1").feature("se1").set("segcflaaset", "pid");
model.sol("sol1").feature("s1").feature("se1").set("segcflaadim", 10);
model.sol("sol1").feature("s1").feature("se1").set("segcflaamix", 1);
model.sol("sol1").feature("s1").feature("se1").set("segcflaadelay", 0);
model.sol("sol1").feature("s1").feature("se1").set("segcflaafact", 1);
model.sol("sol1").feature("s1").feature("se1").set("segcfljtech", "off");
model.sol("sol1").feature("s1").feature("se1").set("consistencycheck", "strictinitially");
model.sol("sol1").feature("s1").feature("se1").set("plot", "off");
model.sol("sol1").feature("s1").feature("se1").set("probesel", "none");
当然,您的提示词可以包含其他资源,包括 COMSOL®网站上的学习中心文章、博客文章或知识库文章。
在运行了九次实验后,智能体识别出一个相关设置,将非线性迭代次数减少了 25%,使计算时间加快了 30%!
我们可以运行的另一个测试是尝试层流接口中三种不同可压缩性选项之间的差异。虽然我们无法在用户界面中使用“参数化扫描”研究直接在下拉菜单中的选项之间切换,但我们可以要求 Codex 测试每个选项,打印芯片中的温度,并列出非线性迭代次数。为了指示 Codex 执行这些任务,以下是我们使用的提示词:
There are three different compressibility options in the Laminar Flow interface. Run a test and compare all of them. I added an Evaluation Group that evaluated the temperature in the chip that you can run with the command:
model.result().evaluationGroup("eg2").run();
Create a report with the average temperature, computation time and number of iterations for the three different compressibility options.
编者注:提示词的中文翻译如下:
层流接口中有三种不同的可压缩性选项,运行测试并比较所有选项。我添加了一个计算组用于计算芯片中的温度,你可以使用以下命令运行它:
model.result().evaluationGroup("eg2").run();
创建一份报告,包含三种不同可压缩性选项的平均温度、计算时间和迭代次数。
这些选项之间没有实质性变化,计算时间几乎相同。因此,我们将坚持使用默认选项。请注意,这只是一个关于如何执行扫描的示例,接口中的任何设置都应基于物理考量,而不是单纯基于计算速度。
使用智能体时的注意事项
尽管我们的实验取得了成功,但智能体工作流仍然存在挑战。其中一个挑战是空间感知和空间推理。对于人类用户来说,通过查看几何结构很容易为边界条件选择边界。在底层,边界的编号被指派给相应边界条件的选择。仅通过使用 API 来识别这个编号可能很困难,规避这一挑战的可能方法是严格使用命名的选择。或者,您可以在视图中激活实体编号,并指示智能体自动从不同视角导出图像。只要几何结构不是太复杂,这种方法就很有帮助。
检查输出以确认更改是否真正有意义也很重要。以非线性求解器调优为例,智能体可以简单地将终止技术从容差更改为迭代,并将最大迭代次数设置为 1。这种方法会减少迭代次数,但不会给出数值上可靠的结果。监控关键量(例如芯片温度),并确保它们没有发生实质性变化,是过滤掉此类不良候选方案的一种可能方法。
由于像 Codex 这样的智能体所能做的不仅仅是输出文本,运行它们也存在一定风险。它们可能做出错误假设、删除文件、暴露敏感数据,或读取其爬取网站上的恶意提示。由于智能体本质上是随机系统,本身就有出现错误的可能性。为了更安全地使用这些工具,智能体应在沙箱环境中运行,仅为其开放必要的文件访问权限,并对高风险操作设置人工审批机制。
关于将 Codex 与 COMSOL®连接的最终思考
我们在这里展示的是一个将 Codex 连接到 COMSOL Multiphysics®以实现智能体工作流的最小工作示例,所获技能和包装脚本可以进一步扩展,实现更稳健的接口处理,这对于识别过长的仿真或网格创建时间以实现稳健恢复尤其有用。
这类技术进步可以改变工程师与仿真软件交互的方式。COMSOL API 的广泛覆盖范围使 COMSOL Multiphysics® 具备极强的适配性,非常适合升级仿真工作流,以迎接 AI 时代。
OpenAI 是 OpenAI, Inc. 的商标。Oracle 和 Java 是 Oracle 和/或其关联公司的注册商标。





评论 (0)