获取所有tool的名称
ToolCallback[] toolCallbacks = syncMcpToolCallbackProvider.getToolCallbacks();
List<ToolCallback> list1 = Arrays.stream(toolCallbacks).toList();
List<SyncMcpToolCallback> list = list1.stream().map(callback -> (SyncMcpToolCallback) callback).collect(Collectors.toList());
List<String> names = new ArrayList<>();
for (SyncMcpToolCallback a : list) {
ToolDefinition toolDefinition = a.getToolDefinition();
String name = toolDefinition.name();
names.add(name);
}
String toolNamesString = String.join(", ", names);
完整例子:
想要控制tool的进程必须有用户控制
完整的例子
class DateTimeTools {
@Tool(description = "Get the current date and time in the user's timezone")
String getCurrentDateTime() {
return LocalDateTime.now().atZone(LocaleContextHolder.getTimeZone().toZoneId()).toString();
}
}
@PostMapping(value = "/sj2")
public ChatResponse llmChatsdd( ) {
ToolCallingManager toolCallingManager = DefaultToolCallingManager.builder().build();
ChatOptions chatOptions = ToolCallingChatOptions.builder().model("qwen2.5").toolCallbacks(ToolCallbacks.from(new DateTimeTools())).internalToolExecutionEnabled(false).build();
List<Advisor> advisors = new ArrayList<>();
advisors.add(new SimpleLoggerAdvisor());
ChatClient chatClient = ChatClient.builder(chatModel).defaultOptions(chatOptions).defaultAdvisors(advisors).build();
Prompt prompt = new Prompt(List.of(new SystemMessage("You are a helpful assistant."), new UserMessage( "What day is tomorrow?")), chatOptions);
ChatResponse chatResponse = chatClient.prompt(prompt).call().chatResponse();
if (chatResponse != null) {
while (chatResponse.hasToolCalls()) {
ToolExecutionResult toolExecutionResult = toolCallingManager.executeToolCalls(prompt, chatResponse);
// toolExecutionResult.conversationHistory()
Prompt prompt2 = new Prompt(toolExecutionResult.conversationHistory(), chatOptions);
chatResponse = chatClient.prompt(prompt2).call().chatResponse();
}
}
return chatResponse;
}