package com.ark.example;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.volcengine.ark.runtime.models.responses.*;
import com.volcengine.ark.runtime.service.ArkService;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.JsonNode;
public static ObjectMapper om = new ObjectMapper();
public static List<Tool> buildTools() {
JsonNode params = om.createObjectNode()
.set("properties", om.createObjectNode()
.set("location", om.createObjectNode()
.put("description", "城市名称,如北京、上海(仅支持国内地级市)")));
FunctionTool t = FunctionTool.builder()
.description("根据城市名称查询该城市当日天气(含温度、天气状况)")
.parameters(om.convertValue(params, Map.class))
return Arrays.asList(t);
public static void main(String[] args) throws JsonProcessingException {
String apiKey = System.getenv("ARK_API_KEY");
ArkService arkService = ArkService.builder().apiKey(apiKey)
.baseUrl("https://ark.cn-beijing.volces.com/api/v3")
System.out.println("=== First Round Request: Trigger Tool Call ===");
ResponsesRequest req = ResponsesRequest.builder()
.model("doubao-seed-2-1-pro-260915")
.input(ResponsesInput.ofList(java.util.Arrays.asList(ItemEasyMessage.builder().role(MessageRole.USER).content(
MessageContent.ofList(java.util.Arrays.asList(ContentItemText.builder().text("查询北京今天的天气").build()))
Response resp = arkService.createResponse(req);
System.out.println(resp);
// Extract key information(previous_response_id、call_id、arguments)
String previousId = resp.getId();
OutputItem targetCall = null;
for(OutputItem item : resp.getOutput()) {
if (item.getType() == ItemType.FUNCTION_CALL) {
ObjectMapper objectMapper = new ObjectMapper();
String jsonStr = objectMapper.writeValueAsString(targetCall);
ItemFunctionToolCall functionCall = objectMapper.readValue(jsonStr, ItemFunctionToolCall.class);
String callId = functionCall.getCallId();
String callArguments = functionCall.getArguments();
System.out.println("First Round Response ID:" + previousId);
System.out.println("Tool Call ID:" + callId);
System.out.println("Call Parameters:" + callArguments);
System.out.println("=== Simulate Tool Execution: Get Weather Results ===");
Map<String, String> toolOutput = new HashMap<String, String>() {{
put("date", "2025-10-13");
put("temperature", "18~28℃");
put("condition", "晴转多云");
System.out.println(toolOutput);
System.out.println("=== Second Round Request: Return Result and Generate Final Response ===");
ResponsesRequest secondReq = ResponsesRequest.builder()
.model("doubao-seed-2-1-pro-260915")
.previousResponseId(previousId)
.input(ResponsesInput.ofList(java.util.Arrays.asList(ItemFunctionToolCallOutput.builder().callId(callId).output(MessageContent.ofString(objectMapper.writeValueAsString(toolOutput))).build())))
Response secondResp = arkService.createResponse(secondReq);
System.out.println("=== Final Answer ===");
System.out.println(secondResp);
arkService.shutdownExecutor();