From 7ee6f3d052e5ff850bb416cc0b4717eae5e38e3e Mon Sep 17 00:00:00 2001 From: zengmq <2306188113@qq.com> Date: Wed, 16 Jul 2025 23:39:12 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=8B=E7=BB=8D=E5=92=8C=E7=9F=A5=E8=AF=86?= =?UTF-8?q?=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- agent/dev/introduction.md | 43 +++++++++++++++++++++++++++++++++++--- agent/dev/knowledge.md | 21 ++++++++++++++++--- assets/ksetting.png | Bin 0 -> 40798 bytes 3 files changed, 58 insertions(+), 6 deletions(-) create mode 100644 assets/ksetting.png diff --git a/agent/dev/introduction.md b/agent/dev/introduction.md index c1efe76..b99200b 100644 --- a/agent/dev/introduction.md +++ b/agent/dev/introduction.md @@ -5,8 +5,6 @@ 灵图LinkTool是一个基于大模型上下文协议的自然语言驱动地理信息应用通用智能体,该智能体深度融合模型上下文协议(MCP)、自然语言交互接口与ArcGIS Pro地理处理工具库。面对用户地理处理任务需求时,LinkTool能够分析用户需求实现ArcGIS Pro与多源服务之间的无缝连接,实现“任务理解—工具选择—参数配置—动态修正”决策流程。用户可随时查看分析进度、修改参数、重复执行或终止任务,操作过程具备完整可回溯性与100%工程复现率。 ## 创新特色 - -> 列举并介绍智能体部分投稿比赛、吸引评委和观众的创新点,突出亮眼的地方(包括功能上、设计思路上等) ### 功能层面 - 全面兼容多类MCP服务协议\ @@ -14,8 +12,47 @@ LinkTool已成功对接MCP服务,包括Python脚本执行器、Bing搜索、 - 自主规划空间分析任务流程\ 传统的GIS操作依赖用户手动规划工具调用顺序,面对多步骤的综合分析任务时,往往需要反复试错与参数调整,费时费力。本项目通过将提示词工程与知识检索增强生成(RAG)技术深度集成于GIS任务链中,实现了类人类的“任务理解—工具选择—参数配置—动态修正”决策流程,赋予插件“理解意图、自主拆解任务、组合工具、自动执行”的能力。\ 用户只需用自然语言描述分析目标(如“分析某区域的道路密度与交通公平性”),插件便能自动生成任务规划,调用相关工具链,执行包括空间叠加、属性筛选、字段计算、图层导出等操作,形成完整的地理信息分析闭环。经过实测,LinkTool在处理复杂GIS分析任务时,整体效率相比人工操作提升约1.5~2倍,且分析效果在匿名评审中接近人类专家水平,显示出智能体执行流程的高可靠性与专业性。 +- 基于矢量、栅格及网络数据结构的各类空间分析操作\ +可以调用地理处理软件的上千个工具 - 地理处理工具执行过程可视与可控\ 地理人工智能(GeoAI)应用中常存在“黑箱化”问题,用户难以理解模型中间推理逻辑与数据处理路径。本项目通过“任务可视化+结果可追踪”的架构设计,构建了智能体操作全过程可视化机制:每一次工具调用都以卡片形式展示执行细节,包括工具名称、输入参数、操作对象与处理结果,并将中间分析成果实时叠加显示于ArcGIS Pro地图视图中。\ 用户可随时查看分析进度、修改参数、重复执行或终止任务,操作过程具备完整可回溯性与100%工程复现率,有效解决传统GeoAI系统中“看不懂、调不了、复现难”的问题。例如在坡度分析任务中,用户可以直观查看坡度图分布与工具配置参数,实现从数据输入到结果分析的全过程掌控。 +- 知识库调用\ +能够访问内置的四大地理信息处理知识库,知识库已经进行了切片和向量化嵌入,模型可根据实际需要自拟关键词句进行知识库检索 ### 应用层面 -- 教学 \ No newline at end of file +- 地理信息科学教学能力\ +可以实现对空间数据的统计、分析、可视化及基于数据内容的智能问答。通过深度融合自然语言交互与GIS工具链能力,本项目为GIS教学科研应用提供了高效、便捷的创新解决方案。其应用场景广泛覆盖自然资源管理、城市规划等多个领域,具备极强的实用性与推广潜力。通过展示地理思维过程与推演逻辑,项目将充分体现大语言模型技术在地理信息科学教学科研实践中解决实际问题的核心价值。 + +- 智能化自动化数据分析与处理\ +面对重复繁琐、多工具调用的复杂地理处理任务,传统的模型构建器和 Python 脚本虽能实现自动化,但其编写和调试本身耗时耗力,且缺乏灵活性。LinkTool 突破了这一局限,通过其自然语言驱动的智能体核心,实现了"零代码"的智能自动化。用户只需用日常语言描述任务,LinkTool 即可自主理解、规划并执行多达十几个甚至更多的工具链,将原本数小时的"搭积木"或"写代码"过程,缩短至数分钟的自然对话,效率提升数倍。 +#### 案例展示 +##### 市政道路数据快速提取 +>用户需求:在海珠区内从广州塔到中山大学怎么走,根据路名把广州道路数据中相应的要素导出来。 + +实现过程: +1. 坐标定位:调用高德MCP获取广州塔与中山大学的精确坐标。 +2. 路线规划:通过高德MCP获取驾车路线(途经滨江东路等7条道路)。 +3. 数据筛选:自动调用ArcGIS Pro的MCP工具完成【按属性选择】等操作。 +4. 成果输出:导出选中道路要素至指定Geodatabase数据库,生成操作报告。 + +优势体现: +我们对案例按照传统方法进行分析并与LinkTool作了对比。按照传统的GIS应用分析理论,操作员需要对道路数据进行复杂的清洗、拓扑检查、属性完善,随后通过构建GIS网络数据结构进行网络分析,使用迪杰斯特拉算法求解最短路径,实际用时2~3小时;即使操作员代码能力较强,通过代码请求高德API的方式实现需求也需要大约1小时,而使用LinkTool仅凭一句话即可联动多源时空数据,将完成时间压缩至10分钟左右。基于MCP协议LinkTool可以大批量调用相关工具,进而可快速完成生成OD成本矩阵等进一步的空间分析操作,大大提升了科研效率,使科研工作者节约数据收集、爬取与数据库建立、录入、结构化的时间,从而更专注于GIS算法的核心技术和理论的研究。 +##### 社区交通设施公平性科研分析 +>用户需求:以村(社区)为单位分别分析海珠区建筑和道路集聚情况,通过建筑密度和道路密度分析海珠区各村(社区)的交通设施公平性。 + +实现过程: +1. 密度计算:自动调用SummarizeWithin工具计算各社区建筑密度,综合PairwiseIntersect和CalculateGeometry工具统计道路密度。 +2. 空间分析:生成莫兰指数计算代码,调用arcpy.stats.SpatialAutocorrelation工具,自动分析建筑/道路密度的空间集聚性。 +3. 匹配度评估:通过CaculateField自动生成交通匹配度,即道路密度/建筑密度,读取要素类属性表识别失衡区域并进行总结,提出政策建议。 + +优势体现: +1. 提升科研效率:将以往需要科研人员花费数日进行的复杂空间统计(包括数据清洗、累计超过30个工具调用、结果解读与报告撰写)简化为30分钟左右的指令操作。 +2. 教学赋能:操作零门槛,非专业人员无需掌握arcpy语法即可完成专业的空间统计,更好理解空间自相关等地理信息科学理论。 + +##### 外业调查点位筛选 +>用户需求:请按照以下步骤要求提取出土壤类型可能发生改变的区域:将国土三调土地利用类型图(2020)和二普土壤图进行空间叠加分析,筛选出水改旱和旱改水地块。水改旱是土壤二普土壤图上土壤类型为水稻土,国土三调土地利用类型图上土地利用方式为旱地、园地、林地、草地的地块;旱改水是土壤二普土壤图上土壤类型为非水稻土,国土三调土地利用类型图上土地利用方式为水田的地块。当国土三调十地利用图斑与土壤二普土壤图重叠比例超过50%,将整块地类图斑提取出来,重叠比例不足50%的舍弃。将集中连片的相邻图斑做融合归并处理。对于边界之间距离小于10m的图斑,使用GIS聚合面功能进行归并。筛选出面积大于50亩的地类为早地、果园、茶园、林地草地等的图斑提取出来(总结自《第三次全国土壤普查技术规程规范(修订版)》)。 + + + + + diff --git a/agent/dev/knowledge.md b/agent/dev/knowledge.md index e24498f..d954955 100644 --- a/agent/dev/knowledge.md +++ b/agent/dev/knowledge.md @@ -1,13 +1,28 @@ # 知识库 ## 简介 +构建了ArcGIS Pro应用案例、任务规划案例、ArcGIS Pro工具调用大全、ArcGIS Pro帮助文档四个知识库。\ +ArcGIS Pro应用案例来源于[arcgis课程库网址](https://learn.arcgis.com/zh-cn/gallery/)、任务规划案例和ArcGIS Pro帮助文档来源于[Arcgis pro帮助文档](https://pro.arcgis.com/zh-cn/pro-app/latest/help/main/welcome-to-the-arcgis-pro-app-help.htm)、工具调用大全来源于。 + +- ArcGIS Pro应用案例\ +截至当前版本,该知识库收集整理了近200个基于ArcGIS Pro平台的应用案例,范围覆盖广,从投影到要素编辑再到制图等内容都有覆盖,也正是因为有这一拥有大量案例的知识库,使得LinkTool在调用ArcGIS Pro地理处理工具进行操作过程中具有较高的精确度和专业性。 +- 任务规划案例库\ +收集使用ArcGIS Pro完成常见空间分析需求的步骤案例,帮助用户结合自身需求形成更合理的解决方案。在本知识库中收集整理了近千条常见应用问题的解题步骤,通过学习、调用该知识库,LinkTool可在解决用户输入问题时生成任务规划,这一任务规划可帮助LinkTool在解决问题时中有较为清晰的思路与方向,能够提高解决问题的效率以及减少走弯路情况的发生。 +- ArcGIS Pro工具调用大全\ +包括调用ArcGIS Pro工具所需的工具名和所需参数列表等信息,方便用户快速查找和使用工具。LinkTool在使用ArcGIS Pro中的工具时需要按照工具所需输入正确的参数与数据,而本知识库中记录了ArcGIS Pro中的近1500个工具的名称以及所需参数与数据。LinkTool在调用ArcGIS Pro中的工具时可以通过查看本知识库,从而获取该工具所需参数与数据,并从数据库中寻找到对应的数据以及合适的参数输入,进一步完成用户输入的问题。 +- ArcGIS Pro帮助文档\ +包含ArcGIS Pro各项工具的详细使用说明、参数要求和原理说明,为用户提供全面的技术支持。 -简要介绍有哪些知识库、大致是些什么内容 ## 知识库构建 +Link Tool旨在构建一个专业的GIS工具知识库,通过自动化手段爬取Esri官方文档,进行清洗、转换、翻译和结构化处理,最终生成可用于智能体训练的结构化数据。整个系统分为网页爬虫模块和本地Markdown处理模块。 +- 网页爬虫模块负责从网络上抓取Esri相关的GIS工具文档,包括链接提取、页面爬取、内容清洗、HTML转Markdown以及翻译等步骤。它通过WebCrawlerManager协调各个组件的工作,能够自动提取网页中的链接,并根据URL判断是否为工具文档,然后使用通义千问API进行英文内容翻译和任务规划生成,最终将处理后的数据保存为Markdown文件或CSV格式。模块支持多线程爬取,具有异常处理机制,能够在爬取失败时进行重试,并记录详细的日志信息。 +- 本地Markdown处理模块则专注于对已有的Markdown文件进行进一步处理,主要功能包括读取本地Markdown文件、翻译英文内容、生成任务规划和问题、解析工具信息、将文档中的工具调用示例名称统一替换为程序可识别的标准调用名,并将处理结果保存为新的Markdown文件或CSV格式。该模块通过MarkdownProcessor协调各组件工作,支持批量处理指定目录下的所有Markdown文件,能够提取文件中的元数据,并利用通义千问API生成结构化数据。模块同样具备详细的日志记录功能,并支持多线程处理以提高效率。结合ArcGIS工具文档的映射表和AIPlanner模块的智能识别能力,确保文档中的工具调用名称与程序处理的标准一致。 -详细记录知识爬取、整理、翻译等等我们前期构建知识库时所做的工作 ## 实现方法 +将整理好的四个知识库文档上传到阿里云百炼平台,采用检索增强生成(RAG)技术,根据用户输入从外部信息源检索相关信息,然后将检索到的内容整合到用户输入中,从而帮助大模型生成更准确的回答。知识库功能作为阿里云百炼的RAG能力,能有效补充私有知识并提供最新信息。 +具体操作为导入Markdown非结构化数据和工具列表结构化数据,对知识库进行配置,开启多轮会话改写——将基于会话上下文自动调整原始输入Prompt(用户问题)以提升检索效果。使用官方向量v3(DashScope text-embedding-v3)模型,用于将原始输入Prompt和知识文本转化为数值化向量,官方向量v3模型在语种支持、输入长度和向量维度自定义化等方面,相比官方向量v2模型进行了全面升级,适用于大部分场景。选择官方排序的Rank模型,通过语义排序和文本匹配特征以确保相关性。设置20%的相似度阈值,该阈值表示允许召回的文本切片的最低相似度分数,用于筛选Rank模型返回的文本切片,即只有分数超过此数值的文本切片才会被召回。调低此阈值预期会召回更多文本切片,但可能导致召回一些相关度较低的文本切片;相反,提高此阈值会减少召回的文本切片。若设置得过高,则可能导致知识库丢弃相关的文本切片。 +![图1](../assets/ksetting.png) + -介绍通过阿里云百炼平台实现知识库管理、检索、命中测试等的方法 \ No newline at end of file diff --git a/assets/ksetting.png b/assets/ksetting.png new file mode 100644 index 0000000000000000000000000000000000000000..bd7fd704ccddb4c9afd9869388e5db45a93c867d GIT binary patch literal 40798 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 z z_4(r5U?B^XxX@q0{l8Kw-!W(aq7PNRu%|PlH7!?;I<;x?rQsbL=p}jd@!j2^M&y}) zkA;wvj$-IU9nivj%ITLO7%pHx`T4P@lZ5;VxyyU^8&e}A&Q|92%C57)upY}Hkvckp z-vjSI*#!vn^0;QvI46_|v}HnEhJPUziz7v^&W9}T&4Yf5&rf_iWt*sAWB){`LT~4R z&241MM_HsZq{gvqjgZcKRJ{W>K