work hard work smart

专注于AI+Java后端开发。 不断总结,举一反三。
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

AgentScope学习笔记 Tool工具的使用

Posted on 2026-09-26 16:46  work hard work smart  阅读(2)  评论(0)    收藏  举报

AgentScope 版本 1

1、工具的定义

public class SimpleTools {
    @Tool(name = "get_time", description = "获取当前时间")
    public String getTime(
            @ToolParam(name = "zone", description = "时区,例如:北京") String zone) {
        return java.time.LocalDateTime.now()
                .format(java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
    }
}

 

2、调用工具 

 @GetMapping(path = "/chat", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
    public Flux<String> chat(
            @RequestParam String message, HttpServletResponse httpServletResponse) {
        httpServletResponse.setCharacterEncoding("UTF-8");

        Toolkit toolkit = new Toolkit();
        toolkit.registerTool(new SimpleTools());

        // 创建 Agent,注意 model 需要 stream(true)
        ReActAgent agent = ReActAgent.builder()
                .name("WebAgent").toolkit(toolkit)
                .model(DashScopeChatModel.builder()
                        .apiKey(apiKey)
                        .modelName("qwen-plus")
                        .stream(true)  // 开启模型级流式
                        .build())
                .build();

        // 构建用户消息
        Msg userMsg = Msg.builder().textContent(message).build();

        // 配置流式选项 — 增量模式
        StreamOptions streamOptions = StreamOptions.builder()
                // 选择要接收的事件类型
                .eventTypes(EventType.REASONING, EventType.TOOL_RESULT, EventType.AGENT_RESULT)
                // true = 增量模式(只发送新增内容),false = 累积模式(每次发送全部已累积内容)
                .incremental(true)
                // 是否包含最终推理结果(把流式输出的内容拼在一起一次性返回)
                .includeReasoningResult(false)
                .build();


        // 调用 stream() 获取事件流
        return agent.stream(userMsg, streamOptions)
                .subscribeOn(Schedulers.boundedElastic())
                .map(event -> JSON.toJSONString(event.getMessage()))
                .filter(text -> text != null && !text.isEmpty());
    }