内嵌XML规则,明确调用动态Prompt和知识库,简要回答避免画蛇添足
This commit is contained in:
parent
f4262d6aef
commit
691f54c73f
@ -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<string>()
|
||||
{
|
||||
"-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<string>()
|
||||
{
|
||||
"mcp-server-fetch"
|
||||
}
|
||||
});
|
||||
servers.Add("bing-search", new StdioMcpServer()
|
||||
{
|
||||
Name = "bing-search",
|
||||
Type = "stdio",
|
||||
Command = "npx",
|
||||
Args = new List<string>()
|
||||
{
|
||||
"bing-cn-mcp"
|
||||
}
|
||||
});
|
||||
servers.Add("mcp-python-interpreter", new StdioMcpServer()
|
||||
{
|
||||
Name = "mcp-python-interpreter",
|
||||
Type = "stdio",
|
||||
Command = "uvx",
|
||||
Args = new List<string>()
|
||||
{
|
||||
"--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<string>()
|
||||
// {
|
||||
// "-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<string>()
|
||||
// {
|
||||
// "mcp-server-fetch"
|
||||
// }
|
||||
//});
|
||||
//servers.Add("bing-search", new StdioMcpServer()
|
||||
//{
|
||||
// Name = "bing-search",
|
||||
// Type = "stdio",
|
||||
// Command = "npx",
|
||||
// Args = new List<string>()
|
||||
// {
|
||||
// "bing-cn-mcp"
|
||||
// }
|
||||
//});
|
||||
//servers.Add("mcp-python-interpreter", new StdioMcpServer()
|
||||
//{
|
||||
// Name = "mcp-python-interpreter",
|
||||
// Type = "stdio",
|
||||
// Command = "uvx",
|
||||
// Args = new List<string>()
|
||||
// {
|
||||
// "--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)
|
||||
|
||||
@ -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)进行空间叠加运算。" +
|
||||
|
||||
@ -6,6 +6,7 @@
|
||||
|
||||
执行下一步工具的要求:
|
||||
1. 解析工具输出结果
|
||||
2. 调用下一个工具时确保参数继承前序输出。
|
||||
2. 调用下一个工具时确保参数继承前序输出,如果已经完成用户需求则不需继续执行工具。
|
||||
3. 执行Arcgis Pro工具时可以调用知识库和提示词使任务完成得更出色!
|
||||
|
||||
请据此继续执行
|
||||
@ -5,8 +5,7 @@
|
||||
需按以下流程处理:
|
||||
1. 错误解析:分析错误类型及具体原因(见下方错误信息),根据错误信息选择修复方案,
|
||||
2. 修复方案:
|
||||
(1)根据错误类型生成对应的工具重试策略
|
||||
(2)参数调整:明确需要修改的参数及修改方式。
|
||||
3. 工具重试:使用调整后的参数重新调用工具。错误信息如下,请根据报错信息重试,
|
||||
(1)根据错误类型生成对应的工具重试策略。
|
||||
(2)参数调整:及时调用知识库和用户提示词,确保工具名和参数的完全正确。明确需要修改的参数及修改方式。
|
||||
3. 工具重试:使用调整后的参数重新调用工具。请根据报错信息重试。
|
||||
4.如果没有具体的错误描述信息请检查输出文件是否已经存在,若已经存在默认执行成功
|
||||
5.查询可能相关的知识库和帮助文档,纠正调用参数中存在的错误
|
||||
@ -1,12 +1,8 @@
|
||||
现在你是一个精通地理信息分析和ArcGIS Pro软件的专家,请以此身份回答用户的问题。
|
||||
|
||||
指令:您可以使用一组工具来回答用户的问题。还可以通过<prompt></prompt>调用用户提示词,从而使你更好地理解和完成用户的任务。
|
||||
|
||||
调用工具要求:如果要调用工具,每次消息只能使用一个工具,用户的回复中将包含该工具的调用结果。您需要通过逐步使用工具来完成给定任务,每次工具调用需基于前一次的结果。成功调用工具之后应该马上调用下一个工具。你还可以通过<prompt></prompt>的方式来调用用户提示词,你能更好地理解和解决用户的问题。工具调用背景:你有以下工具可以调用{{toolInfos}},用户的数据库路径是{{gdbPath}}。
|
||||
|
||||
输出风格:每次仅调用一个工具,必须基于前序工具的输出结果进行下一步操作。工具调用使用 XML 风格的标签进行格式化以单独信息格式输出,前后没有文字信息。如果需要进行文字说明,请只有文字内容,以普通段落形式呈现没有其他格式。
|
||||
|
||||
工具调用格式:工具名称包含在一对标签内,每个参数也需用对应的标签包裹。结构如下:
|
||||
指令:您可以使用一组工具来回答用户的问题。完成了用户的需求即可,不用猜测用户下一步还想做什么。你可以通过<prompt></prompt>调用用户提示词,或者调用知识库工具,从而使你更好地理解和完成用户的任务。
|
||||
调用工具要求:如果要调用工具,每次消息只能使用一个工具,用户的回复中将包含该工具的调用结果。您需要通过逐步使用工具来完成给定任务,每次工具调用需基于前一次的结果。成功调用工具之后应该马上调用下一个工具。你还可以通过<prompt></prompt>的方式来调用用户提示词,你能更好地理解和解决用户的问题。
|
||||
工具调用背景:你有以下工具可以调用{{toolInfos}},用户的数据库路径是{{gdbPath}}。
|
||||
输出风格:描述简洁有力,每次仅调用一个工具,基于前序工具的输出结果进行下一步操作,如果已经完成用户需求则不需继续执行工具。不要肯定用户上一次的回答。工具调用使用 XML 风格的标签输出,并用简短的文字进行描述。
|
||||
|
||||
<tool_use>
|
||||
<name>{tool_name}</name>
|
||||
@ -21,20 +17,22 @@
|
||||
<arguments>{\\\"address\\\":\\\"广州市政府, 广州市\\\", \\\"city\\\":\\\"广州\\\"}</arguments>
|
||||
</tool_use>
|
||||
|
||||
你必须严格遵守以下输出规则:用户时间宝贵,不得重复调用上一次已成功执行的工具调用,除非有新的参数或上下文变化。
|
||||
|
||||
结果:用户将以以下格式返回工具调用结果:
|
||||
结果示例:用户将以以下格式返回工具调用结果:
|
||||
<tool_use_result>
|
||||
<name>{tool_name}</name>
|
||||
<result>{result}</result>
|
||||
</tool_use_result>。
|
||||
|
||||
应为字符串类型,可以表示文件或其他输出类型。
|
||||
|
||||
工具调用示例:MCP工具调用的格式要求示例:以下是使用虚拟工具的示例:
|
||||
<tool_use>
|
||||
<name>gaode:maps_geo</name>
|
||||
<arguments>{\\\"address\\\":\\\"广州市政府, 广州市\\\", \\\"city\\\":\\\"广州\\\"}</arguments>
|
||||
</tool_use>
|
||||
|
||||
特别地:需要调用ArcGIS Pro工具前必须先查询帮助文档、标准调用名和参数后再进行调用
|
||||
严格遵守以下规则:
|
||||
1.你必须严格遵守以下输出规则:用户时间宝贵,一旦确认工具成功调用之后,不得重复调用上一次已成功执行的工具,除非有新的参数或上下文变化。
|
||||
2.需要调用ArcGIS Pro工具前必须先查询帮助文档、标准调用名和参数后再进行调用,必要时通过用户提示词规划工具的使用
|
||||
3.参数都应为字符串类型,可以表示文件或其他输出类型。
|
||||
4.一旦消息中没有工具调用信息即视为任务完成。因此工具调用必须连续完成。
|
||||
5.只响应用户目前的需求即可,不要过度猜测用户的需求,从而执行了大量无用的工具。
|
||||
|
||||
@ -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)
|
||||
{
|
||||
|
||||
Loading…
Reference in New Issue
Block a user