public ToolExecuteResult run()

in spring-ai-alibaba-jmanus/src/main/java/com/alibaba/cloud/ai/example/manus/tool/searchAPI/GoogleSearch.java [92:163]


	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");
		this.lastQuery = query;

		Integer numResults = 2;
		if (toolInputMap.get("num_results") != null) {
			numResults = (Integer) toolInputMap.get("num_results");
		}
		this.lastNumResults = numResults;

		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);
		this.lastSearchResults = toret;
		return new ToolExecuteResult(toret);
	}