鹅厂的Ima是一个知识库工具,我们可以将各种类型的文档放入Ima,然后借助大模型实现文档内容的搜索、总结,并能够根据文档内容实现AI推理等功能。Fluent UDF是基于C语言的程序代码,其在C语言基础上对一些专属于Fluent的程序功能进行了封装,用户需要在封装后的框架体系下进行编程设计。
Fluent UDF的框架源代码是闭源的,我们只能看到头文件暴露出来的各种宏与函数的声明形式,却无法了解到那些功能函数和宏的内部具体实现,因此在编写Fluent UDF程序时,UDF手册是必不可少的指导性文档。在编写UDF代码的过程中,查找UDF手册是基本操作。
然而AI大模型时代,此类操作行为可以在很大程度上被AI取代。首先,目前的AI大模型属于语言模型,天然优势就是和文档文字打交道,其搜索和理解文档的效率远高于人类。其次,目前较多的AI大模型针对编程进行了特别的训练,在程序编制及调试方面可靠性相比以前有了极大的提升。因此,利用AI大模型进行Fluent UDF程序编写也就有了可能。
现在摆在面前的有两个问题:
现在利用AI进行程序编写比较适合于通用性的编程任务,因为AI在这方面训练得比较多,可靠性比较高。然而对于像Fluent UDF这种进行了二次封装的库,由于缺乏有效的训练数据,导致直接利用AI进行Fluent UDF编程可靠性不高(虽然相比较两年前,可靠性有了极大地改善,但总体还是不太高)。
有效地利用UDF文档作为编程约束,是提高AI编写UDF程序的可靠性的有效途径。其实对于源代码开源的程序库,将源代码作为约束更有效,比如在OpenFOAM源代码的基础上利用AI进行求解器编写就非常有效,最近尝试过,可靠性极高,分分钟就能按要求定制新的求解器。然而Fluent UDF不行,我们能了解的只有UDF文档和一堆头文件,头文件在编写UDF过程中作为代码仓库也很有用,但最重要的还是UDF文档。因此需要有知识库工具能够解析UDF文档给AI模型。(其实个人认为如果能将UDF文档作为训练数据直接训练大模型,可能效果要更好一些,不过这个属于小众领域,估计没人会做)
Ima作为一款知识库工具,可以实现解析UDF文档的功能。同时Ima提供了DeepSeek大模型调用,也能在一定程度上辅助Fluent UDF程序的编写。虽然DeepSeek模型编程能力相对于其他顶流编程大模型来说不咋地,不过技术在发展,相比较两年前,现在的DeepSeek模型也算是神器了。
下面描述几个简单的应用场景。
对于已有的UDF代码,可以利用大模型实现代码解释和注释。比如下面这个简单的UDF代码。
#include "udf.h"
DEFINE_ADJUST(my_adjust,d)
{
Thread *t;
real sum_diss=0.;
cell_t c;
thread_loop_c(t,d)
{
begin_c_loop(c,t)
sum_diss += C_D(c,t)*
C_VOLUME(c,t);
end_c_loop(c,t)
}
printf("Volume integral of turbulent dissipation: %g\n", sum_diss);
}
可以利用Ima进行解读,并让它给程序添加注释,然后直接让Ima添加注释并解释代码,结果如下图所示,简直是完美。如果代码很长,也可以将代码文件上传到ima并进行相同的操作。
我们还可以让Ima将上面的程序代码转换成并行版本。输出如下图所示,简直不要太酸爽。
也可以在Ima中输入需求,然后利用Ima进行Fluent UDF程序代码的编写。下面举了个简单的例子,看结果输出,就说good不good吧,个人觉得还是相当不错的,基本不需要进行任何修改就可以直接用了。
Ima用起来效果还是不错的,不过如果能够将Ima与AI IDE连起来用就更好了,也不知道以后会不会有这种操作。个人觉得随着未来AI性能的不断提高,机器编程终将代替人脑编程,尤其是那帮靠复 制粘贴打天下的码农。