Skip to content

Commit 60c4416

Browse files
committed
feat(jmanus): move tool parameter and description to resources
1 parent 1fa3035 commit 60c4416

File tree

72 files changed

+1768
-714
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

72 files changed

+1768
-714
lines changed

spring-ai-alibaba-jmanus/src/main/java/com/alibaba/cloud/ai/example/manus/dynamic/prompt/model/enums/PromptEnum.java

Lines changed: 85 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,91 @@ public enum PromptEnum {
4343
FORM_INPUT_TOOL_DESCRIPTION("FORM_INPUT_TOOL_DESCRIPTION", MessageType.SYSTEM, PromptType.AGENT, true,
4444
"tool/form-input-tool-description.txt"),
4545
FORM_INPUT_TOOL_PARAMETERS("FORM_INPUT_TOOL_PARAMETERS", MessageType.SYSTEM, PromptType.AGENT, true,
46-
"tool/form-input-tool-parameters.txt");
46+
"tool/form-input-tool-parameters.txt"),
47+
48+
// Bash Tool
49+
BASH_TOOL_DESCRIPTION("BASH_TOOL_DESCRIPTION", MessageType.SYSTEM, PromptType.TOOL_DESCRIPTION, true,
50+
"tool/bash-tool-description.txt"),
51+
BASH_TOOL_PARAMETERS("BASH_TOOL_PARAMETERS", MessageType.SYSTEM, PromptType.TOOL_PARAMETER, true,
52+
"tool/bash-tool-parameters.txt"),
53+
54+
// Text File Operator Tool
55+
TEXTFILEOPERATOR_TOOL_DESCRIPTION("TEXTFILEOPERATOR_TOOL_DESCRIPTION", MessageType.SYSTEM,
56+
PromptType.TOOL_DESCRIPTION, true, "tool/textfileoperator-tool-description.txt"),
57+
TEXTFILEOPERATOR_TOOL_PARAMETERS("TEXTFILEOPERATOR_TOOL_PARAMETERS", MessageType.SYSTEM, PromptType.TOOL_PARAMETER,
58+
true, "tool/textfileoperator-tool-parameters.txt"),
59+
60+
// Browser Use Tool
61+
BROWSER_USE_TOOL_DESCRIPTION("BROWSER_USE_TOOL_DESCRIPTION", MessageType.SYSTEM, PromptType.TOOL_DESCRIPTION, true,
62+
"tool/browser-use-tool-description.txt"),
63+
BROWSER_USE_TOOL_PARAMETERS("BROWSER_USE_TOOL_PARAMETERS", MessageType.SYSTEM, PromptType.TOOL_PARAMETER, true,
64+
"tool/browser-use-tool-parameters.txt"),
65+
66+
// Python Execute Tool
67+
PYTHON_EXECUTE_TOOL_DESCRIPTION("PYTHON_EXECUTE_TOOL_DESCRIPTION", MessageType.SYSTEM, PromptType.TOOL_DESCRIPTION,
68+
true, "tool/python-execute-tool-description.txt"),
69+
PYTHON_EXECUTE_TOOL_PARAMETERS("PYTHON_EXECUTE_TOOL_PARAMETERS", MessageType.SYSTEM, PromptType.TOOL_PARAMETER,
70+
true, "tool/python-execute-tool-parameters.txt"),
71+
72+
// Database Use Tool
73+
DATABASE_USE_TOOL_DESCRIPTION("DATABASE_USE_TOOL_DESCRIPTION", MessageType.SYSTEM, PromptType.TOOL_DESCRIPTION,
74+
true, "tool/database-use-tool-description.txt"),
75+
DATABASE_USE_TOOL_PARAMETERS("DATABASE_USE_TOOL_PARAMETERS", MessageType.SYSTEM, PromptType.TOOL_PARAMETER, true,
76+
"tool/database-use-tool-parameters.txt"),
77+
78+
// Cron Tool
79+
CRON_TOOL_TOOL_DESCRIPTION("CRON_TOOL_TOOL_DESCRIPTION", MessageType.SYSTEM, PromptType.TOOL_DESCRIPTION, true,
80+
"tool/cron-tool-tool-description.txt"),
81+
CRON_TOOL_TOOL_PARAMETERS("CRON_TOOL_TOOL_PARAMETERS", MessageType.SYSTEM, PromptType.TOOL_PARAMETER, true,
82+
"tool/cron-tool-tool-parameters.txt"),
83+
84+
// Inner Storage Content Tool
85+
INNER_STORAGE_CONTENT_TOOL_TOOL_DESCRIPTION("INNER_STORAGE_CONTENT_TOOL_TOOL_DESCRIPTION", MessageType.SYSTEM,
86+
PromptType.TOOL_DESCRIPTION, true, "tool/inner-storage-content-tool-tool-description.txt"),
87+
INNER_STORAGE_CONTENT_TOOL_TOOL_PARAMETERS("INNER_STORAGE_CONTENT_TOOL_TOOL_PARAMETERS", MessageType.SYSTEM,
88+
PromptType.TOOL_PARAMETER, true, "tool/inner-storage-content-tool-tool-parameters.txt"),
89+
90+
// Doc Loader Tool
91+
DOC_LOADER_TOOL_DESCRIPTION("DOC_LOADER_TOOL_DESCRIPTION", MessageType.SYSTEM, PromptType.TOOL_DESCRIPTION, true,
92+
"tool/doc-loader-tool-description.txt"),
93+
DOC_LOADER_TOOL_PARAMETERS("DOC_LOADER_TOOL_PARAMETERS", MessageType.SYSTEM, PromptType.TOOL_PARAMETER, true,
94+
"tool/doc-loader-tool-parameters.txt"),
95+
96+
// File Merge Tool
97+
FILE_MERGE_TOOL_DESCRIPTION("FILE_MERGE_TOOL_DESCRIPTION", MessageType.SYSTEM, PromptType.TOOL_DESCRIPTION, true,
98+
"tool/file-merge-tool-description.txt"),
99+
FILE_MERGE_TOOL_PARAMETERS("FILE_MERGE_TOOL_PARAMETERS", MessageType.SYSTEM, PromptType.TOOL_PARAMETER, true,
100+
"tool/file-merge-tool-parameters.txt"),
101+
102+
// Data Split Tool
103+
DATA_SPLIT_TOOL_DESCRIPTION("DATA_SPLIT_TOOL_DESCRIPTION", MessageType.SYSTEM, PromptType.TOOL_DESCRIPTION, true,
104+
"tool/data-split-tool-description.txt"),
105+
DATA_SPLIT_TOOL_PARAMETERS("DATA_SPLIT_TOOL_PARAMETERS", MessageType.SYSTEM, PromptType.TOOL_PARAMETER, true,
106+
"tool/data-split-tool-parameters.txt"),
107+
108+
// Map Output Tool
109+
MAP_OUTPUT_TOOL_DESCRIPTION("MAP_OUTPUT_TOOL_DESCRIPTION", MessageType.SYSTEM, PromptType.TOOL_DESCRIPTION, true,
110+
"tool/map-output-tool-description.txt"),
111+
MAP_OUTPUT_TOOL_PARAMETERS("MAP_OUTPUT_TOOL_PARAMETERS", MessageType.SYSTEM, PromptType.TOOL_PARAMETER, true,
112+
"tool/map-output-tool-parameters.txt"),
113+
114+
// Reduce Operation Tool
115+
REDUCE_OPERATION_TOOL_DESCRIPTION("REDUCE_OPERATION_TOOL_DESCRIPTION", MessageType.SYSTEM,
116+
PromptType.TOOL_DESCRIPTION, true, "tool/reduce-operation-tool-description.txt"),
117+
REDUCE_OPERATION_TOOL_PARAMETERS("REDUCE_OPERATION_TOOL_PARAMETERS", MessageType.SYSTEM, PromptType.TOOL_PARAMETER,
118+
true, "tool/reduce-operation-tool-parameters.txt"),
119+
120+
// Finalize Tool
121+
FINALIZE_TOOL_DESCRIPTION("FINALIZE_TOOL_DESCRIPTION", MessageType.SYSTEM, PromptType.TOOL_DESCRIPTION, true,
122+
"tool/finalize-tool-description.txt"),
123+
FINALIZE_TOOL_PARAMETERS("FINALIZE_TOOL_PARAMETERS", MessageType.SYSTEM, PromptType.TOOL_PARAMETER, true,
124+
"tool/finalize-tool-parameters.txt"),
125+
126+
// Terminate Tool
127+
TERMINATE_TOOL_DESCRIPTION("TERMINATE_TOOL_DESCRIPTION", MessageType.SYSTEM, PromptType.TOOL_DESCRIPTION, true,
128+
"tool/terminate-tool-description.txt"),
129+
TERMINATE_TOOL_PARAMETERS("TERMINATE_TOOL_PARAMETERS", MessageType.SYSTEM, PromptType.TOOL_PARAMETER, true,
130+
"tool/terminate-tool-parameters.txt");
47131

