in spring-ai-alibaba-graph/spring-ai-alibaba-graph-example/src/main/java/com/alibaba/cloud/ai/example/graph/openmanus/tool/GoogleSearch.java [88:155]
public ToolExecuteResult run(String toolInput) {
log.info("GoogleSearch toolInput:{}", toolInput);
Map<String, Object> toolInputMap = JSON.parseObject(toolInput, new TypeReference<Map<String, Object>>() {
});
String query = (String) toolInputMap.get("query");
Integer numResults = 2;
if (toolInputMap.get("num_results") != null) {
numResults = (Integer) toolInputMap.get("num_results");
}
SerpApiService.Request request = new SerpApiService.Request(query);
Map<String, Object> response = service.apply(request);
if (response.containsKey("answer_box") && response.get("answer_box") instanceof List) {
response.put("answer_box", ((List) response.get("answer_box")).get(0));
}
String toret = "";
if (response.containsKey("answer_box")
&& ((Map<String, Object>) response.get("answer_box")).containsKey("answer")) {
toret = ((Map<String, Object>) response.get("answer_box")).get("answer").toString();
}
else if (response.containsKey("answer_box")
&& ((Map<String, Object>) response.get("answer_box")).containsKey("snippet")) {
toret = ((Map<String, Object>) response.get("answer_box")).get("snippet").toString();
}
else if (response.containsKey("answer_box")
&& ((Map<String, Object>) response.get("answer_box")).containsKey("snippet_highlighted_words")) {
toret = ((List<String>) ((Map<String, Object>) response.get("answer_box")).get("snippet_highlighted_words"))
.get(0);
}
else if (response.containsKey("sports_results")
&& ((Map<String, Object>) response.get("sports_results")).containsKey("game_spotlight")) {
toret = ((Map<String, Object>) response.get("sports_results")).get("game_spotlight").toString();
}
else if (response.containsKey("shopping_results")
&& ((List<Map<String, Object>>) response.get("shopping_results")).get(0).containsKey("title")) {
List<Map<String, Object>> shoppingResults = (List<Map<String, Object>>) response.get("shopping_results");
List<Map<String, Object>> subList = shoppingResults.subList(0, 3);
toret = subList.toString();
}
else if (response.containsKey("knowledge_graph")
&& ((Map<String, Object>) response.get("knowledge_graph")).containsKey("description")) {
toret = ((Map<String, Object>) response.get("knowledge_graph")).get("description").toString();
}
else if ((((List<Map<String, Object>>) response.get("organic_results")).get(0)).containsKey("snippet")) {
toret = (((List<Map<String, Object>>) response.get("organic_results")).get(0)).get("snippet").toString();
}
else if ((((List<Map<String, Object>>) response.get("organic_results")).get(0)).containsKey("link")) {
toret = (((List<Map<String, Object>>) response.get("organic_results")).get(0)).get("link").toString();
}
else if (response.containsKey("images_results")
&& ((Map<String, Object>) ((List<Map<String, Object>>) response.get("images_results")).get(0))
.containsKey("thumbnail")) {
List<String> thumbnails = new ArrayList<>();
List<Map<String, Object>> imageResults = (List<Map<String, Object>>) response.get("images_results");
for (Map<String, Object> item : imageResults.subList(0, 10)) {
thumbnails.add(item.get("thumbnail").toString());
}
toret = thumbnails.toString();
}
else {
toret = "No good search result found";
}
log.warn("SerpapiTool result:{}", toret);
return new ToolExecuteResult(toret);
}