给我的ArcGIS Pro装个“AI外挂”,开发过程全公开!

给我的ArcGIS Pro装个“AI外挂”,开发过程全公开!

Published on

【ArcGIS Pro AI助手开发日志 #1】

嘿,各位还在用ArcGIS Pro“搬砖”的兄弟姐妹们,ArcGIS Pro这个软件,强是真强,但烦也是真烦。想写个ArcGIS脚本自动处理点东西,是不是经常不记得要用哪一个工具,或者ChatGPT信誓旦旦告诉你要用某个工具,但是在你的ArcGIS Pro软件中,你却找不到它。

又或是写arcpy代码却卡在这种地方:

比如,你要用arcpy.da.UpdateCursor。你的VS Code很聪明,提示你field_names参数需要一个列表。官方文档也给你看了个基础示例。但真正的麻烦,藏在细节里:

  • 可读性的噩梦:你定义了field_names = ["PROCESS_STATUS", "LAST_EDITOR", "SHAPE@X"]。进了for row in cursor:循环后,你就得开始玩“猜猜我是谁”的游戏。row[0]是状态,row[1]是编辑者,row[2]是X坐标... 等你写到row[4]的时候,早忘了它对应哪个字段了。你想的明明是row.status = 'Complete',写的却是row[0] = 'Complete'。这种代码,过一个月连你自己都看不懂。

  • 恼人的语法“陷阱”:只想更新一个字段?行。但如果你想用元组,就得写成("my_field",)。忘了那个逗号,写成("my_field")?恭喜,它变成了一个字符串,程序会在运行时给你一个莫名其妙的错误,让你排查半天。

  • “然后呢?”的困惑:文档示例告诉你怎么updateRow(),但它没告诉你,在复杂的脚本里,更新完之后通常最佳实践是什么。需不需要手动释放锁?这个游标跟另一个要素类的编辑会话有冲突吗?你需要的是一套解决问题的“组合拳”,而不只是一个孤零零的招式。

Esri官方倒是在搞AI助手,但现在还是Beta版,想用上不知道得等到猴年馬月。

看过“AI焦虑”与 Esri 的“答案”文章的应该感受到来自于ai的压力了。

我就想,求人不如求己。咱也是玩Python的,现在AI这么火,干嘛不自己动手,给ArcGIS Pro搞一个“AI外挂”呢?一个能随叫随到、啥都懂的私人小助理。

于是,这个疯狂又好玩的项目就这么开始了!

我想要个什么样的“AI外挂”?

我理想中的它,应该特简单、特直接。

初期,它是一个文档和代码专家。直接在一个对话框里问它:

“哥们儿,咋用代码把一个图层按另一个图层的边界给切了?给个最佳实践的例子。”

然后它会告诉我:

“用arcpy.analysis.Clip(),来,代码都给你写好了,拿去用吧!不光如此,我还加了try...except块来处理可能的错误,并用了arcpy.Exists()来检查输入文件,更稳当!”

但我们的野心不止于此!未来,我希望它能进化成一个真正的数据分析师。我可以直接问它:

“帮我查一下,在我项目里的'商业设施'图层里,'设施类型'字段为'超市'的要素有多少个?”

然后它能自己去理解我的项目、查询数据、并返回答案:“一共有37个。”

它得是我的第二个脑子,帮我记住所有那些繁琐的工具名、最佳实践和代码片段,甚至能直接帮我分析数据,让我能专心于更高层次的思考。

本系列的完整冒险地图(动态更新)

这篇文章是我《给我的ArcGIS Pro装个“AI外挂”》系列的第一期,主要是立个Flag,顺便看看大家对哪个方向最感兴趣。我初步规划了咱们的冒险地图,后续更新的文章链接我也会在这里补上,方便大家索引:

  • 【第一站】万丈高楼平地起:手把手带你构建我们所有实验的“统一知识大脑”——一个塞满了ArcGIS Pro帮助文档的Weaviate向量数据库。(本文就是序章)
  • 【第二站】零代码的快乐:体验Google NotebookLMDify这类无代码/低代码平台,看看不动一行代码,我们能把AI助手做到什么程度。
  • 【第三站】核心代码揭秘(上):深入了解LangChain,用Python从零开始实现一个基于文档的问答机器人,了解如何实现Dify一样的效果,并把它和Dify的效果做个横向评测。
  • 【第三站】核心代码揭秘(中):深入LangChain和Langgraph,实现更复杂、更准确的索引查询。
  • 【第四站】核心代码揭秘(下):继续深挖,用LlamaIndex实现更高级RAG工具能不能让我们的文本嵌入和检索更进一步,看看它对比LangChain效果能提升多少。
  • 【未来展望】:探索如何让我们的AI助手拥有“读懂”地理数据的能力,实现用自然语言直接查询和分析你的GDB/Shapefile!

别光看我做,一起来玩!

我决定,把我从零开始,捣鼓这个AI助手的整个过程,原原本本地记录下来。这个系列不玩虚的,不只给你看最后成功亮闪闪的代码。我会把所有走过的路,包括:

  • 怎么想的:我为啥选这个技术,不选那个。
  • 踩了哪些坑:有哪些地方我搞了半天发现是错的,帮大家提前避雷。
  • 不同方案的PK:咱会试试各种不同的玩法,看看哪个效果最好,哪个最省事。

总之,跟着这个系列,你就算是个AI小白,也能看明白、学得会。

开工!先给AI造个“大脑”

下一篇文章,我们就正式动工!第一件事,就是给咱们未来的AI助手,准备一个装满知识的“大脑”。具体来说,我们要:

  1. 把ArcGIS Pro自带的那些HTML帮助文档都扒下来。
  2. 把这些文档切成一小块一小块,让AI能“消化”。
  3. 用OpenAI的模型把这些知识转化成AI能理解的“向量”。
  4. 最后,把这些“向量”都塞进一个叫 Weaviate 的向量数据库里。

这个数据库,就是我们所有后续实验的“大本营”!


说实话,我自己也对这个项目充满了期待。我相信AI不是来抢我们饭碗的,而是我们手里最好用的“瑞士军刀”。

如果你也觉得这事儿有意思,想一起见证一个专属的AI小助理的诞生,或者想第一时间收到后续的更新,可以通过页面底部的联系的方式找到我。

欢迎在评论区里疯狂吐槽你在ArcGIS里遇到的烦心事,或者聊聊你对这个系列、对哪个技术方向最感兴趣。你们的反馈会直接影响我后续内容的侧重点!