基于Baidu Comate的AI技术在化探不规则网采样点自动编号中的应用
Application of Baidu Comate-based AI technology to the automatic numbering of sampling points in irregular geochemical networks
通讯作者: 李英(1981-),女,地质工程领域工程硕士,正高级工程师,主要从事地质灾害与防治、矿山地质环境调查与矿山生态修复治理工作。Email:66302846@qq.com
第一作者:
责任编辑: 蒋实
收稿日期: 2024-05-2 修回日期: 2024-07-7
基金资助: |
|
Received: 2024-05-2 Revised: 2024-07-7
数字化快速发展的时代,人工智能(AI)技术对传统工作模式带来了革命性的变化。本文基于百度Comate,提出了一种化探不规则网采样点自动编号方法,通过对12 000个化探采样点做自动编号测试,发现自动编号方法相较传统手工方法效率提高了99.8%,正确率提高至100%,说明该方法与传统方法相比更高效、准确,能有效避免人为错误,并提高工作效率。文中还讨论了AI在处理复杂指令时面临的挑战以及指令清晰度的重要性、复杂逻辑的辨识度、开发知识储备的必要性等问题。虽然AI技术显著提高了化探不规则网采样点自动编号的效率和正确率,但前期封装工具需具有代码阅读能力的人员进行代码的修改和验证,并且在AI辅助下的需求处理应是分步骤的,最后需将验证通过的代码封装为工具以复用。
关键词:
In the era of rapid digitalization development, artificial intelligence (AI) technology has brought revolutionary changes to traditional work patterns. Based on Baidu Comate, this study proposed an automatic numbering method for sampling points in irregular geochemical networks. Automatic numbering tests, conducted on 12 000 geochemical sampling points, demonstrate that the method improved the efficiency by 99.8% and achieved 100% accuracy compared to the traditional manual method. This indicates that the proposed method is more efficient and accurate than traditional approaches, effectively avoiding human errors and improving work efficiency. This study also discussed the challenges AI faces in processing complex instructions, the importance of instruction clarity, the identification of complex logic, and the necessity of developing knowledge reserves. Although AI technology has significantly improved the efficiency and accuracy of the automatic numbering of sampling points in irregular geochemical networks, the early development of packaging tools requires personnel who can read codes to modify and verify the codes. Additionally, AI-assisted demand processing should be in phases, and ultimately, it is necessary to encapsulate verified codes into a tool for reuse.
Keywords:
本文引用格式
王烜, 杨欢, 王然, 李英, 王海鹏, 柳岩松, 廖俊宇, 张呈彬, 张旭东.
WANG Xuan, YANG Huan, WANG Ran, LI Ying, WANG Hai-Peng, LIU Yan-Song, LIAO Jun-Yu, ZHANG Cheng-Bin, ZHANG Xu-Dong.
0 引言
AI在地质行业应用案例方面,目前国内还鲜有文献记载。基于此,本文以化探不规则网采样点自动编号为例,引入人工智能(AI)技术,展开相关实验和探讨。在过去的地质工作中,传统的化探不规则网采样点编号方法多采用技术人员逐点编号的方式[4⇓⇓-7],往往存在工作量大、耗费人力、效率低且容易出现漏点、错点等情况。近些年,随着GIS和计算机语言在地质行业的进一步应用,更多的地质工作者对化探采样点编号展开了探索和研究[8⇓⇓-11]。陈可忠[12]利用Section、Excel、MapSource等软件,实现了化探采样点自动编号及航点自动生成。王海鹏等[13]在MapGIS条件下利用空间分析模块、点位赋属性功能、属性挂接功能结合Excel等技术,完美实现了不规则网化探采样点自动编号工作。李永春[14]通过编写C语言程序,结合化探常用软件,实现点位设计图采样点编号自动化。李晓青等[15]利用FME相关技术制作工作模版,实现化探采样点自动编号。这些方法能使工作效率有所提升,但操作步骤多而繁琐,易产生人为错误且个别方法对数据有特定要求,不具有简易性和通用性。
本文在总结前人工作的基础上,基于Baidu Comate,利用其独特的优势(编程类AI),结合ArcGIS Pro Python,将AI技术生动的应用于地质数据批处理方向,实现化探不规则网采样点自动编号,步骤简洁、清晰,成果高效、准确,避免了人为错误,节约了工作时间,提高了工作效率。同时,本文提出一种基于AI的ArcGIS Pro Python开发方法,划分出各个阶段,旨在为相关从业人员提供一定的参考与依据。
1 概念简介
1.1 采样点编号逻辑
图1
1.2 Baidu Comate
Baidu Comate是基于文心大模型的智能代码助手,结合百度积累多年的编程现场大数据和外部优秀开源数据,可以生成更符合实际研发场景的优质代码,还可以推荐代码、生成代码注释、查找代码缺陷、给出优化方案,深度解读代码库、关联私域知识生成新的代码,从而提升编码效率,释放“十倍”软件生产力[16]。
笔者自测发现,Baidu Comate的代码编写能力及准确度明显高于其他综合性语言类AI,在需求明确、逻辑相对不复杂的情况下,可以选择Baidu Comate生成代码,用户仅需手动验证结果即可。
1.3 ArcGIS Pro Python
2 化探不规则网采样点自动编号实现
使用语言型AI解决问题,最重要的是如何提问,为了获得准确的回答或建议,用户需要在输入框中准确地描述问题或需求,问题要具备严密的逻辑,不能前后矛盾,也不可过于模糊。模糊的输入可能导致AI产生不相关或错误的输出。
笔者认为,应该结合实际需求,将需求拆解成一系列步骤,明确输入、输出参数,一步步“诱导”AI给出正确答案,并要分步骤验证答案。“诱导”的本质是对AI提问的改变,可以从问题清晰度增强和问题复杂度简化两个方面来进行。当AI回答不准确时,可以先确定错误点是否由于表述有误造成,使用修改问题表述来修复错误;然后确认是否因问题过于复杂而造成AI无法回答出正确答案,使用拆分问题的方法来降低问题复杂度。
针对每个步骤的结果,均需要做黑盒验证,在最终结果生成后,需要做总体验证;在验证不通过时,需要查明原因,确定是否步骤不够明确或需求还要继续拆分;在确定步骤没有问题时,可以尝试重新使用AI生成或者手动修改代码。在使用AI生成代码制作工具时,应尽量考虑到通用性,将可能复用的变量作为参数,一旦代码验证通过,应将其封装为工具以备后用。不可每次都使用AI重新生成代码,这是由于AI生成的代码不一定每次都正确,及时保存、封装代码可以减少结果校验的工作量(图2)。
图2
2.1 实现步骤设计
本次以化探不规则网采样点自动编号工作为例,结合实际情况,将步骤拆解为大格要素类生成及编号、小格要素类生成及编号和采样点编号生成3个步骤(图3)。
图3
图3
化探不规则网采样点自动编号实现步骤
Fig.3
Implementation steps of automatic numbering of geochemical irregular network sampling points
2.2 大格要素类生成及编号
如图3所示,此步骤需要用户提供空间参考系、大格起始点坐标(左上角)、大格边长、大格行列号、大格要素保存路径参数,输出结果为大格要素类,要素类中具备编号字段,并填充正确的值。
将项目需求翻译为AI问题,在Baidu Comate中输入问题1:使用ArcGIS Pro Python,生成大格要素类,要素类中存放边长固定的方格,空间参考、左上角起始点坐标、方格行列数、方格边长由用户输入,方格编号按照从左上到右下顺序编排,共3位,例如:001、002。
返回的代码中,除去参数设置部分,核心代码见代码1:
# 创建方格并赋予编号
with arcpy.da.InsertCursor(output_feature_class, ["SHAPE@", "GridID"]) as cursor:
for row in range(num_rows):
for col in range(num_cols):
# 计算方格左上角坐标
grid_start_x = upper_left_corner.X + col * cell_size
grid_start_y = upper_left_corner.Y - row * cell_size # 注意Y坐标是减去的,因为是从上到下
# 创建方格几何
array = arcpy.Array()
array.add(arcpy.Point(grid_start_x, grid_start_y))
array.add(arcpy.Point(grid_start_x + cell_size, grid_start_y))
array.add(arcpy.Point(grid_start_x + cell_size, grid_start_y - cell_size))
array.add(arcpy.Point(grid_start_x, grid_start_y - cell_size))
array.add(arcpy.Point(grid_start_x, grid_start_y)) # Close the polygon
polygon = arcpy.Polygon(array)
# 格式化方格编号
grid_id_str = "{:03d}".format(grid_id)
# 插入方格到要素类
cursor.insertRow((polygon, grid_id_str))
# 更新方格编号
grid_id += 1
其中:upper_left_corner为用户输入的左上角起点坐标;output_feature_class为大格要素类保存路径。可以看出,Baidu Comate使用了最新的arcpy.da.InsertCursor插入游标,并考虑到了左上角到右下角生成要素以及编号时,Y坐标递减的问题,关键部位有必要的注释。就代码逻辑、变量命名、规范度和整洁度而言,已经达到中等开发人员水平。
本段代码在未改动的情况下,输入必要的参数后运行,可以得到正确的结果(图4)。使用同样的问题1,生成了5次代码,Baidu Comate每次回复大致框架思路相同,代码细节均不同,但都可以得到正确结果。对于此等逻辑难度的代码编写,笔者后续又进一步展开实验,使用问题1,生成60次代码。实验结果显示,60次中有58次运行结果正确,Baidu Comate的正确率达到96.7%。
图4
2.3 小格生成
此步骤由用户提供空间参考系及上一步骤生成的大格要素类和小格要素类保存路径等参数,输出结果为小格要素类,要素类中具备编号字段,并填充正确的值。
将此需求翻译为AI问题,在Baidu Comate中输入问题2:根据已知的大格要素类生成生成小格要素类,小格要素类中是边长固定的方格,边长为大格的一半,每个大格包括4个小格,小格编号是在被包含大格编号的基础上,从左上到右下方向,增加一位子母序号,例如:001a、001b、001c、001d。小格边长和行列数均由大格要素类计算,无需用户输入。
返回的代码中,除去参数设置部分,核心代码见代码2:
# 遍历大格要素类中的每个要素,创建小格
with arcpy.da.SearchCursor(large_grid_feature_class, ["SHAPE@", "GridID"]) as cursor:
for large_grid in cursor:
large_polygon = large_grid[0]
large_grid_id = large_grid[1]
# 获取大格的中心点作为小格起始点
centroid = large_polygon.centroid
upper_left_corner = arcpy.Point(centroid.X - small_cell_size / 2, centroid.Y + small_cell_size / 2)
# 创建小格
with arcpy.da.InsertCursor(small_grid_feature_class, ["SHAPE@", "GridID"]) as small_grid_cursor:
for row in range(2):
for col in range(2):
# 计算小格左上角坐标
small_grid_start_x = upper_left_corner.X + col * small_cell_size - small_cell_size / 2
small_grid_start_y = upper_left_corner.Y - row * small_cell_size + small_cell_size / 2
# 创建小格几何
small_grid_array = arcpy.Array()
small_grid_array.add(arcpy.Point(small_grid_start_x, small_grid_start_y))
small_grid_array.add(arcpy.Point(small_grid_start_x + small_cell_size, small_grid_start_y))
small_grid_array.add(
arcpy.Point(small_grid_start_x + small_cell_size, small_grid_start_y - small_cell_size))
small_grid_array.add(arcpy.Point(small_grid_start_x, small_grid_start_y - small_cell_size))
small_grid_array.add(arcpy.Point(small_grid_start_x, small_grid_start_y)) # Close the polygon
small_polygon = arcpy.Polygon(small_grid_array)
# 格式化小格编号
small_grid_id = "{}{}".format(large_grid_id, "abcd"[row * 2 + col])
# 插入小格到要素类
small_grid_cursor.insertRow((small_polygon, small_grid_id))
其中:large_grid_feature_class为大格要素类路径;small_grid_feature_class为小格要素类路径;upper_left_corner为左上角起始点坐标,由大格要素类中获取。
可以看出,Baidu Comate嵌套了多级游标和多层次循环,虽然效率不是最高,但整体思路清晰,整体表现较好。代码2的主要效率问题在于将InsertCursor游标嵌套进循环中,使系统不断的对小格要素类打开和关闭,若要提高效率,应当将循环产生的计算结果暂存,循环完成后使用InsertCursor游标一次性写入小格要素类中。使用问题2生成5次代码,文中所示代码2是第2次生成的结果,5次中有3次运行结果正确,可以得到小格要素类及编号(图5)。其余两次出现了错误代码,分别是左上到右下的编号排序错误和起始点坐标获取错误,用户可手动修复,不影响整体逻辑。在该逻辑难度的问题下,Baidu Comate的表现仍然像一个开发者,会犯开发者常犯的错误。
图5
2.4 采样点编号生成
此步骤由用户提供上一步骤生成的小格要素类路径,小格要素类字段名称、采样点要素类等3个参数,输出结果为采样点要素类增加编号字段,并填充正确的值。
将此需求翻译为AI问题,在Baidu Comate中输入问题3:根据已知的小格要素类,给采样点要素生成采样点编号,并保存至采样点要素类的属性中,采样点编号是以被包含的小格要素编号为基准,后加采样顺序号,采样顺序号从1开始,排序方向为从左上到右下,例如:001a1、001a2。每个小格内的采样点序号均从1重新排列。采用点要素类路径、小格要素类路径,小格编号字段名称由用户输入。
返回的代码中,除去参数设置部分,核心代码见代码3:
# 增加排序字段
arcpy.AddField_management(sample_point_feature_class, "X", "Double")
arcpy.management.CalculateGeometryAttributes(sample_point_feature_class, "X POINT_X", '', '', None, "SAME_AS_INPUT")
arcpy.AddField_management(sample_point_feature_class, "Y", "Double")
arcpy.management.CalculateGeometryAttributes(sample_point_feature_class, "X POINT_X", '', '', None, "SAME_AS_INPUT")
# 遍历每个小格
with arcpy.da.SearchCursor(small_grid_feature_class, ["SHAPE@", grid_id_field]) as cursor:
for small_grid in cursor:
# 初始化小格内采样点序号
sample_point_counter = 1
small_grid_geom = small_grid[0]
small_grid_id = small_grid[1]
# 遍历采样点要素类,检查哪些点在小格内
with arcpy.da.UpdateCursor(sample_point_feature_class, ["SHAPE@", "SampleID"],sql_clause=(None, "ORDER BY X,Y")) as sample_cursor:
for sample_point in sample_cursor:
sample_point_geom = sample_point[0]
# 检查采样点是否在小格内
if small_grid_geom.contains(sample_point_geom):
# 生成采样点编号
sample_id = f"{small_grid_id}{sample_point_counter:d}"
# 更新采样点属性
sample_cursor.updateRow([sample_point_geom, sample_id])
# 重置小格内采样点序号
sample_point_counter += 1
其中:sample_point_feature_class为采样点要素类路径;small_grid_feature_class为小格要素类路径。
斜体部分的代码是笔者手动增加,非AI生成。在该逻辑难度的问题下,Baidu Comate似乎很难实现采样点从左上到右下的顺序号排列方法,笔者尝试了若干次,并尝试重新编写问题3内容,都不能让Baidu Comate理解该如何处理,此时可以看出AI思维的一些局限性。在人类开发者看来,生成采样点坐标并配合sql后缀,即可简单地实现采样点规则编号,若告诉Baidu Comate采样点中有顺序字段,它可以使用该字段配合游标按顺序取出,但先建立顺序字段,再利用该字段排序,目前看Baidu Comate并没有这种思维方式。好在Baidu Comate已经将整体框架结构搭建好,开发者只需要做适当修改即可,最终结果如图6所示,可以看出,采样点已经按照约定规则编号。
图6
2.5 工具封装
将上述步骤的核心代码依次封装,并将采样点要素类、大格起始点坐标(左上角)、大格边长和大格行列号作为输入参数,上述步骤中其余参数均可以作为过渡参数,以内部固定的形式传递。这样便制作成了一个全新的化探不规则网采样点自动编号工具,未来使用时直接调用即可。
2.6 工具测试
使用封装后的工具对12 000个化探点做自动编号操作,总耗时2 min,较传统手工编号效率提高99.8%,经检查所有编号准确无误,正确率提高至100%。
3 问题探讨
3.1 指令复杂度
尝试使用问题4,将化探不规则网采样点自动编号的3个步骤串联起来,以期Baidu Comate能一次性回答出来,实现2.5小节中工具封装后的效果。但这种复杂需求,Baidu Comate的答案过于冗长,包含多层循环嵌套,出现错误后极难排查问题,从效率上讲,并没有分步骤实施快捷。笔者共计尝试10次,其中也尝试变换问题4的说法,没有一次得到正确的编号结果。问题4如下:
使用ArcGIS Pro Python,对采样点进行编号,编号规则:首先根据点A建立大格,大格是若干边长固定方形,相互相邻,大格编号为3位,从上到下从左到右编号,例如:001、002。在大格的基础上建立小格,小格边长为大格的一半,小格编号是在所被包含的大格编号基础上,从上到下从左到右顺序,增加1位子母,例如:001a、001b。采样点编号是在所被包含小格的基础上,以从上到下、从左到右的顺序,增加序列号。采样点路径、点A坐标、大格边长均由用户输入。而大格行列数应该由采样点范围计算求得,无需用户输入。
3.2 指令清晰度
对Baidu Comate下指令,应尽量清晰简洁,不要使用过多的修饰词,不要存在歧义,在合适的时候,应该举一些例子,让Baidu Comate更容易接受。
测试过程中,一开始使用“从上到下、从左到右的顺序”字眼,笔者认为优先级应该是上下方向高于左右方向,但Baidu Comate并没有理解,后期修改为“由左上到右下方向”后,便解决了这一问题。
3.3 复杂逻辑辨识度
从2.4小节中可以看出,相对复杂的逻辑下,AI不能辨识,使用问题5尝试获取一种自动布设采样点的算法,Baidu Comate很巧妙地避开了核心问题,在回复的答案中,提到了需要先识别沟谷区域,并给出了识别建议,但具体代码是从获取到沟谷区域以后编写。问题5如下:
ArcGIS Pro Python中,根据提供的等高线要素类布设采样点,要求采样点位于沟谷内。
3.4 开发知识储备
从目前AI给出的答案来看,完全没有编程知识储备或刚入门级的人员暂不适合使用,有时代码错误仅需要修改一行就可以使程序正常运行,但初学者可能会将精力放在重复生成代码和测试代码上,并不会认真读代码并发现问题,最终导致效率不如自己重新编写。或许未来AI可以给出正确率更高的结果来解决这类问题。
4 结论
1)语言型AI发展迅速,对各行各业影响巨大,AI在地质行业信息化方面已经有所作为。基于Baidu Comate,可以快速编写正确率较高的ArcGIS Pro Python代码,可以应用在地质行业的各类数据批处理上,本次示例中,所有代码生成仅用了30 s,阅读代码并修改正确也仅花费10 min,较传统工作方式极大地提高了生产效率。使用封装后的工具对12 000个化探点做自动编号操作,较传统手工编号效率提高99.8%,正确率提高至100%。
2)本文以化探不规则网采样点自动编号为例,提出在使用AI解决批处理问题时,应该结合实际需求,将需求拆解成一系列步骤,一步步“诱导”AI给出正确答案。当“诱导”AI回答有误时,可以通过问题清晰度增强和问题复杂度简化两个方面来进行修正。
3)AI的应用仅能提高生产效率,不能完全替代完成日常工作,生成的代码还需要有一定代码阅读能力的人员修改后使用。一旦代码验证通过,应将其封装为工具以备后用,不可每次都使用AI重新生成代码。
参考文献
基于文心一言的数据结构课程教学方法初探
[J].
Study on the teaching method of data structure course based on ERNIE Bot
[J].
ChatGPT在财会工作中的应用探索——基于文心一言、ChatGPT、ChatSonic测试
[J].
Exploring the application of ChatGPT in accounting work——Based on the tests of ERNIE Bot,ChatGPT,and ChatSonic
[J].
地质调查智能空间框架构建与实践
[J].
Construction and application of the geological survey intelligent space
[J].
1:20万区域化探采样和样品分析工作的质量评分及质量等级的评定
[J].
The marking of quality and evaluation ofquality grade for sample collection andanalysis in 1:200,000 regional geochemicalprospecting
[J].
水系沉积物地球化学普查中若干问题探讨
[J].
A tentative discussion on some problems in geochemical survey of stream sediments
[J].
东北平原区地块尺度土地质量地球化学评价合理采样密度研究
[J].
Reasonable sampling density for land parcel scale geochemical assessment on land quality in Northeast China Plain
[J].
地球化学勘查固体样品采集的野外质量评价指标
[J].
The field quality evaluation index of solid sampling in geochemical exploration
[J].
基于MapGIS和Section实现采样点号自动标注
[J].
Implementing automatic annotation of sampling point numbers based on MapGIS and section
[J].
浅析MapGIS在化探采样点位设计图的应用
[J].
Analysis of the application of MapGIS in the design of geochemical sampling points
[J].
基于VBA实现设计点位编号和坐标提取
[J].
Based on the VBA realization the design point site number and extraction coordinate
[J].
化探异常编号与异常评价自动化方法
[J].
the automatic method for anomaly numbering and anomaly evaluation
[J].
化探采样点自动编号及航点自动生成的方法
[J].
A method for automatic numbering of geochemical sampling points and automatic generation of waypoints
[J].
MapGIS条件下完美实现不规则网化探采样点自动编号
[J].
Irregular network geochemical exploration sample points number automatically by MapGIS
[J].
化探点位设计图采样点自动编号方法
[J].
Sampling automatic numbering method for geochemical exploration point bit design
[J].
基于FME的化探采样点自动编号
[J].
Automatic numbering of geochemical exploration sample points based on FME
[J].
2024百度Create大会李彦宏带来三大AI开发工具,演讲实录来了!
[N/OL]. https://baijiahao.baidu.com/s?id=1796463369412210711&wfr=spider&for=pc.
Robin Lee brings three AI development tools to the 2024 Baidu Create Conference!
[N/OL]. https://baijiahao.baidu.com/s?id=1796463369412210711&wfr=spider&for=pc.
李彦宏称百度每日新增代码有27%由AI生成
[N/OL]. https://baijiahao.baidu.com/s?id=1796456227535203935&wfr=spider&for=pc.
Robin Lee said that 27% of Baidu's daily new codes are generated by AI
[N/OL]. https://baijiahao.baidu.com/s?id=1796456227535203935&wfr=spider&for=pc.
基于Python的ArcGIS(Arcpy)数据检查技术应用
[J].
Application on ArcGIS(Arcpy) data inspection technology based on Python
[J].
基于ArcGIS Python的Shapefile批量合并方法实现与工具设计
[J].
Implementation and tool design of Shapefile batch merging based on ArcGIS Python
[J].
基于ArcGIS Python的图斑八邻信息提取方法
[J].
Eight-neighbor information extraction method of image spot based on ArcGIS Python
[J].
/
〈 |
|
〉 |
