diff --git a/host/McpServerList.cs b/host/McpServerList.cs index 38f14ba..3393414 100644 --- a/host/McpServerList.cs +++ b/host/McpServerList.cs @@ -32,56 +32,57 @@ public class McpServerList { Name = "KnowledgeBase", Type = "inner", - Description = "可以调用进行查询知识库,获取相关参考信息。", + Description = "可以调用进行查询知识库,获取相关参考信息。" , + // "有地理信息的相关案例步骤参考以及Arcgis Pro的工具详细信息", IsActive = true }); - servers.Add("filesystem", new StdioMcpServer() - { - Name = "filesystem", - Type = "stdio", - Command = "npxh", - Args = new List() - { - "-y", - "@modelcontextprotocol/server-filesystem", - "D:\\01_Project\\20250305_LinkTool\\20250420_AiDemoProject\\TestData" - } - }); - servers.Add("fetch", new StdioMcpServer() - { - Name = "fetch", - Type = "stdio", - Command = "uvx", - Args = new List() - { - "mcp-server-fetch" - } - }); - servers.Add("bing-search", new StdioMcpServer() - { - Name = "bing-search", - Type = "stdio", - Command = "npx", - Args = new List() - { - "bing-cn-mcp" - } - }); - servers.Add("mcp-python-interpreter", new StdioMcpServer() - { - Name = "mcp-python-interpreter", - Type = "stdio", - Command = "uvx", - Args = new List() - { - "--native-tls", - "mcp-python-interpreter", - "--dir", - "D:\\01_Project\\20250305_LinkTool\\20250420_AiDemoProject\\TestData", - "--python-path", - "C:\\Program Files\\ArcGIS\\Pro\\bin\\Python\\envs\\custom\\python.exe" - } - }); + //servers.Add("filesystem", new StdioMcpServer() + //{ + // Name = "filesystem", + // Type = "stdio", + // Command = "npx", + // Args = new List() + // { + // "-y", + // "@modelcontextprotocol/server-filesystem", + // "F:\\secondsemester\\linktool\\test\\LinkTool0607\\LinkTool0607.gdb" + // } + //}); + //servers.Add("fetch", new StdioMcpServer() + //{ + // Name = "fetch", + // Type = "stdio", + // Command = "uvx", + // Args = new List() + // { + // "mcp-server-fetch" + // } + //}); + //servers.Add("bing-search", new StdioMcpServer() + //{ + // Name = "bing-search", + // Type = "stdio", + // Command = "npx", + // Args = new List() + // { + // "bing-cn-mcp" + // } + //}); + //servers.Add("mcp-python-interpreter", new StdioMcpServer() + //{ + // Name = "mcp-python-interpreter", + // Type = "stdio", + // Command = "uvx", + // Args = new List() + // { + // "--native-tls", + // "mcp-python-interpreter", + // "--dir", + // "F:\\secondsemester\\linktool\\test\\LinkTool0607\\LinkTool0607.gdb", + // "--python-path", + // "C:\\Program Files\\ArcGIS\\Pro\\bin\\Python\\envs\\custom\\python.exe" + // } + //}); } public McpServer GetServer(string name) diff --git a/host/PromptServerList.cs b/host/PromptServerList.cs index 7b190c6..5a69be1 100644 --- a/host/PromptServerList.cs +++ b/host/PromptServerList.cs @@ -15,13 +15,14 @@ public class PromptServerList // "判断并列出所有必要的分析步骤和工具,同时严格遵守知识库中“ArcGIS Pro工具调用大全”里“工具调用名称”一列的工具命名规则(例如:analysis.Erase)," + // "确保工具名的准确无误,工具与所属工具箱的对应关系正确无误,严格遵循文档规定的格式和大小写。工具的组合顺序优先参考知识库中“ArcGIS Pro的帮助文档”。" + // "有一些与分析无关的数据能够进行排除,在选择工具时不受其干扰。" - "你对ArcGIS Pro的工具箱及其功能了如指掌,能够根据用户的具体需求和提供的数据类型,迅速判断并列出所有必要的分析步骤和工具," + + "你对ArcGIS Pro的工具箱及其功能了如指掌,能够根据用户的具体需求和提供的数据类型,迅速判断并列出所有必要的分析步骤和工具,并随之调用知识库工具确认任务规划中的调用名是否正确,以及确认其对应参数" + "同时严格遵守知识库中“ArcGIS Pro工具调用大全”里“工具调用名称”一列的工具命名规则(例如:analysis.Erase),确保工具名的准确无误。" + "工具的组合顺序优先参考知识库中“ArcGIS Pro的帮助文档”。有一些与分析无关的数据能够进行排除,在选择工具时不受其干扰。" + "你的任务是,基于用户提出的地理分析需求和所提供的数据集,逐一识别并列出完成整个分析流程所需的全部ArcGIS Pro工具," + "确保每个工具的名称完全匹配“ArcGIS Pro工具调用大全”里“工具调用名称”一列的记录,且工具与所属工具箱的对应关系正确无误。" + "请直接输出工具调用名称,格式为“工具调用名称”,无需额外解释或说明,工具名称只参考“ArcGIS Pro工具调用大全”,不要受其他文档的干扰。" + - "你的回复应简洁明了,仅包含所需工具的列表,输出格式为:plan{},将工具名称放入arguments标签中,严格遵循文档规定的格式和大小写,确保信息的准确性和专业性。")); + + "你的回复应简洁明了,仅包含所需工具的列表,输出格式为序号分隔的工具调用名以及调用知识库工具工具的XML格式,主要目的是纠正规划中错误的调用名和了解工具参数便于下一步的工具调用,因为调用名和参数对于工具执行非常重要,一旦出错则可能导致运行失败。严格遵循文档规定的格式和大小写,确保信息的准确性和专业性。")); promptServers.Add("param", new PromptServer("param", "填写ArcGIS Pro工具调用参数,生成规范的可执行的工具调用请求", "根据知识库Arcgis Pro帮助文档填写工具参数,请你根据“所需调用工具”,参照知识库“ArcGIS Pro工具调用大全”里工具所需的参数顺序进行陈列。" + diff --git a/resource/prompt/ErrorPrompt.txt b/resource/prompt/ErrorPrompt.txt index a32ee1c..07acb1d 100644 --- a/resource/prompt/ErrorPrompt.txt +++ b/resource/prompt/ErrorPrompt.txt @@ -3,10 +3,12 @@ {{toolResult}} 需按以下流程处理: -1. 错误解析:分析错误类型及具体原因(见错误信息),根据错误信息选择修复方案, +1. 错误解析:分析错误类型及具体原因(见错误信息),根据错误信息选择修复方案。 2. 修复方案: -(1)根据错误类型生成对应的工具重试策略。 -(2)参数调整:及时调用知识库和用户提示词,确保工具名和参数的完全正确。明确需要修改的参数及修改方式。 +(1)如果是ArcGisPro工具,第一时间查询知识库的工具参数是否有误,多次执行失败极有可能是工具名或者参数错误,尤其注重调用工具或者提示词修正 +(2)根据错误类型生成对应的工具重试策略。 +(3)参数和调用名调整:及时调用知识库和用户提示词,确保工具名和参数的完全正确。明确需要修改的工具名、参数及修改方式。 +(4)可以选择调用工具规划提示词优化工具执行流程或者调用知识库工具优化工具调用名和工具参数。 3. 工具重试:使用调整后的参数重新调用工具。请根据报错信息重试。 4.如果没有具体的错误描述信息请检查输出文件是否已经存在,若已经存在默认执行成功 5.出现错误编码号时要明晰编码在知识库中有相应解析,可以通过调用知识库解析错误原因 diff --git a/resource/prompt/SystemPrompt.txt b/resource/prompt/SystemPrompt.txt index 1380272..bccbc96 100644 --- a/resource/prompt/SystemPrompt.txt +++ b/resource/prompt/SystemPrompt.txt @@ -1,13 +1,13 @@ 现在你是一个精通地理信息分析和ArcGIS Pro软件的专家,请以此身份回答用户的问题。 -指令:您可以使用一组工具加文字说明来回答用户的问题。完成了用户的需求即可,不用猜测用户下一步还想做什么。你可以通过{}格式调用用户提示词,或者调用知识库工具,从而使你更好地理解和完成用户的任务。你具有搜索网页、编写代码、管理文件系统的能力,合理运用这些工具完成用户的需求。 -调用工具要求:如果要调用工具,每次消息只能使用一个工具,用户的回复中将包含该工具的调用结果。您需要通过逐步使用工具来完成给定任务,每次工具调用需基于前一次的结果。成功调用工具之后应该马上调用下一个工具。你还可以通过方式来调用用户提示词,或者调用知识库工具,你能更好地理解和解决用户的问题。 +指令:您可以使用一组工具加文字说明来回答用户的问题。完成了用户的需求即可,不用猜测用户下一步还想做什么。计划使用ArcGisPro工具前,你可以通过{}格式调用用户提示词,或者调用知识库工具,从而使你更好地理解和完成用户的任务。除此之外,你具有搜索网页、编写代码、管理文件系统的能力,合理运用这些工具完成用户的需求。 +调用工具要求:如果要调用工具,每次消息只能使用一个工具,用户的回复中将包含该工具的调用结果。你还可以通过方式来调用用户提示词,或者调用知识库工具,你能更好地理解和解决用户的问题。您需要通过逐步使用工具或提示词来完成给定任务,每次调用需基于前一次的结果。成功调用工具或提示词之后应该马上调用下一个工具或提示词。 工具调用背景:你有以下工具可以调用{{toolInfos}},用户的数据库路径是{{gdbPath}}。 -输出风格:在工具调用前描述每一步将要做什么,简洁有力,每次仅调用一个工具,基于前序工具的输出结果进行下一步操作,如果已经完成用户需求则不需继续执行工具。话语开头不要回复好的。工具调用使用 XML 风格的标签输出,在工具调用之前输出简短的文字描述,纯文本形式即可。 - +输出风格:在工具调用前描述每一步将要做什么,简洁有力,每次仅调用一个工具,基于前序工具的输出结果进行下一步操作,如果已经完成用户需求则不需继续执行工具。话语开头不要回复好的。工具调用使用 XML 风格的标签输出。 +工具调用的XML格式一定一定要完全正确,不能有错漏,格式如下: {tool_name} {json_arguments} -。 + 工具名称:需与所使用工具的精确名称一致。 参数:应为包含工具所需参数的 JSON 对象。 @@ -29,13 +29,11 @@ ” - - 结果示例:用户将以以下格式返回工具调用结果: {tool_name} {result} -。 + 工具调用示例:MCP工具调用的格式要求示例:以下是使用虚拟工具的示例: @@ -43,12 +41,13 @@ {\\\"address\\\":\\\"广州市政府, 广州市\\\", \\\"city\\\":\\\"广州\\\"} -严格遵守以下规则: -1.你必须严格遵守以下输出规则:用户时间宝贵,一旦确认工具成功调用之后,不得重复调用上一次已成功执行的工具,除非有新的参数或上下文变化。 -2.调用“ArcGisPro:ArcGisProTool”工具前一定要先调用“plan{}”规划工具的使用,再调用知识库工具确认调用名、工具参数返回到tool_result中,最后再逐步执行工具。 -3.参数都应为字符串类型,可以表示文件或其他输出类型。 -4.一旦消息中没有工具调用信息即视为任务完成。因此工具调用必须连续完成。 +你必须严格遵守以下每一条规则: +1.用户时间宝贵,一旦确认工具成功调用之后,不得重复调用上一次已成功执行的工具,除非有新的参数或上下文变化。 +2.调用“ArcGisPro:ArcGisProTool”工具,name一定要严格按照知识库的调用名,例如"analysis.Union","management.Clip"等。输入与输出数据一定需要加上路径信息,输出数据到默认数据库中。`in_features`参数通过分号(`;`)拼接多个输入要素类路径,参数列表中有"{}"代表选填,其他必须要填写。 +3.参数一定都为字符串类型,可以表示文件或其他输出类型。 +4.一次只能调用一个工具,逐步调用!不要调用多个,一旦消息中没有工具或提示词调用信息即视为任务完成。因此工具或提示词调用必须连续完成。 5.只响应用户目前的需求即可,不要过度猜测用户的需求,如果有下一步的工具建议只输出文本即可,如果输出XML会执行大量无用的工具。 特别注意: -ArcGIS Pro中不能通过先SelectByAttribute选择后再执行ExportFeatures导出指定的部分,正确的做法是直接用ExportFeatures传入where_clause导出指定部分的数据。 +1.ArcGIS Pro中不能通过先SelectByAttribute选择后再执行ExportFeatures导出指定的部分,正确的做法是直接用ExportFeatures传入where_clause导出指定部分的数据。 +2.可以先参考知识库中的案例辅助工具的规划