diff --git a/client/prompt/PromptTemplates.cs b/client/prompt/PromptTemplates.cs index 9ef4ed3..7e0e18f 100644 --- a/client/prompt/PromptTemplates.cs +++ b/client/prompt/PromptTemplates.cs @@ -8,9 +8,17 @@ public class PromptTemplates public PromptTemplates() { - prompts.Add("plan", "请根据用户所提问题进行工具规划"); - prompts.Add("param", "根据帮助文档填写工具参数"); - prompts.Add("code", "现在需要生成代码,要求语法正确"); + prompts.Add("plan", "请根据用户所提问题进行工具规划,输出格式为'1.工具2.工具’,如果是ArcGIS Pro的工具,根据用户的具体需求和提供的数据类型," + + "判断并列出所有必要的分析步骤和工具,同时严格遵守知识库中“ArcGIS Pro工具调用大全”里“工具调用名称”一列的工具命名规则(例如:analysis.Erase)," + + "确保工具名的准确无误,工具与所属工具箱的对应关系正确无误,严格遵循文档规定的格式和大小写。工具的组合顺序优先参考知识库中“ArcGIS Pro的帮助文档”。" + + "有一些与分析无关的数据能够进行排除,在选择工具时不受其干扰。"); + prompts.Add("param", "根据帮助文档填写工具参数,请你根据“所需调用工具”,参照知识库“ArcGIS Pro工具调用大全”里工具所需的参数顺序进行陈列。" + + "列出所需调用工具的名称及其按照“ArcGIS Pro工具调用大全”里“的该工具所需的参数顺序陈列对应的参数。如果跳过了可选参数需要用空字符表示。" + + "不能更改所需调用工具的名称。例如:arcpy.analysis.Buffer,不能只写成Buffer。确保格式、参数的完整性和准确性,避免任何遗漏或错误。" + + "特别注意,所有参数均应视为字符串类型,即使它们可能代表数字或文件路径。例如问题为:使用地理处理中的\"擦除分析\"工具(Erase),将圆形要素(circle.shp)与方形要素(square.shp)进行空间叠加运算。" + + "输出: \"in_features\":\"circle.shp\",\r\n \"erase_features\":\"sqaure.shp\",\r\n \"out_feature_class\":\"res.shp\",\r\n \"cluster_tolerance\":\"1\""); + prompts.Add("code", "根据你在多种编程语言、框架、设计模式和最佳实践方面拥有的广泛知识。现在需要根据用户需求生成高质量的代码,并确保语法正确。" + + "编写Arcpy代码时必须符合ArcGIS官方文档要求。参考官方文档的方法参数,确保编写正确。"); } public string GetPrompt(string name) diff --git a/host/prompt/SystemPrompt.cs b/host/prompt/SystemPrompt.cs index 5b331c9..406b23d 100644 --- a/host/prompt/SystemPrompt.cs +++ b/host/prompt/SystemPrompt.cs @@ -2,21 +2,21 @@ public class SystemPrompt { - public static string SysPromptTemplate = "现在你是一个精通地理信息分析和ArcGIS Pro软件的专家,请以此身份回答用户的问题。您可以使用一组工具来回答用户的问题。```" + - "每次消息只能使用一个工具,用户的回复中将包含该工具的调用结果。您需要通过逐步使用工具来完成给定任务,每次工具调用需基于前一次的结果。```" + - "你有以下工具可以调用{{toolInfos}},用户的数据库路径是{{gdbPath}}。工具调用格式:每次仅调用一个工具,必须基于前序工具的输出结果进行下一步操作。工具调用使用 XML 风格的标签进行格式化。" + + public static string SysPromptTemplate = "现在你是一个精通地理信息分析和ArcGIS Pro软件的专家,请以此身份回答用户的问题。您可以使用一组工具来回答用户的问题。还可以通过调用用户提示词,从而使你更好地理解和完成用户的任务。```" + + "如果要调用工具,每次消息只能使用一个工具,用户的回复中将包含该工具的调用结果。您需要通过逐步使用工具来完成给定任务,每次工具调用需基于前一次的结果。已经成功调用的工具不要反复调用。不要有markdown格式的文本。```" + + "你有以下工具可以调用{{toolInfos}},用户的数据库路径是{{gdbPath}}。工具调用格式:每次仅调用一个工具,必须基于前序工具的输出结果进行下一步操作。工具调用使用 XML 风格的标签进行格式化。一定要注意:只输出调用格式的内容,前后不能有描述性文字。" + "工具名称包含在一对标签内,每个参数也需用对应的标签包裹。结构如下:\n {tool_name}\n {json_arguments}\n。```" + - "工具名称:需与所使用工具的精确名称一致。参数:应为包含工具所需参数的 JSON 对象。例如:\n search\n {\\\"query\\\": \\\"上海 人口\\\"}\n```" + + "工具名称:需与所使用工具的精确名称一致。参数:应为包含工具所需参数的 JSON 对象。例如:\\n gaode:maps_geo\\n {\\\"address\\\":\\\"广州市政府, 广州市\\\", \\\"city\\\":\\\"广州\\\"}\\n```" + "用户将以以下格式返回工具调用结果:\n {tool_name}\n {result}\n```" + - "结果:应为字符串类型,可以表示文件或其他输出类型。例如,若工具返回.shp 文件,可在下一步操作中这样使用:\n ArcGIS_Pro:GP\n {\"output_file\": \"source.shp\"}\n```" + - "请始终遵循此格式以确保工具调用被正确解析和执行。整个工具流程调用结束后,请在末尾输出'done'表示工具调用结束" + - "工具调用示例:MCP工具调用的格式要求示例:以下是使用虚拟工具的示例:\n search\n {\\\"query\\\": \\\"上海 人口\\\"}\n"; + "结果:应为字符串类型,可以表示文件或其他输出类型。若工具返回.shp 文件,可在下一步操作中这样使用:\n ArcGIS_Pro:GP\n {\"output_file\": \"source.shp\"}\n```" + + "请始终遵循此格式且前后不要有其他描述性文字以确保工具调用被正确解析和执行。当你认为已解决用户最初提出的问题时,请输出单独的一条消息,内容为'[DONE]',不附带任何其它文字说明,程序识别到后会退出循环。" + + "工具调用示例:\n gaode:maps_geo\n {\"address\":\"广州市政府, 广州市\", \"city\":\"广州\"}\n"; public static string ContinuePromptTemplate = "请根据以下执行结果,清晰解释执行结果并执行下一步操作。```" + - "执行下一步工具的要求:1. 解析工具输出结果2. 验证数据完整性(字段数量/空间参考/几何有效性)3. 调用下一个工具时确保参数继承前序输出。请据此继续执行"; + "执行下一步工具的要求:1. 解析工具输出结果2. 验证数据完整性(字段数量/空间参考/几何有效性)3. 调用下一个工具时确保参数继承前序输出。请据此继续执行。4.已经成功调用的工具不要反复调用。5.如果不再需要额外说明和额外的操作,请回答单独的一条内容为'[DONE]'的消息。"; public static string ErrorPromptTemplate = "执行上一个工具的时候出现以下错误,需按以下流程处理:1. 错误解析:分析错误类型及具体原因(见下方错误信息),根据错误信息选择修复方案,```" + - "2. 修复方案:(1)根据错误类型生成对应的工具重试策略(2)参数调整:明确需要修改的参数及修改方式。3. 工具重试:使用调整后的参数重新调用工具。错误信息详情:{{toolResult}}。请根据报错信息重试"; + "2. 修复方案:(1)根据错误类型生成对应的工具重试策略(2)参数调整:明确需要修改的参数及修改方式。3. 工具重试:使用调整后的参数重新调用工具。错误信息如下,请根据报错信息重试"; public static string SysPrompt(string gdbPath, string toolInfos) { diff --git a/ui/dockpane/TestDockpane.xaml.cs b/ui/dockpane/TestDockpane.xaml.cs index abf8b4a..34fa96d 100644 --- a/ui/dockpane/TestDockpane.xaml.cs +++ b/ui/dockpane/TestDockpane.xaml.cs @@ -193,7 +193,7 @@ namespace LinkToolAddin.ui.dockpane { string userPrompt = PromptTestTextBox.Text; // Gateway.SendMessage(userPrompt,"qwen-max","C:/Project/test.gdb",AddReply); - Gateway.SendMessageStream(userPrompt,"qwen-max","D:\\01_Project\\20250305_LinkTool\\20250420_AiDemoProject\\20250420_AiDemoProject.gdb",AddReplyStream); + Gateway.SendMessageStream(userPrompt,"qwen-max", "F:\\secondsemester\\linktool\\test\\linktooltest\\linktooltest.gdb", AddReplyStream); } public void AddReplyStream(MessageListItem msg)