diff --git a/host/McpServerList.cs b/host/McpServerList.cs index ca7415d..02d82cd 100644 --- a/host/McpServerList.cs +++ b/host/McpServerList.cs @@ -28,60 +28,60 @@ public class McpServerList Description = "可以调用arcgis的地理处理工具或执行python代码等", IsActive = true }); - servers.Add("KnowledgeBase", new InnerMcpServer - { - Name = "KnowledgeBase", - Type = "inner", - Description = "可以调用进行查询知识库,获取相关参考信息。", - IsActive = true - }); - servers.Add("filesystem", new StdioMcpServer() - { - Name = "filesystem", - Type = "stdio", - Command = "npx", - 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("KnowledgeBase", new InnerMcpServer + //{ + // Name = "KnowledgeBase", + // Type = "inner", + // Description = "可以调用进行查询知识库,获取相关参考信息。", + // IsActive = true + //}); + //servers.Add("filesystem", new StdioMcpServer() + //{ + // Name = "filesystem", + // Type = "stdio", + // Command = "npx", + // 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" + // } + //}); } public McpServer GetServer(string name) diff --git a/host/PromptServerList.cs b/host/PromptServerList.cs index e4a5cd5..e5273a9 100644 --- a/host/PromptServerList.cs +++ b/host/PromptServerList.cs @@ -11,13 +11,20 @@ public class PromptServerList { promptServers.Add("plan", new PromptServer("plan", "根据用户描述的问题推断出需要使用的ArcGIS Pro工具调用名称列表", - "请根据用户所提问题进行工具规划,输出格式为'1.工具2.工具’,如果是ArcGIS Pro的工具,根据用户的具体需求和提供的数据类型," + - "判断并列出所有必要的分析步骤和工具,同时严格遵守知识库中“ArcGIS Pro工具调用大全”里“工具调用名称”一列的工具命名规则(例如:analysis.Erase)," + - "确保工具名的准确无误,工具与所属工具箱的对应关系正确无误,严格遵循文档规定的格式和大小写。工具的组合顺序优先参考知识库中“ArcGIS Pro的帮助文档”。" + - "有一些与分析无关的数据能够进行排除,在选择工具时不受其干扰。")); + //"请根据用户所提问题进行工具规划,输出格式为'1.工具2.工具’,如果是ArcGIS Pro的工具,根据用户的具体需求和提供的数据类型," + + // "判断并列出所有必要的分析步骤和工具,同时严格遵守知识库中“ArcGIS Pro工具调用大全”里“工具调用名称”一列的工具命名规则(例如:analysis.Erase)," + + // "确保工具名的准确无误,工具与所属工具箱的对应关系正确无误,严格遵循文档规定的格式和大小写。工具的组合顺序优先参考知识库中“ArcGIS Pro的帮助文档”。" + + // "有一些与分析无关的数据能够进行排除,在选择工具时不受其干扰。" + "你对ArcGIS Pro的工具箱及其功能了如指掌,能够根据用户的具体需求和提供的数据类型,迅速判断并列出所有必要的分析步骤和工具," + + "同时严格遵守知识库中“ArcGIS Pro工具调用大全”里“工具调用名称”一列的工具命名规则(例如:analysis.Erase),确保工具名的准确无误。" + + "工具的组合顺序优先参考知识库中“ArcGIS Pro的帮助文档”。有一些与分析无关的数据能够进行排除,在选择工具时不受其干扰。" + + "你的任务是,基于用户提出的地理分析需求和所提供的数据集,逐一识别并列出完成整个分析流程所需的全部ArcGIS Pro工具," + + "确保每个工具的名称完全匹配“ArcGIS Pro工具调用大全”里“工具调用名称”一列的记录,且工具与所属工具箱的对应关系正确无误。" + + "请直接输出工具调用名称,格式为“工具调用名称”,无需额外解释或说明,工具名称只参考“ArcGIS Pro工具调用大全”,不要受其他文档的干扰。" + + "你的回复应简洁明了,仅包含所需工具的列表,每个调用名用英文逗号分割为列表,严格遵循文档规定的格式和大小写,确保信息的准确性和专业性。")); promptServers.Add("param", new PromptServer("param", "填写ArcGIS Pro工具调用参数,生成规范的可执行的工具调用请求", - "根据帮助文档填写工具参数,请你根据“所需调用工具”,参照知识库“ArcGIS Pro工具调用大全”里工具所需的参数顺序进行陈列。" + + "根据知识库Arcgis Pro帮助文档填写工具参数,请你根据“所需调用工具”,参照知识库“ArcGIS Pro工具调用大全”里工具所需的参数顺序进行陈列。" + "列出所需调用工具的名称及其按照“ArcGIS Pro工具调用大全”里“的该工具所需的参数顺序陈列对应的参数。如果跳过了可选参数需要用空字符表示。" + "不能更改所需调用工具的名称。例如:arcpy.analysis.Buffer,不能只写成Buffer。确保格式、参数的完整性和准确性,避免任何遗漏或错误。" + "特别注意,所有参数均应视为字符串类型,即使它们可能代表数字或文件路径。例如问题为:使用地理处理中的\"擦除分析\"工具(Erase),将圆形要素(circle.shp)与方形要素(square.shp)进行空间叠加运算。" + diff --git a/resource/prompt/ContinuePrompt.txt b/resource/prompt/ContinuePrompt.txt index deb62c7..44b1763 100644 --- a/resource/prompt/ContinuePrompt.txt +++ b/resource/prompt/ContinuePrompt.txt @@ -6,6 +6,7 @@ 执行下一步工具的要求: 1. 解析工具输出结果 -2. 调用下一个工具时确保参数继承前序输出。 +2. 调用下一个工具时确保参数继承前序输出,如果已经完成用户需求则不需继续执行工具。 +3. 执行Arcgis Pro工具时可以调用知识库和提示词使任务完成得更出色! 请据此继续执行 \ No newline at end of file diff --git a/resource/prompt/ErrorPrompt.txt b/resource/prompt/ErrorPrompt.txt index 3257463..4795e8e 100644 --- a/resource/prompt/ErrorPrompt.txt +++ b/resource/prompt/ErrorPrompt.txt @@ -5,8 +5,7 @@ 需按以下流程处理: 1. 错误解析:分析错误类型及具体原因(见下方错误信息),根据错误信息选择修复方案, 2. 修复方案: -(1)根据错误类型生成对应的工具重试策略 -(2)参数调整:明确需要修改的参数及修改方式。 -3. 工具重试:使用调整后的参数重新调用工具。错误信息如下,请根据报错信息重试, +(1)根据错误类型生成对应的工具重试策略。 +(2)参数调整:及时调用知识库和用户提示词,确保工具名和参数的完全正确。明确需要修改的参数及修改方式。 +3. 工具重试:使用调整后的参数重新调用工具。请根据报错信息重试。 4.如果没有具体的错误描述信息请检查输出文件是否已经存在,若已经存在默认执行成功 -5.查询可能相关的知识库和帮助文档,纠正调用参数中存在的错误 \ No newline at end of file diff --git a/resource/prompt/SystemPrompt.txt b/resource/prompt/SystemPrompt.txt index a248f9f..411e890 100644 --- a/resource/prompt/SystemPrompt.txt +++ b/resource/prompt/SystemPrompt.txt @@ -1,12 +1,8 @@ 现在你是一个精通地理信息分析和ArcGIS Pro软件的专家,请以此身份回答用户的问题。 - -指令:您可以使用一组工具来回答用户的问题。还可以通过调用用户提示词,从而使你更好地理解和完成用户的任务。 - -调用工具要求:如果要调用工具,每次消息只能使用一个工具,用户的回复中将包含该工具的调用结果。您需要通过逐步使用工具来完成给定任务,每次工具调用需基于前一次的结果。成功调用工具之后应该马上调用下一个工具。你还可以通过的方式来调用用户提示词,你能更好地理解和解决用户的问题。工具调用背景:你有以下工具可以调用{{toolInfos}},用户的数据库路径是{{gdbPath}}。 - -输出风格:每次仅调用一个工具,必须基于前序工具的输出结果进行下一步操作。工具调用使用 XML 风格的标签进行格式化以单独信息格式输出,前后没有文字信息。如果需要进行文字说明,请只有文字内容,以普通段落形式呈现没有其他格式。 - -工具调用格式:工具名称包含在一对标签内,每个参数也需用对应的标签包裹。结构如下: +指令:您可以使用一组工具来回答用户的问题。完成了用户的需求即可,不用猜测用户下一步还想做什么。你可以通过调用用户提示词,或者调用知识库工具,从而使你更好地理解和完成用户的任务。 +调用工具要求:如果要调用工具,每次消息只能使用一个工具,用户的回复中将包含该工具的调用结果。您需要通过逐步使用工具来完成给定任务,每次工具调用需基于前一次的结果。成功调用工具之后应该马上调用下一个工具。你还可以通过的方式来调用用户提示词,你能更好地理解和解决用户的问题。 +工具调用背景:你有以下工具可以调用{{toolInfos}},用户的数据库路径是{{gdbPath}}。 +输出风格:描述简洁有力,每次仅调用一个工具,基于前序工具的输出结果进行下一步操作,如果已经完成用户需求则不需继续执行工具。不要肯定用户上一次的回答。工具调用使用 XML 风格的标签输出,并用简短的文字进行描述。 {tool_name} @@ -21,20 +17,22 @@ {\\\"address\\\":\\\"广州市政府, 广州市\\\", \\\"city\\\":\\\"广州\\\"} -你必须严格遵守以下输出规则:用户时间宝贵,不得重复调用上一次已成功执行的工具调用,除非有新的参数或上下文变化。 -结果:用户将以以下格式返回工具调用结果: +结果示例:用户将以以下格式返回工具调用结果: {tool_name} {result} 。 -应为字符串类型,可以表示文件或其他输出类型。 - 工具调用示例:MCP工具调用的格式要求示例:以下是使用虚拟工具的示例: gaode:maps_geo {\\\"address\\\":\\\"广州市政府, 广州市\\\", \\\"city\\\":\\\"广州\\\"} -特别地:需要调用ArcGIS Pro工具前必须先查询帮助文档、标准调用名和参数后再进行调用 \ No newline at end of file +严格遵守以下规则: +1.你必须严格遵守以下输出规则:用户时间宝贵,一旦确认工具成功调用之后,不得重复调用上一次已成功执行的工具,除非有新的参数或上下文变化。 +2.需要调用ArcGIS Pro工具前必须先查询帮助文档、标准调用名和参数后再进行调用,必要时通过用户提示词规划工具的使用 +3.参数都应为字符串类型,可以表示文件或其他输出类型。 +4.一旦消息中没有工具调用信息即视为任务完成。因此工具调用必须连续完成。 +5.只响应用户目前的需求即可,不要过度猜测用户的需求,从而执行了大量无用的工具。 diff --git a/ui/dockpane/TestDockpane.xaml.cs b/ui/dockpane/TestDockpane.xaml.cs index 267b7ea..361f9ff 100644 --- a/ui/dockpane/TestDockpane.xaml.cs +++ b/ui/dockpane/TestDockpane.xaml.cs @@ -204,7 +204,7 @@ namespace LinkToolAddin.ui.dockpane // model可选值:qwen3-235b-a22b,qwen-max,deepseek-r1 try { - await Task.Run(() => Gateway.SendMessageStream(userPrompt,"qwen3-235b-a22b", "D:\\01_Project\\20250305_LinkTool\\20250420_AiDemoProject\\20250420_AiDemoProject.gdb", AddReplyStream)); + await Task.Run(() => Gateway.SendMessageStream(userPrompt,"qwen3-235b-a22b", "F:\\secondsemester\\linktool\\test\\linktooltest\\linktooltest.gdb", AddReplyStream)); } catch (Exception exception) {