48132
private String promptName;
49133

spring-ai-alibaba-jmanus/src/main/java/com/alibaba/cloud/ai/example/manus/dynamic/prompt/model/enums/PromptType.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,6 @@
1717

1818
public enum PromptType {
1919

20-
LLM, PLANNING, AGENT
20+
LLM, PLANNING, AGENT, TOOL_DESCRIPTION, TOOL_PARAMETER
2121

2222
}

spring-ai-alibaba-jmanus/src/main/java/com/alibaba/cloud/ai/example/manus/planning/PlanningFactory.java

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import java.util.Map;
2323
import java.util.concurrent.TimeUnit;
2424

25+
import com.alibaba.cloud.ai.example.manus.tool.ToolPromptManager;
2526
import org.apache.hc.client5.http.classic.HttpClient;
2627
import org.apache.hc.client5.http.config.RequestConfig;
2728
import org.apache.hc.client5.http.impl.classic.HttpClients;
@@ -142,6 +143,9 @@ public class PlanningFactory implements IPlanningFactory {
142143
@Autowired
143144
private StreamingResponseHandler streamingResponseHandler;
144145

146+
@Autowired
147+
private ToolPromptManager toolPromptManager;
148+
145149
@Autowired
146150
@Lazy
147151
private CronService cronService;
@@ -214,15 +218,18 @@ public Map<String, ToolCallBackContext> toolCallbackMap(String planId, String ro
214218
return toolCallbackMap;
215219
}
216220
// Add all tool definitions
217-
toolDefinitions.add(BrowserUseTool.getInstance(chromeDriverService, innerStorageService, objectMapper));
218-
toolDefinitions.add(DatabaseUseTool.getInstance(dataSourceService, objectMapper));
219-
toolDefinitions.add(new TerminateTool(planId, terminateColumns));
220-
toolDefinitions.add(new Bash(unifiedDirectoryManager, objectMapper));
221-
toolDefinitions.add(new DocLoaderTool());
222-
toolDefinitions.add(new TextFileOperator(textFileService, innerStorageService, objectMapper));
221+
toolDefinitions
222+
.add(BrowserUseTool.getInstance(chromeDriverService, innerStorageService, objectMapper, toolPromptManager));
223+
toolDefinitions.add(DatabaseUseTool.getInstance(dataSourceService, objectMapper, toolPromptManager));
224+
toolDefinitions.add(new TerminateTool(planId, terminateColumns, toolPromptManager));
225+
toolDefinitions.add(new Bash(unifiedDirectoryManager, objectMapper, toolPromptManager));
226+
toolDefinitions.add(new DocLoaderTool(toolPromptManager));
227+
toolDefinitions
228+
.add(new TextFileOperator(textFileService, innerStorageService, objectMapper, toolPromptManager));
223229
// toolDefinitions.add(new InnerStorageTool(unifiedDirectoryManager));
224-
toolDefinitions.add(new InnerStorageContentTool(unifiedDirectoryManager, summaryWorkflow, recorder));
225-
toolDefinitions.add(new FileMergeTool(unifiedDirectoryManager));
230+
toolDefinitions
231+
.add(new InnerStorageContentTool(unifiedDirectoryManager, summaryWorkflow, recorder, toolPromptManager));
232+
toolDefinitions.add(new FileMergeTool(unifiedDirectoryManager, toolPromptManager));
226233
// toolDefinitions.add(new GoogleSearch());
227234
// toolDefinitions.add(new PythonExecute());
228235
toolDefinitions.add(new FormInputTool(objectMapper, promptService));
@@ -233,7 +240,7 @@ public Map<String, ToolCallBackContext> toolCallbackMap(String planId, String ro
233240
toolDefinitions.add(new ReduceOperationTool(planId, manusProperties, sharedStateManager,
234241
unifiedDirectoryManager, terminateColumns));
235242
toolDefinitions.add(new FinalizeTool(planId, manusProperties, sharedStateManager, unifiedDirectoryManager));
236-
toolDefinitions.add(new CronTool(cronService, objectMapper));
243+
toolDefinitions.add(new CronTool(cronService, objectMapper, toolPromptManager));
237244

238245
List<McpServiceEntity> functionCallbacks = mcpService.getFunctionCallbacks(planId);
239246
for (McpServiceEntity toolCallback : functionCallbacks) {

spring-ai-alibaba-jmanus/src/main/java/com/alibaba/cloud/ai/example/manus/tool/DocLoaderTool.java

Lines changed: 17 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
package com.alibaba.cloud.ai.example.manus.tool;
1717

1818
import com.alibaba.cloud.ai.example.manus.tool.code.ToolExecuteResult;
19+
import com.alibaba.cloud.ai.example.manus.tool.ToolPromptManager;
1920
import org.apache.commons.lang3.StringUtils;
2021
import org.apache.pdfbox.pdmodel.PDDocument;
2122
import org.apache.pdfbox.text.PDFTextStripper;
@@ -68,51 +69,36 @@ public void setFilePath(String filePath) {
6869

6970
}
7071

71-
private static String PARAMETERS = """
72-
{
73-
"type": "object",
74-
"properties": {
75-
"file_type": {
76-
"type": "string",
77-
"description": "(required) File type, only support pdf file."
78-
},
79-
"file_path": {
80-
"type": "string",
81-
"description": "(required) Get the absolute path of the file from the user request."
82-
}
83-
},
84-
"required": ["file_type","file_path"]
85-
}
86-
""";
87-
8872
private static final String name = "doc_loader";
8973

90-
private static final String description = """
91-
Get the content information of a local file at a specified path.
92-
Use this tool when you want to get some related information asked by the user.
93-
This tool accepts the file path and gets the related information content.
94-
""";
74+
private final ToolPromptManager toolPromptManager;
9575

96-
public static OpenAiApi.FunctionTool getToolDefinition() {
97-
OpenAiApi.FunctionTool.Function function = new OpenAiApi.FunctionTool.Function(description, name, PARAMETERS);
76+
public OpenAiApi.FunctionTool getToolDefinition() {
77+
String description = getDescription();
78+
String parameters = getParameters();
79+
OpenAiApi.FunctionTool.Function function = new OpenAiApi.FunctionTool.Function(description, name, parameters);
9880
OpenAiApi.FunctionTool functionTool = new OpenAiApi.FunctionTool(function);
9981
return functionTool;
10082
}
10183

10284
/**
10385
* Get FunctionToolCallback for Spring AI
10486
*/
105-
public static FunctionToolCallback<DocLoaderInput, ToolExecuteResult> getFunctionToolCallback() {
87+
public static FunctionToolCallback<DocLoaderInput, ToolExecuteResult> getFunctionToolCallback(
88+
ToolPromptManager toolPromptManager) {
10689
return FunctionToolCallback
10790
.<DocLoaderInput, ToolExecuteResult>builder(name,
108-
(DocLoaderInput input, org.springframework.ai.chat.model.ToolContext context) -> new DocLoaderTool()
109-
.run(input))
110-
.description(description)
91+
(DocLoaderInput input,
92+
org.springframework.ai.chat.model.ToolContext context) -> new DocLoaderTool(
93+
toolPromptManager)
94+
.run(input))
95+
.description(toolPromptManager.getToolDescription("doc_loader"))
11196
.inputType(DocLoaderInput.class)
11297
.build();
11398
}
11499

115-
public DocLoaderTool() {
100+
public DocLoaderTool(ToolPromptManager toolPromptManager) {
101+
this.toolPromptManager = toolPromptManager;
116102
}
117103

118104
private String lastFilePath = "";
@@ -161,12 +147,12 @@ public String getName() {
161147

162148
@Override
163149
public String getDescription() {
164-
return description;
150+
return toolPromptManager.getToolDescription("doc_loader");
165151
}
166152

167153
@Override
168154
public String getParameters() {
169-
return PARAMETERS;
155+
return toolPromptManager.getToolParameters("doc_loader");
170156
}
171157

172158
@Override

spring-ai-alibaba-jmanus/src/main/java/com/alibaba/cloud/ai/example/manus/tool/TerminateTool.java

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
package com.alibaba.cloud.ai.example.manus.tool;
1717

1818
import com.alibaba.cloud.ai.example.manus.tool.code.ToolExecuteResult;
19+
import com.alibaba.cloud.ai.example.manus.tool.ToolPromptManager;
1920
import org.slf4j.Logger;
2021
import org.slf4j.LoggerFactory;
2122

@@ -32,25 +33,21 @@ public class TerminateTool extends AbstractBaseTool<Map<String, Object>> impleme
3233

3334
private final List<String> columns;
3435

36+
private final ToolPromptManager toolPromptManager;
37+
3538
private String lastTerminationMessage = "";
3639

3740
private boolean isTerminated = false;
3841

3942
private String terminationTimestamp = "";
4043

41-
public static OpenAiApi.FunctionTool getToolDefinition(List<String> columns) {
44+
public static OpenAiApi.FunctionTool getToolDefinition(List<String> columns, ToolPromptManager toolPromptManager) {
4245
String parameters = generateParametersJson(columns);
43-
String description = getDescriptions(columns);
46+
String description = toolPromptManager.getToolDescription("terminate");
4447
OpenAiApi.FunctionTool.Function function = new OpenAiApi.FunctionTool.Function(description, name, parameters);
4548
return new OpenAiApi.FunctionTool(function);
4649
}
4750

48-
private static String getDescriptions(List<String> columns) {
49-
// Simple description to avoid generating overly long content
50-
return "Terminate the current execution step with structured data. "
51-
+ "Provide data in JSON format with 'columns' array and 'data' array containing rows of values.";
52-
}
53-
5451
private static String generateParametersJson(List<String> columns) {
5552
String template = """
5653
{
@@ -94,10 +91,11 @@ public String getCurrentToolStateString() {
9491
currentPlanId != null ? currentPlanId : "N/A", columns != null ? String.join(", ", columns) : "N/A");
9592
}
9693

97-
public TerminateTool(String planId, List<String> columns) {
94+
public TerminateTool(String planId, List<String> columns, ToolPromptManager toolPromptManager) {
9895
this.currentPlanId = planId;
9996
// If columns is null or empty, use "message" as default column
10097
this.columns = (columns == null || columns.isEmpty()) ? List.of("message") : columns;
98+
this.toolPromptManager = toolPromptManager;
10199
}
102100

103101
@Override
@@ -143,7 +141,7 @@ public String getName() {
143141

144142
@Override
145143
public String getDescription() {
146-
return getDescriptions(this.columns);
144+
return toolPromptManager.getToolDescription("terminate");
147145
}
148146

149147
@Override

0 commit comments

Comments
 (0)